* Update color palette
* Edit dialog error colors
* Format
* Lighten links
* Lighten link just in ErrorSummary
* Format
* Fix errors in schedule xservice
* Add error summary to form for generic message
* Format
* Extend getFormHelpers to remap field name
* Add mock error and use in storybook
* Format
This commit adds a new filter feature to the Users page.
- adds a filter to the getUsers API call and users state machine.
- adds filter UI to Users page view.
- addresses error handling in the filter component, users page and machine.
- refactors user table code.
- refactors common code for workspace filter.
- adds and updates unit tests and stories.
* feat: add support for template in workspace filter
* feat: Implement workspace search filter to support names
* Use new query param parser for pagination fields
* Remove excessive calls, use filters on a single query
Co-authored-by: Garrett <garrett@coder.com>
This does not fully close#2141, but builds upon #2171 to fulfill each
of the UX requests.
A next step (probably as a separate ticket) is to allow customizing
extension time pre-emptively.
Resolves: #1901
Summary:
We had a homegrown parser that only understood numbers, not strings like
MON or TUES. We replace the homegrown parser with cron-parser.
Details:
This was nearly a straight drop-in.
Impact:
Much less code/maintenance burden :D
What I learned:
Don't trust the README, sometimes you just gotta read the code or import
it and try it out. The `fields` representation of the parsed expression
was missing from their docs. I might open an issue or PR to update them!
Resolves: #1460
Summary:
An 'Extend' CTA on workspace schedule banner is added so that a user can
extend their workspace lease from the UI.
Details:
* feat: putWorkspaceExtension handler
* refactor: TypesGen dflt import in workspace.ts
* feat: defaultWorkspaceExtension util
Impact:
This completes the UI<-->CLI parity epic in an MVP way. Of course, a
future improvement to make is extending by times other than the default
90 minutes.
* refactor: isWorkspaceOn utility
Summary:
A utility is function is added that answers the question if a workspace
is on.
Impact:
This is a shared piece of logic in workspace scheduling presentations.
In particular it unblocks work in 1779, or at least allows an
implementation that shares details with the WorkspaceScheduleBanner.
Notes:
We could possibly instead return whether the workspace is "ON",
"UNKNOWN", or "OFF". Maybe a future improvement for that could be made
as the neds arrises.
* fix: derive running ws stop time from deadline
Summary:
When a workspace is on, the remaining time until shutdown needs to be
derived from the deadline timestamp, not implied from the TTL
Resolves: #1455Resolves: #1456
Summary:
Adds a page (accessible from Workspace Schedule section on a workspace) to edit a schedule.
Impact:
General parity with CLI for autostart/autostop: that is you can update your schedule from the UI
* Start hooking up cancel
* Update xservice
* Render cancel
Changes behavior of other buttons too
* Make outdated workspace story show max buttons
* Remove retry code
* Remove loading button state
* Fix type, extend tests
* Update story
* feat: ui for editing ws schedule
Summary:
This presents a form component and storybook. The UI will be a routed
page and added into the dashboard in a separate PR. It is likely a
XService will be used at the page level to supply errors and actions to
this form.
Impact of Change:
Further progress on #1455
Squashed Commits:
* refactor: add className prop to Stack
combine classes with internal classes and an optional external className
to better control the Stack.
* fix: getFormHelpers helperText
the helperText logic was incorrect, the helperText would only show if not touched.
* Set up table
* Format
* Hook up api and test - bug assigning resources
* Remove debugging code
* Format
* Remove unnecessary cards
* Fix test
* Fix assignment
* Fix tests
* Lint
* feat: Improve navbar to be more compact
The navbar was unnecessarily large before, which made
the UI feel a bit bloaty from my perspective.
* Attempt to remove overrides
* Update theme
* Add text field
* Update theme to dark!
* Fix import ordering
* Fix page location
* Fix requested changes
* Add storybook for workspaces page view
* Add empty view
* Add tests for empty view
* Remove templates page
* Fix local port
* Remove templates from nav
* Fix e2e test
* Remove time.ts
* Remove dep
* Add background color to margins
* Merge status checking from workspace page
* Fix requested changes
* Fix workspace status tests
* refactor: allow helperText in getFormHelpers
By passing in helperText, we will not accidentally overwrite it.
* fix: CreateWorkspaceForm name validation
Resolves: #1421
This PR modfies the original 3-valued cron strings used in package schedule to be traditional 5-valued cron strings.
- schedule.Weekly will validate that the month and dom fields are equal to *
- cli autostart/autostop will attempt to detect local timezone using TZ env var, defaulting to UTC
- cli autostart/autostop no longer accepts a raw schedule -- instead use the --minute, --hour, --dow, and --tz arguments.
- Default schedules are provided that should suffice for most users.
Fixes#993
Summary:
This adds the client-side implementation to match the types introduced
in #879 and #844 as well as a card in the Workspaces page to present
workspace the data.
Details:
* Added a convenient line break in the example schedule.Weekly
* Added missing `json:""` annotations in codersdk/workspaces.go
* Installed cronstrue for displaying human-friendly cron strings
* Adjusted/Added client-side types to match codersdk/workspaces.go
* Added new component WorkspaceSchedule.tsx
Next Steps:
The WorkspaceSchedule.tsx card only presents data (on purpose). In order
to make it PUT/modify data, a few changes will be made:
- a form for updating workspace schedule will be created
- the form will wrapped in a dialog or modal
- the WorkspaceSchedule card will have a way of opening the modal which
will likely be generalized up to WorkspaceSection.tsx
Impact:
This is user-facing
This does not fully resolve either #274 or #275 (I may further decompose
that work to reflect reality and keep things in small deliverable
increments), but adds significant progress towards both.
Summary:
This is a first step in porting over v1 AuditLog in a refactored/cleaned
up fashion. The existing `UserCell` component was generalized for re-use
across various tables (AuditLog, Users, Orgs).
Details:
- Move UserCell to `components/Table/Cells`
- Add tests and stories for UserCell
Impact:
This unblocks future work in list views like the audit log, user management
panel and organizations management panel.
Relations:
- This commit relates to https://github.com/coder/coder/issues/472, but does not finish it.
- This commit should not merge until after https://github.com/coder/coder/pull/465 and https://github.com/coder/coder/pull/483 because it's
based on them.
* Extract and unit test redirect functions
* Move router to make app more testable
* Make mock entities more consistent
* Use labels instead of placeholders
* Fill out handlers
* Lint
* Reorganize App
* Make mock entities reference each other
* Add describes in tests
* Clean up api and mocks
This refactoring re-organizes the `site` folder to have a nested `src` folder.
Originally, [we wanted to keep the directory structure shallow](https://github.com/coder/coder/pull/8#issuecomment-1009578910) - but there were two points that motivated this change to introduce the `src` level.
1. We have several non-`src` folders now (`e2e`, `static`, `html_templates`, `.storybook`)
2. Having a `src` folder makes it easier to run XState Typegen
So given those two data points - I believe it makes sense to revisit that and introduce a `src` folder.