* chore: add e2e test for backwards client ssh compatibility
This was discussed as part of our regression review for outdated
agents, so here is the reverse with an extremely old client.
* fmt
* Fix type error in first user setup
* Save auth state
* Add template creation - wip
Remove saved auth state because it wasn't working
* Try adding the rest of the tests
Can't see if they work yet, waiting on a release
* Update playwright
* Update gitignore
* Write tests
* Format
* Update ignores
* Check that start worked
Co-authored-by: Ben Potter <ben@coder.com>
Co-authored-by: Ben Potter <ben@coder.com>
* chore: update cSpell words
* chore: add ignorePaths for cSpell
* fix: update isNotificationTextPrefixed
This removes an eslint-disable rule and adds two new tests to ensure
isNotificationTextPrefixed is working as expected.
* fix(e2e): remove filter in workspacesPage
* 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
Customer feedback indicated projects was a confusing name.
After querying the team internally, it seemed unanimous
that it is indeed a confusing name.
Here's for a lil less confusion @ashmeer7 🥂
Fix for #348 - migrate our NextJS project to a pure webpack project w/ a single bundle
- [x] Switch from `next/link` to `react-router-dom`'s link
> This part was easy - just change the import to `import { Link } from "react-router-dom"` and `<Link href={...} />` to `<Link to={...} />`
- [x] Switch from `next/router` to `react-router-dom`'s paradigms (`useNavigation`, `useLocation`, and `useParams`)
> `router.push` can be converted to `navigate(...)` (provided by the `useNavigate` hook)
> `router.replace` can be converted `navigate(..., {replace: true})`
> Query parameters (`const { query } = useRouter`) can be converted to `const query = useParams()`)
- [x] Implement client-side routing with `react-router-dom`
> Parameterized routes in NextJS like `projects/[organization]/[project]` would look like:
> ```
> <Route path="projects">
> <Route path=":organization/:project">
> <Route index element={<ProjectPage />} />
> </Route>
> </Route>
> ```
I've hooked up a `build:analyze` command that spins up a server to show the bundle size:
<img width="1303" alt="image" src="https://user-images.githubusercontent.com/88213859/157496889-87c5fdcd-fad1-4f2e-b7b6-437aebf99641.png">
The bundle looks OK, but there are some opportunities for improvement - the heavy-weight dependencies, like React, ReactDOM, Material-UI, and lodash could be brought in via a CDN: https://stackoverflow.com/questions/50645796/how-to-import-reactjs-material-ui-using-a-cdn-through-webpacks-externals
This brings an initial E2E test (really, an integration test - it's only running the server locally, as opposed to against a deployment - but it'd be easy to point playwright to a deployment).
Demo gif:

This test exercises a minimal flow for login:
- Run the `coderd` binary to start a server on 3000
- Create an initial user as part of setup
- Go through the login flow and verify we land on the projects page
It will be useful to have to ensure that #360 doesn't introduce a regression in the login flow
Future E2E tests that would be useful:
- Create a project & verify it shows in the UI
- Create a workspace and verify it shows in the UI