diff --git a/.github/workflows/typos.toml b/.github/workflows/typos.toml index 6a9b07b475111..6f475668118c9 100644 --- a/.github/workflows/typos.toml +++ b/.github/workflows/typos.toml @@ -28,6 +28,7 @@ HELO = "HELO" LKE = "LKE" byt = "byt" typ = "typ" +Inferrable = "Inferrable" [files] extend-exclude = [ @@ -47,5 +48,5 @@ extend-exclude = [ "provisioner/terraform/testdata/**", # notifications' golden files confuse the detector because of quoted-printable encoding "coderd/notifications/testdata/**", - "agent/agentcontainers/testdata/devcontainercli/**" + "agent/agentcontainers/testdata/devcontainercli/**", ] diff --git a/.vscode/settings.json b/.vscode/settings.json index f2cf72b7d8ae0..eaea72e7501b5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -49,7 +49,7 @@ "[javascript][javascriptreact][json][jsonc][typescript][typescriptreact]": { "editor.defaultFormatter": "biomejs.biome", "editor.codeActionsOnSave": { - "quickfix.biome": "explicit" + "source.fixAll.biome": "explicit" // "source.organizeImports.biome": "explicit" } }, @@ -60,5 +60,7 @@ "typos.config": ".github/workflows/typos.toml", "[markdown]": { "editor.defaultFormatter": "DavidAnson.vscode-markdownlint" - } + }, + "biome.configurationPath": "./site/biome.jsonc", + "biome.lsp.bin": "./site/node_modules/.bin/biome" } diff --git a/site/.storybook/preview.jsx b/site/.storybook/preview.jsx index c491428178f37..8a33560a2f18b 100644 --- a/site/.storybook/preview.jsx +++ b/site/.storybook/preview.jsx @@ -22,7 +22,7 @@ import CssBaseline from "@mui/material/CssBaseline"; import { ThemeProvider as MuiThemeProvider, StyledEngineProvider, - // biome-ignore lint/nursery/noRestrictedImports: we extend the MUI theme + // biome-ignore lint/style/noRestrictedImports: we extend the MUI theme } from "@mui/material/styles"; import { DecoratorHelpers } from "@storybook/addon-themes"; import isChromatic from "chromatic/isChromatic"; diff --git a/site/biome.jsonc b/site/biome.jsonc index bc6fa8de6e946..9bb011fba8b2d 100644 --- a/site/biome.jsonc +++ b/site/biome.jsonc @@ -1,36 +1,44 @@ { "vcs": { "enabled": true, - "useIgnoreFile": true, "clientKind": "git", "root": ".." }, "files": { - "ignore": ["e2e/**/*Generated.ts", "pnpm-lock.yaml"], + "includes": ["**", "!**/e2e/**/*Generated.ts", "!**/pnpm-lock.yaml"], "ignoreUnknown": true }, "linter": { "rules": { "a11y": { - "noSvgWithoutTitle": { "level": "off" }, - "useButtonType": { "level": "off" }, - "useSemanticElements": { "level": "off" } + "noSvgWithoutTitle": "off", + "useButtonType": "off", + "useSemanticElements": "off", + "noStaticElementInteractions": "off" }, "correctness": { - "noUnusedImports": "warn" + "noUnusedImports": "warn", + "useUniqueElementIds": "off", // TODO: This is new but we want to fix it + "noNestedComponentDefinitions": "off", // TODO: Investigate, since it is used by shadcn components + "noUnusedVariables": { + "level": "warn", + "options": { + "ignoreRestSiblings": true + } + } }, "style": { - "noNonNullAssertion": { "level": "off" }, - "noParameterAssign": { "level": "off" }, - "useDefaultParameterLast": { "level": "off" }, - "useSelfClosingElements": { "level": "off" } - }, - "suspicious": { - "noArrayIndexKey": { "level": "off" }, - "noConsoleLog": { "level": "error" }, - "noThenProperty": { "level": "off" } - }, - "nursery": { + "noNonNullAssertion": "off", + "noParameterAssign": "off", + "useDefaultParameterLast": "off", + "useSelfClosingElements": "off", + "useAsConstAssertion": "error", + "useEnumInitializers": "error", + "useSingleVarDeclarator": "error", + "noUnusedTemplateLiteral": "error", + "useNumberNamespace": "error", + "noInferrableTypes": "error", + "noUselessElse": "error", "noRestrictedImports": { "level": "error", "options": { @@ -47,8 +55,22 @@ } } } + }, + "suspicious": { + "noArrayIndexKey": "off", + "noThenProperty": "off", + "noTemplateCurlyInString": "off", + "useIterableCallbackReturn": "off", + "noUnknownAtRules": "off", // Allow Tailwind directives + "noConsole": { + "level": "error", + "options": { "allow": ["error", "info", "warn"] } + } + }, + "complexity": { + "noImportantStyles": "off" // TODO: check and fix !important styles } } }, - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json" + "$schema": "https://biomejs.dev/schemas/2.2.0/schema.json" } diff --git a/site/e2e/api.ts b/site/e2e/api.ts index 4d884a73cc1ac..342b08cb28914 100644 --- a/site/e2e/api.ts +++ b/site/e2e/api.ts @@ -8,9 +8,10 @@ import relativeTime from "dayjs/plugin/relativeTime"; dayjs.extend(duration); dayjs.extend(relativeTime); + import { humanDuration } from "utils/time"; import { coderPort, defaultPassword } from "./constants"; -import { type LoginOptions, findSessionToken, randomName } from "./helpers"; +import { findSessionToken, type LoginOptions, randomName } from "./helpers"; let currentOrgId: string; @@ -57,7 +58,7 @@ export const createOrganizationMember = async ({ password = defaultPassword, orgRoles, }: CreateOrganizationMemberOptions): Promise => { - const name = randomName(); + const _name = randomName(); const user = await API.createUser({ email, username, diff --git a/site/e2e/expectUrl.ts b/site/e2e/expectUrl.ts index 6ea1cb50b3083..f6bc3b9ef51dd 100644 --- a/site/e2e/expectUrl.ts +++ b/site/e2e/expectUrl.ts @@ -1,4 +1,4 @@ -import { type Page, expect } from "@playwright/test"; +import { expect, type Page } from "@playwright/test"; type PollingOptions = { timeout?: number; intervals?: number[] }; diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index e771adeab3813..bd4aed8add812 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -3,7 +3,7 @@ import { randomUUID } from "node:crypto"; import net from "node:net"; import path from "node:path"; import { Duplex } from "node:stream"; -import { type BrowserContext, type Page, expect, test } from "@playwright/test"; +import { type BrowserContext, expect, type Page, test } from "@playwright/test"; import { API } from "api/api"; import type { UpdateTemplateMeta, @@ -29,8 +29,8 @@ import { expectUrl } from "./expectUrl"; import { Agent, type App, - AppSharingLevel, type ApplyComplete, + AppSharingLevel, type ExternalAuthProviderResource, type ParseComplete, type PlanComplete, diff --git a/site/e2e/playwright.config.ts b/site/e2e/playwright.config.ts index 4b3e5c5c86fc6..fffc80b160191 100644 --- a/site/e2e/playwright.config.ts +++ b/site/e2e/playwright.config.ts @@ -1,8 +1,8 @@ import * as path from "node:path"; import { defineConfig } from "@playwright/test"; import { - coderPort, coderdPProfPort, + coderPort, e2eFakeExperiment1, e2eFakeExperiment2, gitAuth, diff --git a/site/e2e/tests/app.spec.ts b/site/e2e/tests/app.spec.ts index 587775b4dc3f8..3cb58fcc66c34 100644 --- a/site/e2e/tests/app.spec.ts +++ b/site/e2e/tests/app.spec.ts @@ -21,7 +21,7 @@ test("app", async ({ context, page }) => { const appContent = "Hello World"; const token = randomUUID(); const srv = http - .createServer((req, res) => { + .createServer((_req, res) => { res.writeHead(200, { "Content-Type": "text/plain" }); res.end(appContent); }) diff --git a/site/e2e/tests/auditLogs.spec.ts b/site/e2e/tests/auditLogs.spec.ts index c25a828eedb64..56a27f94ad3c2 100644 --- a/site/e2e/tests/auditLogs.spec.ts +++ b/site/e2e/tests/auditLogs.spec.ts @@ -1,4 +1,4 @@ -import { type Page, expect, test } from "@playwright/test"; +import { expect, type Page, test } from "@playwright/test"; import { defaultPassword, users } from "../constants"; import { createTemplate, diff --git a/site/e2e/tests/deployment/workspaceProxies.spec.ts b/site/e2e/tests/deployment/workspaceProxies.spec.ts index 51fb036c4639b..94604de293d73 100644 --- a/site/e2e/tests/deployment/workspaceProxies.spec.ts +++ b/site/e2e/tests/deployment/workspaceProxies.spec.ts @@ -1,9 +1,8 @@ -import { type Page, expect, test } from "@playwright/test"; +import { expect, type Page, test } from "@playwright/test"; import { API } from "api/api"; import { setupApiCalls } from "../../api"; import { coderPort, workspaceProxyPort } from "../../constants"; -import { randomName, requiresLicense } from "../../helpers"; -import { login } from "../../helpers"; +import { login, randomName, requiresLicense } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; import { startWorkspaceProxy, stopWorkspaceProxy } from "../../proxy"; diff --git a/site/e2e/tests/externalAuth.spec.ts b/site/e2e/tests/externalAuth.spec.ts index ced2a7d89c95b..712fc8f1ef9c9 100644 --- a/site/e2e/tests/externalAuth.spec.ts +++ b/site/e2e/tests/externalAuth.spec.ts @@ -17,11 +17,11 @@ test.describe.skip("externalAuth", () => { const srv = await createServer(gitAuth.webPort); // The GitHub validate endpoint returns the currently authenticated user! - srv.use(gitAuth.validatePath, (req, res) => { + srv.use(gitAuth.validatePath, (_req, res) => { res.write(JSON.stringify(ghUser)); res.end(); }); - srv.use(gitAuth.tokenPath, (req, res) => { + srv.use(gitAuth.tokenPath, (_req, res) => { const r = (Math.random() + 1).toString(36).substring(7); res.write(JSON.stringify({ access_token: r })); res.end(); @@ -51,15 +51,15 @@ test.describe.skip("externalAuth", () => { // Start a server to mock the GitHub API. const srv = await createServer(gitAuth.devicePort); - srv.use(gitAuth.validatePath, (req, res) => { + srv.use(gitAuth.validatePath, (_req, res) => { res.write(JSON.stringify(ghUser)); res.end(); }); - srv.use(gitAuth.codePath, (req, res) => { + srv.use(gitAuth.codePath, (_req, res) => { res.write(JSON.stringify(device)); res.end(); }); - srv.use(gitAuth.installationsPath, (req, res) => { + srv.use(gitAuth.installationsPath, (_req, res) => { res.write(JSON.stringify(ghInstall)); res.end(); }); @@ -72,7 +72,7 @@ test.describe.skip("externalAuth", () => { // First we send a result from the API that the token hasn't been // authorized yet to ensure the UI reacts properly. const sentPending = new Awaiter(); - srv.use(gitAuth.tokenPath, (req, res) => { + srv.use(gitAuth.tokenPath, (_req, res) => { res.write(JSON.stringify(token)); res.end(); sentPending.done(); diff --git a/site/e2e/tests/organizations/idpGroupSync.spec.ts b/site/e2e/tests/organizations/idpGroupSync.spec.ts index a6128253346b7..c8fbf7fffa26e 100644 --- a/site/e2e/tests/organizations/idpGroupSync.spec.ts +++ b/site/e2e/tests/organizations/idpGroupSync.spec.ts @@ -5,8 +5,7 @@ import { deleteOrganization, setupApiCalls, } from "../../api"; -import { randomName, requiresLicense } from "../../helpers"; -import { login } from "../../helpers"; +import { login, randomName, requiresLicense } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; test.beforeEach(async ({ page }) => { diff --git a/site/e2e/tests/organizations/idpRoleSync.spec.ts b/site/e2e/tests/organizations/idpRoleSync.spec.ts index a889591026dd9..a7e7429e234ae 100644 --- a/site/e2e/tests/organizations/idpRoleSync.spec.ts +++ b/site/e2e/tests/organizations/idpRoleSync.spec.ts @@ -5,8 +5,7 @@ import { deleteOrganization, setupApiCalls, } from "../../api"; -import { randomName, requiresLicense } from "../../helpers"; -import { login } from "../../helpers"; +import { login, randomName, requiresLicense } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; test.beforeEach(async ({ page }) => { diff --git a/site/e2e/tests/roles.spec.ts b/site/e2e/tests/roles.spec.ts index e6b92bd944ba0..0bf80391c0035 100644 --- a/site/e2e/tests/roles.spec.ts +++ b/site/e2e/tests/roles.spec.ts @@ -1,4 +1,4 @@ -import { type Page, expect, test } from "@playwright/test"; +import { expect, type Page, test } from "@playwright/test"; import { createOrganization, createOrganizationMember, diff --git a/site/e2e/tests/users/createUserWithPassword.spec.ts b/site/e2e/tests/users/createUserWithPassword.spec.ts index ec6006a81dac5..b33aa67c896e0 100644 --- a/site/e2e/tests/users/createUserWithPassword.spec.ts +++ b/site/e2e/tests/users/createUserWithPassword.spec.ts @@ -1,6 +1,5 @@ import { test } from "@playwright/test"; -import { createUser } from "../../helpers"; -import { login } from "../../helpers"; +import { createUser, login } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; test.beforeEach(async ({ page }) => { diff --git a/site/e2e/tests/webTerminal.spec.ts b/site/e2e/tests/webTerminal.spec.ts index 9d502c0284b78..d03f78a8702b8 100644 --- a/site/e2e/tests/webTerminal.spec.ts +++ b/site/e2e/tests/webTerminal.spec.ts @@ -3,11 +3,11 @@ import { test } from "@playwright/test"; import { createTemplate, createWorkspace, + login, openTerminalWindow, startAgent, stopAgent, } from "../helpers"; -import { login } from "../helpers"; import { beforeCoderTest } from "../hooks"; test.beforeEach(async ({ page }) => { diff --git a/site/e2e/tests/workspaces/autoCreateWorkspace.spec.ts b/site/e2e/tests/workspaces/autoCreateWorkspace.spec.ts index a6ec00958ad78..74b3c07ca78df 100644 --- a/site/e2e/tests/workspaces/autoCreateWorkspace.spec.ts +++ b/site/e2e/tests/workspaces/autoCreateWorkspace.spec.ts @@ -4,8 +4,8 @@ import { createTemplate, createWorkspace, echoResponsesWithParameters, + login, } from "../../helpers"; -import { login } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; import { emptyParameter } from "../../parameters"; import type { RichParameter } from "../../provisionerGenerated"; diff --git a/site/e2e/tests/workspaces/createWorkspace.spec.ts b/site/e2e/tests/workspaces/createWorkspace.spec.ts index e9d2d5efcca6f..9fcbcaf31c9dd 100644 --- a/site/e2e/tests/workspaces/createWorkspace.spec.ts +++ b/site/e2e/tests/workspaces/createWorkspace.spec.ts @@ -1,7 +1,6 @@ import { expect, test } from "@playwright/test"; import { users } from "../../constants"; import { - StarterTemplates, createTemplate, createWorkspace, disableDynamicParameters, @@ -9,6 +8,7 @@ import { login, openTerminalWindow, requireTerraformProvisioner, + StarterTemplates, verifyParameters, } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; diff --git a/site/e2e/tests/workspaces/restartWorkspace.spec.ts b/site/e2e/tests/workspaces/restartWorkspace.spec.ts index 2ec24c6d251bf..987f3c279cc26 100644 --- a/site/e2e/tests/workspaces/restartWorkspace.spec.ts +++ b/site/e2e/tests/workspaces/restartWorkspace.spec.ts @@ -6,9 +6,9 @@ import { createWorkspace, disableDynamicParameters, echoResponsesWithParameters, + login, verifyParameters, } from "../../helpers"; -import { login } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; import { firstBuildOption, secondBuildOption } from "../../parameters"; import type { RichParameter } from "../../provisionerGenerated"; diff --git a/site/e2e/tests/workspaces/startWorkspace.spec.ts b/site/e2e/tests/workspaces/startWorkspace.spec.ts index ea8a5c21c88bd..30a83a01d6dca 100644 --- a/site/e2e/tests/workspaces/startWorkspace.spec.ts +++ b/site/e2e/tests/workspaces/startWorkspace.spec.ts @@ -6,10 +6,10 @@ import { createWorkspace, disableDynamicParameters, echoResponsesWithParameters, + login, stopWorkspace, verifyParameters, } from "../../helpers"; -import { login } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; import { firstBuildOption, secondBuildOption } from "../../parameters"; import type { RichParameter } from "../../provisionerGenerated"; diff --git a/site/e2e/tests/workspaces/updateWorkspace.spec.ts b/site/e2e/tests/workspaces/updateWorkspace.spec.ts index 8a242a2dc7238..b731b76abbf1a 100644 --- a/site/e2e/tests/workspaces/updateWorkspace.spec.ts +++ b/site/e2e/tests/workspaces/updateWorkspace.spec.ts @@ -5,12 +5,12 @@ import { createWorkspace, disableDynamicParameters, echoResponsesWithParameters, + login, updateTemplate, updateWorkspace, updateWorkspaceParameters, verifyParameters, } from "../../helpers"; -import { login } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; import { fifthParameter, diff --git a/site/jest.setup.ts b/site/jest.setup.ts index f90f5353b1c63..f0f252afd455e 100644 --- a/site/jest.setup.ts +++ b/site/jest.setup.ts @@ -1,11 +1,11 @@ import "@testing-library/jest-dom"; import "jest-location-mock"; +import { server } from "testHelpers/server"; import crypto from "node:crypto"; import { cleanup } from "@testing-library/react"; import type { Region } from "api/typesGenerated"; import type { ProxyLatencyReport } from "contexts/useProxyLatency"; import { useMemo } from "react"; -import { server } from "testHelpers/server"; // useProxyLatency does some http requests to determine latency. // This would fail unit testing, or at least make it very slow with diff --git a/site/package.json b/site/package.json index 37ea2306feac0..e6239d8627b08 100644 --- a/site/package.json +++ b/site/package.json @@ -125,7 +125,7 @@ "yup": "1.6.1" }, "devDependencies": { - "@biomejs/biome": "1.9.4", + "@biomejs/biome": "2.2.0", "@chromatic-com/storybook": "4.0.1", "@octokit/types": "12.3.0", "@playwright/test": "1.47.0", @@ -185,7 +185,11 @@ "vite": "6.3.5", "vite-plugin-checker": "0.9.3" }, - "browserslist": ["chrome 110", "firefox 111", "safari 16.0"], + "browserslist": [ + "chrome 110", + "firefox 111", + "safari 16.0" + ], "resolutions": { "optionator": "0.9.3", "semver": "7.6.2" @@ -202,6 +206,8 @@ "form-data": "4.0.4", "prismjs": "1.30.0" }, - "ignoredBuiltDependencies": ["storybook-addon-remix-react-router"] + "ignoredBuiltDependencies": [ + "storybook-addon-remix-react-router" + ] } } diff --git a/site/pnpm-lock.yaml b/site/pnpm-lock.yaml index 1341de609fe1c..f1ed9cc8e8825 100644 --- a/site/pnpm-lock.yaml +++ b/site/pnpm-lock.yaml @@ -283,8 +283,8 @@ importers: version: 1.6.1 devDependencies: '@biomejs/biome': - specifier: 1.9.4 - version: 1.9.4 + specifier: 2.2.0 + version: 2.2.0 '@chromatic-com/storybook': specifier: 4.0.1 version: 4.0.1(storybook@9.0.17(@testing-library/dom@10.4.0)(prettier@3.4.1)) @@ -458,7 +458,7 @@ importers: version: 6.3.5(@types/node@20.17.16)(jiti@2.4.2)(yaml@2.7.0) vite-plugin-checker: specifier: 0.9.3 - version: 0.9.3(@biomejs/biome@1.9.4)(eslint@8.52.0)(optionator@0.9.3)(typescript@5.6.3)(vite@6.3.5(@types/node@20.17.16)(jiti@2.4.2)(yaml@2.7.0)) + version: 0.9.3(@biomejs/biome@2.2.0)(eslint@8.52.0)(optionator@0.9.3)(typescript@5.6.3)(vite@6.3.5(@types/node@20.17.16)(jiti@2.4.2)(yaml@2.7.0)) packages: @@ -738,55 +738,55 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, tarball: https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz} - '@biomejs/biome@1.9.4': - resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==, tarball: https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz} + '@biomejs/biome@2.2.0': + resolution: {integrity: sha512-3On3RSYLsX+n9KnoSgfoYlckYBoU6VRM22cw1gB4Y0OuUVSYd/O/2saOJMrA4HFfA1Ff0eacOvMN1yAAvHtzIw==, tarball: https://registry.npmjs.org/@biomejs/biome/-/biome-2.2.0.tgz} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@1.9.4': - resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==, tarball: https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz} + '@biomejs/cli-darwin-arm64@2.2.0': + resolution: {integrity: sha512-zKbwUUh+9uFmWfS8IFxmVD6XwqFcENjZvEyfOxHs1epjdH3wyyMQG80FGDsmauPwS2r5kXdEM0v/+dTIA9FXAg==, tarball: https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.2.0.tgz} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@1.9.4': - resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==, tarball: https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz} + '@biomejs/cli-darwin-x64@2.2.0': + resolution: {integrity: sha512-+OmT4dsX2eTfhD5crUOPw3RPhaR+SKVspvGVmSdZ9y9O/AgL8pla6T4hOn1q+VAFBHuHhsdxDRJgFCSC7RaMOw==, tarball: https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.2.0.tgz} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@1.9.4': - resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==, tarball: https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz} + '@biomejs/cli-linux-arm64-musl@2.2.0': + resolution: {integrity: sha512-egKpOa+4FL9YO+SMUMLUvf543cprjevNc3CAgDNFLcjknuNMcZ0GLJYa3EGTCR2xIkIUJDVneBV3O9OcIlCEZQ==, tarball: https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.0.tgz} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@1.9.4': - resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==, tarball: https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz} + '@biomejs/cli-linux-arm64@2.2.0': + resolution: {integrity: sha512-6eoRdF2yW5FnW9Lpeivh7Mayhq0KDdaDMYOJnH9aT02KuSIX5V1HmWJCQQPwIQbhDh68Zrcpl8inRlTEan0SXw==, tarball: https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.2.0.tgz} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@1.9.4': - resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==, tarball: https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz} + '@biomejs/cli-linux-x64-musl@2.2.0': + resolution: {integrity: sha512-I5J85yWwUWpgJyC1CcytNSGusu2p9HjDnOPAFG4Y515hwRD0jpR9sT9/T1cKHtuCvEQ/sBvx+6zhz9l9wEJGAg==, tarball: https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.0.tgz} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@1.9.4': - resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==, tarball: https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz} + '@biomejs/cli-linux-x64@2.2.0': + resolution: {integrity: sha512-5UmQx/OZAfJfi25zAnAGHUMuOd+LOsliIt119x2soA2gLggQYrVPA+2kMUxR6Mw5M1deUF/AWWP2qpxgH7Nyfw==, tarball: https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.2.0.tgz} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@1.9.4': - resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==, tarball: https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz} + '@biomejs/cli-win32-arm64@2.2.0': + resolution: {integrity: sha512-n9a1/f2CwIDmNMNkFs+JI0ZjFnMO0jdOyGNtihgUNFnlmd84yIYY2KMTBmMV58ZlVHjgmY5Y6E1hVTnSRieggA==, tarball: https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.2.0.tgz} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@1.9.4': - resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==, tarball: https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz} + '@biomejs/cli-win32-x64@2.2.0': + resolution: {integrity: sha512-Nawu5nHjP/zPKTIryh2AavzTc/KEg4um/MxWdXW0A6P/RZOyIpa7+QSjeXwAwX/utJGaCoXRPWtF3m5U/bB3Ww==, tarball: https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.2.0.tgz} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -6621,39 +6621,39 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@biomejs/biome@1.9.4': + '@biomejs/biome@2.2.0': optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.9.4 - '@biomejs/cli-darwin-x64': 1.9.4 - '@biomejs/cli-linux-arm64': 1.9.4 - '@biomejs/cli-linux-arm64-musl': 1.9.4 - '@biomejs/cli-linux-x64': 1.9.4 - '@biomejs/cli-linux-x64-musl': 1.9.4 - '@biomejs/cli-win32-arm64': 1.9.4 - '@biomejs/cli-win32-x64': 1.9.4 - - '@biomejs/cli-darwin-arm64@1.9.4': + '@biomejs/cli-darwin-arm64': 2.2.0 + '@biomejs/cli-darwin-x64': 2.2.0 + '@biomejs/cli-linux-arm64': 2.2.0 + '@biomejs/cli-linux-arm64-musl': 2.2.0 + '@biomejs/cli-linux-x64': 2.2.0 + '@biomejs/cli-linux-x64-musl': 2.2.0 + '@biomejs/cli-win32-arm64': 2.2.0 + '@biomejs/cli-win32-x64': 2.2.0 + + '@biomejs/cli-darwin-arm64@2.2.0': optional: true - '@biomejs/cli-darwin-x64@1.9.4': + '@biomejs/cli-darwin-x64@2.2.0': optional: true - '@biomejs/cli-linux-arm64-musl@1.9.4': + '@biomejs/cli-linux-arm64-musl@2.2.0': optional: true - '@biomejs/cli-linux-arm64@1.9.4': + '@biomejs/cli-linux-arm64@2.2.0': optional: true - '@biomejs/cli-linux-x64-musl@1.9.4': + '@biomejs/cli-linux-x64-musl@2.2.0': optional: true - '@biomejs/cli-linux-x64@1.9.4': + '@biomejs/cli-linux-x64@2.2.0': optional: true - '@biomejs/cli-win32-arm64@1.9.4': + '@biomejs/cli-win32-arm64@2.2.0': optional: true - '@biomejs/cli-win32-x64@1.9.4': + '@biomejs/cli-win32-x64@2.2.0': optional: true '@bundled-es-modules/cookie@2.0.1': @@ -12742,7 +12742,7 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-plugin-checker@0.9.3(@biomejs/biome@1.9.4)(eslint@8.52.0)(optionator@0.9.3)(typescript@5.6.3)(vite@6.3.5(@types/node@20.17.16)(jiti@2.4.2)(yaml@2.7.0)): + vite-plugin-checker@0.9.3(@biomejs/biome@2.2.0)(eslint@8.52.0)(optionator@0.9.3)(typescript@5.6.3)(vite@6.3.5(@types/node@20.17.16)(jiti@2.4.2)(yaml@2.7.0)): dependencies: '@babel/code-frame': 7.27.1 chokidar: 4.0.3 @@ -12755,7 +12755,7 @@ snapshots: vite: 6.3.5(@types/node@20.17.16)(jiti@2.4.2)(yaml@2.7.0) vscode-uri: 3.1.0 optionalDependencies: - '@biomejs/biome': 1.9.4 + '@biomejs/biome': 2.2.0 eslint: 8.52.0 optionator: 0.9.3 typescript: 5.6.3 diff --git a/site/src/@types/mui.d.ts b/site/src/@types/mui.d.ts index a1b4b61b07eb2..49804d33f8971 100644 --- a/site/src/@types/mui.d.ts +++ b/site/src/@types/mui.d.ts @@ -1,4 +1,4 @@ -// biome-ignore lint/nursery/noRestrictedImports: base theme types +// biome-ignore lint/style/noRestrictedImports: base theme types import type { PaletteColor, PaletteColorOptions } from "@mui/material/styles"; declare module "@mui/material/styles" { diff --git a/site/src/App.tsx b/site/src/App.tsx index 4c0d15d436a0f..2db41214a0423 100644 --- a/site/src/App.tsx +++ b/site/src/App.tsx @@ -11,8 +11,8 @@ import { HelmetProvider } from "react-helmet-async"; import { QueryClient, QueryClientProvider } from "react-query"; import { RouterProvider } from "react-router"; import { GlobalSnackbar } from "./components/GlobalSnackbar/GlobalSnackbar"; -import { ThemeProvider } from "./contexts/ThemeProvider"; import { AuthProvider } from "./contexts/auth/AuthProvider"; +import { ThemeProvider } from "./contexts/ThemeProvider"; import { router } from "./router"; const defaultQueryClient = new QueryClient({ diff --git a/site/src/api/api.test.ts b/site/src/api/api.test.ts index 04536675f8943..8c4c8556d4423 100644 --- a/site/src/api/api.test.ts +++ b/site/src/api/api.test.ts @@ -8,7 +8,7 @@ import { MockWorkspaceBuild, MockWorkspaceBuildParameter1, } from "testHelpers/entities"; -import { API, MissingBuildParameters, getURLWithSearchParams } from "./api"; +import { API, getURLWithSearchParams, MissingBuildParameters } from "./api"; import type * as TypesGen from "./typesGenerated"; const axiosInstance = API.getAxiosInstance(); diff --git a/site/src/api/api.ts b/site/src/api/api.ts index b9d5f06924519..ea97a5b46a2ef 100644 --- a/site/src/api/api.ts +++ b/site/src/api/api.ts @@ -22,8 +22,8 @@ import globalAxios, { type AxiosInstance, isAxiosError } from "axios"; import type dayjs from "dayjs"; import userAgentParser from "ua-parser-js"; -import { OneWayWebSocket } from "../utils/OneWayWebSocket"; import { delay } from "../utils/delay"; +import { OneWayWebSocket } from "../utils/OneWayWebSocket"; import { type FieldError, isApiError } from "./errors"; import type { DynamicParametersRequest, @@ -1222,7 +1222,7 @@ class ApiMethods { waitForBuild = (build: TypesGen.WorkspaceBuild) => { return new Promise((res, reject) => { void (async () => { - let latestJobInfo: TypesGen.ProvisionerJob | undefined = undefined; + let latestJobInfo: TypesGen.ProvisionerJob | undefined; while ( !["succeeded", "canceled"].some((status) => diff --git a/site/src/api/queries/templates.ts b/site/src/api/queries/templates.ts index 9057179a8740c..8c3b294f7fad8 100644 --- a/site/src/api/queries/templates.ts +++ b/site/src/api/queries/templates.ts @@ -310,7 +310,7 @@ const waitBuildToBeFinished = async ( onRequest?: (data: TemplateVersion) => void, ) => { let data: TemplateVersion; - let jobStatus: ProvisionerJobStatus | undefined = undefined; + let jobStatus: ProvisionerJobStatus | undefined; do { // When pending we want to poll more frequently await delay(jobStatus === "pending" ? 250 : 1000); diff --git a/site/src/api/queries/users.ts b/site/src/api/queries/users.ts index 4d87232ee698c..c7913f81565f0 100644 --- a/site/src/api/queries/users.ts +++ b/site/src/api/queries/users.ts @@ -12,8 +12,8 @@ import type { UsersRequest, } from "api/typesGenerated"; import { - type MetadataState, defaultMetadataManager, + type MetadataState, } from "hooks/useEmbeddedMetadata"; import type { UsePaginatedQueryOptions } from "hooks/usePaginatedQuery"; import type { diff --git a/site/src/components/ActiveUserChart/ActiveUserChart.tsx b/site/src/components/ActiveUserChart/ActiveUserChart.tsx index c7fe0d893bd20..ef55e06d568a4 100644 --- a/site/src/components/ActiveUserChart/ActiveUserChart.tsx +++ b/site/src/components/ActiveUserChart/ActiveUserChart.tsx @@ -68,7 +68,7 @@ export const ActiveUserChart: FC = ({ data }) => { const item = p[0]; return `${item.value} active users`; }} - formatter={(v, n, item) => { + formatter={(_v, _n, item) => { const date = new Date(item.payload.date); return date.toLocaleString(undefined, { month: "long", diff --git a/site/src/components/Alert/Alert.tsx b/site/src/components/Alert/Alert.tsx index e97b690f82833..1cbf36b2df1d2 100644 --- a/site/src/components/Alert/Alert.tsx +++ b/site/src/components/Alert/Alert.tsx @@ -1,7 +1,7 @@ import MuiAlert, { type AlertColor as MuiAlertColor, type AlertProps as MuiAlertProps, - // biome-ignore lint/nursery/noRestrictedImports: Used as base component + // biome-ignore lint/style/noRestrictedImports: Used as base component } from "@mui/material/Alert"; import Collapse from "@mui/material/Collapse"; import { Button } from "components/Button/Button"; diff --git a/site/src/components/Alert/ErrorAlert.stories.tsx b/site/src/components/Alert/ErrorAlert.stories.tsx index c4f3767097326..28120dd1054d1 100644 --- a/site/src/components/Alert/ErrorAlert.stories.tsx +++ b/site/src/components/Alert/ErrorAlert.stories.tsx @@ -1,6 +1,6 @@ +import { mockApiError } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { Button } from "components/Button/Button"; -import { mockApiError } from "testHelpers/entities"; import { ErrorAlert } from "./ErrorAlert"; const mockError = mockApiError({ diff --git a/site/src/components/Avatar/Avatar.tsx b/site/src/components/Avatar/Avatar.tsx index 8661dceda0f6a..3b9de3657d623 100644 --- a/site/src/components/Avatar/Avatar.tsx +++ b/site/src/components/Avatar/Avatar.tsx @@ -12,7 +12,7 @@ import { useTheme } from "@emotion/react"; import * as AvatarPrimitive from "@radix-ui/react-avatar"; -import { type VariantProps, cva } from "class-variance-authority"; +import { cva, type VariantProps } from "class-variance-authority"; import * as React from "react"; import { getExternalImageStylesFromUrl } from "theme/externalImages"; import { cn } from "utils/cn"; diff --git a/site/src/components/Badge/Badge.tsx b/site/src/components/Badge/Badge.tsx index 0d11c96d30433..a042b5cf7203c 100644 --- a/site/src/components/Badge/Badge.tsx +++ b/site/src/components/Badge/Badge.tsx @@ -3,7 +3,7 @@ * @see {@link https://ui.shadcn.com/docs/components/badge} */ import { Slot } from "@radix-ui/react-slot"; -import { type VariantProps, cva } from "class-variance-authority"; +import { cva, type VariantProps } from "class-variance-authority"; import { forwardRef } from "react"; import { cn } from "utils/cn"; diff --git a/site/src/components/Badges/Badges.tsx b/site/src/components/Badges/Badges.tsx index 278eb890cd2ee..f0db2fb0e9fbc 100644 --- a/site/src/components/Badges/Badges.tsx +++ b/site/src/components/Badges/Badges.tsx @@ -3,9 +3,9 @@ import Tooltip from "@mui/material/Tooltip"; import { Stack } from "components/Stack/Stack"; import { type FC, + forwardRef, type HTMLAttributes, type PropsWithChildren, - forwardRef, } from "react"; const styles = { diff --git a/site/src/components/Breadcrumb/Breadcrumb.stories.tsx b/site/src/components/Breadcrumb/Breadcrumb.stories.tsx index d9f8b3f97d8b5..bc14950462d9a 100644 --- a/site/src/components/Breadcrumb/Breadcrumb.stories.tsx +++ b/site/src/components/Breadcrumb/Breadcrumb.stories.tsx @@ -1,3 +1,4 @@ +import { MockOrganization } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { Breadcrumb, @@ -8,7 +9,6 @@ import { BreadcrumbPage, BreadcrumbSeparator, } from "components/Breadcrumb/Breadcrumb"; -import { MockOrganization } from "testHelpers/entities"; const meta: Meta = { title: "components/Breadcrumb", diff --git a/site/src/components/Breadcrumb/Breadcrumb.tsx b/site/src/components/Breadcrumb/Breadcrumb.tsx index 35f90d30a5d7b..61d06c3755542 100644 --- a/site/src/components/Breadcrumb/Breadcrumb.tsx +++ b/site/src/components/Breadcrumb/Breadcrumb.tsx @@ -8,8 +8,8 @@ import { type ComponentProps, type ComponentPropsWithoutRef, type FC, - type ReactNode, forwardRef, + type ReactNode, } from "react"; import { cn } from "utils/cn"; diff --git a/site/src/components/Button/Button.tsx b/site/src/components/Button/Button.tsx index 1f2c6b3b3416b..ff5200edb5883 100644 --- a/site/src/components/Button/Button.tsx +++ b/site/src/components/Button/Button.tsx @@ -3,7 +3,7 @@ * @see {@link https://ui.shadcn.com/docs/components/button} */ import { Slot } from "@radix-ui/react-slot"; -import { type VariantProps, cva } from "class-variance-authority"; +import { cva, type VariantProps } from "class-variance-authority"; import { forwardRef } from "react"; import { cn } from "utils/cn"; diff --git a/site/src/components/Chart/Chart.tsx b/site/src/components/Chart/Chart.tsx index c68967afe6e91..dd418bfef76c3 100644 --- a/site/src/components/Chart/Chart.tsx +++ b/site/src/components/Chart/Chart.tsx @@ -271,7 +271,7 @@ export const ChartTooltipContent = React.forwardRef< ); ChartTooltipContent.displayName = "ChartTooltip"; -const ChartLegend = RechartsPrimitive.Legend; +const _ChartLegend = RechartsPrimitive.Legend; const ChartLegendContent = React.forwardRef< HTMLDivElement, diff --git a/site/src/components/CollapsibleSummary/CollapsibleSummary.tsx b/site/src/components/CollapsibleSummary/CollapsibleSummary.tsx index ef68d1816dbcf..9cf45dc9d445b 100644 --- a/site/src/components/CollapsibleSummary/CollapsibleSummary.tsx +++ b/site/src/components/CollapsibleSummary/CollapsibleSummary.tsx @@ -1,4 +1,4 @@ -import { type VariantProps, cva } from "class-variance-authority"; +import { cva, type VariantProps } from "class-variance-authority"; import { ChevronRightIcon } from "lucide-react"; import { type FC, type ReactNode, useState } from "react"; import { cn } from "utils/cn"; diff --git a/site/src/components/Combobox/Combobox.tsx b/site/src/components/Combobox/Combobox.tsx index 35a4846fcffb4..2d522d6e6397c 100644 --- a/site/src/components/Combobox/Combobox.tsx +++ b/site/src/components/Combobox/Combobox.tsx @@ -18,8 +18,7 @@ import { TooltipProvider, TooltipTrigger, } from "components/Tooltip/Tooltip"; -import { Check, ChevronDown, CornerDownLeft } from "lucide-react"; -import { Info } from "lucide-react"; +import { Check, ChevronDown, CornerDownLeft, Info } from "lucide-react"; import { type FC, type KeyboardEventHandler, useState } from "react"; import { cn } from "utils/cn"; import { ExternalImage } from "../ExternalImage/ExternalImage"; diff --git a/site/src/components/Command/Command.tsx b/site/src/components/Command/Command.tsx index 88451d13b72ee..8973154f1d5c2 100644 --- a/site/src/components/Command/Command.tsx +++ b/site/src/components/Command/Command.tsx @@ -23,7 +23,7 @@ export const Command = forwardRef< /> )); -const CommandDialog: FC = ({ children, ...props }) => { +const _CommandDialog: FC = ({ children, ...props }) => { return ( @@ -132,7 +132,7 @@ export const CommandItem = forwardRef< /> )); -const CommandShortcut = ({ +const _CommandShortcut = ({ className, ...props }: React.HTMLAttributes) => { diff --git a/site/src/components/Dialog/Dialog.tsx b/site/src/components/Dialog/Dialog.tsx index 2ec5fa4dae212..13484f1840f69 100644 --- a/site/src/components/Dialog/Dialog.tsx +++ b/site/src/components/Dialog/Dialog.tsx @@ -3,13 +3,13 @@ * @see {@link https://ui.shadcn.com/docs/components/dialog} */ import * as DialogPrimitive from "@radix-ui/react-dialog"; -import { type VariantProps, cva } from "class-variance-authority"; +import { cva, type VariantProps } from "class-variance-authority"; import { type ComponentPropsWithoutRef, type ElementRef, type FC, - type HTMLAttributes, forwardRef, + type HTMLAttributes, } from "react"; import { cn } from "utils/cn"; @@ -19,7 +19,7 @@ export const DialogTrigger = DialogPrimitive.Trigger; const DialogPortal = DialogPrimitive.Portal; -const DialogClose = DialogPrimitive.Close; +const _DialogClose = DialogPrimitive.Close; const DialogOverlay = forwardRef< ElementRef, diff --git a/site/src/components/Dialogs/ConfirmDialog/ConfirmDialog.test.tsx b/site/src/components/Dialogs/ConfirmDialog/ConfirmDialog.test.tsx index b8a790dc8c167..72ce09290dfd1 100644 --- a/site/src/components/Dialogs/ConfirmDialog/ConfirmDialog.test.tsx +++ b/site/src/components/Dialogs/ConfirmDialog/ConfirmDialog.test.tsx @@ -1,5 +1,5 @@ -import { fireEvent, screen } from "@testing-library/react"; import { renderComponent } from "testHelpers/renderHelpers"; +import { fireEvent, screen } from "@testing-library/react"; import { ConfirmDialog } from "./ConfirmDialog"; describe("ConfirmDialog", () => { diff --git a/site/src/components/Dialogs/DeleteDialog/DeleteDialog.test.tsx b/site/src/components/Dialogs/DeleteDialog/DeleteDialog.test.tsx index 7dc27f977b109..ec2635ee191ce 100644 --- a/site/src/components/Dialogs/DeleteDialog/DeleteDialog.test.tsx +++ b/site/src/components/Dialogs/DeleteDialog/DeleteDialog.test.tsx @@ -1,7 +1,7 @@ +import { renderComponent } from "testHelpers/renderHelpers"; import { screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { act } from "react-dom/test-utils"; -import { renderComponent } from "testHelpers/renderHelpers"; import { DeleteDialog } from "./DeleteDialog"; const inputTestId = "delete-dialog-name-confirmation"; diff --git a/site/src/components/DropdownArrow/DropdownArrow.stories.tsx b/site/src/components/DropdownArrow/DropdownArrow.stories.tsx index 1221e5f091e6a..7413bbc70fe39 100644 --- a/site/src/components/DropdownArrow/DropdownArrow.stories.tsx +++ b/site/src/components/DropdownArrow/DropdownArrow.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { DropdownArrow } from "./DropdownArrow"; const meta: Meta = { diff --git a/site/src/components/DropdownMenu/DropdownMenu.tsx b/site/src/components/DropdownMenu/DropdownMenu.tsx index 01547c30b17a6..8e0e1fb628dcc 100644 --- a/site/src/components/DropdownMenu/DropdownMenu.tsx +++ b/site/src/components/DropdownMenu/DropdownMenu.tsx @@ -11,8 +11,8 @@ import { Check, ChevronRight, Circle } from "lucide-react"; import { type ComponentPropsWithoutRef, type ElementRef, - type HTMLAttributes, forwardRef, + type HTMLAttributes, } from "react"; import { cn } from "utils/cn"; @@ -20,13 +20,13 @@ export const DropdownMenu = DropdownMenuPrimitive.Root; export const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger; -const DropdownMenuGroup = DropdownMenuPrimitive.Group; +const _DropdownMenuGroup = DropdownMenuPrimitive.Group; -const DropdownMenuPortal = DropdownMenuPrimitive.Portal; +const _DropdownMenuPortal = DropdownMenuPrimitive.Portal; -const DropdownMenuSub = DropdownMenuPrimitive.Sub; +const _DropdownMenuSub = DropdownMenuPrimitive.Sub; -const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup; +const _DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup; const DropdownMenuSubTrigger = forwardRef< ElementRef, diff --git a/site/src/components/DurationField/DurationField.tsx b/site/src/components/DurationField/DurationField.tsx index 7ee5153964164..9f6a0fb5436a7 100644 --- a/site/src/components/DurationField/DurationField.tsx +++ b/site/src/components/DurationField/DurationField.tsx @@ -5,10 +5,10 @@ import TextField, { type TextFieldProps } from "@mui/material/TextField"; import { ChevronDownIcon } from "lucide-react"; import { type FC, useEffect, useReducer } from "react"; import { - type TimeUnit, durationInDays, durationInHours, suggestedTimeUnit, + type TimeUnit, } from "utils/time"; type DurationFieldProps = Omit & { diff --git a/site/src/components/ExternalImage/ExternalImage.tsx b/site/src/components/ExternalImage/ExternalImage.tsx index d85b227b999b4..537ad11cfb8a4 100644 --- a/site/src/components/ExternalImage/ExternalImage.tsx +++ b/site/src/components/ExternalImage/ExternalImage.tsx @@ -1,5 +1,5 @@ import { useTheme } from "@emotion/react"; -import { type ImgHTMLAttributes, forwardRef } from "react"; +import { forwardRef, type ImgHTMLAttributes } from "react"; import { getExternalImageStylesFromUrl } from "theme/externalImages"; export const ExternalImage = forwardRef< diff --git a/site/src/components/FileUpload/FileUpload.test.tsx b/site/src/components/FileUpload/FileUpload.test.tsx index 6292bc200a517..e3ebce085ce50 100644 --- a/site/src/components/FileUpload/FileUpload.test.tsx +++ b/site/src/components/FileUpload/FileUpload.test.tsx @@ -1,5 +1,5 @@ -import { fireEvent, screen } from "@testing-library/react"; import { renderComponent } from "testHelpers/renderHelpers"; +import { fireEvent, screen } from "@testing-library/react"; import { FileUpload } from "./FileUpload"; test("accepts files with the correct extension", async () => { diff --git a/site/src/components/FileUpload/FileUpload.tsx b/site/src/components/FileUpload/FileUpload.tsx index 67ec27054ade4..95c7baa816032 100644 --- a/site/src/components/FileUpload/FileUpload.tsx +++ b/site/src/components/FileUpload/FileUpload.tsx @@ -1,4 +1,4 @@ -import { type Interpolation, type Theme, css } from "@emotion/react"; +import { css, type Interpolation, type Theme } from "@emotion/react"; import CircularProgress from "@mui/material/CircularProgress"; import IconButton from "@mui/material/IconButton"; import { Stack } from "components/Stack/Stack"; diff --git a/site/src/components/Filter/Filter.tsx b/site/src/components/Filter/Filter.tsx index ea5e60ff0a7f9..1ee162acccf99 100644 --- a/site/src/components/Filter/Filter.tsx +++ b/site/src/components/Filter/Filter.tsx @@ -13,8 +13,7 @@ import { Button } from "components/Button/Button"; import { InputGroup } from "components/InputGroup/InputGroup"; import { SearchField } from "components/SearchField/SearchField"; import { useDebouncedFunction } from "hooks/debounce"; -import { ExternalLinkIcon } from "lucide-react"; -import { ChevronDownIcon } from "lucide-react"; +import { ChevronDownIcon, ExternalLinkIcon } from "lucide-react"; import { type FC, type ReactNode, useEffect, useRef, useState } from "react"; type PresetFilter = { diff --git a/site/src/components/Filter/SelectFilter.stories.tsx b/site/src/components/Filter/SelectFilter.stories.tsx index 4947ed20dc4f7..136332ccfa883 100644 --- a/site/src/components/Filter/SelectFilter.stories.tsx +++ b/site/src/components/Filter/SelectFilter.stories.tsx @@ -1,9 +1,9 @@ +import { withDesktopViewport } from "testHelpers/storybook"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { Avatar } from "components/Avatar/Avatar"; import { useState } from "react"; import { action } from "storybook/actions"; import { expect, userEvent, within } from "storybook/test"; -import { withDesktopViewport } from "testHelpers/storybook"; import { SelectFilter, type SelectFilterOption, diff --git a/site/src/components/Form/Form.tsx b/site/src/components/Form/Form.tsx index 715f5ec008c5d..d535a63642324 100644 --- a/site/src/components/Form/Form.tsx +++ b/site/src/components/Form/Form.tsx @@ -3,11 +3,11 @@ import { AlphaBadge, DeprecatedBadge } from "components/Badges/Badges"; import { Stack } from "components/Stack/Stack"; import { type ComponentProps, + createContext, type FC, + forwardRef, type HTMLProps, type ReactNode, - createContext, - forwardRef, useContext, } from "react"; import { cn } from "utils/cn"; diff --git a/site/src/components/FullPageLayout/Topbar.tsx b/site/src/components/FullPageLayout/Topbar.tsx index 766a83295d124..ac972b7af04f1 100644 --- a/site/src/components/FullPageLayout/Topbar.tsx +++ b/site/src/components/FullPageLayout/Topbar.tsx @@ -4,12 +4,12 @@ import IconButton, { type IconButtonProps } from "@mui/material/IconButton"; import { Avatar, type AvatarProps } from "components/Avatar/Avatar"; import { Button, type ButtonProps } from "components/Button/Button"; import { + cloneElement, type FC, type ForwardedRef, + forwardRef, type HTMLAttributes, type ReactElement, - cloneElement, - forwardRef, } from "react"; import { cn } from "utils/cn"; diff --git a/site/src/components/GlobalSnackbar/GlobalSnackbar.tsx b/site/src/components/GlobalSnackbar/GlobalSnackbar.tsx index 657bb5fc920ce..081bdf7f3a826 100644 --- a/site/src/components/GlobalSnackbar/GlobalSnackbar.tsx +++ b/site/src/components/GlobalSnackbar/GlobalSnackbar.tsx @@ -5,12 +5,12 @@ import { ErrorIcon } from "../Icons/ErrorIcon"; import { EnterpriseSnackbar } from "./EnterpriseSnackbar"; import { type AdditionalMessage, - MsgType, - type NotificationMsg, - SnackbarEventType, isNotificationList, isNotificationText, isNotificationTextPrefixed, + MsgType, + type NotificationMsg, + SnackbarEventType, } from "./utils"; const variantFromMsgType = (type: MsgType) => { diff --git a/site/src/components/GlobalSnackbar/utils.test.ts b/site/src/components/GlobalSnackbar/utils.test.ts index ffb08c6844023..cc2c33b3d3025 100644 --- a/site/src/components/GlobalSnackbar/utils.test.ts +++ b/site/src/components/GlobalSnackbar/utils.test.ts @@ -1,11 +1,11 @@ import { + displayError, + displaySuccess, + isNotificationTextPrefixed, MsgType, type NotificationMsg, type NotificationTextPrefixed, SnackbarEventType, - displayError, - displaySuccess, - isNotificationTextPrefixed, } from "./utils"; describe("Snackbar", () => { diff --git a/site/src/components/GlobalSnackbar/utils.ts b/site/src/components/GlobalSnackbar/utils.ts index 5dbc747aeff7b..cc6d37504a7ab 100644 --- a/site/src/components/GlobalSnackbar/utils.ts +++ b/site/src/components/GlobalSnackbar/utils.ts @@ -28,10 +28,7 @@ export const isNotificationTextPrefixed = ( msg: AdditionalMessage | null, ): msg is NotificationTextPrefixed => { if (msg) { - return ( - typeof msg !== "string" && - Object.prototype.hasOwnProperty.call(msg, "prefix") - ); + return typeof msg !== "string" && Object.hasOwn(msg, "prefix"); } return false; }; diff --git a/site/src/components/HelpTooltip/HelpTooltip.tsx b/site/src/components/HelpTooltip/HelpTooltip.tsx index 6ab244c854d5b..2bcaef1eb6847 100644 --- a/site/src/components/HelpTooltip/HelpTooltip.tsx +++ b/site/src/components/HelpTooltip/HelpTooltip.tsx @@ -1,12 +1,11 @@ import { type CSSObject, + css, type Interpolation, type Theme, - css, useTheme, } from "@emotion/react"; import Link from "@mui/material/Link"; -import { Stack } from "components/Stack/Stack"; import { Popover, PopoverContent, @@ -15,14 +14,14 @@ import { PopoverTrigger, usePopover, } from "components/deprecated/Popover/Popover"; -import { ExternalLinkIcon } from "lucide-react"; -import { CircleHelpIcon } from "lucide-react"; +import { Stack } from "components/Stack/Stack"; +import { CircleHelpIcon, ExternalLinkIcon } from "lucide-react"; import { type FC, + forwardRef, type HTMLAttributes, type PropsWithChildren, type ReactNode, - forwardRef, } from "react"; type Icon = typeof CircleHelpIcon; diff --git a/site/src/components/IconField/IconField.tsx b/site/src/components/IconField/IconField.tsx index 5a272d44bfd80..65632ee04e10f 100644 --- a/site/src/components/IconField/IconField.tsx +++ b/site/src/components/IconField/IconField.tsx @@ -1,17 +1,17 @@ -import { Global, css, useTheme } from "@emotion/react"; +import { css, Global, useTheme } from "@emotion/react"; import InputAdornment from "@mui/material/InputAdornment"; import TextField, { type TextFieldProps } from "@mui/material/TextField"; import { visuallyHidden } from "@mui/utils"; import { Button } from "components/Button/Button"; -import { ExternalImage } from "components/ExternalImage/ExternalImage"; -import { Loader } from "components/Loader/Loader"; import { Popover, PopoverContent, PopoverTrigger, } from "components/deprecated/Popover/Popover"; +import { ExternalImage } from "components/ExternalImage/ExternalImage"; +import { Loader } from "components/Loader/Loader"; import { ChevronDownIcon } from "lucide-react"; -import { type FC, Suspense, lazy, useState } from "react"; +import { type FC, lazy, Suspense, useState } from "react"; // See: https://github.com/missive/emoji-mart/issues/51#issuecomment-287353222 const urlFromUnifiedCode = (unified: string) => diff --git a/site/src/components/InfoTooltip/InfoTooltip.tsx b/site/src/components/InfoTooltip/InfoTooltip.tsx index dc8fb7c97b96d..63a9187245859 100644 --- a/site/src/components/InfoTooltip/InfoTooltip.tsx +++ b/site/src/components/InfoTooltip/InfoTooltip.tsx @@ -1,4 +1,4 @@ -import { type Interpolation, type Theme, css, useTheme } from "@emotion/react"; +import { css, type Interpolation, type Theme, useTheme } from "@emotion/react"; import { HelpTooltip, HelpTooltipContent, diff --git a/site/src/components/Label/Label.tsx b/site/src/components/Label/Label.tsx index 2b052d0935658..47d42e11b6d7c 100644 --- a/site/src/components/Label/Label.tsx +++ b/site/src/components/Label/Label.tsx @@ -3,7 +3,7 @@ * @see {@link https://ui.shadcn.com/docs/components/label} */ import * as LabelPrimitive from "@radix-ui/react-label"; -import { type VariantProps, cva } from "class-variance-authority"; +import { cva, type VariantProps } from "class-variance-authority"; import { forwardRef } from "react"; import { cn } from "utils/cn"; diff --git a/site/src/components/LastSeen/LastSeen.tsx b/site/src/components/LastSeen/LastSeen.tsx index 23e9a2076984e..02c98a09bf1ce 100644 --- a/site/src/components/LastSeen/LastSeen.tsx +++ b/site/src/components/LastSeen/LastSeen.tsx @@ -12,7 +12,7 @@ interface LastSeenProps export const LastSeen: FC = ({ at, className, ...attrs }) => { const theme = useTheme(); - const t = dayjs(at); + const _t = dayjs(at); const now = new Date(); const oneHourAgo = subtractTime(now, 1, "hour"); const threeDaysAgo = subtractTime(now, 3, "day"); diff --git a/site/src/components/Latency/Latency.tsx b/site/src/components/Latency/Latency.tsx index b5509ba450847..de5c5dc2851b8 100644 --- a/site/src/components/Latency/Latency.tsx +++ b/site/src/components/Latency/Latency.tsx @@ -38,17 +38,13 @@ export const Latency: FC = ({ const notAvailableText = "Latency not available"; return ( - <> - {notAvailableText} - - - + ); } diff --git a/site/src/components/Link/Link.tsx b/site/src/components/Link/Link.tsx index f861ae2e197f7..c68ac1d70d8f7 100644 --- a/site/src/components/Link/Link.tsx +++ b/site/src/components/Link/Link.tsx @@ -1,5 +1,5 @@ import { Slot, Slottable } from "@radix-ui/react-slot"; -import { type VariantProps, cva } from "class-variance-authority"; +import { cva, type VariantProps } from "class-variance-authority"; import { SquareArrowOutUpRightIcon } from "lucide-react"; import { forwardRef } from "react"; import { cn } from "utils/cn"; diff --git a/site/src/components/Logs/LogLine.stories.tsx b/site/src/components/Logs/LogLine.stories.tsx index dcbca361526d0..e294f60ba11dc 100644 --- a/site/src/components/Logs/LogLine.stories.tsx +++ b/site/src/components/Logs/LogLine.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { LogLine, LogLinePrefix } from "./LogLine"; const meta: Meta = { diff --git a/site/src/components/Logs/Logs.stories.tsx b/site/src/components/Logs/Logs.stories.tsx index 01b9b6fa8c297..a9f8fff0f7300 100644 --- a/site/src/components/Logs/Logs.stories.tsx +++ b/site/src/components/Logs/Logs.stories.tsx @@ -1,6 +1,6 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; import { MockWorkspaceBuildLogs } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import type { Line } from "./LogLine"; import { Logs } from "./Logs"; diff --git a/site/src/components/Markdown/Markdown.tsx b/site/src/components/Markdown/Markdown.tsx index 6fdf9e17a6177..ba7bcbf29a903 100644 --- a/site/src/components/Markdown/Markdown.tsx +++ b/site/src/components/Markdown/Markdown.tsx @@ -11,10 +11,10 @@ import isEqual from "lodash/isEqual"; import { type FC, type HTMLProps, - type ReactElement, - type ReactNode, isValidElement, memo, + type ReactElement, + type ReactNode, } from "react"; import ReactMarkdown, { type Options } from "react-markdown"; import { Prism as SyntaxHighlighter } from "react-syntax-highlighter"; diff --git a/site/src/components/MultiSelectCombobox/MultiSelectCombobox.stories.tsx b/site/src/components/MultiSelectCombobox/MultiSelectCombobox.stories.tsx index 1c557eda5601b..ff25209e20d7f 100644 --- a/site/src/components/MultiSelectCombobox/MultiSelectCombobox.stories.tsx +++ b/site/src/components/MultiSelectCombobox/MultiSelectCombobox.stories.tsx @@ -1,6 +1,6 @@ +import { MockOrganization, MockOrganization2 } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, waitFor, within } from "storybook/test"; -import { MockOrganization, MockOrganization2 } from "testHelpers/entities"; import { MultiSelectCombobox } from "./MultiSelectCombobox"; const organizations = [MockOrganization, MockOrganization2]; diff --git a/site/src/components/MultiSelectCombobox/MultiSelectCombobox.tsx b/site/src/components/MultiSelectCombobox/MultiSelectCombobox.tsx index 6d82f043968b1..8ff83f2a4583a 100644 --- a/site/src/components/MultiSelectCombobox/MultiSelectCombobox.tsx +++ b/site/src/components/MultiSelectCombobox/MultiSelectCombobox.tsx @@ -22,9 +22,9 @@ import { ChevronDown, Info, X } from "lucide-react"; import { type ComponentProps, type ComponentPropsWithoutRef, + forwardRef, type KeyboardEvent, type ReactNode, - forwardRef, useCallback, useEffect, useImperativeHandle, diff --git a/site/src/components/OrganizationAutocomplete/OrganizationAutocomplete.stories.tsx b/site/src/components/OrganizationAutocomplete/OrganizationAutocomplete.stories.tsx index 0ce78c7cd5cbc..66f3dde252fff 100644 --- a/site/src/components/OrganizationAutocomplete/OrganizationAutocomplete.stories.tsx +++ b/site/src/components/OrganizationAutocomplete/OrganizationAutocomplete.stories.tsx @@ -1,11 +1,11 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { action } from "storybook/actions"; -import { userEvent, within } from "storybook/test"; import { MockOrganization, MockOrganization2, MockUserOwner, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { action } from "storybook/actions"; +import { userEvent, within } from "storybook/test"; import { OrganizationAutocomplete } from "./OrganizationAutocomplete"; const meta: Meta = { diff --git a/site/src/components/PageHeader/FullWidthPageHeader.tsx b/site/src/components/PageHeader/FullWidthPageHeader.tsx index 33975c0747e41..f369c88fb619e 100644 --- a/site/src/components/PageHeader/FullWidthPageHeader.tsx +++ b/site/src/components/PageHeader/FullWidthPageHeader.tsx @@ -46,7 +46,7 @@ export const FullWidthPageHeader: FC = ({ ); }; -const PageHeaderActions: FC = ({ children }) => { +const _PageHeaderActions: FC = ({ children }) => { const theme = useTheme(); return (
= { diff --git a/site/src/components/RichParameterInput/RichParameterInput.tsx b/site/src/components/RichParameterInput/RichParameterInput.tsx index c60951df71090..1852d50af9f4e 100644 --- a/site/src/components/RichParameterInput/RichParameterInput.tsx +++ b/site/src/components/RichParameterInput/RichParameterInput.tsx @@ -12,8 +12,7 @@ import { ExternalImage } from "components/ExternalImage/ExternalImage"; import { MemoizedMarkdown } from "components/Markdown/Markdown"; import { Pill } from "components/Pill/Pill"; import { Stack } from "components/Stack/Stack"; -import { SettingsIcon } from "lucide-react"; -import { CircleAlertIcon } from "lucide-react"; +import { CircleAlertIcon, SettingsIcon } from "lucide-react"; import { type FC, type ReactNode, useState } from "react"; import type { AutofillBuildParameter, diff --git a/site/src/components/Search/Search.tsx b/site/src/components/Search/Search.tsx index 41b2655638c39..7fecd57df2bf9 100644 --- a/site/src/components/Search/Search.tsx +++ b/site/src/components/Search/Search.tsx @@ -1,5 +1,5 @@ import type { Interpolation, Theme } from "@emotion/react"; -// biome-ignore lint/nursery/noRestrictedImports: use it to have the component prop +// biome-ignore lint/style/noRestrictedImports: use it to have the component prop import Box, { type BoxProps } from "@mui/material/Box"; import visuallyHidden from "@mui/utils/visuallyHidden"; import { SearchIcon } from "lucide-react"; diff --git a/site/src/components/SearchField/SearchField.tsx b/site/src/components/SearchField/SearchField.tsx index c47b35f6fcc28..90a2499615c37 100644 --- a/site/src/components/SearchField/SearchField.tsx +++ b/site/src/components/SearchField/SearchField.tsx @@ -22,11 +22,12 @@ export const SearchField: FC = ({ const theme = useTheme(); const inputRef = useRef(null); - if (autoFocus) { - useEffect(() => { + useEffect(() => { + if (autoFocus) { inputRef.current?.focus(); - }); - } + } + }); + return ( )); -const TableFooter = React.forwardRef< +const _TableFooter = React.forwardRef< HTMLTableSectionElement, React.HTMLAttributes >(({ className, ...props }, ref) => ( @@ -129,7 +129,7 @@ export const TableCell = React.forwardRef< /> )); -const TableCaption = React.forwardRef< +const _TableCaption = React.forwardRef< HTMLTableCaptionElement, React.HTMLAttributes >(({ className, ...props }, ref) => ( diff --git a/site/src/components/TableLoader/TableLoader.tsx b/site/src/components/TableLoader/TableLoader.tsx index e9f6c814f767f..3efaa8bb19ca0 100644 --- a/site/src/components/TableLoader/TableLoader.tsx +++ b/site/src/components/TableLoader/TableLoader.tsx @@ -1,6 +1,6 @@ import TableCell from "@mui/material/TableCell"; import TableRow, { type TableRowProps } from "@mui/material/TableRow"; -import { type FC, type ReactNode, cloneElement, isValidElement } from "react"; +import { cloneElement, type FC, isValidElement, type ReactNode } from "react"; import { Loader } from "../Loader/Loader"; export const TableLoader: FC = () => { diff --git a/site/src/components/Tabs/Tabs.tsx b/site/src/components/Tabs/Tabs.tsx index e18db55871b1d..d1642ca504579 100644 --- a/site/src/components/Tabs/Tabs.tsx +++ b/site/src/components/Tabs/Tabs.tsx @@ -1,4 +1,4 @@ -import { type FC, type HTMLAttributes, createContext, useContext } from "react"; +import { createContext, type FC, type HTMLAttributes, useContext } from "react"; import { Link, type LinkProps } from "react-router"; import { cn } from "utils/cn"; diff --git a/site/src/components/UserAutocomplete/MemberAutocomplete.stories.tsx b/site/src/components/UserAutocomplete/MemberAutocomplete.stories.tsx index 1b8b21b90ca61..b9226c86ab859 100644 --- a/site/src/components/UserAutocomplete/MemberAutocomplete.stories.tsx +++ b/site/src/components/UserAutocomplete/MemberAutocomplete.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockOrganizationMember } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { MemberAutocomplete } from "./UserAutocomplete"; const meta: Meta = { diff --git a/site/src/components/UserAutocomplete/UserAutocomplete.stories.tsx b/site/src/components/UserAutocomplete/UserAutocomplete.stories.tsx index 44fb632c8698e..25dd78ddff60d 100644 --- a/site/src/components/UserAutocomplete/UserAutocomplete.stories.tsx +++ b/site/src/components/UserAutocomplete/UserAutocomplete.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockUserOwner } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { UserAutocomplete } from "./UserAutocomplete"; const meta: Meta = { diff --git a/site/src/components/deprecated/Popover/Popover.tsx b/site/src/components/deprecated/Popover/Popover.tsx index a7f39810e43b2..044306f325c4f 100644 --- a/site/src/components/deprecated/Popover/Popover.tsx +++ b/site/src/components/deprecated/Popover/Popover.tsx @@ -1,8 +1,10 @@ import MuiPopover, { type PopoverProps as MuiPopoverProps, - // biome-ignore lint/nursery/noRestrictedImports: This is the base component that our custom popover is based on + // biome-ignore lint/style/noRestrictedImports: This is the base component that our custom popover is based on } from "@mui/material/Popover"; import { + cloneElement, + createContext, type FC, type HTMLAttributes, type PointerEvent, @@ -10,8 +12,6 @@ import { type ReactElement, type ReactNode, type RefObject, - cloneElement, - createContext, useContext, useEffect, useId, diff --git a/site/src/contexts/ProxyContext.test.tsx b/site/src/contexts/ProxyContext.test.tsx index 03f2662037733..36a7a85eb3068 100644 --- a/site/src/contexts/ProxyContext.test.tsx +++ b/site/src/contexts/ProxyContext.test.tsx @@ -1,8 +1,4 @@ import "testHelpers/localStorage"; -import { screen } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import type { Region } from "api/typesGenerated"; -import { http, HttpResponse } from "msw"; import { MockHealthyWildWorkspaceProxy, MockPrimaryWorkspaceProxy, @@ -14,9 +10,13 @@ import { waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import type { Region } from "api/typesGenerated"; +import { HttpResponse, http } from "msw"; import { - ProxyProvider, getPreferredProxy, + ProxyProvider, saveUserSelectedProxy, useProxy, } from "./ProxyContext"; diff --git a/site/src/contexts/ProxyContext.tsx b/site/src/contexts/ProxyContext.tsx index c162c2c4952ff..409dbf36737c3 100644 --- a/site/src/contexts/ProxyContext.tsx +++ b/site/src/contexts/ProxyContext.tsx @@ -4,9 +4,9 @@ import type { Region, WorkspaceProxy } from "api/typesGenerated"; import { useAuthenticated } from "hooks"; import { useEmbeddedMetadata } from "hooks/useEmbeddedMetadata"; import { + createContext, type FC, type PropsWithChildren, - createContext, useCallback, useContext, useEffect, diff --git a/site/src/contexts/ThemeProvider.tsx b/site/src/contexts/ThemeProvider.tsx index 4521ab71d7a74..2a3fcb22157f2 100644 --- a/site/src/contexts/ThemeProvider.tsx +++ b/site/src/contexts/ThemeProvider.tsx @@ -1,11 +1,13 @@ import createCache from "@emotion/cache"; -import { ThemeProvider as EmotionThemeProvider } from "@emotion/react"; -import { CacheProvider } from "@emotion/react"; +import { + CacheProvider, + ThemeProvider as EmotionThemeProvider, +} from "@emotion/react"; import CssBaseline from "@mui/material/CssBaseline"; import { ThemeProvider as MuiThemeProvider, StyledEngineProvider, - // biome-ignore lint/nursery/noRestrictedImports: we extend the MUI theme + // biome-ignore lint/style/noRestrictedImports: we extend the MUI theme } from "@mui/material/styles"; import { appearanceSettings } from "api/queries/users"; import { useEmbeddedMetadata } from "hooks/useEmbeddedMetadata"; diff --git a/site/src/contexts/auth/AuthProvider.test.tsx b/site/src/contexts/auth/AuthProvider.test.tsx index 147d89f724afe..bf3ea34a7992a 100644 --- a/site/src/contexts/auth/AuthProvider.test.tsx +++ b/site/src/contexts/auth/AuthProvider.test.tsx @@ -1,7 +1,7 @@ +import { createTestQueryClient } from "testHelpers/renderHelpers"; import { renderHook } from "@testing-library/react"; import type { FC, PropsWithChildren } from "react"; import { QueryClientProvider } from "react-query"; -import { createTestQueryClient } from "testHelpers/renderHelpers"; import { AuthProvider, useAuthContext } from "./AuthProvider"; const Wrapper: FC = ({ children }) => { diff --git a/site/src/contexts/auth/AuthProvider.tsx b/site/src/contexts/auth/AuthProvider.tsx index 231dcbd294082..ae06c67e5c3dd 100644 --- a/site/src/contexts/auth/AuthProvider.tsx +++ b/site/src/contexts/auth/AuthProvider.tsx @@ -12,9 +12,9 @@ import { displaySuccess } from "components/GlobalSnackbar/utils"; import { useEmbeddedMetadata } from "hooks/useEmbeddedMetadata"; import { type Permissions, permissionChecks } from "modules/permissions"; import { + createContext, type FC, type PropsWithChildren, - createContext, useCallback, useContext, } from "react"; diff --git a/site/src/contexts/auth/RequireAuth.test.tsx b/site/src/contexts/auth/RequireAuth.test.tsx index b24bb06cb055c..518398b5e0239 100644 --- a/site/src/contexts/auth/RequireAuth.test.tsx +++ b/site/src/contexts/auth/RequireAuth.test.tsx @@ -1,14 +1,14 @@ -import { renderHook, screen } from "@testing-library/react"; -import { useAuthenticated } from "hooks"; -import { http, HttpResponse } from "msw"; -import type { FC, PropsWithChildren } from "react"; -import { QueryClientProvider } from "react-query"; import { MockPermissions, MockUserOwner } from "testHelpers/entities"; import { createTestQueryClient, renderWithAuth, } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { renderHook, screen } from "@testing-library/react"; +import { useAuthenticated } from "hooks"; +import { HttpResponse, http } from "msw"; +import type { FC, PropsWithChildren } from "react"; +import { QueryClientProvider } from "react-query"; import { AuthContext, type AuthContextValue } from "./AuthProvider"; describe("RequireAuth", () => { diff --git a/site/src/contexts/useProxyLatency.ts b/site/src/contexts/useProxyLatency.ts index f5f3d2acb415c..a1fed6a6990d5 100644 --- a/site/src/contexts/useProxyLatency.ts +++ b/site/src/contexts/useProxyLatency.ts @@ -75,7 +75,7 @@ export const useProxyLatency = ( const [latestFetchRequest, setLatestFetchRequest] = useState( // The initial state is the current time minus the interval. Any proxies that have a latency after this // in the cache are still valid. - new Date(new Date().getTime() - proxyIntervalSeconds * 1000).toISOString(), + new Date(Date.now() - proxyIntervalSeconds * 1000).toISOString(), ); const [loaded, setLoaded] = useState(false); @@ -163,7 +163,7 @@ export const useProxyLatency = ( // https://developer.mozilla.org/en-US/docs/Web/API/Performance_API/Resource_timing let latencyMS = 0; let accurate = false; - let nextHopProtocol: string | undefined = undefined; + let nextHopProtocol: string | undefined; if ( "requestStart" in entry && (entry as PerformanceResourceTiming).requestStart !== 0 diff --git a/site/src/hooks/useEmbeddedMetadata.test.ts b/site/src/hooks/useEmbeddedMetadata.test.ts index 316ab464a78de..60002381ac3ba 100644 --- a/site/src/hooks/useEmbeddedMetadata.test.ts +++ b/site/src/hooks/useEmbeddedMetadata.test.ts @@ -1,5 +1,3 @@ -import { act, renderHook } from "@testing-library/react"; -import type { Region, User } from "api/typesGenerated"; import { MockAppearanceConfig, MockBuildInfo, @@ -9,13 +7,15 @@ import { MockUserAppearanceSettings, MockUserOwner, } from "testHelpers/entities"; +import { act, renderHook } from "@testing-library/react"; +import type { Region, User } from "api/typesGenerated"; import { DEFAULT_METADATA_KEY, type MetadataKey, MetadataManager, type MetadataValue, - type RuntimeHtmlMetadata, makeUseEmbeddedMetadata, + type RuntimeHtmlMetadata, useEmbeddedMetadata, } from "./useEmbeddedMetadata"; diff --git a/site/src/hooks/usePaginatedQuery.test.ts b/site/src/hooks/usePaginatedQuery.test.ts index 6b15531d42135..bb62f2b4b2628 100644 --- a/site/src/hooks/usePaginatedQuery.test.ts +++ b/site/src/hooks/usePaginatedQuery.test.ts @@ -1,5 +1,5 @@ -import { waitFor } from "@testing-library/react"; import { renderHookWithAuth } from "testHelpers/hooks"; +import { waitFor } from "@testing-library/react"; import { type PaginatedData, type UsePaginatedQueryOptions, diff --git a/site/src/hooks/usePaginatedQuery.ts b/site/src/hooks/usePaginatedQuery.ts index e5a49a7245c75..200674d69c773 100644 --- a/site/src/hooks/usePaginatedQuery.ts +++ b/site/src/hooks/usePaginatedQuery.ts @@ -1,11 +1,11 @@ import clamp from "lodash/clamp"; import { useEffect } from "react"; import { + keepPreviousData, type QueryFunctionContext, type QueryKey, type UseQueryOptions, type UseQueryResult, - keepPreviousData, useQuery, useQueryClient, } from "react-query"; diff --git a/site/src/hooks/useSearchParamsKey.test.ts b/site/src/hooks/useSearchParamsKey.test.ts index 85c2ac25d74db..38117d402d4d0 100644 --- a/site/src/hooks/useSearchParamsKey.test.ts +++ b/site/src/hooks/useSearchParamsKey.test.ts @@ -1,5 +1,5 @@ -import { act, waitFor } from "@testing-library/react"; import { renderHookWithAuth } from "testHelpers/hooks"; +import { act, waitFor } from "@testing-library/react"; import { useSearchParamsKey } from "./useSearchParamsKey"; /** diff --git a/site/src/index.css b/site/src/index.css index 04b388a5cba99..854d0f4bf1cb1 100644 --- a/site/src/index.css +++ b/site/src/index.css @@ -34,7 +34,6 @@ --border-success: 142 76% 36%; --border-warning: 30.66, 97.16%, 72.35%; --border-destructive: 0 84% 60%; - --border-warning: 27 96% 61%; --border-hover: 240 5% 34%; --overlay-default: 240 5% 84% / 80%; --radius: 0.5rem; @@ -76,7 +75,6 @@ --border-success: 142 76% 36%; --border-warning: 30.66, 97.16%, 72.35%; --border-destructive: 0 91% 71%; - --border-warning: 31 97% 72%; --border-hover: 240, 5%, 34%; --overlay-default: 240 10% 4% / 80%; --highlight-purple: 252 95% 85%; @@ -104,8 +102,8 @@ https://github.com/radix-ui/primitives/issues/3251 */ html body[data-scroll-locked] { - --removed-body-scroll-bar-size: 0 !important; - margin-right: 0 !important; + --removed-body-scroll-bar-size: 0; + margin-right: 0; } /* Prevent layout shift when modals open by maintaining scrollbar width */ @@ -123,6 +121,6 @@ is likely to have set both overflow:hidden and padding-right. */ body[style*="overflow: hidden"][style*="padding-right"] { - padding-right: 0px !important; + padding-right: 0px; } } diff --git a/site/src/modules/apps/apps.test.ts b/site/src/modules/apps/apps.test.ts index e61b214a25385..96a1d1c686467 100644 --- a/site/src/modules/apps/apps.test.ts +++ b/site/src/modules/apps/apps.test.ts @@ -3,7 +3,7 @@ import { MockWorkspaceAgent, MockWorkspaceApp, } from "testHelpers/entities"; -import { SESSION_TOKEN_PLACEHOLDER, getAppHref } from "./apps"; +import { getAppHref, SESSION_TOKEN_PLACEHOLDER } from "./apps"; describe("getAppHref", () => { it("returns the URL without changes when external app has regular URL", () => { diff --git a/site/src/modules/builds/BuildAvatar/BuildAvatar.stories.tsx b/site/src/modules/builds/BuildAvatar/BuildAvatar.stories.tsx index faa46ab5142cd..2e7f77c336c7d 100644 --- a/site/src/modules/builds/BuildAvatar/BuildAvatar.stories.tsx +++ b/site/src/modules/builds/BuildAvatar/BuildAvatar.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockWorkspaceBuild } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { BuildAvatar } from "./BuildAvatar"; const meta: Meta = { diff --git a/site/src/modules/dashboard/AnnouncementBanners/AnnouncementBannerView.tsx b/site/src/modules/dashboard/AnnouncementBanners/AnnouncementBannerView.tsx index 34d67aa83ec16..84df0b97960f3 100644 --- a/site/src/modules/dashboard/AnnouncementBanners/AnnouncementBannerView.tsx +++ b/site/src/modules/dashboard/AnnouncementBanners/AnnouncementBannerView.tsx @@ -1,4 +1,4 @@ -import { type Interpolation, type Theme, css } from "@emotion/react"; +import { css, type Interpolation, type Theme } from "@emotion/react"; import { InlineMarkdown } from "components/Markdown/Markdown"; import type { FC } from "react"; import { readableForegroundColor } from "utils/colors"; diff --git a/site/src/modules/dashboard/DashboardLayout.test.tsx b/site/src/modules/dashboard/DashboardLayout.test.tsx index bc449a2156242..71e51825afc31 100644 --- a/site/src/modules/dashboard/DashboardLayout.test.tsx +++ b/site/src/modules/dashboard/DashboardLayout.test.tsx @@ -1,7 +1,7 @@ -import { screen } from "@testing-library/react"; -import { http, HttpResponse } from "msw"; import { renderWithAuth } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { screen } from "@testing-library/react"; +import { HttpResponse, http } from "msw"; import { DashboardLayout } from "./DashboardLayout"; test("Show the new Coder version notification", async () => { diff --git a/site/src/modules/dashboard/DashboardProvider.tsx b/site/src/modules/dashboard/DashboardProvider.tsx index 87340489d7023..c6bc31a788232 100644 --- a/site/src/modules/dashboard/DashboardProvider.tsx +++ b/site/src/modules/dashboard/DashboardProvider.tsx @@ -15,7 +15,7 @@ import { Loader } from "components/Loader/Loader"; import { useAuthenticated } from "hooks"; import { useEmbeddedMetadata } from "hooks/useEmbeddedMetadata"; import { canViewAnyOrganization } from "modules/permissions"; -import { type FC, type PropsWithChildren, createContext } from "react"; +import { createContext, type FC, type PropsWithChildren } from "react"; import { useQuery } from "react-query"; import { selectFeatureVisibility } from "./entitlements"; diff --git a/site/src/modules/dashboard/DeploymentBanner/DeploymentBannerView.stories.tsx b/site/src/modules/dashboard/DeploymentBanner/DeploymentBannerView.stories.tsx index 6d8e4c98552b3..949aa0390e573 100644 --- a/site/src/modules/dashboard/DeploymentBanner/DeploymentBannerView.stories.tsx +++ b/site/src/modules/dashboard/DeploymentBanner/DeploymentBannerView.stories.tsx @@ -1,8 +1,8 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { DeploymentHealthUnhealthy, MockDeploymentStats, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { DeploymentBannerView } from "./DeploymentBannerView"; const meta: Meta = { diff --git a/site/src/modules/dashboard/DeploymentBanner/DeploymentBannerView.tsx b/site/src/modules/dashboard/DeploymentBanner/DeploymentBannerView.tsx index e6e4c8e32be84..7552d29150a74 100644 --- a/site/src/modules/dashboard/DeploymentBanner/DeploymentBannerView.tsx +++ b/site/src/modules/dashboard/DeploymentBanner/DeploymentBannerView.tsx @@ -1,5 +1,5 @@ import type { CSSInterpolation } from "@emotion/css/dist/declarations/src/create-instance"; -import { type Interpolation, type Theme, css, useTheme } from "@emotion/react"; +import { css, type Interpolation, type Theme, useTheme } from "@emotion/react"; import Button from "@mui/material/Button"; import Link from "@mui/material/Link"; import Tooltip from "@mui/material/Tooltip"; @@ -16,13 +16,16 @@ import { VSCodeIcon } from "components/Icons/VSCodeIcon"; import { Stack } from "components/Stack/Stack"; import dayjs from "dayjs"; import { type ClassName, useClassName } from "hooks/useClassName"; -import { CloudDownloadIcon } from "lucide-react"; -import { CloudUploadIcon } from "lucide-react"; -import { GitCompareArrowsIcon } from "lucide-react"; -import { GaugeIcon } from "lucide-react"; -import { AppWindowIcon } from "lucide-react"; -import { RotateCwIcon, WrenchIcon } from "lucide-react"; -import { CircleAlertIcon } from "lucide-react"; +import { + AppWindowIcon, + CircleAlertIcon, + CloudDownloadIcon, + CloudUploadIcon, + GaugeIcon, + GitCompareArrowsIcon, + RotateCwIcon, + WrenchIcon, +} from "lucide-react"; import prettyBytes from "pretty-bytes"; import { type FC, @@ -138,7 +141,7 @@ export const DeploymentBannerView: FC = ({ ) : ( - <>Status of your Coder deployment. Only visible for admins! + "Status of your Coder deployment. Only visible for admins!" ) } open={process.env.STORYBOOK === "true" ? true : undefined} diff --git a/site/src/modules/dashboard/LicenseBanner/LicenseBannerView.stories.tsx b/site/src/modules/dashboard/LicenseBanner/LicenseBannerView.stories.tsx index 15046ebfd1cb2..faaf7c0e2275c 100644 --- a/site/src/modules/dashboard/LicenseBanner/LicenseBannerView.stories.tsx +++ b/site/src/modules/dashboard/LicenseBanner/LicenseBannerView.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { LicenseBannerView } from "./LicenseBannerView"; const meta: Meta = { diff --git a/site/src/modules/dashboard/LicenseBanner/LicenseBannerView.tsx b/site/src/modules/dashboard/LicenseBanner/LicenseBannerView.tsx index f9d1f39b868ed..ee91ee81b2f76 100644 --- a/site/src/modules/dashboard/LicenseBanner/LicenseBannerView.tsx +++ b/site/src/modules/dashboard/LicenseBanner/LicenseBannerView.tsx @@ -1,8 +1,8 @@ import { type CSSObject, + css, type Interpolation, type Theme, - css, useTheme, } from "@emotion/react"; import Link from "@mui/material/Link"; diff --git a/site/src/modules/dashboard/Navbar/DeploymentDropdown.tsx b/site/src/modules/dashboard/Navbar/DeploymentDropdown.tsx index fe71c20d67fa3..b78e3a6954a58 100644 --- a/site/src/modules/dashboard/Navbar/DeploymentDropdown.tsx +++ b/site/src/modules/dashboard/Navbar/DeploymentDropdown.tsx @@ -1,4 +1,4 @@ -import { type Interpolation, type Theme, css, useTheme } from "@emotion/react"; +import { css, type Interpolation, type Theme, useTheme } from "@emotion/react"; import MenuItem from "@mui/material/MenuItem"; import { Button } from "components/Button/Button"; import { diff --git a/site/src/modules/dashboard/Navbar/MobileMenu.stories.tsx b/site/src/modules/dashboard/Navbar/MobileMenu.stories.tsx index 0a86742f485a9..d99a221e8ae97 100644 --- a/site/src/modules/dashboard/Navbar/MobileMenu.stories.tsx +++ b/site/src/modules/dashboard/Navbar/MobileMenu.stories.tsx @@ -1,7 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { PointerEventsCheckLevel } from "@testing-library/user-event"; -import type { FC } from "react"; -import { fn, userEvent, within } from "storybook/test"; import { MockPrimaryWorkspaceProxy, MockProxyLatencies, @@ -10,6 +6,10 @@ import { MockUserOwner, MockWorkspaceProxies, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { PointerEventsCheckLevel } from "@testing-library/user-event"; +import type { FC } from "react"; +import { fn, userEvent, within } from "storybook/test"; import { MobileMenu } from "./MobileMenu"; const meta: Meta = { diff --git a/site/src/modules/dashboard/Navbar/Navbar.test.tsx b/site/src/modules/dashboard/Navbar/Navbar.test.tsx index aa9a2c0400e10..2390d315ce9b5 100644 --- a/site/src/modules/dashboard/Navbar/Navbar.test.tsx +++ b/site/src/modules/dashboard/Navbar/Navbar.test.tsx @@ -1,12 +1,12 @@ -import { render, screen, waitFor } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; import { App } from "App"; -import { http, HttpResponse } from "msw"; import { MockEntitlementsWithAuditLog, MockMemberPermissions, } from "testHelpers/entities"; import { server } from "testHelpers/server"; +import { render, screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { HttpResponse, http } from "msw"; /** * The LicenseBanner, mounted above the AppRouter, fetches entitlements. Thus, to test their diff --git a/site/src/modules/dashboard/Navbar/NavbarView.stories.tsx b/site/src/modules/dashboard/Navbar/NavbarView.stories.tsx index af6ba75ff38f4..786f595d32932 100644 --- a/site/src/modules/dashboard/Navbar/NavbarView.stories.tsx +++ b/site/src/modules/dashboard/Navbar/NavbarView.stories.tsx @@ -1,8 +1,8 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { userEvent, within } from "storybook/test"; import { chromaticWithTablet } from "testHelpers/chromatic"; import { MockUserMember, MockUserOwner } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { userEvent, within } from "storybook/test"; import { NavbarView } from "./NavbarView"; const meta: Meta = { diff --git a/site/src/modules/dashboard/Navbar/NavbarView.test.tsx b/site/src/modules/dashboard/Navbar/NavbarView.test.tsx index 4c43e6a0877f9..9d011089ba6c5 100644 --- a/site/src/modules/dashboard/Navbar/NavbarView.test.tsx +++ b/site/src/modules/dashboard/Navbar/NavbarView.test.tsx @@ -1,8 +1,8 @@ +import { MockPrimaryWorkspaceProxy, MockUserOwner } from "testHelpers/entities"; +import { renderWithAuth } from "testHelpers/renderHelpers"; import { screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import type { ProxyContextValue } from "contexts/ProxyContext"; -import { MockPrimaryWorkspaceProxy, MockUserOwner } from "testHelpers/entities"; -import { renderWithAuth } from "testHelpers/renderHelpers"; import { NavbarView } from "./NavbarView"; const proxyContextValue: ProxyContextValue = { diff --git a/site/src/modules/dashboard/Navbar/ProxyMenu.stories.tsx b/site/src/modules/dashboard/Navbar/ProxyMenu.stories.tsx index e7b29284f7f6e..0adaef25eb14d 100644 --- a/site/src/modules/dashboard/Navbar/ProxyMenu.stories.tsx +++ b/site/src/modules/dashboard/Navbar/ProxyMenu.stories.tsx @@ -1,9 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { getAuthorizationKey } from "api/queries/authCheck"; -import { getPreferredProxy } from "contexts/ProxyContext"; -import { AuthProvider } from "contexts/auth/AuthProvider"; -import { permissionChecks } from "modules/permissions"; -import { fn, userEvent, within } from "storybook/test"; import { MockAuthMethodsAll, MockPermissions, @@ -12,6 +6,12 @@ import { MockWorkspaceProxies, } from "testHelpers/entities"; import { withDesktopViewport } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { getAuthorizationKey } from "api/queries/authCheck"; +import { AuthProvider } from "contexts/auth/AuthProvider"; +import { getPreferredProxy } from "contexts/ProxyContext"; +import { permissionChecks } from "modules/permissions"; +import { fn, userEvent, within } from "storybook/test"; import { ProxyMenu } from "./ProxyMenu"; const defaultProxyContextValue = { diff --git a/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdown.stories.tsx b/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdown.stories.tsx index bb5c518e342f8..c5025a3f4d198 100644 --- a/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdown.stories.tsx +++ b/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdown.stories.tsx @@ -1,7 +1,7 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { expect, screen, userEvent, waitFor, within } from "storybook/test"; import { MockBuildInfo, MockUserOwner } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { expect, screen, userEvent, waitFor, within } from "storybook/test"; import { UserDropdown } from "./UserDropdown"; const meta: Meta = { diff --git a/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdownContent.test.tsx b/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdownContent.test.tsx index 6a9018c4eeeca..daf1de5376f58 100644 --- a/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdownContent.test.tsx +++ b/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdownContent.test.tsx @@ -1,7 +1,7 @@ -import { screen } from "@testing-library/react"; -import { Popover } from "components/deprecated/Popover/Popover"; import { MockUserOwner } from "testHelpers/entities"; import { render, waitForLoaderToBeRemoved } from "testHelpers/renderHelpers"; +import { screen } from "@testing-library/react"; +import { Popover } from "components/deprecated/Popover/Popover"; import { Language, UserDropdownContent } from "./UserDropdownContent"; describe("UserDropdownContent", () => { diff --git a/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdownContent.tsx b/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdownContent.tsx index 99bd655b252f1..55b41bc3c65a5 100644 --- a/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdownContent.tsx +++ b/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdownContent.tsx @@ -1,8 +1,8 @@ import { type CSSObject, + css, type Interpolation, type Theme, - css, } from "@emotion/react"; import Divider from "@mui/material/Divider"; import MenuItem from "@mui/material/MenuItem"; @@ -10,15 +10,18 @@ import type { SvgIconProps } from "@mui/material/SvgIcon"; import Tooltip from "@mui/material/Tooltip"; import type * as TypesGen from "api/typesGenerated"; import { CopyButton } from "components/CopyButton/CopyButton"; +import { usePopover } from "components/deprecated/Popover/Popover"; import { ExternalImage } from "components/ExternalImage/ExternalImage"; import { Stack } from "components/Stack/Stack"; -import { usePopover } from "components/deprecated/Popover/Popover"; -import { BookOpenTextIcon } from "lucide-react"; -import { BugIcon } from "lucide-react"; -import { CircleUserIcon } from "lucide-react"; -import { LogOutIcon } from "lucide-react"; -import { MessageSquareIcon } from "lucide-react"; -import { MonitorDownIcon, SquareArrowOutUpRightIcon } from "lucide-react"; +import { + BookOpenTextIcon, + BugIcon, + CircleUserIcon, + LogOutIcon, + MessageSquareIcon, + MonitorDownIcon, + SquareArrowOutUpRightIcon, +} from "lucide-react"; import type { FC } from "react"; import { Link } from "react-router"; diff --git a/site/src/modules/dashboard/useUpdateCheck.test.tsx b/site/src/modules/dashboard/useUpdateCheck.test.tsx index c6ffe37cd94ba..f3ab00d434e75 100644 --- a/site/src/modules/dashboard/useUpdateCheck.test.tsx +++ b/site/src/modules/dashboard/useUpdateCheck.test.tsx @@ -1,9 +1,9 @@ +import { MockUpdateCheck } from "testHelpers/entities"; +import { server } from "testHelpers/server"; import { act, renderHook, waitFor } from "@testing-library/react"; -import { http, HttpResponse } from "msw"; +import { HttpResponse, http } from "msw"; import type { FC, PropsWithChildren } from "react"; import { QueryClient, QueryClientProvider } from "react-query"; -import { MockUpdateCheck } from "testHelpers/entities"; -import { server } from "testHelpers/server"; import { useUpdateCheck } from "./useUpdateCheck"; const createWrapper = (): FC => { diff --git a/site/src/modules/hooks/useSyncFormParameters.ts b/site/src/modules/hooks/useSyncFormParameters.ts index 4f6952331eaaf..dee1f5aef8ae6 100644 --- a/site/src/modules/hooks/useSyncFormParameters.ts +++ b/site/src/modules/hooks/useSyncFormParameters.ts @@ -1,7 +1,6 @@ import type * as TypesGen from "api/typesGenerated"; -import { useEffect, useRef } from "react"; - import type { PreviewParameter } from "api/typesGenerated"; +import { useEffect, useRef } from "react"; type UseSyncFormParametersProps = { parameters: readonly PreviewParameter[]; diff --git a/site/src/modules/management/DeploymentConfigProvider.tsx b/site/src/modules/management/DeploymentConfigProvider.tsx index ab3bfc7ddd124..51bacf22cdb2a 100644 --- a/site/src/modules/management/DeploymentConfigProvider.tsx +++ b/site/src/modules/management/DeploymentConfigProvider.tsx @@ -2,7 +2,7 @@ import type { DeploymentConfig } from "api/api"; import { deploymentConfig } from "api/queries/deployment"; import { ErrorAlert } from "components/Alert/ErrorAlert"; import { Loader } from "components/Loader/Loader"; -import { type FC, createContext, useContext } from "react"; +import { createContext, type FC, useContext } from "react"; import { useQuery } from "react-query"; import { Outlet } from "react-router"; diff --git a/site/src/modules/management/DeploymentSidebarView.stories.tsx b/site/src/modules/management/DeploymentSidebarView.stories.tsx index 65d2dca1349f7..a58268d9e7f58 100644 --- a/site/src/modules/management/DeploymentSidebarView.stories.tsx +++ b/site/src/modules/management/DeploymentSidebarView.stories.tsx @@ -1,10 +1,10 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockBuildInfo, MockNoPermissions, MockPermissions, } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { DeploymentSidebarView } from "./DeploymentSidebarView"; const meta: Meta = { diff --git a/site/src/modules/management/OrganizationSettingsLayout.tsx b/site/src/modules/management/OrganizationSettingsLayout.tsx index fb0d0c722db51..edbe759e0d5fb 100644 --- a/site/src/modules/management/OrganizationSettingsLayout.tsx +++ b/site/src/modules/management/OrganizationSettingsLayout.tsx @@ -12,11 +12,11 @@ import { import { Loader } from "components/Loader/Loader"; import { useDashboard } from "modules/dashboard/useDashboard"; import { - type OrganizationPermissions, canViewOrganization, + type OrganizationPermissions, } from "modules/permissions/organizations"; import NotFoundPage from "pages/404Page/404Page"; -import { type FC, Suspense, createContext, useContext } from "react"; +import { createContext, type FC, Suspense, useContext } from "react"; import { useQuery } from "react-query"; import { Outlet, useParams } from "react-router"; diff --git a/site/src/modules/management/OrganizationSidebarView.stories.tsx b/site/src/modules/management/OrganizationSidebarView.stories.tsx index 37d2c9ab17c37..ab4c2486d37c8 100644 --- a/site/src/modules/management/OrganizationSidebarView.stories.tsx +++ b/site/src/modules/management/OrganizationSidebarView.stories.tsx @@ -1,6 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import type { Organization } from "api/typesGenerated"; -import { expect, userEvent, waitFor, within } from "storybook/test"; import { MockNoOrganizationPermissions, MockNoPermissions, @@ -10,6 +7,9 @@ import { MockPermissions, } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import type { Organization } from "api/typesGenerated"; +import { expect, userEvent, waitFor, within } from "storybook/test"; import { OrganizationSidebarView } from "./OrganizationSidebarView"; const meta: Meta = { diff --git a/site/src/modules/management/OrganizationSidebarView.tsx b/site/src/modules/management/OrganizationSidebarView.tsx index 3f1d489afb343..5f7fb6dd3b993 100644 --- a/site/src/modules/management/OrganizationSidebarView.tsx +++ b/site/src/modules/management/OrganizationSidebarView.tsx @@ -163,60 +163,58 @@ const OrganizationSettingsNavigation: FC< OrganizationSettingsNavigationProps > = ({ organization, orgPermissions }) => { return ( - <> -
- - Members +
+ + Members + + {orgPermissions.viewGroups && ( + + Groups - {orgPermissions.viewGroups && ( - - Groups - - )} - {orgPermissions.viewOrgRoles && ( - - Roles - - )} - {orgPermissions.viewProvisioners && - orgPermissions.viewProvisionerJobs && ( - <> - - Provisioners - - - Provisioner Keys - - - Provisioner Jobs - - - )} - {orgPermissions.viewIdpSyncSettings && ( - - IdP Sync - - )} - {orgPermissions.editSettings && ( - - Settings - + )} + {orgPermissions.viewOrgRoles && ( + + Roles + + )} + {orgPermissions.viewProvisioners && + orgPermissions.viewProvisionerJobs && ( + <> + + Provisioners + + + Provisioner Keys + + + Provisioner Jobs + + )} -
- + {orgPermissions.viewIdpSyncSettings && ( + + IdP Sync + + )} + {orgPermissions.editSettings && ( + + Settings + + )} +
); }; diff --git a/site/src/modules/navigation.ts b/site/src/modules/navigation.ts index e6ec5a3096c3f..289b54a7b0fb6 100644 --- a/site/src/modules/navigation.ts +++ b/site/src/modules/navigation.ts @@ -22,7 +22,7 @@ function withFilter(path: string, filter: string) { export const linkToAuditing = "/audit"; -const linkToUsers = withFilter("/deployment/users", "status:active"); +const _linkToUsers = withFilter("/deployment/users", "status:active"); export const linkToTemplate = (organizationName: string, templateName: string): LinkThunk => diff --git a/site/src/modules/notifications/NotificationsInbox/InboxAvatar.tsx b/site/src/modules/notifications/NotificationsInbox/InboxAvatar.tsx index 9be8e2b9f74ad..4ca9085d8debc 100644 --- a/site/src/modules/notifications/NotificationsInbox/InboxAvatar.tsx +++ b/site/src/modules/notifications/NotificationsInbox/InboxAvatar.tsx @@ -11,8 +11,8 @@ import { LayoutTemplateIcon, UserIcon, } from "lucide-react"; -import type { FC } from "react"; import type React from "react"; +import type { FC } from "react"; const InboxNotificationFallbackIcons = [ InboxNotificationFallbackIconAccount, diff --git a/site/src/modules/notifications/NotificationsInbox/InboxItem.stories.tsx b/site/src/modules/notifications/NotificationsInbox/InboxItem.stories.tsx index 4b031fe6a158a..1aff447b264b9 100644 --- a/site/src/modules/notifications/NotificationsInbox/InboxItem.stories.tsx +++ b/site/src/modules/notifications/NotificationsInbox/InboxItem.stories.tsx @@ -1,6 +1,6 @@ +import { MockNotification } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, fn, userEvent, within } from "storybook/test"; -import { MockNotification } from "testHelpers/entities"; import { daysAgo } from "utils/time"; import { InboxItem } from "./InboxItem"; diff --git a/site/src/modules/notifications/NotificationsInbox/InboxPopover.stories.tsx b/site/src/modules/notifications/NotificationsInbox/InboxPopover.stories.tsx index 765f9b079a484..32432983335b1 100644 --- a/site/src/modules/notifications/NotificationsInbox/InboxPopover.stories.tsx +++ b/site/src/modules/notifications/NotificationsInbox/InboxPopover.stories.tsx @@ -1,6 +1,6 @@ +import { MockNotifications } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, fn, userEvent, within } from "storybook/test"; -import { MockNotifications } from "testHelpers/entities"; import { InboxPopover } from "./InboxPopover"; const meta: Meta = { diff --git a/site/src/modules/notifications/NotificationsInbox/NotificationsInbox.stories.tsx b/site/src/modules/notifications/NotificationsInbox/NotificationsInbox.stories.tsx index 78585beafa827..f042ece2662de 100644 --- a/site/src/modules/notifications/NotificationsInbox/NotificationsInbox.stories.tsx +++ b/site/src/modules/notifications/NotificationsInbox/NotificationsInbox.stories.tsx @@ -1,7 +1,7 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { expect, fn, userEvent, waitFor, within } from "storybook/test"; import { MockNotifications, mockApiError } from "testHelpers/entities"; import { withGlobalSnackbar } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { expect, fn, userEvent, waitFor, within } from "storybook/test"; import { NotificationsInbox } from "./NotificationsInbox"; const meta: Meta = { diff --git a/site/src/modules/notifications/utils.tsx b/site/src/modules/notifications/utils.tsx index c876c5b05d94f..273a68e013e65 100644 --- a/site/src/modules/notifications/utils.tsx +++ b/site/src/modules/notifications/utils.tsx @@ -1,5 +1,4 @@ -import { MailIcon } from "lucide-react"; -import { WebhookIcon } from "lucide-react"; +import { MailIcon, WebhookIcon } from "lucide-react"; // TODO: This should be provided by the auto generated types from codersdk const notificationMethods = ["smtp", "webhook"] as const; diff --git a/site/src/modules/provisioners/Provisioner.tsx b/site/src/modules/provisioners/Provisioner.tsx index 3f9e5d4cad296..35f335b1884c3 100644 --- a/site/src/modules/provisioners/Provisioner.tsx +++ b/site/src/modules/provisioners/Provisioner.tsx @@ -2,8 +2,7 @@ import { useTheme } from "@emotion/react"; import Tooltip from "@mui/material/Tooltip"; import type { HealthMessage, ProvisionerDaemon } from "api/typesGenerated"; import { Pill } from "components/Pill/Pill"; -import { Building2Icon } from "lucide-react"; -import { UserIcon } from "lucide-react"; +import { Building2Icon, UserIcon } from "lucide-react"; import type { FC } from "react"; import { createDayString } from "utils/createDayString"; import { ProvisionerTag } from "./ProvisionerTag"; diff --git a/site/src/modules/provisioners/ProvisionerAlert.stories.tsx b/site/src/modules/provisioners/ProvisionerAlert.stories.tsx index 2f1ae820d6abe..d2fd8ca9b35a4 100644 --- a/site/src/modules/provisioners/ProvisionerAlert.stories.tsx +++ b/site/src/modules/provisioners/ProvisionerAlert.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { AlertVariant, ProvisionerAlert } from "./ProvisionerAlert"; const meta: Meta = { diff --git a/site/src/modules/provisioners/ProvisionerAlert.tsx b/site/src/modules/provisioners/ProvisionerAlert.tsx index 2d14237b414ed..a736e9a5b7104 100644 --- a/site/src/modules/provisioners/ProvisionerAlert.tsx +++ b/site/src/modules/provisioners/ProvisionerAlert.tsx @@ -1,7 +1,6 @@ import type { Theme } from "@emotion/react"; import AlertTitle from "@mui/material/AlertTitle"; -import { Alert, type AlertColor } from "components/Alert/Alert"; -import { AlertDetail } from "components/Alert/Alert"; +import { Alert, type AlertColor, AlertDetail } from "components/Alert/Alert"; import { ProvisionerTag } from "modules/provisioners/ProvisionerTag"; import type { FC } from "react"; diff --git a/site/src/modules/provisioners/ProvisionerStatusAlert.stories.tsx b/site/src/modules/provisioners/ProvisionerStatusAlert.stories.tsx index 9d012e7c5c38a..1ff98d35b6eef 100644 --- a/site/src/modules/provisioners/ProvisionerStatusAlert.stories.tsx +++ b/site/src/modules/provisioners/ProvisionerStatusAlert.stories.tsx @@ -1,6 +1,6 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; import { MockTemplateVersion } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { AlertVariant } from "./ProvisionerAlert"; import { ProvisionerStatusAlert } from "./ProvisionerStatusAlert"; diff --git a/site/src/modules/resources/AgentApps/AgentApps.tsx b/site/src/modules/resources/AgentApps/AgentApps.tsx index 75793ef7a82c7..7f91f60f4efe8 100644 --- a/site/src/modules/resources/AgentApps/AgentApps.tsx +++ b/site/src/modules/resources/AgentApps/AgentApps.tsx @@ -1,5 +1,8 @@ -import type { WorkspaceApp } from "api/typesGenerated"; -import type { Workspace, WorkspaceAgent } from "api/typesGenerated"; +import type { + Workspace, + WorkspaceAgent, + WorkspaceApp, +} from "api/typesGenerated"; import { DropdownMenu, DropdownMenuContent, @@ -39,11 +42,9 @@ export const AgentApps: FC = ({ ) : ( - <> - {section.apps.map((app) => ( - - ))} - + section.apps.map((app) => ( + + )) ); }; @@ -68,7 +69,7 @@ type AgentAppSection = { export function organizeAgentApps( apps: readonly WorkspaceApp[], ): AgentAppSection[] { - let currentSection: AgentAppSection | undefined = undefined; + let currentSection: AgentAppSection | undefined; const appGroups: AgentAppSection[] = []; const groupsByName = new Map(); diff --git a/site/src/modules/resources/AgentDevcontainerCard.stories.tsx b/site/src/modules/resources/AgentDevcontainerCard.stories.tsx index c3e17d44eb0db..a06b4ba3ab8b4 100644 --- a/site/src/modules/resources/AgentDevcontainerCard.stories.tsx +++ b/site/src/modules/resources/AgentDevcontainerCard.stories.tsx @@ -1,5 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { getPreferredProxy } from "contexts/ProxyContext"; import { chromatic } from "testHelpers/chromatic"; import { MockListeningPortsResponse, @@ -18,6 +16,8 @@ import { withDashboardProvider, withProxyProvider, } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { getPreferredProxy } from "contexts/ProxyContext"; import { AgentDevcontainerCard } from "./AgentDevcontainerCard"; const meta: Meta = { diff --git a/site/src/modules/resources/AgentDevcontainerCard.tsx b/site/src/modules/resources/AgentDevcontainerCard.tsx index 4f1f75feff539..25579c3c7803a 100644 --- a/site/src/modules/resources/AgentDevcontainerCard.tsx +++ b/site/src/modules/resources/AgentDevcontainerCard.tsx @@ -296,28 +296,26 @@ export const AgentDevcontainerCard: FC = ({ {showSubAgentApps && (
- <> - {showVSCode && ( - - )} - {appSections.map((section, i) => ( - - ))} - + {showVSCode && ( + + )} + {appSections.map((section, i) => ( + + ))} {displayApps.includes("web_terminal") && ( = ({ return; } - let timeoutId: number | undefined = undefined; + let timeoutId: number | undefined; let activeSocket: OneWayWebSocket | null = null; let retries = 0; diff --git a/site/src/modules/resources/AgentOutdatedTooltip.tsx b/site/src/modules/resources/AgentOutdatedTooltip.tsx index c961def910589..03cf7ed6a7a3f 100644 --- a/site/src/modules/resources/AgentOutdatedTooltip.tsx +++ b/site/src/modules/resources/AgentOutdatedTooltip.tsx @@ -1,5 +1,6 @@ import { useTheme } from "@emotion/react"; import type { WorkspaceAgent } from "api/typesGenerated"; +import { PopoverTrigger } from "components/deprecated/Popover/Popover"; import { HelpTooltip, HelpTooltipAction, @@ -9,7 +10,6 @@ import { HelpTooltipTitle, } from "components/HelpTooltip/HelpTooltip"; import { Stack } from "components/Stack/Stack"; -import { PopoverTrigger } from "components/deprecated/Popover/Popover"; import { RotateCcwIcon } from "lucide-react"; import type { FC } from "react"; import { agentVersionStatus } from "../../utils/workspace"; diff --git a/site/src/modules/resources/AgentRow.stories.tsx b/site/src/modules/resources/AgentRow.stories.tsx index 6717c0e6043ab..abf4db3e295ae 100644 --- a/site/src/modules/resources/AgentRow.stories.tsx +++ b/site/src/modules/resources/AgentRow.stories.tsx @@ -1,7 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { API } from "api/api"; -import { getPreferredProxy } from "contexts/ProxyContext"; -import { spyOn, userEvent, within } from "storybook/test"; import { chromatic } from "testHelpers/chromatic"; import * as M from "testHelpers/entities"; import { @@ -9,6 +5,10 @@ import { withProxyProvider, withWebSocket, } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { API } from "api/api"; +import { getPreferredProxy } from "contexts/ProxyContext"; +import { spyOn, userEvent, within } from "storybook/test"; import { AgentRow } from "./AgentRow"; const defaultAgentMetadata = [ diff --git a/site/src/modules/resources/AgentRow.tsx b/site/src/modules/resources/AgentRow.tsx index 3cf757a15c2ab..495dd01f123f2 100644 --- a/site/src/modules/resources/AgentRow.tsx +++ b/site/src/modules/resources/AgentRow.tsx @@ -37,9 +37,9 @@ import { DownloadAgentLogsButton } from "./DownloadAgentLogsButton"; import { PortForwardButton } from "./PortForwardButton"; import { AgentSSHButton } from "./SSHButton/SSHButton"; import { TerminalLink } from "./TerminalLink/TerminalLink"; -import { VSCodeDesktopButton } from "./VSCodeDesktopButton/VSCodeDesktopButton"; import { useAgentContainers } from "./useAgentContainers"; import { useAgentLogs } from "./useAgentLogs"; +import { VSCodeDesktopButton } from "./VSCodeDesktopButton/VSCodeDesktopButton"; interface AgentRowProps { agent: WorkspaceAgent; @@ -335,7 +335,7 @@ export const AgentRow: FC = ({ Logs - +
)} diff --git a/site/src/modules/resources/AgentRowPreview.stories.tsx b/site/src/modules/resources/AgentRowPreview.stories.tsx index e27c4f7a55c6e..8cd4f6bd7b78d 100644 --- a/site/src/modules/resources/AgentRowPreview.stories.tsx +++ b/site/src/modules/resources/AgentRowPreview.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockWorkspaceAgent, MockWorkspaceApp } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { AgentRowPreview } from "./AgentRowPreview"; const meta: Meta = { diff --git a/site/src/modules/resources/AgentRowPreview.test.tsx b/site/src/modules/resources/AgentRowPreview.test.tsx index c1b876b72ef3b..23b34dc8c7fc8 100644 --- a/site/src/modules/resources/AgentRowPreview.test.tsx +++ b/site/src/modules/resources/AgentRowPreview.test.tsx @@ -1,11 +1,11 @@ +import { MockWorkspaceAgent } from "testHelpers/entities"; +import { renderComponent } from "testHelpers/renderHelpers"; import { screen } from "@testing-library/react"; import { type DisplayApp, DisplayApps, type WorkspaceAgent, } from "api/typesGenerated"; -import { MockWorkspaceAgent } from "testHelpers/entities"; -import { renderComponent } from "testHelpers/renderHelpers"; import { AgentRowPreview } from "./AgentRowPreview"; import { DisplayAppNameMap } from "./AppLink/AppLink"; diff --git a/site/src/modules/resources/AgentRowPreview.tsx b/site/src/modules/resources/AgentRowPreview.tsx index 70de1450322da..2df8b3a4d5460 100644 --- a/site/src/modules/resources/AgentRowPreview.tsx +++ b/site/src/modules/resources/AgentRowPreview.tsx @@ -93,10 +93,8 @@ export const AgentRowPreview: FC = ({ {/* We display all modules returned in agent.apps */} {agent.apps.map((app) => ( - <> - - {app.display_name} - + + {app.display_name} ))} {/* Additionally, we display any apps that are visible, e.g. diff --git a/site/src/modules/resources/AgentStatus.tsx b/site/src/modules/resources/AgentStatus.tsx index 7eb165d19f8c2..8f6b923e70d68 100644 --- a/site/src/modules/resources/AgentStatus.tsx +++ b/site/src/modules/resources/AgentStatus.tsx @@ -6,13 +6,13 @@ import type { WorkspaceAgentDevcontainer, } from "api/typesGenerated"; import { ChooseOne, Cond } from "components/Conditionals/ChooseOne"; +import { PopoverTrigger } from "components/deprecated/Popover/Popover"; import { HelpTooltip, HelpTooltipContent, HelpTooltipText, HelpTooltipTitle, } from "components/HelpTooltip/HelpTooltip"; -import { PopoverTrigger } from "components/deprecated/Popover/Popover"; import { TriangleAlertIcon } from "lucide-react"; import type { FC } from "react"; diff --git a/site/src/modules/resources/AppLink/AppLink.stories.tsx b/site/src/modules/resources/AppLink/AppLink.stories.tsx index 5ce9f6ff4ca1a..32e3ee47ebe40 100644 --- a/site/src/modules/resources/AppLink/AppLink.stories.tsx +++ b/site/src/modules/resources/AppLink/AppLink.stories.tsx @@ -1,5 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { getPreferredProxy } from "contexts/ProxyContext"; import { MockPrimaryWorkspaceProxy, MockWorkspace, @@ -8,6 +6,8 @@ import { MockWorkspaceProxies, } from "testHelpers/entities"; import { withGlobalSnackbar, withProxyProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { getPreferredProxy } from "contexts/ProxyContext"; import { AppLink } from "./AppLink"; const meta: Meta = { diff --git a/site/src/modules/resources/DownloadAgentLogsButton.stories.tsx b/site/src/modules/resources/DownloadAgentLogsButton.stories.tsx index e5627bac8dda1..bd3d823b7bc0d 100644 --- a/site/src/modules/resources/DownloadAgentLogsButton.stories.tsx +++ b/site/src/modules/resources/DownloadAgentLogsButton.stories.tsx @@ -1,15 +1,14 @@ +import { MockWorkspaceAgent } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { agentLogsKey } from "api/queries/workspaces"; import type { WorkspaceAgentLog } from "api/typesGenerated"; import { expect, fn, userEvent, waitFor, within } from "storybook/test"; -import { MockWorkspace, MockWorkspaceAgent } from "testHelpers/entities"; import { DownloadAgentLogsButton } from "./DownloadAgentLogsButton"; const meta: Meta = { title: "modules/resources/DownloadAgentLogsButton", component: DownloadAgentLogsButton, args: { - workspaceId: MockWorkspace.id, agent: MockWorkspaceAgent, }, parameters: { diff --git a/site/src/modules/resources/DownloadAgentLogsButton.tsx b/site/src/modules/resources/DownloadAgentLogsButton.tsx index fc7296b6c0ea0..7d27241f881df 100644 --- a/site/src/modules/resources/DownloadAgentLogsButton.tsx +++ b/site/src/modules/resources/DownloadAgentLogsButton.tsx @@ -8,13 +8,11 @@ import { type FC, useState } from "react"; import { useQueryClient } from "react-query"; type DownloadAgentLogsButtonProps = { - workspaceId: string; agent: Pick; download?: (file: Blob, filename: string) => void; }; export const DownloadAgentLogsButton: FC = ({ - workspaceId, agent, download = saveAs, }) => { diff --git a/site/src/modules/resources/PortForwardButton.stories.tsx b/site/src/modules/resources/PortForwardButton.stories.tsx index fbe1398fb69e7..daa7e2c4d78b8 100644 --- a/site/src/modules/resources/PortForwardButton.stories.tsx +++ b/site/src/modules/resources/PortForwardButton.stories.tsx @@ -1,5 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { userEvent, within } from "storybook/test"; import { MockListeningPortsResponse, MockSharedPortsResponse, @@ -8,6 +6,8 @@ import { MockWorkspaceAgent, } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { userEvent, within } from "storybook/test"; import { PortForwardButton } from "./PortForwardButton"; const meta: Meta = { diff --git a/site/src/modules/resources/PortForwardButton.tsx b/site/src/modules/resources/PortForwardButton.tsx index 52c46f151f522..665569904c870 100644 --- a/site/src/modules/resources/PortForwardButton.tsx +++ b/site/src/modules/resources/PortForwardButton.tsx @@ -26,6 +26,11 @@ import { WorkspaceAppSharingLevels, } from "api/typesGenerated"; import { Button } from "components/Button/Button"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "components/deprecated/Popover/Popover"; import { HelpTooltipLink, HelpTooltipText, @@ -38,11 +43,6 @@ import { TooltipProvider, TooltipTrigger, } from "components/Tooltip/Tooltip"; -import { - Popover, - PopoverContent, - PopoverTrigger, -} from "components/deprecated/Popover/Popover"; import { useFormik } from "formik"; import { type ClassName, useClassName } from "hooks/useClassName"; import { diff --git a/site/src/modules/resources/PortForwardPopoverView.stories.tsx b/site/src/modules/resources/PortForwardPopoverView.stories.tsx index fb5efc6855f81..e1663f1db4590 100644 --- a/site/src/modules/resources/PortForwardPopoverView.stories.tsx +++ b/site/src/modules/resources/PortForwardPopoverView.stories.tsx @@ -1,5 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { userEvent, within } from "storybook/test"; import { MockListeningPortsResponse, MockSharedPortsResponse, @@ -7,6 +5,8 @@ import { MockWorkspace, MockWorkspaceAgent, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { userEvent, within } from "storybook/test"; import { PortForwardPopoverView } from "./PortForwardButton"; const meta: Meta = { diff --git a/site/src/modules/resources/PortForwardPopoverView.test.tsx b/site/src/modules/resources/PortForwardPopoverView.test.tsx index 94b0ca73d2296..80df2581b0fb2 100644 --- a/site/src/modules/resources/PortForwardPopoverView.test.tsx +++ b/site/src/modules/resources/PortForwardPopoverView.test.tsx @@ -1,5 +1,3 @@ -import { screen } from "@testing-library/react"; -import { QueryClientProvider } from "react-query"; import { MockListeningPortsResponse, MockTemplate, @@ -10,6 +8,8 @@ import { createTestQueryClient, renderComponent, } from "testHelpers/renderHelpers"; +import { screen } from "@testing-library/react"; +import { QueryClientProvider } from "react-query"; import { PortForwardPopoverView } from "./PortForwardButton"; describe("Port Forward Popover View", () => { diff --git a/site/src/modules/resources/ResourceAvatar.stories.tsx b/site/src/modules/resources/ResourceAvatar.stories.tsx index a6f244a49d00f..8ca3000eac161 100644 --- a/site/src/modules/resources/ResourceAvatar.stories.tsx +++ b/site/src/modules/resources/ResourceAvatar.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockWorkspaceResource } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { ResourceAvatar } from "./ResourceAvatar"; const meta: Meta = { diff --git a/site/src/modules/resources/ResourceCard.stories.tsx b/site/src/modules/resources/ResourceCard.stories.tsx index 3eacd524aece9..c5885bebf79be 100644 --- a/site/src/modules/resources/ResourceCard.stories.tsx +++ b/site/src/modules/resources/ResourceCard.stories.tsx @@ -1,6 +1,6 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockWorkspaceResource } from "testHelpers/entities"; import { withProxyProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { AgentRowPreview } from "./AgentRowPreview"; import { ResourceCard } from "./ResourceCard"; diff --git a/site/src/modules/resources/ResourceCard.test.tsx b/site/src/modules/resources/ResourceCard.test.tsx index cca3f4288fb16..460caf51fbb33 100644 --- a/site/src/modules/resources/ResourceCard.test.tsx +++ b/site/src/modules/resources/ResourceCard.test.tsx @@ -1,7 +1,7 @@ -import { screen } from "@testing-library/react"; -import type { WorkspaceResourceMetadata } from "api/typesGenerated"; import { MockWorkspaceResource } from "testHelpers/entities"; import { renderComponent } from "testHelpers/renderHelpers"; +import { screen } from "@testing-library/react"; +import type { WorkspaceResourceMetadata } from "api/typesGenerated"; import { ResourceCard } from "./ResourceCard"; describe("Resource Card", () => { diff --git a/site/src/modules/resources/Resources.stories.tsx b/site/src/modules/resources/Resources.stories.tsx index 1e12c53a33855..0d8015f37e549 100644 --- a/site/src/modules/resources/Resources.stories.tsx +++ b/site/src/modules/resources/Resources.stories.tsx @@ -1,9 +1,9 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockWorkspaceResource, MockWorkspaceResourceMultipleAgents, } from "testHelpers/entities"; import { withProxyProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { AgentRowPreview } from "./AgentRowPreview"; import { Resources } from "./Resources"; diff --git a/site/src/modules/resources/SSHButton/SSHButton.stories.tsx b/site/src/modules/resources/SSHButton/SSHButton.stories.tsx index 2f53dd03a5af7..2f57bfe461a87 100644 --- a/site/src/modules/resources/SSHButton/SSHButton.stories.tsx +++ b/site/src/modules/resources/SSHButton/SSHButton.stories.tsx @@ -1,12 +1,12 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { API } from "api/api"; -import { spyOn, userEvent, within } from "storybook/test"; import { MockDeploymentSSH, MockWorkspace, MockWorkspaceAgent, } from "testHelpers/entities"; import { withDesktopViewport } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { API } from "api/api"; +import { spyOn, userEvent, within } from "storybook/test"; import { AgentSSHButton } from "./SSHButton"; const meta: Meta = { diff --git a/site/src/modules/resources/SSHButton/SSHButton.tsx b/site/src/modules/resources/SSHButton/SSHButton.tsx index a1ac3c6819361..80ad1fa445600 100644 --- a/site/src/modules/resources/SSHButton/SSHButton.tsx +++ b/site/src/modules/resources/SSHButton/SSHButton.tsx @@ -2,17 +2,17 @@ import type { Interpolation, Theme } from "@emotion/react"; import { deploymentSSHConfig } from "api/queries/deployment"; import { Button } from "components/Button/Button"; import { CodeExample } from "components/CodeExample/CodeExample"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "components/deprecated/Popover/Popover"; import { HelpTooltipLink, HelpTooltipLinksGroup, HelpTooltipText, } from "components/HelpTooltip/HelpTooltip"; import { Stack } from "components/Stack/Stack"; -import { - Popover, - PopoverContent, - PopoverTrigger, -} from "components/deprecated/Popover/Popover"; import { type ClassName, useClassName } from "hooks/useClassName"; import { ChevronDownIcon } from "lucide-react"; import type { FC } from "react"; diff --git a/site/src/modules/resources/SensitiveValue.tsx b/site/src/modules/resources/SensitiveValue.tsx index 626c7a8623291..b1ec1b4410e3e 100644 --- a/site/src/modules/resources/SensitiveValue.tsx +++ b/site/src/modules/resources/SensitiveValue.tsx @@ -1,4 +1,4 @@ -import { type Interpolation, type Theme, css } from "@emotion/react"; +import { css, type Interpolation, type Theme } from "@emotion/react"; import IconButton from "@mui/material/IconButton"; import Tooltip from "@mui/material/Tooltip"; import { CopyableValue } from "components/CopyableValue/CopyableValue"; diff --git a/site/src/modules/resources/TerminalLink/TerminalLink.stories.tsx b/site/src/modules/resources/TerminalLink/TerminalLink.stories.tsx index d5522e1daedaf..baef99efcb07e 100644 --- a/site/src/modules/resources/TerminalLink/TerminalLink.stories.tsx +++ b/site/src/modules/resources/TerminalLink/TerminalLink.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockWorkspace } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { TerminalLink } from "./TerminalLink"; const meta: Meta = { diff --git a/site/src/modules/resources/VSCodeDesktopButton/VSCodeDesktopButton.stories.tsx b/site/src/modules/resources/VSCodeDesktopButton/VSCodeDesktopButton.stories.tsx index 3555ac0ce582b..477a40d106242 100644 --- a/site/src/modules/resources/VSCodeDesktopButton/VSCodeDesktopButton.stories.tsx +++ b/site/src/modules/resources/VSCodeDesktopButton/VSCodeDesktopButton.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockWorkspace, MockWorkspaceAgent } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { VSCodeDesktopButton } from "./VSCodeDesktopButton"; const meta: Meta = { diff --git a/site/src/modules/resources/VSCodeDevContainerButton/VSCodeDevContainerButton.stories.tsx b/site/src/modules/resources/VSCodeDevContainerButton/VSCodeDevContainerButton.stories.tsx index f8ae3a284e67a..f6cfd0850d7ed 100644 --- a/site/src/modules/resources/VSCodeDevContainerButton/VSCodeDevContainerButton.stories.tsx +++ b/site/src/modules/resources/VSCodeDevContainerButton/VSCodeDevContainerButton.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockWorkspace, MockWorkspaceAgent } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { VSCodeDevContainerButton } from "./VSCodeDevContainerButton"; const meta: Meta = { diff --git a/site/src/modules/resources/useAgentContainers.test.tsx b/site/src/modules/resources/useAgentContainers.test.tsx index 363f8d93223c8..f00f7b242b6e3 100644 --- a/site/src/modules/resources/useAgentContainers.test.tsx +++ b/site/src/modules/resources/useAgentContainers.test.tsx @@ -1,17 +1,17 @@ +import { + MockWorkspaceAgent, + MockWorkspaceAgentDevcontainer, +} from "testHelpers/entities"; +import { createTestQueryClient } from "testHelpers/renderHelpers"; +import { server } from "testHelpers/server"; import { renderHook, waitFor } from "@testing-library/react"; import * as API from "api/api"; import type { WorkspaceAgentListContainersResponse } from "api/typesGenerated"; import * as GlobalSnackbar from "components/GlobalSnackbar/utils"; -import { http, HttpResponse } from "msw"; +import { HttpResponse, http } from "msw"; import type { FC, PropsWithChildren } from "react"; import { act } from "react"; import { QueryClientProvider } from "react-query"; -import { - MockWorkspaceAgent, - MockWorkspaceAgentDevcontainer, -} from "testHelpers/entities"; -import { createTestQueryClient } from "testHelpers/renderHelpers"; -import { server } from "testHelpers/server"; import type { OneWayWebSocket } from "utils/OneWayWebSocket"; import { useAgentContainers } from "./useAgentContainers"; diff --git a/site/src/modules/resources/useAgentLogs.test.ts b/site/src/modules/resources/useAgentLogs.test.ts index 186087c871299..c4943c6f9d50f 100644 --- a/site/src/modules/resources/useAgentLogs.test.ts +++ b/site/src/modules/resources/useAgentLogs.test.ts @@ -1,7 +1,7 @@ +import { MockWorkspaceAgent } from "testHelpers/entities"; import { renderHook, waitFor } from "@testing-library/react"; import type { WorkspaceAgentLog } from "api/typesGenerated"; import WS from "jest-websocket-mock"; -import { MockWorkspaceAgent } from "testHelpers/entities"; import { useAgentLogs } from "./useAgentLogs"; /** diff --git a/site/src/modules/tableFiltering/options.tsx b/site/src/modules/tableFiltering/options.tsx index 9bc55744edb54..7b6964b5cd851 100644 --- a/site/src/modules/tableFiltering/options.tsx +++ b/site/src/modules/tableFiltering/options.tsx @@ -9,15 +9,15 @@ */ import { API } from "api/api"; import { Avatar } from "components/Avatar/Avatar"; +import { + type UseFilterMenuOptions, + useFilterMenu, +} from "components/Filter/menu"; import { SelectFilter, type SelectFilterOption, SelectFilterSearch, } from "components/Filter/SelectFilter"; -import { - type UseFilterMenuOptions, - useFilterMenu, -} from "components/Filter/menu"; import type { FC } from "react"; // Organization helpers //////////////////////////////////////////////////////// diff --git a/site/src/modules/templates/TemplateExampleCard/TemplateExampleCard.stories.tsx b/site/src/modules/templates/TemplateExampleCard/TemplateExampleCard.stories.tsx index 8b235e2aa4641..775c82f806c37 100644 --- a/site/src/modules/templates/TemplateExampleCard/TemplateExampleCard.stories.tsx +++ b/site/src/modules/templates/TemplateExampleCard/TemplateExampleCard.stories.tsx @@ -1,9 +1,9 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; import { MockTemplateExample, MockTemplateExample2, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { TemplateExampleCard } from "./TemplateExampleCard"; const meta: Meta = { diff --git a/site/src/modules/templates/TemplateFiles/TemplateFileTree.stories.tsx b/site/src/modules/templates/TemplateFiles/TemplateFileTree.stories.tsx index bea0d1746b543..45191a2320a3f 100644 --- a/site/src/modules/templates/TemplateFiles/TemplateFileTree.stories.tsx +++ b/site/src/modules/templates/TemplateFiles/TemplateFileTree.stories.tsx @@ -1,6 +1,6 @@ +import { chromatic } from "testHelpers/chromatic"; import { useTheme } from "@emotion/react"; import type { Meta, StoryObj } from "@storybook/react-vite"; -import { chromatic } from "testHelpers/chromatic"; import type { FileTree } from "utils/filetree"; import { TemplateFileTree } from "./TemplateFileTree"; diff --git a/site/src/modules/templates/TemplateFiles/TemplateFiles.stories.tsx b/site/src/modules/templates/TemplateFiles/TemplateFiles.stories.tsx index e9fb48ca3fc1f..3a7adcfacf52c 100644 --- a/site/src/modules/templates/TemplateFiles/TemplateFiles.stories.tsx +++ b/site/src/modules/templates/TemplateFiles/TemplateFiles.stories.tsx @@ -1,6 +1,6 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { TemplateFiles } from "./TemplateFiles"; const exampleFiles = { diff --git a/site/src/modules/templates/TemplateResourcesTable/TemplateResourcesTable.stories.tsx b/site/src/modules/templates/TemplateResourcesTable/TemplateResourcesTable.stories.tsx index d2b74e4a3c733..9a0d1556e97ea 100644 --- a/site/src/modules/templates/TemplateResourcesTable/TemplateResourcesTable.stories.tsx +++ b/site/src/modules/templates/TemplateResourcesTable/TemplateResourcesTable.stories.tsx @@ -1,4 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockWorkspaceAgent, MockWorkspaceAgentConnecting, @@ -6,6 +5,7 @@ import { MockWorkspaceResource, MockWorkspaceVolumeResource, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { TemplateResourcesTable } from "./TemplateResourcesTable"; const meta: Meta = { diff --git a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.stories.tsx b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.stories.tsx index e961d3bbc1803..ac627c6130565 100644 --- a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.stories.tsx +++ b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockPreviewParameter } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { DynamicParameter } from "./DynamicParameter"; const meta: Meta = { diff --git a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.test.tsx b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.test.tsx index e3bfd8dc80635..716fd26df4474 100644 --- a/site/src/modules/workspaces/DynamicParameter/DynamicParameter.test.tsx +++ b/site/src/modules/workspaces/DynamicParameter/DynamicParameter.test.tsx @@ -1,7 +1,7 @@ +import { render } from "testHelpers/renderHelpers"; import { act, fireEvent, screen, waitFor } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import type { PreviewParameter } from "api/typesGenerated"; -import { render } from "testHelpers/renderHelpers"; import { DynamicParameter } from "./DynamicParameter"; const createMockParameter = ( diff --git a/site/src/modules/workspaces/WorkspaceAppStatus/WorkspaceAppStatus.stories.tsx b/site/src/modules/workspaces/WorkspaceAppStatus/WorkspaceAppStatus.stories.tsx index c2f7da9aa21e5..3fbfc819b4f0a 100644 --- a/site/src/modules/workspaces/WorkspaceAppStatus/WorkspaceAppStatus.stories.tsx +++ b/site/src/modules/workspaces/WorkspaceAppStatus/WorkspaceAppStatus.stories.tsx @@ -1,6 +1,6 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockWorkspaceAppStatus } from "testHelpers/entities"; import { withProxyProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { WorkspaceAppStatus } from "./WorkspaceAppStatus"; const meta: Meta = { diff --git a/site/src/modules/workspaces/WorkspaceBuildData/WorkspaceBuildData.stories.tsx b/site/src/modules/workspaces/WorkspaceBuildData/WorkspaceBuildData.stories.tsx index 66a5a26f4066e..ec984417e9140 100644 --- a/site/src/modules/workspaces/WorkspaceBuildData/WorkspaceBuildData.stories.tsx +++ b/site/src/modules/workspaces/WorkspaceBuildData/WorkspaceBuildData.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockWorkspaceBuild } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { WorkspaceBuildData } from "./WorkspaceBuildData"; const meta: Meta = { diff --git a/site/src/modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs.stories.tsx b/site/src/modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs.stories.tsx index ed8f9bdd35fab..55ccc6ff6e6d7 100644 --- a/site/src/modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs.stories.tsx +++ b/site/src/modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs.stories.tsx @@ -1,6 +1,6 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; import { MockWorkspaceBuildLogs } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { WorkspaceBuildLogs } from "./WorkspaceBuildLogs"; const meta: Meta = { diff --git a/site/src/modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs.tsx b/site/src/modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs.tsx index 20c929406d32c..161efe260ed96 100644 --- a/site/src/modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs.tsx +++ b/site/src/modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs.tsx @@ -54,7 +54,7 @@ export const WorkspaceBuildLogs: FC = ({ }) => { const theme = useTheme(); - const processedLogs = useMemo(() => { + const _processedLogs = useMemo(() => { const allLogs = logs || []; // Add synthetic overflow message if needed diff --git a/site/src/modules/workspaces/WorkspaceDormantBadge/WorkspaceDormantBadge.stories.tsx b/site/src/modules/workspaces/WorkspaceDormantBadge/WorkspaceDormantBadge.stories.tsx index 308b038f91d33..c7a159c0ce1f7 100644 --- a/site/src/modules/workspaces/WorkspaceDormantBadge/WorkspaceDormantBadge.stories.tsx +++ b/site/src/modules/workspaces/WorkspaceDormantBadge/WorkspaceDormantBadge.stories.tsx @@ -1,6 +1,6 @@ +import { MockDormantWorkspace } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { userEvent, within } from "storybook/test"; -import { MockDormantWorkspace } from "testHelpers/entities"; import { WorkspaceDormantBadge } from "./WorkspaceDormantBadge"; const meta: Meta = { diff --git a/site/src/modules/workspaces/WorkspaceMoreActions/ChangeWorkspaceVersionDialog.stories.tsx b/site/src/modules/workspaces/WorkspaceMoreActions/ChangeWorkspaceVersionDialog.stories.tsx index 7f2df8cd9c072..7ff35868d0e75 100644 --- a/site/src/modules/workspaces/WorkspaceMoreActions/ChangeWorkspaceVersionDialog.stories.tsx +++ b/site/src/modules/workspaces/WorkspaceMoreActions/ChangeWorkspaceVersionDialog.stories.tsx @@ -1,10 +1,10 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { templateVersionsQueryKey } from "api/queries/templates"; import { MockTemplateVersion, MockTemplateVersionWithMarkdownMessage, MockWorkspace, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { templateVersionsQueryKey } from "api/queries/templates"; import { ChangeWorkspaceVersionDialog } from "./ChangeWorkspaceVersionDialog"; const noMessage = { diff --git a/site/src/modules/workspaces/WorkspaceMoreActions/DownloadLogsDialog.stories.tsx b/site/src/modules/workspaces/WorkspaceMoreActions/DownloadLogsDialog.stories.tsx index 9e27d1800d511..447a812399024 100644 --- a/site/src/modules/workspaces/WorkspaceMoreActions/DownloadLogsDialog.stories.tsx +++ b/site/src/modules/workspaces/WorkspaceMoreActions/DownloadLogsDialog.stories.tsx @@ -1,8 +1,8 @@ +import { MockWorkspace, MockWorkspaceAgent } from "testHelpers/entities"; +import { withDesktopViewport } from "testHelpers/storybook"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { agentLogsKey, buildLogsKey } from "api/queries/workspaces"; import { expect, fn, userEvent, waitFor, within } from "storybook/test"; -import { MockWorkspace, MockWorkspaceAgent } from "testHelpers/entities"; -import { withDesktopViewport } from "testHelpers/storybook"; import { DownloadLogsDialog } from "./DownloadLogsDialog"; const meta: Meta = { diff --git a/site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceDeleteDialog.stories.tsx b/site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceDeleteDialog.stories.tsx index dfee8134af496..b5fcd44b7c9c8 100644 --- a/site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceDeleteDialog.stories.tsx +++ b/site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceDeleteDialog.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockFailedWorkspace, MockWorkspace } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { daysAgo } from "utils/time"; import { WorkspaceDeleteDialog } from "./WorkspaceDeleteDialog"; diff --git a/site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions.tsx b/site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions.tsx index 8e7b9e33b93d2..ca0e9803336e2 100644 --- a/site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions.tsx +++ b/site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions.tsx @@ -1,6 +1,5 @@ import { MissingBuildParameters, ParameterValidationError } from "api/api"; -import { isApiError } from "api/errors"; -import { type ApiError, getErrorMessage } from "api/errors"; +import { type ApiError, getErrorMessage, isApiError } from "api/errors"; import { changeVersion, deleteWorkspace, @@ -32,8 +31,8 @@ import { ChangeWorkspaceVersionDialog } from "./ChangeWorkspaceVersionDialog"; import { DownloadLogsDialog } from "./DownloadLogsDialog"; import { UpdateBuildParametersDialog } from "./UpdateBuildParametersDialog"; import { UpdateBuildParametersDialogExperimental } from "./UpdateBuildParametersDialogExperimental"; -import { WorkspaceDeleteDialog } from "./WorkspaceDeleteDialog"; import { useWorkspaceDuplication } from "./useWorkspaceDuplication"; +import { WorkspaceDeleteDialog } from "./WorkspaceDeleteDialog"; type WorkspaceMoreActionsProps = { workspace: Workspace; diff --git a/site/src/modules/workspaces/WorkspaceMoreActions/useWorkspaceDuplication.test.tsx b/site/src/modules/workspaces/WorkspaceMoreActions/useWorkspaceDuplication.test.tsx index 8e06e10136f92..d0e7af6d1aafd 100644 --- a/site/src/modules/workspaces/WorkspaceMoreActions/useWorkspaceDuplication.test.tsx +++ b/site/src/modules/workspaces/WorkspaceMoreActions/useWorkspaceDuplication.test.tsx @@ -1,10 +1,10 @@ -import { act, waitFor } from "@testing-library/react"; -import type { Workspace } from "api/typesGenerated"; import * as M from "testHelpers/entities"; import { type GetLocationSnapshot, renderHookWithAuth, } from "testHelpers/hooks"; +import { act, waitFor } from "@testing-library/react"; +import type { Workspace } from "api/typesGenerated"; import CreateWorkspacePage from "../../../pages/CreateWorkspacePage/CreateWorkspacePage"; import { useWorkspaceDuplication } from "./useWorkspaceDuplication"; diff --git a/site/src/modules/workspaces/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.stories.tsx b/site/src/modules/workspaces/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.stories.tsx index 92d1a8e30c899..fc0a28815752b 100644 --- a/site/src/modules/workspaces/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.stories.tsx +++ b/site/src/modules/workspaces/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.stories.tsx @@ -1,11 +1,11 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { expect, userEvent, waitFor, within } from "storybook/test"; import { MockTemplate, MockTemplateVersion, MockWorkspace, } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { expect, userEvent, waitFor, within } from "storybook/test"; import { WorkspaceOutdatedTooltip } from "./WorkspaceOutdatedTooltip"; const meta: Meta = { diff --git a/site/src/modules/workspaces/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.tsx b/site/src/modules/workspaces/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.tsx index b79183acd7471..e1e83d502781a 100644 --- a/site/src/modules/workspaces/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.tsx +++ b/site/src/modules/workspaces/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.tsx @@ -4,6 +4,7 @@ import Skeleton from "@mui/material/Skeleton"; import { getErrorDetail, getErrorMessage } from "api/errors"; import { templateVersion } from "api/queries/templates"; import type { Workspace } from "api/typesGenerated"; +import { usePopover } from "components/deprecated/Popover/Popover"; import { displayError } from "components/GlobalSnackbar/utils"; import { HelpTooltip, @@ -14,15 +15,13 @@ import { HelpTooltipTitle, HelpTooltipTrigger, } from "components/HelpTooltip/HelpTooltip"; -import { usePopover } from "components/deprecated/Popover/Popover"; -import { InfoIcon } from "lucide-react"; -import { RotateCcwIcon } from "lucide-react"; +import { InfoIcon, RotateCcwIcon } from "lucide-react"; import { linkToTemplate, useLinks } from "modules/navigation"; import type { FC } from "react"; import { useQuery } from "react-query"; import { - WorkspaceUpdateDialogs, useWorkspaceUpdate, + WorkspaceUpdateDialogs, } from "../WorkspaceUpdateDialogs"; interface TooltipProps { diff --git a/site/src/modules/workspaces/WorkspaceStatusIndicator/WorkspaceStatusIndicator.stories.tsx b/site/src/modules/workspaces/WorkspaceStatusIndicator/WorkspaceStatusIndicator.stories.tsx index 0b4bf3d9d881e..61dd592886c9d 100644 --- a/site/src/modules/workspaces/WorkspaceStatusIndicator/WorkspaceStatusIndicator.stories.tsx +++ b/site/src/modules/workspaces/WorkspaceStatusIndicator/WorkspaceStatusIndicator.stories.tsx @@ -1,6 +1,6 @@ +import { MockWorkspace } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import type { Workspace, WorkspaceStatus } from "api/typesGenerated"; -import { MockWorkspace } from "testHelpers/entities"; import { WorkspaceStatusIndicator } from "./WorkspaceStatusIndicator"; const meta: Meta = { diff --git a/site/src/modules/workspaces/WorkspaceStatusIndicator/WorkspaceStatusIndicator.tsx b/site/src/modules/workspaces/WorkspaceStatusIndicator/WorkspaceStatusIndicator.tsx index 972096314e1ee..c7e9e53ba8ff5 100644 --- a/site/src/modules/workspaces/WorkspaceStatusIndicator/WorkspaceStatusIndicator.tsx +++ b/site/src/modules/workspaces/WorkspaceStatusIndicator/WorkspaceStatusIndicator.tsx @@ -10,8 +10,8 @@ import { TooltipProvider, TooltipTrigger, } from "components/Tooltip/Tooltip"; -import type { FC } from "react"; import type React from "react"; +import type { FC } from "react"; import { type DisplayWorkspaceStatusType, getDisplayWorkspaceStatus, diff --git a/site/src/modules/workspaces/WorkspaceTiming/Chart/Bar.tsx b/site/src/modules/workspaces/WorkspaceTiming/Chart/Bar.tsx index 2c3a1bf28b152..b76aa11a9883a 100644 --- a/site/src/modules/workspaces/WorkspaceTiming/Chart/Bar.tsx +++ b/site/src/modules/workspaces/WorkspaceTiming/Chart/Bar.tsx @@ -1,5 +1,5 @@ import type { Interpolation, Theme } from "@emotion/react"; -import { type ButtonHTMLAttributes, type HTMLProps, forwardRef } from "react"; +import { type ButtonHTMLAttributes, forwardRef, type HTMLProps } from "react"; export type BarColors = { stroke: string; diff --git a/site/src/modules/workspaces/WorkspaceTiming/Chart/XAxis.tsx b/site/src/modules/workspaces/WorkspaceTiming/Chart/XAxis.tsx index 82c385e533802..c7409f5238522 100644 --- a/site/src/modules/workspaces/WorkspaceTiming/Chart/XAxis.tsx +++ b/site/src/modules/workspaces/WorkspaceTiming/Chart/XAxis.tsx @@ -93,7 +93,7 @@ export const XAxisRow: FC = ({ yAxisLabelId, ...htmlProps }) => { }; return ( -
{ for (const s of scales) { diff --git a/site/src/modules/workspaces/WorkspaceTiming/ResourcesChart.tsx b/site/src/modules/workspaces/WorkspaceTiming/ResourcesChart.tsx index 8384d8c60857b..f2757ee48e5c0 100644 --- a/site/src/modules/workspaces/WorkspaceTiming/ResourcesChart.tsx +++ b/site/src/modules/workspaces/WorkspaceTiming/ResourcesChart.tsx @@ -11,6 +11,14 @@ import { ChartToolbar, } from "./Chart/Chart"; import { Tooltip, TooltipLink, TooltipTitle } from "./Chart/Tooltip"; +import { + calcDuration, + calcOffset, + formatTime, + makeTicks, + mergeTimeRanges, + type TimeRange, +} from "./Chart/utils"; import { XAxis, XAxisRow, XAxisSection } from "./Chart/XAxis"; import { YAxis, @@ -19,14 +27,6 @@ import { YAxisLabels, YAxisSection, } from "./Chart/YAxis"; -import { - type TimeRange, - calcDuration, - calcOffset, - formatTime, - makeTicks, - mergeTimeRanges, -} from "./Chart/utils"; import type { Stage } from "./StagesChart"; type ResourceTiming = { diff --git a/site/src/modules/workspaces/WorkspaceTiming/ScriptsChart.tsx b/site/src/modules/workspaces/WorkspaceTiming/ScriptsChart.tsx index 3756589a8056a..d0f6ac6045383 100644 --- a/site/src/modules/workspaces/WorkspaceTiming/ScriptsChart.tsx +++ b/site/src/modules/workspaces/WorkspaceTiming/ScriptsChart.tsx @@ -11,6 +11,14 @@ import { ChartToolbar, } from "./Chart/Chart"; import { Tooltip, TooltipTitle } from "./Chart/Tooltip"; +import { + calcDuration, + calcOffset, + formatTime, + makeTicks, + mergeTimeRanges, + type TimeRange, +} from "./Chart/utils"; import { XAxis, XAxisRow, XAxisSection } from "./Chart/XAxis"; import { YAxis, @@ -19,14 +27,6 @@ import { YAxisLabels, YAxisSection, } from "./Chart/YAxis"; -import { - type TimeRange, - calcDuration, - calcOffset, - formatTime, - makeTicks, - mergeTimeRanges, -} from "./Chart/utils"; import type { Stage } from "./StagesChart"; type ScriptTiming = { diff --git a/site/src/modules/workspaces/WorkspaceTiming/StagesChart.tsx b/site/src/modules/workspaces/WorkspaceTiming/StagesChart.tsx index c9e9f8d3a71b2..103d4717f20c6 100644 --- a/site/src/modules/workspaces/WorkspaceTiming/StagesChart.tsx +++ b/site/src/modules/workspaces/WorkspaceTiming/StagesChart.tsx @@ -1,7 +1,6 @@ import type { Interpolation, Theme } from "@emotion/react"; import type { TimingStage } from "api/typesGenerated"; -import { CircleAlertIcon } from "lucide-react"; -import { InfoIcon } from "lucide-react"; +import { CircleAlertIcon, InfoIcon } from "lucide-react"; import type { FC } from "react"; import { Bar, ClickableBar } from "./Chart/Bar"; import { Blocks } from "./Chart/Blocks"; @@ -12,6 +11,14 @@ import { TooltipShortDescription, TooltipTitle, } from "./Chart/Tooltip"; +import { + calcDuration, + calcOffset, + formatTime, + makeTicks, + mergeTimeRanges, + type TimeRange, +} from "./Chart/utils"; import { XAxis, XAxisRow, XAxisSection } from "./Chart/XAxis"; import { YAxis, @@ -20,14 +27,6 @@ import { YAxisLabels, YAxisSection, } from "./Chart/YAxis"; -import { - type TimeRange, - calcDuration, - calcOffset, - formatTime, - makeTicks, - mergeTimeRanges, -} from "./Chart/utils"; export type Stage = { /** diff --git a/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx b/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx index 6b7de2d76bbf3..9c8ce12168631 100644 --- a/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx +++ b/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.stories.tsx @@ -1,8 +1,8 @@ +import { chromatic } from "testHelpers/chromatic"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, waitFor, within } from "storybook/test"; -import { chromatic } from "testHelpers/chromatic"; -import { WorkspaceTimings } from "./WorkspaceTimings"; import { WorkspaceTimingsResponse } from "./storybookData"; +import { WorkspaceTimings } from "./WorkspaceTimings"; const meta: Meta = { title: "modules/workspaces/WorkspaceTimings", diff --git a/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx b/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx index 8b3f42c7b93e3..847b531949c00 100644 --- a/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx +++ b/site/src/modules/workspaces/WorkspaceTiming/WorkspaceTimings.tsx @@ -12,18 +12,18 @@ import uniqBy from "lodash/uniqBy"; import { ChevronDownIcon, ChevronUpIcon } from "lucide-react"; import { type FC, useState } from "react"; import { - type TimeRange, calcDuration, formatTime, mergeTimeRanges, + type TimeRange, } from "./Chart/utils"; -import { ResourcesChart, isCoderResource } from "./ResourcesChart"; +import { isCoderResource, ResourcesChart } from "./ResourcesChart"; import { ScriptsChart } from "./ScriptsChart"; import { - type Stage, - StagesChart, agentStages, provisioningStages, + type Stage, + StagesChart, } from "./StagesChart"; type TimingView = @@ -218,7 +218,7 @@ const toTimeRange = (timing: { }; }; -const humanizeDuration = (durationMs: number): string => { +const _humanizeDuration = (durationMs: number): string => { const seconds = Math.floor(durationMs / 1000); const minutes = Math.floor(seconds / 60); const hours = Math.floor(minutes / 60); diff --git a/site/src/modules/workspaces/generateWorkspaceName.ts b/site/src/modules/workspaces/generateWorkspaceName.ts index 00a6542180963..6f62bc3017fee 100644 --- a/site/src/modules/workspaces/generateWorkspaceName.ts +++ b/site/src/modules/workspaces/generateWorkspaceName.ts @@ -1,7 +1,7 @@ import { - NumberDictionary, animals, colors, + NumberDictionary, uniqueNamesGenerator, } from "unique-names-generator"; diff --git a/site/src/pages/AuditPage/AuditFilter.tsx b/site/src/pages/AuditPage/AuditFilter.tsx index c625a7d60797e..973d2d7a8e7ba 100644 --- a/site/src/pages/AuditPage/AuditFilter.tsx +++ b/site/src/pages/AuditPage/AuditFilter.tsx @@ -1,14 +1,14 @@ import { AuditActions, ResourceTypes } from "api/typesGenerated"; import { Filter, MenuSkeleton, type useFilter } from "components/Filter/Filter"; +import { + type UseFilterMenuOptions, + useFilterMenu, +} from "components/Filter/menu"; import { SelectFilter, type SelectFilterOption, } from "components/Filter/SelectFilter"; import { type UserFilterMenu, UserMenu } from "components/Filter/UserFilter"; -import { - type UseFilterMenuOptions, - useFilterMenu, -} from "components/Filter/menu"; import capitalize from "lodash/capitalize"; import { type OrganizationsFilterMenu, diff --git a/site/src/pages/AuditPage/AuditLogRow/AuditLogDescription/AuditLogDescription.stories.tsx b/site/src/pages/AuditPage/AuditLogRow/AuditLogDescription/AuditLogDescription.stories.tsx index 8b5ecef7a09a1..8abf5442eb9cf 100644 --- a/site/src/pages/AuditPage/AuditLogRow/AuditLogDescription/AuditLogDescription.stories.tsx +++ b/site/src/pages/AuditPage/AuditLogRow/AuditLogDescription/AuditLogDescription.stories.tsx @@ -1,4 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockAuditLog, MockAuditLogRequestPasswordReset, @@ -7,6 +6,7 @@ import { MockAuditLogWithWorkspaceBuild, MockWorkspaceCreateAuditLogForDifferentOwner, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { AuditLogDescription } from "./AuditLogDescription"; const meta: Meta = { diff --git a/site/src/pages/AuditPage/AuditLogRow/AuditLogRow.stories.tsx b/site/src/pages/AuditPage/AuditLogRow/AuditLogRow.stories.tsx index cb059c7a1cbaf..03ccfcf38dbae 100644 --- a/site/src/pages/AuditPage/AuditLogRow/AuditLogRow.stories.tsx +++ b/site/src/pages/AuditPage/AuditLogRow/AuditLogRow.stories.tsx @@ -1,10 +1,3 @@ -import Table from "@mui/material/Table"; -import TableBody from "@mui/material/TableBody"; -import TableCell from "@mui/material/TableCell"; -import TableContainer from "@mui/material/TableContainer"; -import TableHead from "@mui/material/TableHead"; -import TableRow from "@mui/material/TableRow"; -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; import { MockAuditLog, @@ -15,6 +8,13 @@ import { MockAuditLogWithWorkspaceBuild, MockUserOwner, } from "testHelpers/entities"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableContainer from "@mui/material/TableContainer"; +import TableHead from "@mui/material/TableHead"; +import TableRow from "@mui/material/TableRow"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { AuditLogRow } from "./AuditLogRow"; const meta: Meta = { diff --git a/site/src/pages/AuditPage/AuditLogRow/AuditLogRow.tsx b/site/src/pages/AuditPage/AuditLogRow/AuditLogRow.tsx index b88ec000719c5..9661fbab59e75 100644 --- a/site/src/pages/AuditPage/AuditLogRow/AuditLogRow.tsx +++ b/site/src/pages/AuditPage/AuditLogRow/AuditLogRow.tsx @@ -9,8 +9,7 @@ import { DropdownArrow } from "components/DropdownArrow/DropdownArrow"; import { Stack } from "components/Stack/Stack"; import { StatusPill } from "components/StatusPill/StatusPill"; import { TimelineEntry } from "components/Timeline/TimelineEntry"; -import { InfoIcon } from "lucide-react"; -import { NetworkIcon } from "lucide-react"; +import { InfoIcon, NetworkIcon } from "lucide-react"; import { type FC, useState } from "react"; import { Link as RouterLink } from "react-router"; import userAgentParser from "ua-parser-js"; diff --git a/site/src/pages/AuditPage/AuditPage.test.tsx b/site/src/pages/AuditPage/AuditPage.test.tsx index 80f6e74ae1a26..ea7e5d9c44f06 100644 --- a/site/src/pages/AuditPage/AuditPage.test.tsx +++ b/site/src/pages/AuditPage/AuditPage.test.tsx @@ -1,9 +1,3 @@ -import { screen, waitFor } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; -import type { AuditLogsRequest } from "api/typesGenerated"; -import { DEFAULT_RECORDS_PER_PAGE } from "components/PaginationWidget/utils"; -import { http, HttpResponse } from "msw"; import { MockAuditLog, MockAuditLog2, @@ -14,6 +8,12 @@ import { waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; +import type { AuditLogsRequest } from "api/typesGenerated"; +import { DEFAULT_RECORDS_PER_PAGE } from "components/PaginationWidget/utils"; +import { HttpResponse, http } from "msw"; import * as CreateDayString from "utils/createDayString"; import AuditPage from "./AuditPage"; diff --git a/site/src/pages/AuditPage/AuditPageView.stories.tsx b/site/src/pages/AuditPage/AuditPageView.stories.tsx index 96ab7f7456a3c..29715db05280b 100644 --- a/site/src/pages/AuditPage/AuditPageView.stories.tsx +++ b/site/src/pages/AuditPage/AuditPageView.stories.tsx @@ -1,7 +1,14 @@ +import { chromaticWithTablet } from "testHelpers/chromatic"; +import { + MockAuditLog, + MockAuditLog2, + MockAuditLog3, + MockUserOwner, +} from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { - MockMenu, getDefaultFilterProps, + MockMenu, } from "components/Filter/storyHelpers"; import { mockInitialRenderResult, @@ -9,13 +16,6 @@ import { } from "components/PaginationWidget/PaginationContainer.mocks"; import type { UsePaginatedQueryResult } from "hooks/usePaginatedQuery"; import type { ComponentProps } from "react"; -import { chromaticWithTablet } from "testHelpers/chromatic"; -import { - MockAuditLog, - MockAuditLog2, - MockAuditLog3, - MockUserOwner, -} from "testHelpers/entities"; import { AuditPageView } from "./AuditPageView"; type FilterProps = ComponentProps["filterProps"]; diff --git a/site/src/pages/ConnectionLogPage/ConnectionLogFilter.tsx b/site/src/pages/ConnectionLogPage/ConnectionLogFilter.tsx index 9d049c4e6865b..fcf1efeb7dda0 100644 --- a/site/src/pages/ConnectionLogPage/ConnectionLogFilter.tsx +++ b/site/src/pages/ConnectionLogPage/ConnectionLogFilter.tsx @@ -1,14 +1,14 @@ import { ConnectionLogStatuses, ConnectionTypes } from "api/typesGenerated"; import { Filter, MenuSkeleton, type useFilter } from "components/Filter/Filter"; +import { + type UseFilterMenuOptions, + useFilterMenu, +} from "components/Filter/menu"; import { SelectFilter, type SelectFilterOption, } from "components/Filter/SelectFilter"; import { type UserFilterMenu, UserMenu } from "components/Filter/UserFilter"; -import { - type UseFilterMenuOptions, - useFilterMenu, -} from "components/Filter/menu"; import capitalize from "lodash/capitalize"; import { type OrganizationsFilterMenu, diff --git a/site/src/pages/ConnectionLogPage/ConnectionLogPage.test.tsx b/site/src/pages/ConnectionLogPage/ConnectionLogPage.test.tsx index 7beea3f033e30..2ce25e5a33369 100644 --- a/site/src/pages/ConnectionLogPage/ConnectionLogPage.test.tsx +++ b/site/src/pages/ConnectionLogPage/ConnectionLogPage.test.tsx @@ -1,8 +1,3 @@ -import { screen, waitFor } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; -import { DEFAULT_RECORDS_PER_PAGE } from "components/PaginationWidget/utils"; -import { http, HttpResponse } from "msw"; import { MockConnectedSSHConnectionLog, MockDisconnectedSSHConnectionLog, @@ -13,6 +8,11 @@ import { waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; +import { DEFAULT_RECORDS_PER_PAGE } from "components/PaginationWidget/utils"; +import { HttpResponse, http } from "msw"; import * as CreateDayString from "utils/createDayString"; import ConnectionLogPage from "./ConnectionLogPage"; diff --git a/site/src/pages/ConnectionLogPage/ConnectionLogPageView.stories.tsx b/site/src/pages/ConnectionLogPage/ConnectionLogPageView.stories.tsx index 444c38ab14287..7376a75daec4a 100644 --- a/site/src/pages/ConnectionLogPage/ConnectionLogPageView.stories.tsx +++ b/site/src/pages/ConnectionLogPage/ConnectionLogPageView.stories.tsx @@ -1,7 +1,13 @@ +import { chromaticWithTablet } from "testHelpers/chromatic"; +import { + MockConnectedSSHConnectionLog, + MockDisconnectedSSHConnectionLog, + MockUserOwner, +} from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { - MockMenu, getDefaultFilterProps, + MockMenu, } from "components/Filter/storyHelpers"; import { mockInitialRenderResult, @@ -9,12 +15,6 @@ import { } from "components/PaginationWidget/PaginationContainer.mocks"; import type { UsePaginatedQueryResult } from "hooks/usePaginatedQuery"; import type { ComponentProps } from "react"; -import { chromaticWithTablet } from "testHelpers/chromatic"; -import { - MockConnectedSSHConnectionLog, - MockDisconnectedSSHConnectionLog, - MockUserOwner, -} from "testHelpers/entities"; import { ConnectionLogPageView } from "./ConnectionLogPageView"; type FilterProps = ComponentProps["filterProps"]; diff --git a/site/src/pages/ConnectionLogPage/ConnectionLogRow/ConnectionLogDescription/ConnectionLogDescription.stories.tsx b/site/src/pages/ConnectionLogPage/ConnectionLogRow/ConnectionLogDescription/ConnectionLogDescription.stories.tsx index 004e466147c50..1354960c7894f 100644 --- a/site/src/pages/ConnectionLogPage/ConnectionLogRow/ConnectionLogDescription/ConnectionLogDescription.stories.tsx +++ b/site/src/pages/ConnectionLogPage/ConnectionLogRow/ConnectionLogDescription/ConnectionLogDescription.stories.tsx @@ -1,8 +1,8 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockConnectedSSHConnectionLog, MockWebConnectionLog, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { ConnectionLogDescription } from "./ConnectionLogDescription"; const meta: Meta = { diff --git a/site/src/pages/ConnectionLogPage/ConnectionLogRow/ConnectionLogRow.stories.tsx b/site/src/pages/ConnectionLogPage/ConnectionLogRow/ConnectionLogRow.stories.tsx index 73ed836f7d470..03833917e5bf4 100644 --- a/site/src/pages/ConnectionLogPage/ConnectionLogRow/ConnectionLogRow.stories.tsx +++ b/site/src/pages/ConnectionLogPage/ConnectionLogRow/ConnectionLogRow.stories.tsx @@ -1,11 +1,11 @@ -import TableContainer from "@mui/material/TableContainer"; -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { Table, TableBody } from "components/Table/Table"; import { MockConnectedSSHConnectionLog, MockDisconnectedSSHConnectionLog, MockWebConnectionLog, } from "testHelpers/entities"; +import TableContainer from "@mui/material/TableContainer"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { Table, TableBody } from "components/Table/Table"; import { ConnectionLogRow } from "./ConnectionLogRow"; const meta: Meta = { diff --git a/site/src/pages/ConnectionLogPage/ConnectionLogRow/ConnectionLogRow.tsx b/site/src/pages/ConnectionLogPage/ConnectionLogRow/ConnectionLogRow.tsx index b3936a3a2850b..f66afde786e5f 100644 --- a/site/src/pages/ConnectionLogPage/ConnectionLogRow/ConnectionLogRow.tsx +++ b/site/src/pages/ConnectionLogPage/ConnectionLogRow/ConnectionLogRow.tsx @@ -7,8 +7,7 @@ import { Avatar } from "components/Avatar/Avatar"; import { Stack } from "components/Stack/Stack"; import { StatusPill } from "components/StatusPill/StatusPill"; import { TimelineEntry } from "components/Timeline/TimelineEntry"; -import { InfoIcon } from "lucide-react"; -import { NetworkIcon } from "lucide-react"; +import { InfoIcon, NetworkIcon } from "lucide-react"; import type { FC } from "react"; import { Link as RouterLink } from "react-router"; import userAgentParser from "ua-parser-js"; diff --git a/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPage.test.tsx b/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPage.test.tsx index 0be2557856dbd..48f545ea1c3f2 100644 --- a/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPage.test.tsx +++ b/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPage.test.tsx @@ -1,13 +1,13 @@ -import { render, screen } from "@testing-library/react"; import { AppProviders } from "App"; -import { RequireAuth } from "contexts/auth/RequireAuth"; -import { http, HttpResponse } from "msw"; -import { RouterProvider, createMemoryRouter } from "react-router"; import { MockTemplateExample, MockTemplateExample2, } from "testHelpers/entities"; import { server } from "testHelpers/server"; +import { render, screen } from "@testing-library/react"; +import { RequireAuth } from "contexts/auth/RequireAuth"; +import { HttpResponse, http } from "msw"; +import { createMemoryRouter, RouterProvider } from "react-router"; import CreateTemplateGalleryPage from "./CreateTemplateGalleryPage"; test("displays the scratch template", async () => { diff --git a/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPageView.stories.tsx b/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPageView.stories.tsx index 2496f2a335465..b406daeb932d4 100644 --- a/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPageView.stories.tsx +++ b/site/src/pages/CreateTemplateGalleryPage/CreateTemplateGalleryPageView.stories.tsx @@ -1,10 +1,10 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; import { MockTemplateExample, MockTemplateExample2, mockApiError, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { getTemplatesByTag } from "utils/starterTemplates"; import { CreateTemplateGalleryPageView } from "./CreateTemplateGalleryPageView"; diff --git a/site/src/pages/CreateTemplatePage/BuildLogsDrawer.stories.tsx b/site/src/pages/CreateTemplatePage/BuildLogsDrawer.stories.tsx index 890bc4af96fb0..3febfa23d9314 100644 --- a/site/src/pages/CreateTemplatePage/BuildLogsDrawer.stories.tsx +++ b/site/src/pages/CreateTemplatePage/BuildLogsDrawer.stories.tsx @@ -1,11 +1,11 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { JobError } from "api/queries/templates"; import { MockProvisionerJob, MockTemplateVersion, MockWorkspaceBuildLogs, } from "testHelpers/entities"; import { withWebSocket } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { JobError } from "api/queries/templates"; import { BuildLogsDrawer } from "./BuildLogsDrawer"; const meta: Meta = { diff --git a/site/src/pages/CreateTemplatePage/CreateTemplateForm.stories.tsx b/site/src/pages/CreateTemplatePage/CreateTemplateForm.stories.tsx index a9dfd6de3b4c4..17167ef79fdb7 100644 --- a/site/src/pages/CreateTemplatePage/CreateTemplateForm.stories.tsx +++ b/site/src/pages/CreateTemplatePage/CreateTemplateForm.stories.tsx @@ -1,10 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { - getProvisionerDaemonsKey, - organizationsKey, -} from "api/queries/organizations"; -import { action } from "storybook/actions"; -import { screen, userEvent } from "storybook/test"; import { MockDefaultOrganization, MockOrganization2, @@ -16,6 +9,13 @@ import { MockTemplateVersionVariable4, MockTemplateVersionVariable5, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { + getProvisionerDaemonsKey, + organizationsKey, +} from "api/queries/organizations"; +import { action } from "storybook/actions"; +import { screen, userEvent } from "storybook/test"; import { CreateTemplateForm } from "./CreateTemplateForm"; const meta: Meta = { diff --git a/site/src/pages/CreateTemplatePage/CreateTemplateForm.tsx b/site/src/pages/CreateTemplatePage/CreateTemplateForm.tsx index ba5a76f6b4e2f..ddd967554134b 100644 --- a/site/src/pages/CreateTemplatePage/CreateTemplateForm.tsx +++ b/site/src/pages/CreateTemplatePage/CreateTemplateForm.tsx @@ -38,9 +38,9 @@ import { onChangeTrimmed, } from "utils/formUtils"; import { + sortedDays, type TemplateAutostartRequirementDaysValue, type TemplateAutostopRequirementDaysValue, - sortedDays, } from "utils/schedule"; import * as Yup from "yup"; import { TemplateUpload, type TemplateUploadProps } from "./TemplateUpload"; diff --git a/site/src/pages/CreateTemplatePage/CreateTemplatePage.test.tsx b/site/src/pages/CreateTemplatePage/CreateTemplatePage.test.tsx index 2677f67d8df10..e403eab8bcb24 100644 --- a/site/src/pages/CreateTemplatePage/CreateTemplatePage.test.tsx +++ b/site/src/pages/CreateTemplatePage/CreateTemplatePage.test.tsx @@ -1,6 +1,3 @@ -import { fireEvent, screen, waitFor, within } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; import { MockTemplate, MockTemplateExample, @@ -11,6 +8,9 @@ import { mockApiError, } from "testHelpers/entities"; import { renderWithAuth } from "testHelpers/renderHelpers"; +import { fireEvent, screen, waitFor, within } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; import CreateTemplatePage from "./CreateTemplatePage"; const renderPage = async (searchParams: URLSearchParams) => { diff --git a/site/src/pages/CreateTemplatePage/CreateTemplatePage.tsx b/site/src/pages/CreateTemplatePage/CreateTemplatePage.tsx index f4b37209609fc..af71c1686e40d 100644 --- a/site/src/pages/CreateTemplatePage/CreateTemplatePage.tsx +++ b/site/src/pages/CreateTemplatePage/CreateTemplatePage.tsx @@ -10,8 +10,8 @@ import { pageTitle } from "utils/page"; import { BuildLogsDrawer } from "./BuildLogsDrawer"; import { DuplicateTemplateView } from "./DuplicateTemplateView"; import { ImportStarterTemplateView } from "./ImportStarterTemplateView"; -import { UploadTemplateView } from "./UploadTemplateView"; import type { CreateTemplatePageViewProps } from "./types"; +import { UploadTemplateView } from "./UploadTemplateView"; const CreateTemplatePage: FC = () => { const navigate = useNavigate(); diff --git a/site/src/pages/CreateTokenPage/CreateTokenForm.tsx b/site/src/pages/CreateTokenPage/CreateTokenForm.tsx index 117994ff8489a..be8fd4614f20f 100644 --- a/site/src/pages/CreateTokenPage/CreateTokenForm.tsx +++ b/site/src/pages/CreateTokenPage/CreateTokenForm.tsx @@ -18,10 +18,10 @@ import { useNavigate } from "react-router"; import { getFormHelpers, onChangeTrimmed } from "utils/formUtils"; import { type CreateTokenData, - NANO_HOUR, customLifetimeDay, determineDefaultLtValue, filterByMaxTokenLifetime, + NANO_HOUR, } from "./utils"; dayjs.extend(utc); diff --git a/site/src/pages/CreateTokenPage/CreateTokenPage.test.tsx b/site/src/pages/CreateTokenPage/CreateTokenPage.test.tsx index 59bda3d458014..042b09bf24dff 100644 --- a/site/src/pages/CreateTokenPage/CreateTokenPage.test.tsx +++ b/site/src/pages/CreateTokenPage/CreateTokenPage.test.tsx @@ -1,10 +1,10 @@ -import { screen, within } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; import { renderWithAuth, waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; +import { screen, within } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; import CreateTokenPage from "./CreateTokenPage"; describe("TokenPage", () => { diff --git a/site/src/pages/CreateTokenPage/utils.test.tsx b/site/src/pages/CreateTokenPage/utils.test.tsx index a8cfbbd855e96..b09e72a812f7d 100644 --- a/site/src/pages/CreateTokenPage/utils.test.tsx +++ b/site/src/pages/CreateTokenPage/utils.test.tsx @@ -1,9 +1,9 @@ import { - type LifetimeDay, - NANO_HOUR, determineDefaultLtValue, filterByMaxTokenLifetime, + type LifetimeDay, lifetimeDayPresets, + NANO_HOUR, } from "./utils"; describe("unit/CreateTokenForm", () => { diff --git a/site/src/pages/CreateUserPage/CreateUserForm.stories.tsx b/site/src/pages/CreateUserPage/CreateUserForm.stories.tsx index 2ceb599529a3e..d112fbae47966 100644 --- a/site/src/pages/CreateUserPage/CreateUserForm.stories.tsx +++ b/site/src/pages/CreateUserPage/CreateUserForm.stories.tsx @@ -1,13 +1,13 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { organizationsKey } from "api/queries/organizations"; -import type { Organization } from "api/typesGenerated"; -import { action } from "storybook/actions"; -import { userEvent, within } from "storybook/test"; import { MockOrganization, MockOrganization2, mockApiError, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { organizationsKey } from "api/queries/organizations"; +import type { Organization } from "api/typesGenerated"; +import { action } from "storybook/actions"; +import { userEvent, within } from "storybook/test"; import { CreateUserForm } from "./CreateUserForm"; const meta: Meta = { diff --git a/site/src/pages/CreateUserPage/CreateUserPage.test.tsx b/site/src/pages/CreateUserPage/CreateUserPage.test.tsx index b1044630d798b..271376b3a28a8 100644 --- a/site/src/pages/CreateUserPage/CreateUserPage.test.tsx +++ b/site/src/pages/CreateUserPage/CreateUserPage.test.tsx @@ -1,9 +1,9 @@ -import { fireEvent, screen } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; import { renderWithAuth, waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; +import { fireEvent, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; import CreateUserPage from "./CreateUserPage"; import { Language as FormLanguage } from "./Language"; diff --git a/site/src/pages/CreateUserPage/CreateUserPage.tsx b/site/src/pages/CreateUserPage/CreateUserPage.tsx index 6444b6d1213b6..9c47a7c1f0337 100644 --- a/site/src/pages/CreateUserPage/CreateUserPage.tsx +++ b/site/src/pages/CreateUserPage/CreateUserPage.tsx @@ -9,7 +9,7 @@ import { useNavigate } from "react-router"; import { pageTitle } from "utils/page"; import { CreateUserForm } from "./CreateUserForm"; -const Language = { +const _Language = { unknownError: "Oops, an unknown error occurred.", }; diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.test.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.test.tsx index 868aa85c751bd..5199854cface6 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.test.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.test.tsx @@ -1,6 +1,3 @@ -import { fireEvent, screen, waitFor } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; import { MockTemplate, MockTemplateVersionExternalAuthGithub, @@ -18,6 +15,9 @@ import { renderWithAuth, waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; +import { fireEvent, screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; import CreateWorkspacePage from "./CreateWorkspacePage"; import { Language } from "./CreateWorkspacePageView"; diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageExperimental.test.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageExperimental.test.tsx index b20026472d701..b60c3ca3e7c7f 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageExperimental.test.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageExperimental.test.tsx @@ -1,7 +1,3 @@ -import { screen, waitFor } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; -import type { DynamicParametersResponse } from "api/typesGenerated"; import { MockDropdownParameter, MockDynamicParametersResponse, @@ -20,6 +16,10 @@ import { waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; import { createMockWebSocket } from "testHelpers/websockets"; +import { screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; +import type { DynamicParametersResponse } from "api/typesGenerated"; import CreateWorkspacePageExperimental from "./CreateWorkspacePageExperimental"; describe("CreateWorkspacePageExperimental", () => { diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx index 956ee72f2ee83..fca022c912982 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx @@ -1,8 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { within } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { action } from "storybook/actions"; -import { expect, screen, waitFor } from "storybook/test"; import { chromatic } from "testHelpers/chromatic"; import { MockTemplate, @@ -13,6 +8,11 @@ import { mockApiError, } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { within } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { action } from "storybook/actions"; +import { expect, screen, waitFor } from "storybook/test"; import { CreateWorkspacePageView } from "./CreateWorkspacePageView"; const meta: Meta = { @@ -205,11 +205,6 @@ export const PresetNoneSelected: Story = { args: { ...PresetsButNoneSelected.args, onSubmit: (request, owner) => { - // Assert that template_version_preset_id is not present in the request - console.assert( - !("template_version_preset_id" in request), - 'template_version_preset_id should not be present when "None" is selected', - ); action("onSubmit")(request, owner); }, }, diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.stories.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.stories.tsx index 214ac58d80697..5faf991b876f1 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.stories.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.stories.tsx @@ -1,7 +1,7 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { DetailedError } from "api/errors"; import { chromatic } from "testHelpers/chromatic"; import { MockTemplate, MockUserOwner } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { DetailedError } from "api/errors"; import { CreateWorkspacePageViewExperimental } from "./CreateWorkspacePageViewExperimental"; const meta: Meta = { diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx index 99876bfdb534d..cf1fd1746ce44 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx @@ -202,6 +202,36 @@ export const CreateWorkspacePageViewExperimental: FC< [], ); + // include any modified parameters and all touched parameters to the websocket request + const sendDynamicParamsRequest = useCallback( + ( + parameters: Array<{ parameter: PreviewParameter; value: string }>, + ownerId?: string, + ) => { + const formInputs: Record = {}; + const formParameters = form.values.rich_parameter_values ?? []; + + for (const { parameter, value } of parameters) { + formInputs[parameter.name] = value; + } + + for (const [fieldName, isTouched] of Object.entries(form.touched)) { + if ( + isTouched && + !parameters.some((p) => p.parameter.name === fieldName) + ) { + const param = formParameters.find((p) => p.name === fieldName); + if (param?.value) { + formInputs[fieldName] = param.value; + } + } + } + + sendMessage(formInputs, ownerId); + }, + [form.touched, form.values.rich_parameter_values, sendMessage], + ); + useEffect(() => { const selectedPresetOption = presetOptions[selectedPresetIndex]; let selectedPreset: TypesGen.Preset | undefined; @@ -274,35 +304,9 @@ export const CreateWorkspacePageViewExperimental: FC< form.setFieldTouched, parameters, form.values.rich_parameter_values, + sendDynamicParamsRequest, ]); - // include any modified parameters and all touched parameters to the websocket request - const sendDynamicParamsRequest = ( - parameters: Array<{ parameter: PreviewParameter; value: string }>, - ownerId?: string, - ) => { - const formInputs: Record = {}; - const formParameters = form.values.rich_parameter_values ?? []; - - for (const { parameter, value } of parameters) { - formInputs[parameter.name] = value; - } - - for (const [fieldName, isTouched] of Object.entries(form.touched)) { - if ( - isTouched && - !parameters.some((p) => p.parameter.name === fieldName) - ) { - const param = formParameters.find((p) => p.name === fieldName); - if (param?.value) { - formInputs[fieldName] = param.value; - } - } - } - - sendMessage(formInputs, ownerId); - }; - const handleOwnerChange = (user: TypesGen.User) => { setOwner(user); sendDynamicParamsRequest([], user.id); diff --git a/site/src/pages/CreateWorkspacePage/SelectedTemplate.stories.tsx b/site/src/pages/CreateWorkspacePage/SelectedTemplate.stories.tsx index 4e24d2d478c60..b4125ac999b2c 100644 --- a/site/src/pages/CreateWorkspacePage/SelectedTemplate.stories.tsx +++ b/site/src/pages/CreateWorkspacePage/SelectedTemplate.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockTemplate } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { SelectedTemplate } from "./SelectedTemplate"; const meta: Meta = { diff --git a/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AppearanceSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AppearanceSettingsPageView.tsx index 4988f95ea7cc2..010c7a999e98f 100644 --- a/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AppearanceSettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/AppearanceSettingsPage/AppearanceSettingsPageView.tsx @@ -7,17 +7,17 @@ import { PremiumBadge, } from "components/Badges/Badges"; import { Button } from "components/Button/Button"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "components/deprecated/Popover/Popover"; import { PopoverPaywall } from "components/Paywall/PopoverPaywall"; import { SettingsHeader, SettingsHeaderDescription, SettingsHeaderTitle, } from "components/SettingsHeader/SettingsHeader"; -import { - Popover, - PopoverContent, - PopoverTrigger, -} from "components/deprecated/Popover/Popover"; import { useFormik } from "formik"; import type { FC } from "react"; import { getFormHelpers } from "utils/formUtils"; diff --git a/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/ExportPolicyButton.stories.tsx b/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/ExportPolicyButton.stories.tsx index fea284ca4e666..8257e658ae8e8 100644 --- a/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/ExportPolicyButton.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/ExportPolicyButton.stories.tsx @@ -1,6 +1,6 @@ +import { MockOrganizationSyncSettings } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, fn, userEvent, waitFor, within } from "storybook/test"; -import { MockOrganizationSyncSettings } from "testHelpers/entities"; import { ExportPolicyButton } from "./ExportPolicyButton"; const meta: Meta = { diff --git a/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPage.tsx b/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPage.tsx index fcbbedc4f7265..38a76a5f3d43d 100644 --- a/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPage.tsx +++ b/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPage.tsx @@ -5,8 +5,7 @@ import { patchOrganizationSyncSettings, } from "api/queries/idpsync"; import { ChooseOne, Cond } from "components/Conditionals/ChooseOne"; -import { displayError } from "components/GlobalSnackbar/utils"; -import { displaySuccess } from "components/GlobalSnackbar/utils"; +import { displayError, displaySuccess } from "components/GlobalSnackbar/utils"; import { Link } from "components/Link/Link"; import { Loader } from "components/Loader/Loader"; import { Paywall } from "components/Paywall/Paywall"; diff --git a/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPageView.stories.tsx index b28cd7ef3a3d4..148e061028284 100644 --- a/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/IdpOrgSyncPageView.stories.tsx @@ -1,5 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { expect, userEvent, within } from "storybook/test"; import { MockOrganization, MockOrganization2, @@ -7,6 +5,8 @@ import { MockOrganizationSyncSettings2, MockOrganizationSyncSettingsEmpty, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { expect, userEvent, within } from "storybook/test"; import { IdpOrgSyncPageView } from "./IdpOrgSyncPageView"; const meta: Meta = { diff --git a/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/OrganizationPills.tsx b/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/OrganizationPills.tsx index 9e26368e9c2cb..030e3889cac41 100644 --- a/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/OrganizationPills.tsx +++ b/site/src/pages/DeploymentSettingsPage/IdpOrgSyncPage/OrganizationPills.tsx @@ -1,10 +1,10 @@ import { useTheme } from "@emotion/react"; -import { Pill } from "components/Pill/Pill"; import { Popover, PopoverContent, PopoverTrigger, } from "components/deprecated/Popover/Popover"; +import { Pill } from "components/Pill/Pill"; import type { FC } from "react"; import { cn } from "utils/cn"; import { isUUID } from "utils/uuid"; diff --git a/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/LicenseCard.test.tsx b/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/LicenseCard.test.tsx index 6a172b701e66d..59f1182ac7c00 100644 --- a/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/LicenseCard.test.tsx +++ b/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/LicenseCard.test.tsx @@ -1,6 +1,6 @@ -import { screen } from "@testing-library/react"; import { MockLicenseResponse } from "testHelpers/entities"; import { render } from "testHelpers/renderHelpers"; +import { screen } from "@testing-library/react"; import { LicenseCard } from "./LicenseCard"; describe("LicenseCard", () => { diff --git a/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/LicenseSeatConsumptionChart.tsx b/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/LicenseSeatConsumptionChart.tsx index 5175aab8e38c2..3f91f58b8d678 100644 --- a/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/LicenseSeatConsumptionChart.tsx +++ b/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/LicenseSeatConsumptionChart.tsx @@ -81,17 +81,18 @@ export const LicenseSeatConsumptionChart: FC<

  • -
    +
    + + Legend for active users in the chart + +
    The user was active at least once during the last 90 days.
  • -
    +
    + + Legend for license seat limit in the chart +
    Current license seat limit, or the maximum number of allowed @@ -179,7 +180,7 @@ export const LicenseSeatConsumptionChart: FC< const item = p[0]; return `${item.value} seats`; }} - formatter={(v, n, item) => { + formatter={(_v, _n, item) => { const date = new Date(item.payload.date); return date.toLocaleString(undefined, { month: "long", diff --git a/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/ManagedAgentsConsumption.tsx b/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/ManagedAgentsConsumption.tsx index e96d86b5a4c92..08da49c96b710 100644 --- a/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/ManagedAgentsConsumption.tsx +++ b/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/ManagedAgentsConsumption.tsx @@ -107,24 +107,22 @@ export const ManagedAgentsConsumption: FC = ({

    • -
      +
      + Legend for started workspaces +
      Amount of started workspaces with an AI agent.
    • -
      +
      + Legend for included allowance +
      Included allowance from your current license plan.
    • -
      +
      + + Legend for total limit in the chart +
      Total limit after which further AI workspace builds will be diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.stories.tsx b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.stories.tsx index 353a076463ad3..1b1a93605c676 100644 --- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.stories.tsx @@ -1,9 +1,9 @@ +import { MockNotificationTemplates } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { API } from "api/api"; import { selectTemplatesByGroup } from "api/queries/notifications"; import type { DeploymentValues } from "api/typesGenerated"; import { spyOn, userEvent, within } from "storybook/test"; -import { MockNotificationTemplates } from "testHelpers/entities"; import { NotificationEvents } from "./NotificationEvents"; import { baseMeta } from "./storybookUtils"; diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.tsx b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.tsx index 38c36fc52c044..32f4d56ed9909 100644 --- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.tsx +++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationEvents.tsx @@ -18,10 +18,10 @@ import { Alert } from "components/Alert/Alert"; import { displayError, displaySuccess } from "components/GlobalSnackbar/utils"; import { Stack } from "components/Stack/Stack"; import { - type NotificationMethod, castNotificationMethod, methodIcons, methodLabels, + type NotificationMethod, } from "modules/notifications/utils"; import { type FC, Fragment } from "react"; import { useMutation, useQueryClient } from "react-query"; diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.stories.tsx b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.stories.tsx index 538e3e80d93a4..e35348e027e56 100644 --- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.stories.tsx @@ -1,13 +1,13 @@ +import { + MockNotificationMethodsResponse, + MockNotificationTemplates, +} from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { notificationDispatchMethodsKey, systemNotificationTemplatesKey, } from "api/queries/notifications"; import { userEvent, within } from "storybook/test"; -import { - MockNotificationMethodsResponse, - MockNotificationTemplates, -} from "testHelpers/entities"; import NotificationsPage from "./NotificationsPage"; import { baseMeta } from "./storybookUtils"; diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/Troubleshooting.stories.tsx b/site/src/pages/DeploymentSettingsPage/NotificationsPage/Troubleshooting.stories.tsx index 4acd43e8064a7..a2afce8d7f900 100644 --- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/Troubleshooting.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/Troubleshooting.stories.tsx @@ -1,8 +1,8 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { API } from "api/api"; import { spyOn, userEvent, within } from "storybook/test"; -import { Troubleshooting } from "./Troubleshooting"; import { baseMeta } from "./storybookUtils"; +import { Troubleshooting } from "./Troubleshooting"; const meta: Meta = { title: "pages/DeploymentSettingsPage/NotificationsPage/Troubleshooting", diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/storybookUtils.ts b/site/src/pages/DeploymentSettingsPage/NotificationsPage/storybookUtils.ts index bf4845a47e904..b1c61bc95eae1 100644 --- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/storybookUtils.ts +++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/storybookUtils.ts @@ -1,9 +1,3 @@ -import type { Meta } from "@storybook/react-vite"; -import { - notificationDispatchMethodsKey, - systemNotificationTemplatesKey, -} from "api/queries/notifications"; -import type { DeploymentValues, SerpentOption } from "api/typesGenerated"; import { MockNotificationMethodsResponse, MockNotificationTemplates, @@ -15,6 +9,12 @@ import { withGlobalSnackbar, withOrganizationSettingsProvider, } from "testHelpers/storybook"; +import type { Meta } from "@storybook/react-vite"; +import { + notificationDispatchMethodsKey, + systemNotificationTemplatesKey, +} from "api/queries/notifications"; +import type { DeploymentValues, SerpentOption } from "api/typesGenerated"; import type NotificationsPage from "./NotificationsPage"; // Extracted from a real API response diff --git a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/CreateOAuth2AppPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/CreateOAuth2AppPageView.stories.tsx index d39cf5c4c442c..f97754143b61b 100644 --- a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/CreateOAuth2AppPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/CreateOAuth2AppPageView.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { mockApiError } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { CreateOAuth2AppPageView } from "./CreateOAuth2AppPageView"; const meta: Meta = { diff --git a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.stories.tsx index 923e482e06c70..e5ac1f394649e 100644 --- a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.stories.tsx @@ -1,9 +1,9 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockOAuth2ProviderAppSecrets, MockOAuth2ProviderApps, mockApiError, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { EditOAuth2AppPageView } from "./EditOAuth2AppPageView"; const meta: Meta = { diff --git a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.tsx b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.tsx index 36aebfb57a5bd..8b18d462e794c 100644 --- a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.tsx @@ -23,8 +23,7 @@ import { import { Spinner } from "components/Spinner/Spinner"; import { Stack } from "components/Stack/Stack"; import { TableLoader } from "components/TableLoader/TableLoader"; -import { CopyIcon } from "lucide-react"; -import { ChevronLeftIcon } from "lucide-react"; +import { ChevronLeftIcon, CopyIcon } from "lucide-react"; import { type FC, useState } from "react"; import { Link as RouterLink, useSearchParams } from "react-router"; import { createDayString } from "utils/createDayString"; diff --git a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.stories.tsx index 2aa01386b5ee9..e399044ee8236 100644 --- a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockOAuth2ProviderApps } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import OAuth2AppsSettingsPageView from "./OAuth2AppsSettingsPageView"; const meta: Meta = { diff --git a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.tsx index 71a914b3d1378..55ee649353158 100644 --- a/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPageView.tsx @@ -93,7 +93,7 @@ type OAuth2AppRowProps = { }; const OAuth2AppRow: FC = ({ app }) => { - const theme = useTheme(); + const _theme = useTheme(); const navigate = useNavigate(); const clickableProps = useClickableTableRow({ onClick: () => navigate(`/deployment/oauth2-provider/apps/${app.id}`), diff --git a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx index 54fbdc67c0b2b..cd152293e930b 100644 --- a/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPageView.tsx @@ -4,6 +4,11 @@ import { EnterpriseBadge, PremiumBadge, } from "components/Badges/Badges"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "components/deprecated/Popover/Popover"; import { PopoverPaywall } from "components/Paywall/PopoverPaywall"; import { SettingsHeader, @@ -12,11 +17,6 @@ import { SettingsHeaderTitle, } from "components/SettingsHeader/SettingsHeader"; import { Stack } from "components/Stack/Stack"; -import { - Popover, - PopoverContent, - PopoverTrigger, -} from "components/deprecated/Popover/Popover"; import type { FC } from "react"; import { deploymentGroupHasParent } from "utils/deployOptions"; import { docs } from "utils/docs"; @@ -32,68 +32,64 @@ export const ObservabilitySettingsPageView: FC< ObservabilitySettingsPageViewProps > = ({ options, featureAuditLogEnabled, isPremium }) => { return ( - <> - -
      - - Observability - + +
      + + Observability + - - } - > - - Audit Logging - - - Allow auditors to monitor user operations in your deployment. - - + + } + > + + Audit Logging + + + Allow auditors to monitor user operations in your deployment. + + - - - {featureAuditLogEnabled && !isPremium ? ( - - ) : ( - - - - - - )} + + + {featureAuditLogEnabled && !isPremium ? ( + + ) : ( + + + + + + )} - - - - - -
      + + + + + +
      -
      - - - Monitoring - - - Monitoring your Coder application with logs and metrics. - - +
      + + + Monitoring + + + Monitoring your Coder application with logs and metrics. + + - - deploymentGroupHasParent(o.group, "Introspection"), - )} - /> -
      - - + + deploymentGroupHasParent(o.group, "Introspection"), + )} + /> +
      +
      ); }; diff --git a/site/src/pages/DeploymentSettingsPage/Option.tsx b/site/src/pages/DeploymentSettingsPage/Option.tsx index a52db293610d7..3f2d848509a46 100644 --- a/site/src/pages/DeploymentSettingsPage/Option.tsx +++ b/site/src/pages/DeploymentSettingsPage/Option.tsx @@ -1,4 +1,4 @@ -import { type Interpolation, type Theme, css, useTheme } from "@emotion/react"; +import { css, type Interpolation, type Theme, useTheme } from "@emotion/react"; import BuildCircleOutlinedIcon from "@mui/icons-material/BuildCircleOutlined"; import { DisabledBadge, EnabledBadge } from "components/Badges/Badges"; import type { FC, HTMLAttributes, PropsWithChildren } from "react"; diff --git a/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.stories.tsx b/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.stories.tsx index 7c770aca02e9a..b77d69a485ef3 100644 --- a/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/OverviewPage/OverviewPageView.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockDeploymentDAUResponse } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { OverviewPageView } from "./OverviewPageView"; const meta: Meta = { diff --git a/site/src/pages/DeploymentSettingsPage/OverviewPage/UserEngagementChart.tsx b/site/src/pages/DeploymentSettingsPage/OverviewPage/UserEngagementChart.tsx index ae2691c8bf26f..6605f5e60af80 100644 --- a/site/src/pages/DeploymentSettingsPage/OverviewPage/UserEngagementChart.tsx +++ b/site/src/pages/DeploymentSettingsPage/OverviewPage/UserEngagementChart.tsx @@ -130,7 +130,7 @@ export const UserEngagementChart: FC = ({ data }) => { const item = p[0]; return `${item.value} users`; }} - formatter={(v, n, item) => { + formatter={(_v, _n, item) => { const date = new Date(item.payload.date); return date.toLocaleString(undefined, { month: "long", diff --git a/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx b/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx index 043206bea3388..7b50eb486bf56 100644 --- a/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx +++ b/site/src/pages/DeploymentSettingsPage/UserAuthSettingsPage/UserAuthSettingsPageView.tsx @@ -29,66 +29,62 @@ export const UserAuthSettingsPageView = ({ ); return ( - <> - -
      - - User Authentication - + +
      + + User Authentication + - - } - > - - Login with OpenID Connect - - - Set up authentication to login with OpenID Connect. - - + + } + > + + Login with OpenID Connect + + + Set up authentication to login with OpenID Connect. + + - {oidcEnabled ? : } + {oidcEnabled ? : } - {oidcEnabled && ( - - deploymentGroupHasParent(o.group, "OIDC"), - )} - /> - )} -
      + {oidcEnabled && ( + + deploymentGroupHasParent(o.group, "OIDC"), + )} + /> + )} +
      -
      - - } - > - - Login with GitHub - - - Set up authentication to login with GitHub. - - +
      + + } + > + + Login with GitHub + + + Set up authentication to login with GitHub. + + - - {githubEnabled ? : } - + {githubEnabled ? : } - {githubEnabled && ( - - deploymentGroupHasParent(o.group, "GitHub"), - )} - /> - )} -
      - - + {githubEnabled && ( + + deploymentGroupHasParent(o.group, "GitHub"), + )} + /> + )} +
      +
      ); }; diff --git a/site/src/pages/ExternalAuthPage/ExternalAuthPageView.tsx b/site/src/pages/ExternalAuthPage/ExternalAuthPageView.tsx index 639fc4a4d0bdd..f99328ad72cf3 100644 --- a/site/src/pages/ExternalAuthPage/ExternalAuthPageView.tsx +++ b/site/src/pages/ExternalAuthPage/ExternalAuthPageView.tsx @@ -8,8 +8,7 @@ import { Avatar } from "components/Avatar/Avatar"; import { GitDeviceAuth } from "components/GitDeviceAuth/GitDeviceAuth"; import { SignInLayout } from "components/SignInLayout/SignInLayout"; import { Welcome } from "components/Welcome/Welcome"; -import { ExternalLinkIcon } from "lucide-react"; -import { RotateCwIcon } from "lucide-react"; +import { ExternalLinkIcon, RotateCwIcon } from "lucide-react"; import type { FC, ReactNode } from "react"; interface ExternalAuthPageViewProps { diff --git a/site/src/pages/GroupsPage/CreateGroupPageView.stories.tsx b/site/src/pages/GroupsPage/CreateGroupPageView.stories.tsx index 5d71884a57038..fe73334930652 100644 --- a/site/src/pages/GroupsPage/CreateGroupPageView.stories.tsx +++ b/site/src/pages/GroupsPage/CreateGroupPageView.stories.tsx @@ -1,6 +1,6 @@ +import { mockApiError } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { userEvent, within } from "storybook/test"; -import { mockApiError } from "testHelpers/entities"; import { CreateGroupPageView } from "./CreateGroupPageView"; const meta: Meta = { diff --git a/site/src/pages/GroupsPage/GroupPage.stories.tsx b/site/src/pages/GroupsPage/GroupPage.stories.tsx index d834caee90630..4367461fcdc99 100644 --- a/site/src/pages/GroupsPage/GroupPage.stories.tsx +++ b/site/src/pages/GroupsPage/GroupPage.stories.tsx @@ -1,15 +1,15 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { API } from "api/api"; -import { getGroupQueryKey, groupPermissionsKey } from "api/queries/groups"; -import { organizationMembersKey } from "api/queries/organizations"; -import { reactRouterParameters } from "storybook-addon-remix-react-router"; -import { spyOn, userEvent, within } from "storybook/test"; import { MockDefaultOrganization, MockGroup, MockOrganizationMember, MockOrganizationMember2, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { API } from "api/api"; +import { getGroupQueryKey, groupPermissionsKey } from "api/queries/groups"; +import { organizationMembersKey } from "api/queries/organizations"; +import { spyOn, userEvent, within } from "storybook/test"; +import { reactRouterParameters } from "storybook-addon-remix-react-router"; import GroupPage from "./GroupPage"; const meta: Meta = { diff --git a/site/src/pages/GroupsPage/GroupPage.tsx b/site/src/pages/GroupsPage/GroupPage.tsx index f2a8470b61e33..76d18f46033b8 100644 --- a/site/src/pages/GroupsPage/GroupPage.tsx +++ b/site/src/pages/GroupsPage/GroupPage.tsx @@ -48,9 +48,12 @@ import { TableToolbar, } from "components/TableToolbar/TableToolbar"; import { MemberAutocomplete } from "components/UserAutocomplete/UserAutocomplete"; -import { UserPlusIcon } from "lucide-react"; -import { SettingsIcon } from "lucide-react"; -import { EllipsisVertical, TrashIcon } from "lucide-react"; +import { + EllipsisVertical, + SettingsIcon, + TrashIcon, + UserPlusIcon, +} from "lucide-react"; import { type FC, useState } from "react"; import { Helmet } from "react-helmet-async"; import { useMutation, useQuery, useQueryClient } from "react-query"; diff --git a/site/src/pages/GroupsPage/GroupSettingsPageView.stories.tsx b/site/src/pages/GroupsPage/GroupSettingsPageView.stories.tsx index 4673e81a6e27e..fa8a0dc459381 100644 --- a/site/src/pages/GroupsPage/GroupSettingsPageView.stories.tsx +++ b/site/src/pages/GroupsPage/GroupSettingsPageView.stories.tsx @@ -1,6 +1,6 @@ +import { MockGroup } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { action } from "storybook/actions"; -import { MockGroup } from "testHelpers/entities"; import GroupSettingsPageView from "./GroupSettingsPageView"; const meta: Meta = { diff --git a/site/src/pages/GroupsPage/GroupsPageProvider.tsx b/site/src/pages/GroupsPage/GroupsPageProvider.tsx index 09b59e0a36719..83c11c4ae9c00 100644 --- a/site/src/pages/GroupsPage/GroupsPageProvider.tsx +++ b/site/src/pages/GroupsPage/GroupsPageProvider.tsx @@ -1,6 +1,6 @@ import type { Organization } from "api/typesGenerated"; import { useDashboard } from "modules/dashboard/useDashboard"; -import { type FC, createContext, useContext } from "react"; +import { createContext, type FC, useContext } from "react"; import { Navigate, Outlet, useParams } from "react-router"; const GroupsPageContext = createContext( diff --git a/site/src/pages/GroupsPage/GroupsPageView.stories.tsx b/site/src/pages/GroupsPage/GroupsPageView.stories.tsx index 47c7833a285f7..2f2f659680380 100644 --- a/site/src/pages/GroupsPage/GroupsPageView.stories.tsx +++ b/site/src/pages/GroupsPage/GroupsPageView.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockGroup } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { GroupsPageView } from "./GroupsPageView"; const meta: Meta = { diff --git a/site/src/pages/GroupsPage/GroupsPageView.tsx b/site/src/pages/GroupsPage/GroupsPageView.tsx index d8de2507d19d7..1eb3f6b809648 100644 --- a/site/src/pages/GroupsPage/GroupsPageView.tsx +++ b/site/src/pages/GroupsPage/GroupsPageView.tsx @@ -42,66 +42,64 @@ export const GroupsPageView: FC = ({ const isEmpty = Boolean(groups && groups.length === 0); return ( - <> - - - - - - - - - Name - Users - - - - - - - - + + + + + +
      + + + Name + Users + + + + + + + + - - - - - - - Create group - - - ) - } - /> - - - + + + + + + + Create group + + + ) + } + /> + + + - - {groups?.map((group) => ( - - ))} - - - -
      -
      -
      - + + {groups?.map((group) => ( + + ))} + + + + + + ); }; diff --git a/site/src/pages/HealthPage/AccessURLPage.stories.tsx b/site/src/pages/HealthPage/AccessURLPage.stories.tsx index bd0188beb4a5e..0a620cb9fcf67 100644 --- a/site/src/pages/HealthPage/AccessURLPage.stories.tsx +++ b/site/src/pages/HealthPage/AccessURLPage.stories.tsx @@ -1,7 +1,7 @@ +import { MockHealth } from "testHelpers/entities"; import type { StoryObj } from "@storybook/react-vite"; import { HEALTH_QUERY_KEY } from "api/queries/debug"; import type { HealthcheckReport } from "api/typesGenerated"; -import { MockHealth } from "testHelpers/entities"; import AccessURLPage from "./AccessURLPage"; import { generateMeta } from "./storybook"; diff --git a/site/src/pages/HealthPage/Content.tsx b/site/src/pages/HealthPage/Content.tsx index 74cbc9a5b87c1..b3e39343c1e02 100644 --- a/site/src/pages/HealthPage/Content.tsx +++ b/site/src/pages/HealthPage/Content.tsx @@ -2,15 +2,18 @@ import { css } from "@emotion/css"; import { useTheme } from "@emotion/react"; import Link from "@mui/material/Link"; import type { HealthCode, HealthSeverity } from "api/typesGenerated"; -import { CircleAlertIcon } from "lucide-react"; -import { CircleCheckIcon, CircleMinusIcon } from "lucide-react"; +import { + CircleAlertIcon, + CircleCheckIcon, + CircleMinusIcon, +} from "lucide-react"; import { type ComponentProps, + cloneElement, type FC, + forwardRef, type HTMLAttributes, type ReactElement, - cloneElement, - forwardRef, } from "react"; import { docs } from "utils/docs"; import { healthyColor } from "./healthyColor"; diff --git a/site/src/pages/HealthPage/DERPPage.tsx b/site/src/pages/HealthPage/DERPPage.tsx index b2fdcd698fef1..08b2a121b445f 100644 --- a/site/src/pages/HealthPage/DERPPage.tsx +++ b/site/src/pages/HealthPage/DERPPage.tsx @@ -2,9 +2,9 @@ import { useTheme } from "@emotion/react"; import LocationOnOutlined from "@mui/icons-material/LocationOnOutlined"; import Button from "@mui/material/Button"; import type { + HealthcheckReport, HealthMessage, HealthSeverity, - HealthcheckReport, NetcheckReport, } from "api/typesGenerated"; import { Alert } from "components/Alert/Alert"; diff --git a/site/src/pages/HealthPage/DERPRegionPage.stories.tsx b/site/src/pages/HealthPage/DERPRegionPage.stories.tsx index cffe0d411e0ba..d7bbe71d28c1c 100644 --- a/site/src/pages/HealthPage/DERPRegionPage.stories.tsx +++ b/site/src/pages/HealthPage/DERPRegionPage.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockHealth } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import DERPRegionPage from "./DERPRegionPage"; import { generateMeta } from "./storybook"; diff --git a/site/src/pages/HealthPage/DERPRegionPage.tsx b/site/src/pages/HealthPage/DERPRegionPage.tsx index 7c84272319d26..1c81196412795 100644 --- a/site/src/pages/HealthPage/DERPRegionPage.tsx +++ b/site/src/pages/HealthPage/DERPRegionPage.tsx @@ -3,9 +3,9 @@ import Tooltip from "@mui/material/Tooltip"; import type { DERPNodeReport, DERPRegionReport, + HealthcheckReport, HealthMessage, HealthSeverity, - HealthcheckReport, } from "api/typesGenerated"; import { Alert } from "components/Alert/Alert"; import { ChevronLeftIcon, CodeIcon, HashIcon } from "lucide-react"; diff --git a/site/src/pages/HealthPage/WebsocketPage.stories.tsx b/site/src/pages/HealthPage/WebsocketPage.stories.tsx index 0ac53cbce57f2..73b4d5ea241f8 100644 --- a/site/src/pages/HealthPage/WebsocketPage.stories.tsx +++ b/site/src/pages/HealthPage/WebsocketPage.stories.tsx @@ -1,9 +1,9 @@ +import { MockHealth } from "testHelpers/entities"; import type { StoryObj } from "@storybook/react-vite"; import { HEALTH_QUERY_KEY } from "api/queries/debug"; import type { HealthcheckReport } from "api/typesGenerated"; -import { MockHealth } from "testHelpers/entities"; -import WebsocketPage from "./WebsocketPage"; import { generateMeta } from "./storybook"; +import WebsocketPage from "./WebsocketPage"; const meta = { title: "pages/Health/Websocket", diff --git a/site/src/pages/HealthPage/WorkspaceProxyPage.stories.tsx b/site/src/pages/HealthPage/WorkspaceProxyPage.stories.tsx index 2b60624dc7f1a..7de80154fa7aa 100644 --- a/site/src/pages/HealthPage/WorkspaceProxyPage.stories.tsx +++ b/site/src/pages/HealthPage/WorkspaceProxyPage.stories.tsx @@ -1,9 +1,9 @@ +import { MockHealth } from "testHelpers/entities"; import type { StoryObj } from "@storybook/react-vite"; import { HEALTH_QUERY_KEY } from "api/queries/debug"; import type { HealthcheckReport } from "api/typesGenerated"; -import { MockHealth } from "testHelpers/entities"; -import WorkspaceProxyPage from "./WorkspaceProxyPage"; import { generateMeta } from "./storybook"; +import WorkspaceProxyPage from "./WorkspaceProxyPage"; const meta = { title: "pages/Health/WorkspaceProxy", diff --git a/site/src/pages/HealthPage/storybook.tsx b/site/src/pages/HealthPage/storybook.tsx index 037f33ffd69f6..aa327297e12de 100644 --- a/site/src/pages/HealthPage/storybook.tsx +++ b/site/src/pages/HealthPage/storybook.tsx @@ -1,10 +1,3 @@ -import type { Meta } from "@storybook/react-vite"; -import { HEALTH_QUERY_KEY, HEALTH_QUERY_SETTINGS_KEY } from "api/queries/debug"; -import { - type RouteDefinition, - reactRouterOutlet, - reactRouterParameters, -} from "storybook-addon-remix-react-router"; import { chromatic } from "testHelpers/chromatic"; import { MockAppearanceConfig, @@ -15,6 +8,13 @@ import { MockHealthSettings, } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta } from "@storybook/react-vite"; +import { HEALTH_QUERY_KEY, HEALTH_QUERY_SETTINGS_KEY } from "api/queries/debug"; +import { + type RouteDefinition, + reactRouterOutlet, + reactRouterParameters, +} from "storybook-addon-remix-react-router"; import { HealthLayout } from "./HealthLayout"; type MetaOptions = { diff --git a/site/src/pages/IconsPage/IconsPage.stories.tsx b/site/src/pages/IconsPage/IconsPage.stories.tsx index e2827e0564e92..7fdb66d4a252b 100644 --- a/site/src/pages/IconsPage/IconsPage.stories.tsx +++ b/site/src/pages/IconsPage/IconsPage.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import IconsPage from "./IconsPage"; const meta: Meta = { diff --git a/site/src/pages/LoginOAuthDevicePage/LoginOAuthDevicePage.tsx b/site/src/pages/LoginOAuthDevicePage/LoginOAuthDevicePage.tsx index 6cd8f4f549ba7..06177cfb84ccc 100644 --- a/site/src/pages/LoginOAuthDevicePage/LoginOAuthDevicePage.tsx +++ b/site/src/pages/LoginOAuthDevicePage/LoginOAuthDevicePage.tsx @@ -10,8 +10,8 @@ import { } from "components/GitDeviceAuth/GitDeviceAuth"; import { SignInLayout } from "components/SignInLayout/SignInLayout"; import { Welcome } from "components/Welcome/Welcome"; -import { useEffect, useMemo } from "react"; import type { FC } from "react"; +import { useEffect, useMemo } from "react"; import { useQuery } from "react-query"; import { useSearchParams } from "react-router"; import LoginOAuthDevicePageView from "./LoginOAuthDevicePageView"; @@ -31,6 +31,10 @@ const LoginOAuthDevicePage: FC = () => { ); } + return ; +}; + +const LoginOauthDevicePageWithState: FC<{ state: string }> = ({ state }) => { const externalAuthDeviceQuery = useQuery({ ...getGitHubDevice(), refetchOnMount: false, diff --git a/site/src/pages/LoginPage/LoginPage.test.tsx b/site/src/pages/LoginPage/LoginPage.test.tsx index 4e763c447433e..f43578aecf5ca 100644 --- a/site/src/pages/LoginPage/LoginPage.test.tsx +++ b/site/src/pages/LoginPage/LoginPage.test.tsx @@ -1,13 +1,13 @@ -import { fireEvent, screen } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { http, HttpResponse } from "msw"; -import { createMemoryRouter } from "react-router"; import { render, renderWithRouter, waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { fireEvent, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { HttpResponse, http } from "msw"; +import { createMemoryRouter } from "react-router"; import { Language } from "./Language"; import LoginPage from "./LoginPage"; diff --git a/site/src/pages/LoginPage/LoginPageView.stories.tsx b/site/src/pages/LoginPage/LoginPageView.stories.tsx index ba3c6fedba7c2..f4cb1eb0b070e 100644 --- a/site/src/pages/LoginPage/LoginPageView.stories.tsx +++ b/site/src/pages/LoginPage/LoginPageView.stories.tsx @@ -1,4 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockAuthMethodsAll, MockAuthMethodsExternal, @@ -7,6 +6,7 @@ import { MockBuildInfo, mockApiError, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { LoginPageView } from "./LoginPageView"; const meta: Meta = { diff --git a/site/src/pages/LoginPage/SignInForm.stories.tsx b/site/src/pages/LoginPage/SignInForm.stories.tsx index 67c18e240d22f..f839af4e2a094 100644 --- a/site/src/pages/LoginPage/SignInForm.stories.tsx +++ b/site/src/pages/LoginPage/SignInForm.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { mockApiError } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { SignInForm } from "./SignInForm"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.stories.tsx index 79533ec9a120d..a9657cd93de8d 100644 --- a/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { mockApiError } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { CreateOrganizationPageView } from "./CreateOrganizationPageView"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.tsx b/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.tsx index ab2c15186b86a..2b1902646fb34 100644 --- a/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.tsx +++ b/site/src/pages/OrganizationSettingsPage/CreateOrganizationPageView.tsx @@ -5,20 +5,19 @@ import { ErrorAlert } from "components/Alert/ErrorAlert"; import { Badges, PremiumBadge } from "components/Badges/Badges"; import { Button } from "components/Button/Button"; import { ChooseOne, Cond } from "components/Conditionals/ChooseOne"; -import { IconField } from "components/IconField/IconField"; -import { Paywall } from "components/Paywall/Paywall"; -import { PopoverPaywall } from "components/Paywall/PopoverPaywall"; -import { Spinner } from "components/Spinner/Spinner"; import { Popover, PopoverContent, PopoverTrigger, } from "components/deprecated/Popover/Popover"; +import { IconField } from "components/IconField/IconField"; +import { Paywall } from "components/Paywall/Paywall"; +import { PopoverPaywall } from "components/Paywall/PopoverPaywall"; +import { Spinner } from "components/Spinner/Spinner"; import { useFormik } from "formik"; import { ArrowLeft } from "lucide-react"; import type { FC } from "react"; -import { useNavigate } from "react-router"; -import { Link } from "react-router"; +import { Link, useNavigate } from "react-router"; import { docs } from "utils/docs"; import { displayNameValidator, diff --git a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CreateEditRolePageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CreateEditRolePageView.stories.tsx index a6ceb5cf56efc..01d9150a6a276 100644 --- a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CreateEditRolePageView.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CreateEditRolePageView.stories.tsx @@ -1,11 +1,11 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { expect, userEvent, within } from "storybook/test"; import { + assignableRole, MockRole2WithOrgPermissions, MockRoleWithOrgPermissions, - assignableRole, mockApiError, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { expect, userEvent, within } from "storybook/test"; import CreateEditRolePageView from "./CreateEditRolePageView"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.stories.tsx index f4706d822f115..7f02cb4f48fc1 100644 --- a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/CustomRolesPageView.stories.tsx @@ -1,8 +1,8 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockOrganizationAuditorRole, MockRoleWithOrgPermissions, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { CustomRolesPageView } from "./CustomRolesPageView"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/PermissionPillsList.stories.tsx b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/PermissionPillsList.stories.tsx index 3da3b25c768b3..57a4aab1fc0e2 100644 --- a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/PermissionPillsList.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/PermissionPillsList.stories.tsx @@ -1,6 +1,6 @@ +import { MockRoleWithOrgPermissions } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { userEvent, within } from "storybook/test"; -import { MockRoleWithOrgPermissions } from "testHelpers/entities"; import { PermissionPillsList } from "./PermissionPillsList"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/PermissionPillsList.tsx b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/PermissionPillsList.tsx index 8a456460481ba..11071e0dab164 100644 --- a/site/src/pages/OrganizationSettingsPage/CustomRolesPage/PermissionPillsList.tsx +++ b/site/src/pages/OrganizationSettingsPage/CustomRolesPage/PermissionPillsList.tsx @@ -1,12 +1,12 @@ import { type Interpolation, type Theme, useTheme } from "@emotion/react"; import Stack from "@mui/material/Stack"; import type { Permission } from "api/typesGenerated"; -import { Pill } from "components/Pill/Pill"; import { Popover, PopoverContent, PopoverTrigger, } from "components/deprecated/Popover/Popover"; +import { Pill } from "components/Pill/Pill"; import type { FC } from "react"; function getUniqueResourceTypes(jsonObject: readonly Permission[]) { diff --git a/site/src/pages/OrganizationSettingsPage/IdpSyncPage/ExportPolicyButton.stories.tsx b/site/src/pages/OrganizationSettingsPage/IdpSyncPage/ExportPolicyButton.stories.tsx index 978776593f23b..a55588afc096f 100644 --- a/site/src/pages/OrganizationSettingsPage/IdpSyncPage/ExportPolicyButton.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/IdpSyncPage/ExportPolicyButton.stories.tsx @@ -1,10 +1,10 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { expect, fn, userEvent, waitFor, within } from "storybook/test"; import { MockGroupSyncSettings, MockOrganization, MockRoleSyncSettings, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { expect, fn, userEvent, waitFor, within } from "storybook/test"; import { ExportPolicyButton } from "./ExportPolicyButton"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpPillList.tsx b/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpPillList.tsx index 3a5c603fa3e64..877ba6c9a205a 100644 --- a/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpPillList.tsx +++ b/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpPillList.tsx @@ -1,11 +1,11 @@ import { type Interpolation, type Theme, useTheme } from "@emotion/react"; import Stack from "@mui/material/Stack"; -import { Pill } from "components/Pill/Pill"; import { Popover, PopoverContent, PopoverTrigger, } from "components/deprecated/Popover/Popover"; +import { Pill } from "components/Pill/Pill"; import type { FC } from "react"; import { isUUID } from "utils/uuid"; diff --git a/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpSyncPage.tsx b/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpSyncPage.tsx index 815971c16fe73..59a086a024b9a 100644 --- a/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpSyncPage.tsx +++ b/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpSyncPage.tsx @@ -10,8 +10,7 @@ import { import { organizationRoles } from "api/queries/roles"; import { ChooseOne, Cond } from "components/Conditionals/ChooseOne"; import { EmptyState } from "components/EmptyState/EmptyState"; -import { displayError } from "components/GlobalSnackbar/utils"; -import { displaySuccess } from "components/GlobalSnackbar/utils"; +import { displayError, displaySuccess } from "components/GlobalSnackbar/utils"; import { Link } from "components/Link/Link"; import { Paywall } from "components/Paywall/Paywall"; import { useFeatureVisibility } from "modules/dashboard/useFeatureVisibility"; @@ -75,6 +74,13 @@ const IdpSyncPage: FC = () => { enabled: !!field, }); + const patchGroupSyncSettingsMutation = useMutation( + patchGroupSyncSettings(organizationName, queryClient), + ); + const patchRoleSyncSettingsMutation = useMutation( + patchRoleSyncSettings(organizationName, queryClient), + ); + if (!organization) { return ; } @@ -96,13 +102,6 @@ const IdpSyncPage: FC = () => { ); } - const patchGroupSyncSettingsMutation = useMutation( - patchGroupSyncSettings(organizationName, queryClient), - ); - const patchRoleSyncSettingsMutation = useMutation( - patchRoleSyncSettings(organizationName, queryClient), - ); - const error = patchGroupSyncSettingsMutation.error || patchRoleSyncSettingsMutation.error || diff --git a/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpSyncPageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpSyncPageView.stories.tsx index a38a56c790b71..b2eb64ab4eec5 100644 --- a/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpSyncPageView.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/IdpSyncPage/IdpSyncPageView.stories.tsx @@ -1,5 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { expect, userEvent } from "storybook/test"; import { MockGroup, MockGroup2, @@ -9,6 +7,8 @@ import { MockOrganization, MockRoleSyncSettings, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { expect, userEvent } from "storybook/test"; import IdpSyncPageView from "./IdpSyncPageView"; const groupsMap = new Map(); diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationMembersPage.test.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationMembersPage.test.tsx index 4c90a21659ee2..713bc7e98d9d7 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationMembersPage.test.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationMembersPage.test.tsx @@ -1,7 +1,3 @@ -import { fireEvent, screen, within } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import type { SlimRole } from "api/typesGenerated"; -import { http, HttpResponse } from "msw"; import { MockEntitlementsWithMultiOrg, MockOrganization, @@ -14,6 +10,10 @@ import { waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { fireEvent, screen, within } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import type { SlimRole } from "api/typesGenerated"; +import { HttpResponse, http } from "msw"; import OrganizationMembersPage from "./OrganizationMembersPage"; jest.spyOn(console, "error").mockImplementation(() => {}); diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationMembersPageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationMembersPageView.stories.tsx index e8d50e3672f5a..9cf02a22f1b9e 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationMembersPageView.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationMembersPageView.stories.tsx @@ -1,11 +1,11 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { mockSuccessResult } from "components/PaginationWidget/PaginationContainer.mocks"; -import type { UsePaginatedQueryResult } from "hooks/usePaginatedQuery"; import { MockOrganizationMember, MockOrganizationMember2, MockUserOwner, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { mockSuccessResult } from "components/PaginationWidget/PaginationContainer.mocks"; +import type { UsePaginatedQueryResult } from "hooks/usePaginatedQuery"; import { OrganizationMembersPageView } from "./OrganizationMembersPageView"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationMembersPageView.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationMembersPageView.tsx index 9270e27e3d9c6..7f8ed8e92ea17 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationMembersPageView.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationMembersPageView.tsx @@ -34,8 +34,7 @@ import { } from "components/Table/Table"; import { UserAutocomplete } from "components/UserAutocomplete/UserAutocomplete"; import type { PaginationResultInfo } from "hooks/usePaginatedQuery"; -import { UserPlusIcon } from "lucide-react"; -import { EllipsisVertical, TriangleAlert } from "lucide-react"; +import { EllipsisVertical, TriangleAlert, UserPlusIcon } from "lucide-react"; import { UserGroupsCell } from "pages/UsersPage/UsersTable/UserGroupsCell"; import { type FC, useState } from "react"; import { TableColumnHelpTooltip } from "./UserTable/TableColumnHelpTooltip"; diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/CancelJobButton.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/CancelJobButton.stories.tsx index a9ad6448c3994..e42d653e1eaee 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/CancelJobButton.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/CancelJobButton.stories.tsx @@ -1,6 +1,6 @@ +import { MockProvisionerJob } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { userEvent, waitFor, within } from "storybook/test"; -import { MockProvisionerJob } from "testHelpers/entities"; import { CancelJobButton } from "./CancelJobButton"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/CancelJobConfirmationDialog.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/CancelJobConfirmationDialog.stories.tsx index ec3563c131f09..82c49511a105d 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/CancelJobConfirmationDialog.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/CancelJobConfirmationDialog.stories.tsx @@ -1,8 +1,8 @@ +import { MockProvisionerJob } from "testHelpers/entities"; +import { withGlobalSnackbar } from "testHelpers/storybook"; import type { Meta, StoryObj } from "@storybook/react-vite"; import type { Response } from "api/typesGenerated"; import { expect, fn, userEvent, waitFor, within } from "storybook/test"; -import { MockProvisionerJob } from "testHelpers/entities"; -import { withGlobalSnackbar } from "testHelpers/storybook"; import { CancelJobConfirmationDialog } from "./CancelJobConfirmationDialog"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/JobRow.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/JobRow.stories.tsx index eea806e47c960..0a611982442b5 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/JobRow.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/JobRow.stories.tsx @@ -1,7 +1,7 @@ +import { MockProvisionerJob } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { Table, TableBody } from "components/Table/Table"; import { expect, userEvent, within } from "storybook/test"; -import { MockProvisionerJob } from "testHelpers/entities"; import { daysAgo } from "utils/time"; import { JobRow } from "./JobRow"; diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.stories.tsx index 4b39e379348e9..c47096be87317 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPageView.stories.tsx @@ -1,8 +1,8 @@ +import { MockOrganization, MockProvisionerJob } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import type { ProvisionerJob } from "api/typesGenerated"; import { useState } from "react"; import { expect, fn, userEvent, waitFor, within } from "storybook/test"; -import { MockOrganization, MockProvisionerJob } from "testHelpers/entities"; import { daysAgo } from "utils/time"; import OrganizationProvisionerJobsPageView from "./OrganizationProvisionerJobsPageView"; diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.stories.tsx index 0401e30dd920a..df5548511ba04 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerKeysPage/OrganizationProvisionerKeysPageView.stories.tsx @@ -1,3 +1,8 @@ +import { + MockProvisioner, + MockProvisionerKey, + mockApiError, +} from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { type ProvisionerKeyDaemons, @@ -5,11 +10,6 @@ import { ProvisionerKeyIDPSK, ProvisionerKeyIDUserAuth, } from "api/typesGenerated"; -import { - MockProvisioner, - MockProvisionerKey, - mockApiError, -} from "testHelpers/entities"; import { OrganizationProvisionerKeysPageView } from "./OrganizationProvisionerKeysPageView"; const mockProvisionerKeyDaemons: ProvisionerKeyDaemons[] = [ diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.stories.tsx index 2bab4f262cfe2..d1bcd7fbcb816 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/OrganizationProvisionersPageView.stories.tsx @@ -1,4 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockBuildInfo, MockProvisioner, @@ -6,6 +5,7 @@ import { MockUserProvisioner, mockApiError, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { OrganizationProvisionersPageView } from "./OrganizationProvisionersPageView"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/ProvisionerRow.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/ProvisionerRow.stories.tsx index 2781839d1f94b..a0c777f4ba606 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/ProvisionerRow.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/ProvisionerRow.stories.tsx @@ -1,7 +1,7 @@ +import { MockBuildInfo, MockProvisioner } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { Table, TableBody } from "components/Table/Table"; import { expect, userEvent, within } from "storybook/test"; -import { MockBuildInfo, MockProvisioner } from "testHelpers/entities"; import { ProvisionerRow } from "./ProvisionerRow"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/ProvisionerVersion.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/ProvisionerVersion.stories.tsx index 5cb681e8054cd..43c872aa55e48 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/ProvisionerVersion.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionersPage/ProvisionerVersion.stories.tsx @@ -1,6 +1,6 @@ +import { MockBuildInfo, MockProvisioner } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { MockBuildInfo, MockProvisioner } from "testHelpers/entities"; import { ProvisionerVersion } from "./ProvisionerVersion"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationRedirect.test.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationRedirect.test.tsx index 70da9ad445b23..18c0eed0c2e0b 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationRedirect.test.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationRedirect.test.tsx @@ -1,5 +1,3 @@ -import { screen } from "@testing-library/react"; -import { http, HttpResponse } from "msw"; import { MockDefaultOrganization, MockEntitlementsWithMultiOrg, @@ -10,6 +8,8 @@ import { waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { screen } from "@testing-library/react"; +import { HttpResponse, http } from "msw"; import OrganizationRedirect from "./OrganizationRedirect"; jest.spyOn(console, "error").mockImplementation(() => {}); diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationSettingsPage.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationSettingsPage.tsx index d417ac6343ff6..60cf4789d08be 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationSettingsPage.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationSettingsPage.tsx @@ -4,8 +4,7 @@ import { updateOrganization, } from "api/queries/organizations"; import { EmptyState } from "components/EmptyState/EmptyState"; -import { displaySuccess } from "components/GlobalSnackbar/utils"; -import { displayError } from "components/GlobalSnackbar/utils"; +import { displayError, displaySuccess } from "components/GlobalSnackbar/utils"; import { useOrganizationSettings } from "modules/management/OrganizationSettingsLayout"; import { RequirePermission } from "modules/permissions/RequirePermission"; import type { FC } from "react"; diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationSettingsPageView.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationSettingsPageView.stories.tsx index b47a2a4246971..fc3cf3767dc2b 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationSettingsPageView.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationSettingsPageView.stories.tsx @@ -1,9 +1,9 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; import { MockDefaultOrganization, MockOrganization, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { OrganizationSettingsPageView } from "./OrganizationSettingsPageView"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/UserTable/EditRolesButton.stories.tsx b/site/src/pages/OrganizationSettingsPage/UserTable/EditRolesButton.stories.tsx index ad94f80434199..7b6b29c4cca3d 100644 --- a/site/src/pages/OrganizationSettingsPage/UserTable/EditRolesButton.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/UserTable/EditRolesButton.stories.tsx @@ -1,5 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { userEvent, within } from "storybook/test"; import { MockOwnerRole, MockSiteRoles, @@ -7,6 +5,8 @@ import { MockWorkspaceCreationBanRole, } from "testHelpers/entities"; import { withDesktopViewport } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { userEvent, within } from "storybook/test"; import { EditRolesButton } from "./EditRolesButton"; const meta: Meta = { diff --git a/site/src/pages/OrganizationSettingsPage/UserTable/EditRolesButton.tsx b/site/src/pages/OrganizationSettingsPage/UserTable/EditRolesButton.tsx index f409b09724d86..4983e671aa5a6 100644 --- a/site/src/pages/OrganizationSettingsPage/UserTable/EditRolesButton.tsx +++ b/site/src/pages/OrganizationSettingsPage/UserTable/EditRolesButton.tsx @@ -3,6 +3,11 @@ import Tooltip from "@mui/material/Tooltip"; import type { SlimRole } from "api/typesGenerated"; import { Button } from "components/Button/Button"; import { CollapsibleSummary } from "components/CollapsibleSummary/CollapsibleSummary"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "components/deprecated/Popover/Popover"; import { HelpTooltip, HelpTooltipContent, @@ -11,11 +16,6 @@ import { HelpTooltipTrigger, } from "components/HelpTooltip/HelpTooltip"; import { EditSquare } from "components/Icons/EditSquare"; -import { - Popover, - PopoverContent, - PopoverTrigger, -} from "components/deprecated/Popover/Popover"; import { UserIcon } from "lucide-react"; import { type FC, useEffect, useState } from "react"; @@ -75,25 +75,8 @@ interface EditRolesButtonProps { userLoginType?: string; } -export const EditRolesButton: FC = ({ - roles, - selectedRoleNames, - onChange, - isLoading, - userLoginType, - oidcRoleSync, -}) => { - const handleChange = (roleName: string) => { - if (selectedRoleNames.has(roleName)) { - const serialized = [...selectedRoleNames]; - onChange(serialized.filter((role) => role !== roleName)); - return; - } - - onChange([...selectedRoleNames, roleName]); - }; - const [isAdvancedOpen, setIsAdvancedOpen] = useState(false); - +export const EditRolesButton: FC = (props) => { + const { userLoginType, oidcRoleSync } = props; const canSetRoles = userLoginType !== "oidc" || (userLoginType === "oidc" && !oidcRoleSync); @@ -111,6 +94,26 @@ export const EditRolesButton: FC = ({ ); } + return ; +}; + +const EnabledEditRolesButton: FC = ({ + roles, + selectedRoleNames, + onChange, + isLoading, +}) => { + const handleChange = (roleName: string) => { + if (selectedRoleNames.has(roleName)) { + const serialized = [...selectedRoleNames]; + onChange(serialized.filter((role) => role !== roleName)); + return; + } + + onChange([...selectedRoleNames, roleName]); + }; + const [isAdvancedOpen, setIsAdvancedOpen] = useState(false); + const filteredRoles = roles.filter( (role) => role.name !== "organization-workspace-creation-ban", ); diff --git a/site/src/pages/OrganizationSettingsPage/UserTable/UserRoleCell.tsx b/site/src/pages/OrganizationSettingsPage/UserTable/UserRoleCell.tsx index 4c350f6ffb5be..0261d81e3f578 100644 --- a/site/src/pages/OrganizationSettingsPage/UserTable/UserRoleCell.tsx +++ b/site/src/pages/OrganizationSettingsPage/UserTable/UserRoleCell.tsx @@ -16,13 +16,13 @@ import { type Interpolation, type Theme, useTheme } from "@emotion/react"; import Tooltip from "@mui/material/Tooltip"; import type { LoginType, SlimRole } from "api/typesGenerated"; -import { Pill } from "components/Pill/Pill"; -import { TableCell } from "components/Table/Table"; import { Popover, PopoverContent, PopoverTrigger, } from "components/deprecated/Popover/Popover"; +import { Pill } from "components/Pill/Pill"; +import { TableCell } from "components/Table/Table"; import type { FC } from "react"; import { EditRolesButton } from "./EditRolesButton"; diff --git a/site/src/pages/ResetPasswordPage/ChangePasswordPage.stories.tsx b/site/src/pages/ResetPasswordPage/ChangePasswordPage.stories.tsx index c2442638b03fd..359f7df66579c 100644 --- a/site/src/pages/ResetPasswordPage/ChangePasswordPage.stories.tsx +++ b/site/src/pages/ResetPasswordPage/ChangePasswordPage.stories.tsx @@ -1,8 +1,8 @@ +import { mockApiError } from "testHelpers/entities"; +import { withGlobalSnackbar } from "testHelpers/storybook"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { API } from "api/api"; import { spyOn, userEvent, within } from "storybook/test"; -import { mockApiError } from "testHelpers/entities"; -import { withGlobalSnackbar } from "testHelpers/storybook"; import ChangePasswordPage from "./ChangePasswordPage"; const meta: Meta = { diff --git a/site/src/pages/ResetPasswordPage/RequestOTPPage.stories.tsx b/site/src/pages/ResetPasswordPage/RequestOTPPage.stories.tsx index 9c62be022152e..130d6013ceacc 100644 --- a/site/src/pages/ResetPasswordPage/RequestOTPPage.stories.tsx +++ b/site/src/pages/ResetPasswordPage/RequestOTPPage.stories.tsx @@ -1,8 +1,8 @@ +import { mockApiError } from "testHelpers/entities"; +import { withGlobalSnackbar } from "testHelpers/storybook"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { API } from "api/api"; import { spyOn, userEvent, within } from "storybook/test"; -import { mockApiError } from "testHelpers/entities"; -import { withGlobalSnackbar } from "testHelpers/storybook"; import RequestOTPPage from "./RequestOTPPage"; const meta: Meta = { diff --git a/site/src/pages/SetupPage/SetupPage.test.tsx b/site/src/pages/SetupPage/SetupPage.test.tsx index 02d1c53334c81..386720ac5f93d 100644 --- a/site/src/pages/SetupPage/SetupPage.test.tsx +++ b/site/src/pages/SetupPage/SetupPage.test.tsx @@ -1,14 +1,14 @@ -import { screen, waitFor } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import type { Response, User } from "api/typesGenerated"; -import { http, HttpResponse } from "msw"; -import { createMemoryRouter } from "react-router"; import { MockBuildInfo, MockUserOwner } from "testHelpers/entities"; import { renderWithRouter, waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import type { Response, User } from "api/typesGenerated"; +import { HttpResponse, http } from "msw"; +import { createMemoryRouter } from "react-router"; import { SetupPage } from "./SetupPage"; import { Language as PageViewLanguage } from "./SetupPageView"; diff --git a/site/src/pages/SetupPage/SetupPageView.stories.tsx b/site/src/pages/SetupPage/SetupPageView.stories.tsx index 371a3c035cef7..ce6b9ce8c3394 100644 --- a/site/src/pages/SetupPage/SetupPageView.stories.tsx +++ b/site/src/pages/SetupPage/SetupPageView.stories.tsx @@ -1,6 +1,6 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; import { mockApiError } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { SetupPageView } from "./SetupPageView"; const meta: Meta = { diff --git a/site/src/pages/StarterTemplatePage/StarterTemplatePageView.stories.tsx b/site/src/pages/StarterTemplatePage/StarterTemplatePageView.stories.tsx index b214e8796cf71..3c35efdc2686b 100644 --- a/site/src/pages/StarterTemplatePage/StarterTemplatePageView.stories.tsx +++ b/site/src/pages/StarterTemplatePage/StarterTemplatePageView.stories.tsx @@ -1,6 +1,6 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; import { MockTemplateExample, mockApiError } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { StarterTemplatePageView } from "./StarterTemplatePageView"; const meta: Meta = { diff --git a/site/src/pages/TaskPage/TaskApps.stories.tsx b/site/src/pages/TaskPage/TaskApps.stories.tsx index d4c92f8ab1883..3447c1c68035c 100644 --- a/site/src/pages/TaskPage/TaskApps.stories.tsx +++ b/site/src/pages/TaskPage/TaskApps.stories.tsx @@ -1,5 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import type { WorkspaceApp } from "api/typesGenerated"; import { MockTasks, MockWorkspace, @@ -7,6 +5,8 @@ import { MockWorkspaceApp, } from "testHelpers/entities"; import { withProxyProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import type { WorkspaceApp } from "api/typesGenerated"; import { TaskApps } from "./TaskApps"; const meta: Meta = { diff --git a/site/src/pages/TaskPage/TaskApps.tsx b/site/src/pages/TaskPage/TaskApps.tsx index 34891471731f5..26d8562d1ebd2 100644 --- a/site/src/pages/TaskPage/TaskApps.tsx +++ b/site/src/pages/TaskPage/TaskApps.tsx @@ -125,7 +125,6 @@ type TaskExternalAppsDropdownProps = { const TaskExternalAppsDropdown: FC = ({ task, - agents, externalApps, }) => { return ( @@ -138,31 +137,40 @@ const TaskExternalAppsDropdown: FC = ({ - {externalApps.map(({ app, agent }) => { - const link = useAppLink(app, { - agent, - workspace: task.workspace, - }); - - return ( - - - {app.icon ? ( - - ) : ( - - )} - {link.label} - - - ); - })} + {externalApps.map(({ app, agent }) => ( + + ))}
      ); }; +const ExternalAppMenuItem: FC<{ + app: WorkspaceApp; + agent: WorkspaceAgent; + task: Task; +}> = ({ app, agent, task }) => { + const link = useAppLink(app, { + agent, + workspace: task.workspace, + }); + + return ( + + + {app.icon ? : } + {link.label} + + + ); +}; + type TaskAppTabProps = { task: Task; app: WorkspaceApp; diff --git a/site/src/pages/TaskPage/TaskPage.stories.tsx b/site/src/pages/TaskPage/TaskPage.stories.tsx index 16c3641f76bdc..6a486442ace8c 100644 --- a/site/src/pages/TaskPage/TaskPage.stories.tsx +++ b/site/src/pages/TaskPage/TaskPage.stories.tsx @@ -1,11 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { API } from "api/api"; -import type { - Workspace, - WorkspaceApp, - WorkspaceResource, -} from "api/typesGenerated"; -import { expect, spyOn, within } from "storybook/test"; import { MockFailedWorkspace, MockStartingWorkspace, @@ -19,6 +11,14 @@ import { mockApiError, } from "testHelpers/entities"; import { withProxyProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { API } from "api/api"; +import type { + Workspace, + WorkspaceApp, + WorkspaceResource, +} from "api/typesGenerated"; +import { expect, spyOn, within } from "storybook/test"; import TaskPage, { data, WorkspaceDoesNotHaveAITaskError } from "./TaskPage"; const meta: Meta = { @@ -36,7 +36,7 @@ type Story = StoryObj; export const Loading: Story = { beforeEach: () => { spyOn(data, "fetchTask").mockImplementation( - () => new Promise((res) => 1000 * 60 * 60), + () => new Promise((_res) => 1000 * 60 * 60), ); }, }; diff --git a/site/src/pages/TaskPage/TaskPage.tsx b/site/src/pages/TaskPage/TaskPage.tsx index 38e645f910caf..7017986c7b686 100644 --- a/site/src/pages/TaskPage/TaskPage.tsx +++ b/site/src/pages/TaskPage/TaskPage.tsx @@ -12,8 +12,7 @@ import type { ReactNode } from "react"; import { Helmet } from "react-helmet-async"; import { useQuery } from "react-query"; import { Panel, PanelGroup, PanelResizeHandle } from "react-resizable-panels"; -import { useParams } from "react-router"; -import { Link as RouterLink } from "react-router"; +import { Link as RouterLink, useParams } from "react-router"; import { ellipsizeText } from "utils/ellipsizeText"; import { pageTitle } from "utils/page"; import { @@ -96,7 +95,7 @@ const TaskPage = () => { } let content: ReactNode = null; - const terminatedStatuses: WorkspaceStatus[] = [ + const _terminatedStatuses: WorkspaceStatus[] = [ "canceled", "canceling", "deleted", diff --git a/site/src/pages/TaskPage/TaskStatusLink.tsx b/site/src/pages/TaskPage/TaskStatusLink.tsx index 41dff13c9de83..7fbc74d937d23 100644 --- a/site/src/pages/TaskPage/TaskStatusLink.tsx +++ b/site/src/pages/TaskPage/TaskStatusLink.tsx @@ -50,7 +50,7 @@ export const TaskStatusLink: FC = ({ uri }) => { } break; } - } catch (error) { + } catch (_error) { // Invalid URL, probably. } diff --git a/site/src/pages/TasksPage/TasksPage.stories.tsx b/site/src/pages/TasksPage/TasksPage.stories.tsx index cfa47d3539fee..a42f1a7a3fede 100644 --- a/site/src/pages/TasksPage/TasksPage.stories.tsx +++ b/site/src/pages/TasksPage/TasksPage.stories.tsx @@ -1,8 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { API } from "api/api"; -import { MockUsers } from "pages/UsersPage/storybookData/users"; -import { reactRouterParameters } from "storybook-addon-remix-react-router"; -import { expect, spyOn, userEvent, waitFor, within } from "storybook/test"; import { MockAIPromptPresets, MockNewTaskData, @@ -19,6 +14,11 @@ import { withGlobalSnackbar, withProxyProvider, } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { API } from "api/api"; +import { MockUsers } from "pages/UsersPage/storybookData/users"; +import { expect, spyOn, userEvent, waitFor, within } from "storybook/test"; +import { reactRouterParameters } from "storybook-addon-remix-react-router"; import TasksPage, { data } from "./TasksPage"; const meta: Meta = { diff --git a/site/src/pages/TasksPage/TasksPage.tsx b/site/src/pages/TasksPage/TasksPage.tsx index 2f6405e796134..0e149f7943a61 100644 --- a/site/src/pages/TasksPage/TasksPage.tsx +++ b/site/src/pages/TasksPage/TasksPage.tsx @@ -1,6 +1,7 @@ import Skeleton from "@mui/material/Skeleton"; import { API } from "api/api"; import { getErrorDetail, getErrorMessage } from "api/errors"; +import { templateVersionPresets } from "api/queries/templates"; import { disabledRefetchOptions } from "api/queries/util"; import type { Preset, @@ -12,6 +13,8 @@ import { Avatar } from "components/Avatar/Avatar"; import { AvatarData } from "components/Avatar/AvatarData"; import { AvatarDataSkeleton } from "components/Avatar/AvatarDataSkeleton"; import { Button } from "components/Button/Button"; +import { ExternalImage } from "components/ExternalImage/ExternalImage"; +import { FeatureStageBadge } from "components/FeatureStageBadge/FeatureStageBadge"; import { displayError } from "components/GlobalSnackbar/utils"; import { Link } from "components/Link/Link"; import { Margins } from "components/Margins/Margins"; @@ -40,10 +43,6 @@ import { TableLoaderSkeleton, TableRowSkeleton, } from "components/TableLoader/TableLoader"; - -import { templateVersionPresets } from "api/queries/templates"; -import { ExternalImage } from "components/ExternalImage/ExternalImage"; -import { FeatureStageBadge } from "components/FeatureStageBadge/FeatureStageBadge"; import { Tooltip, TooltipContent, @@ -54,8 +53,8 @@ import { useAuthenticated } from "hooks"; import { useExternalAuth } from "hooks/useExternalAuth"; import { RedoIcon, RotateCcwIcon, SendIcon } from "lucide-react"; import { AI_PROMPT_PARAMETER_NAME, type Task } from "modules/tasks/tasks"; -import { WorkspaceAppStatus } from "modules/workspaces/WorkspaceAppStatus/WorkspaceAppStatus"; import { generateWorkspaceName } from "modules/workspaces/generateWorkspaceName"; +import { WorkspaceAppStatus } from "modules/workspaces/WorkspaceAppStatus/WorkspaceAppStatus"; import { type FC, type ReactNode, useEffect, useState } from "react"; import { Helmet } from "react-helmet-async"; import { useMutation, useQuery, useQueryClient } from "react-query"; diff --git a/site/src/pages/TasksPage/UsersCombobox.tsx b/site/src/pages/TasksPage/UsersCombobox.tsx index e3f8de2bbca56..603085f28d678 100644 --- a/site/src/pages/TasksPage/UsersCombobox.tsx +++ b/site/src/pages/TasksPage/UsersCombobox.tsx @@ -42,7 +42,7 @@ export const UsersCombobox: FC = ({ const usersQuery = useQuery({ ...users({ q: debouncedSearch }), select: (data) => - data.users.toSorted((a, b) => { + data.users.toSorted((a, _b) => { return selectedOption && a.username === selectedOption.value ? -1 : 0; }), placeholderData: keepPreviousData, diff --git a/site/src/pages/TemplatePage/TemplateEmbedPage/TemplateEmbedPage.test.tsx b/site/src/pages/TemplatePage/TemplateEmbedPage/TemplateEmbedPage.test.tsx index a98e669807f89..abe227a17f053 100644 --- a/site/src/pages/TemplatePage/TemplateEmbedPage/TemplateEmbedPage.test.tsx +++ b/site/src/pages/TemplatePage/TemplateEmbedPage/TemplateEmbedPage.test.tsx @@ -1,7 +1,3 @@ -import { screen } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; -import { TemplateLayout } from "pages/TemplatePage/TemplateLayout"; import { MockTemplate, MockTemplateVersionParameter1 as parameter1, @@ -11,6 +7,10 @@ import { renderWithAuth, waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; +import { screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; +import { TemplateLayout } from "pages/TemplatePage/TemplateLayout"; import TemplateEmbedPage from "./TemplateEmbedPage"; test("Users can fill the parameters and copy the open in coder url", async () => { diff --git a/site/src/pages/TemplatePage/TemplateEmbedPage/TemplateEmbedPageExperimental.tsx b/site/src/pages/TemplatePage/TemplateEmbedPage/TemplateEmbedPageExperimental.tsx index 010c765007aef..e1f53cb6af6a6 100644 --- a/site/src/pages/TemplatePage/TemplateEmbedPage/TemplateEmbedPageExperimental.tsx +++ b/site/src/pages/TemplatePage/TemplateEmbedPage/TemplateEmbedPageExperimental.tsx @@ -39,7 +39,7 @@ const TemplateEmbedPageExperimental: FC = () => { const [wsError, setWsError] = useState(null); const sendMessage = useEffectEvent( - (formValues: Record, ownerId?: string) => { + (formValues: Record, _ownerId?: string) => { const request: DynamicParametersRequest = { id: wsResponseId.current + 1, owner_id: me.id, @@ -187,90 +187,88 @@ const TemplateEmbedPageView: FC = ({ }; return ( - <> -
      -
      - {isLoading ? ( -
      -
      - - -
      -
      - - -
      -
      - - -
      +
      +
      + {isLoading ? ( +
      +
      + +
      - ) : ( - <> - {Boolean(error) && } - {diagnostics.length > 0 && ( - - )} -
      -
      -
      -

      Creation mode

      -

      - When set to automatic mode, clicking the button will - create the workspace automatically without displaying a - form to the user. -

      +
      + + +
      +
      + + +
      +
      + ) : ( + <> + {Boolean(error) && } + {diagnostics.length > 0 && ( + + )} +
      +
      +
      +

      Creation mode

      +

      + When set to automatic mode, clicking the button will create + the workspace automatically without displaying a form to the + user. +

      +
      + { + setFormState((prev) => ({ + ...prev, + mode: v as "manual" | "auto", + })); + }} + > +
      + +
      - { - setFormState((prev) => ({ - ...prev, - mode: v as "manual" | "auto", - })); - }} - > -
      - - -
      -
      - - -
      -
      -
      - - - - {parameters.length > 0 && ( -
      - {parameters.map((parameter) => { - const isDisabled = parameter.styling?.disabled; - return ( - handleChange(parameter, value)} - disabled={isDisabled} - value={formState.paramValues[parameter.name] || ""} - /> - ); - })} +
      + +
      - )} -
      - - )} -
      + +
      + + - + {parameters.length > 0 && ( +
      + {parameters.map((parameter) => { + const isDisabled = parameter.styling?.disabled; + return ( + handleChange(parameter, value)} + disabled={isDisabled} + value={formState.paramValues[parameter.name] || ""} + /> + ); + })} +
      + )} +
      + + )}
      - + + +
      ); }; diff --git a/site/src/pages/TemplatePage/TemplateEmbedPage/TemplateEmbedPageView.stories.tsx b/site/src/pages/TemplatePage/TemplateEmbedPage/TemplateEmbedPageView.stories.tsx index 501e044525424..5eac986498491 100644 --- a/site/src/pages/TemplatePage/TemplateEmbedPage/TemplateEmbedPageView.stories.tsx +++ b/site/src/pages/TemplatePage/TemplateEmbedPage/TemplateEmbedPageView.stories.tsx @@ -1,4 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockTemplate, MockTemplateVersionParameter1, @@ -6,6 +5,7 @@ import { MockTemplateVersionParameter3, MockTemplateVersionParameter4, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { TemplateEmbedPageView } from "./TemplateEmbedPage"; const meta: Meta = { diff --git a/site/src/pages/TemplatePage/TemplateFilesPage/TemplateFilesPage.test.tsx b/site/src/pages/TemplatePage/TemplateFilesPage/TemplateFilesPage.test.tsx index a4e361f7b40cf..d042cb0e67ed0 100644 --- a/site/src/pages/TemplatePage/TemplateFilesPage/TemplateFilesPage.test.tsx +++ b/site/src/pages/TemplatePage/TemplateFilesPage/TemplateFilesPage.test.tsx @@ -1,10 +1,10 @@ -import { render, screen } from "@testing-library/react"; import { AppProviders } from "App"; -import { RequireAuth } from "contexts/auth/RequireAuth"; -import { http, HttpResponse } from "msw"; -import { RouterProvider, createMemoryRouter } from "react-router"; import { MockTemplate } from "testHelpers/entities"; import { server } from "testHelpers/server"; +import { render, screen } from "@testing-library/react"; +import { RequireAuth } from "contexts/auth/RequireAuth"; +import { HttpResponse, http } from "msw"; +import { createMemoryRouter, RouterProvider } from "react-router"; import { TemplateLayout } from "../TemplateLayout"; import TemplateFilesPage from "./TemplateFilesPage"; diff --git a/site/src/pages/TemplatePage/TemplateInsightsPage/DateRange.tsx b/site/src/pages/TemplatePage/TemplateInsightsPage/DateRange.tsx index 1f27ec7f8412f..3d9fb8120efbf 100644 --- a/site/src/pages/TemplatePage/TemplateInsightsPage/DateRange.tsx +++ b/site/src/pages/TemplatePage/TemplateInsightsPage/DateRange.tsx @@ -10,7 +10,7 @@ import { import dayjs from "dayjs"; import { MoveRightIcon } from "lucide-react"; import { type ComponentProps, type FC, useRef, useState } from "react"; -import { DateRangePicker, createStaticRanges } from "react-date-range"; +import { createStaticRanges, DateRangePicker } from "react-date-range"; // The type definition from @types is wrong declare module "react-date-range" { diff --git a/site/src/pages/TemplatePage/TemplateInsightsPage/IntervalMenu.tsx b/site/src/pages/TemplatePage/TemplateInsightsPage/IntervalMenu.tsx index 7f3b11a4069ad..5aa98a7665d19 100644 --- a/site/src/pages/TemplatePage/TemplateInsightsPage/IntervalMenu.tsx +++ b/site/src/pages/TemplatePage/TemplateInsightsPage/IntervalMenu.tsx @@ -1,8 +1,7 @@ import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import { Button } from "components/Button/Button"; -import { ChevronDownIcon } from "lucide-react"; -import { CheckIcon } from "lucide-react"; +import { CheckIcon, ChevronDownIcon } from "lucide-react"; import { type FC, useRef, useState } from "react"; const insightsIntervals = { diff --git a/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.stories.tsx b/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.stories.tsx index 91b51a6f2826a..37b7b89a4c0b2 100644 --- a/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.stories.tsx +++ b/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { TemplateInsightsPageView } from "./TemplateInsightsPage"; const meta: Meta = { diff --git a/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx b/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx index 2a0785b4cddef..0c12d96625156 100644 --- a/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx +++ b/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx @@ -59,8 +59,8 @@ import { import { getTemplatePageTitle } from "../utils"; import { DateRange as DailyPicker, type DateRangeValue } from "./DateRange"; import { type InsightsInterval, IntervalMenu } from "./IntervalMenu"; -import { WeekPicker, numberOfWeeksOptions } from "./WeekPicker"; import { lastWeeks } from "./utils"; +import { numberOfWeeksOptions, WeekPicker } from "./WeekPicker"; const DEFAULT_NUMBER_OF_WEEKS = numberOfWeeksOptions[0]; diff --git a/site/src/pages/TemplatePage/TemplateInsightsPage/WeekPicker.tsx b/site/src/pages/TemplatePage/TemplateInsightsPage/WeekPicker.tsx index f2f3e95bf4a68..77ce8475a6de6 100644 --- a/site/src/pages/TemplatePage/TemplateInsightsPage/WeekPicker.tsx +++ b/site/src/pages/TemplatePage/TemplateInsightsPage/WeekPicker.tsx @@ -2,8 +2,7 @@ import Button from "@mui/material/Button"; import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import dayjs from "dayjs"; -import { ChevronDownIcon } from "lucide-react"; -import { CheckIcon } from "lucide-react"; +import { CheckIcon, ChevronDownIcon } from "lucide-react"; import { type FC, useRef, useState } from "react"; import type { DateRangeValue } from "./DateRange"; import { lastWeeks } from "./utils"; diff --git a/site/src/pages/TemplatePage/TemplateLayout.tsx b/site/src/pages/TemplatePage/TemplateLayout.tsx index 2a6b60e04615c..c6b9f81945f30 100644 --- a/site/src/pages/TemplatePage/TemplateLayout.tsx +++ b/site/src/pages/TemplatePage/TemplateLayout.tsx @@ -11,10 +11,10 @@ import { workspacePermissionChecks, } from "modules/permissions/workspaces"; import { + createContext, type FC, type PropsWithChildren, Suspense, - createContext, useContext, } from "react"; import { useQuery } from "react-query"; diff --git a/site/src/pages/TemplatePage/TemplatePageHeader.stories.tsx b/site/src/pages/TemplatePage/TemplatePageHeader.stories.tsx index 7d036cdaaabb2..10063c21a134f 100644 --- a/site/src/pages/TemplatePage/TemplatePageHeader.stories.tsx +++ b/site/src/pages/TemplatePage/TemplatePageHeader.stories.tsx @@ -1,6 +1,6 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockTemplate, MockTemplateVersion } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { TemplatePageHeader } from "./TemplatePageHeader"; const meta: Meta = { diff --git a/site/src/pages/TemplatePage/TemplatePageHeader.tsx b/site/src/pages/TemplatePage/TemplatePageHeader.tsx index e6d1bb2ad6fae..544321c35e6d4 100644 --- a/site/src/pages/TemplatePage/TemplatePageHeader.tsx +++ b/site/src/pages/TemplatePage/TemplatePageHeader.tsx @@ -27,8 +27,9 @@ import { } from "components/PageHeader/PageHeader"; import { Pill } from "components/Pill/Pill"; import { Stack } from "components/Stack/Stack"; -import { CopyIcon, DownloadIcon } from "lucide-react"; import { + CopyIcon, + DownloadIcon, EllipsisVertical, PlusIcon, SettingsIcon, diff --git a/site/src/pages/TemplatePage/TemplateRedirectController.test.tsx b/site/src/pages/TemplatePage/TemplateRedirectController.test.tsx index dd030e31cc038..4bdc4e5bb2441 100644 --- a/site/src/pages/TemplatePage/TemplateRedirectController.test.tsx +++ b/site/src/pages/TemplatePage/TemplateRedirectController.test.tsx @@ -1,7 +1,7 @@ -import { waitFor } from "@testing-library/react"; -import { API } from "api/api"; import * as M from "testHelpers/entities"; import { renderWithAuth } from "testHelpers/renderHelpers"; +import { waitFor } from "@testing-library/react"; +import { API } from "api/api"; import { TemplateRedirectController } from "./TemplateRedirectController"; const renderTemplateRedirectController = (route: string) => { diff --git a/site/src/pages/TemplatePage/TemplateResourcesPage/TemplateResourcesPageView.stories.tsx b/site/src/pages/TemplatePage/TemplateResourcesPage/TemplateResourcesPageView.stories.tsx index a751cfb49e87b..6a88d61bc3827 100644 --- a/site/src/pages/TemplatePage/TemplateResourcesPage/TemplateResourcesPageView.stories.tsx +++ b/site/src/pages/TemplatePage/TemplateResourcesPage/TemplateResourcesPageView.stories.tsx @@ -1,9 +1,9 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockTemplate, MockWorkspaceResource, MockWorkspaceVolumeResource, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { TemplateResourcesPageView } from "./TemplateResourcesPageView"; const meta: Meta = { diff --git a/site/src/pages/TemplatePage/TemplateStats.stories.tsx b/site/src/pages/TemplatePage/TemplateStats.stories.tsx index 1b4796e4934a8..d10c797f4c97f 100644 --- a/site/src/pages/TemplatePage/TemplateStats.stories.tsx +++ b/site/src/pages/TemplatePage/TemplateStats.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockTemplate, MockTemplateVersion } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { TemplateStats } from "./TemplateStats"; const meta: Meta = { diff --git a/site/src/pages/TemplatePage/TemplateVersionsPage/VersionsTable.stories.tsx b/site/src/pages/TemplatePage/TemplateVersionsPage/VersionsTable.stories.tsx index 6227abf52f2ad..3530e9b79606e 100644 --- a/site/src/pages/TemplatePage/TemplateVersionsPage/VersionsTable.stories.tsx +++ b/site/src/pages/TemplatePage/TemplateVersionsPage/VersionsTable.stories.tsx @@ -1,5 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { action } from "storybook/actions"; import { MockCanceledProvisionerJob, MockCancelingProvisionerJob, @@ -8,6 +6,8 @@ import { MockRunningProvisionerJob, MockTemplateVersion, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { action } from "storybook/actions"; import { VersionsTable } from "./VersionsTable"; const meta: Meta = { diff --git a/site/src/pages/TemplatePage/useDeletionDialogState.test.ts b/site/src/pages/TemplatePage/useDeletionDialogState.test.ts index db918b76955c1..5be7910092fc6 100644 --- a/site/src/pages/TemplatePage/useDeletionDialogState.test.ts +++ b/site/src/pages/TemplatePage/useDeletionDialogState.test.ts @@ -1,6 +1,6 @@ +import { MockTemplate } from "testHelpers/entities"; import { act, renderHook, waitFor } from "@testing-library/react"; import { API } from "api/api"; -import { MockTemplate } from "testHelpers/entities"; import { useDeletionDialogState } from "./useDeletionDialogState"; test("delete dialog starts closed", () => { diff --git a/site/src/pages/TemplateSettingsPage/Sidebar.tsx b/site/src/pages/TemplateSettingsPage/Sidebar.tsx index 1aaa426061968..906a40585ca7e 100644 --- a/site/src/pages/TemplateSettingsPage/Sidebar.tsx +++ b/site/src/pages/TemplateSettingsPage/Sidebar.tsx @@ -5,10 +5,12 @@ import { SidebarHeader, SidebarNavItem, } from "components/Sidebar/Sidebar"; -import { CodeIcon as VariablesIcon } from "lucide-react"; -import { TimerIcon as ScheduleIcon } from "lucide-react"; -import { SettingsIcon } from "lucide-react"; -import { LockIcon } from "lucide-react"; +import { + LockIcon, + TimerIcon as ScheduleIcon, + SettingsIcon, + CodeIcon as VariablesIcon, +} from "lucide-react"; import { linkToTemplate, useLinks } from "modules/navigation"; import type { FC } from "react"; diff --git a/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.test.tsx b/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.test.tsx index e6c4832138571..2ed53059665bf 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.test.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.test.tsx @@ -1,8 +1,3 @@ -import { screen, waitFor } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API, withDefaultFeatures } from "api/api"; -import type { UpdateTemplateMeta } from "api/typesGenerated"; -import { http, HttpResponse } from "msw"; import { MockEntitlements, MockTemplate, @@ -13,6 +8,11 @@ import { waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API, withDefaultFeatures } from "api/api"; +import type { UpdateTemplateMeta } from "api/typesGenerated"; +import { HttpResponse, http } from "msw"; import { validationSchema } from "./TemplateSettingsForm"; import TemplateSettingsPage from "./TemplateSettingsPage"; diff --git a/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPageView.stories.tsx b/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPageView.stories.tsx index 12290312bae17..5d65ffaf15c5a 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPageView.stories.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPageView.stories.tsx @@ -1,6 +1,6 @@ +import { MockTemplate, mockApiError } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { action } from "storybook/actions"; -import { MockTemplate, mockApiError } from "testHelpers/entities"; import { TemplateSettingsPageView } from "./TemplateSettingsPageView"; const meta: Meta = { diff --git a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.stories.tsx b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.stories.tsx index bc7492ecea348..3cd295a948d2c 100644 --- a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.stories.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockTemplateACL, MockTemplateACLEmpty } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { TemplatePermissionsPageView } from "./TemplatePermissionsPageView"; const meta: Meta = { diff --git a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx index c2dc2b5c01bc3..7c250d566927d 100644 --- a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPageView.tsx @@ -30,8 +30,7 @@ import { PageHeader, PageHeaderTitle } from "components/PageHeader/PageHeader"; import { Spinner } from "components/Spinner/Spinner"; import { Stack } from "components/Stack/Stack"; import { TableLoader } from "components/TableLoader/TableLoader"; -import { UserPlusIcon } from "lucide-react"; -import { EllipsisVertical } from "lucide-react"; +import { EllipsisVertical, UserPlusIcon } from "lucide-react"; import { type FC, useState } from "react"; import { getGroupSubtitle } from "utils/groups"; import { diff --git a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/ScheduleDialog.tsx b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/ScheduleDialog.tsx index 33385da6cab7f..9c3ac62692155 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/ScheduleDialog.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/ScheduleDialog.tsx @@ -62,71 +62,66 @@ export const ScheduleDialog: FC = ({ >

      {title}

      - <> - {showDormancyWarning && ( - <> -

      Dormancy Threshold

      -

      - This change will result in{" "} - {inactiveWorkspacesToGoDormant}{" "} - {inactiveWorkspacesToGoDormant === 1 - ? "workspace" - : "workspaces"}{" "} - being immediately transitioned to the dormant state and{" "} - {inactiveWorkspacesToGoDormantInWeek}{" "} - {inactiveWorkspacesToGoDormantInWeek === 1 - ? "workspace" - : "workspaces"}{" "} - over the next 7 days. To prevent this, do you want to reset the - inactivity period for all template workspaces? -

      - { - updateInactiveWorkspaces(e.target.checked); - }} - /> - } - label="Prevent Dormancy - Reset all workspace inactivity periods" - /> - - )} - {showDeletionWarning && ( - <> -

      Dormancy Auto-Deletion

      -

      - This change will result in{" "} - {dormantWorkspacesToBeDeleted}{" "} - {dormantWorkspacesToBeDeleted === 1 - ? "workspace" - : "workspaces"}{" "} - being immediately deleted and{" "} - {dormantWorkspacesToBeDeletedInWeek}{" "} - {dormantWorkspacesToBeDeletedInWeek === 1 - ? "workspace" - : "workspaces"}{" "} - over the next 7 days. To prevent this, do you want to reset the - dormancy period for all template workspaces? -

      - { - updateDormantWorkspaces(e.target.checked); - }} - /> - } - label="Prevent Deletion - Reset all workspace dormancy periods" - /> - - )} - + {showDormancyWarning && ( + <> +

      Dormancy Threshold

      +

      + This change will result in{" "} + {inactiveWorkspacesToGoDormant}{" "} + {inactiveWorkspacesToGoDormant === 1 ? "workspace" : "workspaces"}{" "} + being immediately transitioned to the dormant state and{" "} + {inactiveWorkspacesToGoDormantInWeek}{" "} + {inactiveWorkspacesToGoDormantInWeek === 1 + ? "workspace" + : "workspaces"}{" "} + over the next 7 days. To prevent this, do you want to reset the + inactivity period for all template workspaces? +

      + { + updateInactiveWorkspaces(e.target.checked); + }} + /> + } + label="Prevent Dormancy - Reset all workspace inactivity periods" + /> + + )} + + {showDeletionWarning && ( + <> +

      Dormancy Auto-Deletion

      +

      + This change will result in{" "} + {dormantWorkspacesToBeDeleted}{" "} + {dormantWorkspacesToBeDeleted === 1 ? "workspace" : "workspaces"}{" "} + being immediately deleted and{" "} + {dormantWorkspacesToBeDeletedInWeek}{" "} + {dormantWorkspacesToBeDeletedInWeek === 1 + ? "workspace" + : "workspaces"}{" "} + over the next 7 days. To prevent this, do you want to reset the + dormancy period for all template workspaces? +

      + { + updateDormantWorkspaces(e.target.checked); + }} + /> + } + label="Prevent Deletion - Reset all workspace dormancy periods" + /> + + )}
      diff --git a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleAutostart.tsx b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleAutostart.tsx index d595ab553e334..17d5df873778b 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleAutostart.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleAutostart.tsx @@ -3,8 +3,8 @@ import FormHelperText from "@mui/material/FormHelperText"; import { Stack } from "components/Stack/Stack"; import type { FC } from "react"; import { - type TemplateAutostartRequirementDaysValue, sortedDays, + type TemplateAutostartRequirementDaysValue, } from "utils/schedule"; interface TemplateScheduleAutostartProps { diff --git a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleForm.tsx b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleForm.tsx index c7bdc6d647854..f37ade6e31a75 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleForm.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleForm.tsx @@ -22,15 +22,20 @@ import { type FormikTouched, useFormik } from "formik"; import { type ChangeEvent, type FC, useEffect, useState } from "react"; import { getFormHelpers } from "utils/formUtils"; import { - type TemplateAutostartRequirementDaysValue, calculateAutostopRequirementDaysValue, + type TemplateAutostartRequirementDaysValue, } from "utils/schedule"; import { AutostopRequirementDaysHelperText, AutostopRequirementWeeksHelperText, convertAutostopRequirementDaysValue, } from "./AutostopRequirementHelperText"; +import { + getValidationSchema, + type TemplateScheduleFormValues, +} from "./formHelpers"; import { ScheduleDialog } from "./ScheduleDialog"; +import { TemplateScheduleAutostart } from "./TemplateScheduleAutostart"; import { ActivityBumpHelperText, DefaultTTLHelperText, @@ -38,11 +43,6 @@ import { DormancyTTLHelperText, FailureTTLHelperText, } from "./TTLHelperText"; -import { TemplateScheduleAutostart } from "./TemplateScheduleAutostart"; -import { - type TemplateScheduleFormValues, - getValidationSchema, -} from "./formHelpers"; import { useWorkspacesToBeDeleted, useWorkspacesToGoDormant, diff --git a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePage.test.tsx b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePage.test.tsx index 8e020743ed2b4..ee9114f878674 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePage.test.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePage.test.tsx @@ -1,6 +1,3 @@ -import { screen, waitFor } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; import { MockEntitlementsWithScheduling, MockTemplate, @@ -9,11 +6,14 @@ import { renderWithTemplateSettingsLayout, waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; -import TemplateSchedulePage from "./TemplateSchedulePage"; +import { screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; import { - type TemplateScheduleFormValues, getValidationSchema, + type TemplateScheduleFormValues, } from "./formHelpers"; +import TemplateSchedulePage from "./TemplateSchedulePage"; const validFormValues: TemplateScheduleFormValues = { default_ttl_ms: 1, diff --git a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePageView.stories.tsx b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePageView.stories.tsx index e54d961a7d49e..364fadbd7ee31 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePageView.stories.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePageView.stories.tsx @@ -1,7 +1,7 @@ +import { MockTemplate } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { QueryClient, QueryClientProvider } from "react-query"; import { action } from "storybook/actions"; -import { MockTemplate } from "testHelpers/entities"; import { TemplateSchedulePageView } from "./TemplateSchedulePageView"; const queryClient = new QueryClient({ diff --git a/site/src/pages/TemplateSettingsPage/TemplateSettingsLayout.tsx b/site/src/pages/TemplateSettingsPage/TemplateSettingsLayout.tsx index 2236048778301..ad8dc4bdcd132 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateSettingsLayout.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateSettingsLayout.tsx @@ -5,7 +5,7 @@ import { ErrorAlert } from "components/Alert/ErrorAlert"; import { Loader } from "components/Loader/Loader"; import { Margins } from "components/Margins/Margins"; import { Stack } from "components/Stack/Stack"; -import { type FC, Suspense, createContext, useContext } from "react"; +import { createContext, type FC, Suspense, useContext } from "react"; import { Helmet } from "react-helmet-async"; import { useQuery } from "react-query"; import { Outlet, useParams } from "react-router"; diff --git a/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesForm.tsx b/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesForm.tsx index 4c0bb7f8c8ab8..b33b0042c3f2d 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesForm.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesForm.tsx @@ -161,7 +161,7 @@ const selectInitialUserVariableValues = ( }; const ValidationSchemaForTemplateVariables = ( - ns: string, + _ns: string, templateVariables: TemplateVersionVariable[], ): Yup.AnySchema => { return Yup.array() diff --git a/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesPage.test.tsx b/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesPage.test.tsx index 4a4507d660a32..2f26b64a1f3ad 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesPage.test.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesPage.test.tsx @@ -1,6 +1,3 @@ -import { screen } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; import { MockTemplate, MockTemplateVersion, @@ -12,6 +9,9 @@ import { renderWithTemplateSettingsLayout, waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; +import { screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; import { delay } from "utils/delay"; import TemplateVariablesPage from "./TemplateVariablesPage"; diff --git a/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesPageView.stories.tsx b/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesPageView.stories.tsx index deb9541b83cc8..b8f6e230904d2 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesPageView.stories.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesPageView.stories.tsx @@ -1,5 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { action } from "storybook/actions"; import { MockTemplateVersion, MockTemplateVersionVariable1, @@ -9,6 +7,8 @@ import { MockTemplateVersionVariable5, mockApiError, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { action } from "storybook/actions"; import { TemplateVariablesPageView } from "./TemplateVariablesPageView"; const meta: Meta = { diff --git a/site/src/pages/TemplateVersionEditorPage/ProvisionerTagsPopover.stories.tsx b/site/src/pages/TemplateVersionEditorPage/ProvisionerTagsPopover.stories.tsx index 7aadbdebc242b..1d73abd8cb747 100644 --- a/site/src/pages/TemplateVersionEditorPage/ProvisionerTagsPopover.stories.tsx +++ b/site/src/pages/TemplateVersionEditorPage/ProvisionerTagsPopover.stories.tsx @@ -1,8 +1,8 @@ +import { chromatic } from "testHelpers/chromatic"; +import { MockTemplateVersion } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { useState } from "react"; import { expect, fn, userEvent, within } from "storybook/test"; -import { chromatic } from "testHelpers/chromatic"; -import { MockTemplateVersion } from "testHelpers/entities"; import { ProvisionerTagsPopover } from "./ProvisionerTagsPopover"; const meta: Meta = { diff --git a/site/src/pages/TemplateVersionEditorPage/ProvisionerTagsPopover.tsx b/site/src/pages/TemplateVersionEditorPage/ProvisionerTagsPopover.tsx index 3e8191b0f4817..b268894bbf331 100644 --- a/site/src/pages/TemplateVersionEditorPage/ProvisionerTagsPopover.tsx +++ b/site/src/pages/TemplateVersionEditorPage/ProvisionerTagsPopover.tsx @@ -1,13 +1,13 @@ import Link from "@mui/material/Link"; import useTheme from "@mui/system/useTheme"; import type { ProvisionerDaemon } from "api/typesGenerated"; -import { FormSection } from "components/Form/Form"; -import { TopbarButton } from "components/FullPageLayout/Topbar"; import { Popover, PopoverContent, PopoverTrigger, } from "components/deprecated/Popover/Popover"; +import { FormSection } from "components/Form/Form"; +import { TopbarButton } from "components/FullPageLayout/Topbar"; import { ChevronDownIcon } from "lucide-react"; import { ProvisionerTagsField } from "modules/provisioners/ProvisionerTagsField"; import type { FC } from "react"; diff --git a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.stories.tsx b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.stories.tsx index bce869ec33a0f..897446db61c6e 100644 --- a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.stories.tsx +++ b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.stories.tsx @@ -1,5 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { action } from "storybook/actions"; import { chromatic } from "testHelpers/chromatic"; import { MockFailedProvisionerJob, @@ -17,6 +15,8 @@ import { MockWorkspaceVolumeResource, } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { action } from "storybook/actions"; import { TemplateVersionEditor } from "./TemplateVersionEditor"; const meta: Meta = { diff --git a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx index 4a0e2b5c5fb60..740f5e42ab7de 100644 --- a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx +++ b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx @@ -23,15 +23,22 @@ import { } from "components/FullPageLayout/Topbar"; import { displayError } from "components/GlobalSnackbar/utils"; import { Loader } from "components/Loader/Loader"; -import { TriangleAlertIcon } from "lucide-react"; -import { ChevronLeftIcon } from "lucide-react"; -import { ExternalLinkIcon, PlayIcon, PlusIcon, XIcon } from "lucide-react"; +import { + ChevronLeftIcon, + ExternalLinkIcon, + PlayIcon, + PlusIcon, + TriangleAlertIcon, + XIcon, +} from "lucide-react"; import { linkToTemplate, useLinks } from "modules/navigation"; -import { ProvisionerAlert } from "modules/provisioners/ProvisionerAlert"; -import { AlertVariant } from "modules/provisioners/ProvisionerAlert"; +import { + AlertVariant, + ProvisionerAlert, +} from "modules/provisioners/ProvisionerAlert"; import { ProvisionerStatusAlert } from "modules/provisioners/ProvisionerStatusAlert"; -import { TemplateFileTree } from "modules/templates/TemplateFiles/TemplateFileTree"; import { isBinaryData } from "modules/templates/TemplateFiles/isBinaryData"; +import { TemplateFileTree } from "modules/templates/TemplateFiles/TemplateFileTree"; import { TemplateResourcesTable } from "modules/templates/TemplateResourcesTable/TemplateResourcesTable"; import { WorkspaceBuildLogs } from "modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs"; import type { PublishVersionData } from "pages/TemplateVersionEditorPage/types"; @@ -42,9 +49,9 @@ import { } from "react-router"; import { MONOSPACE_FONT_FAMILY } from "theme/constants"; import { - type FileTree, createFile, existsFile, + type FileTree, getFileText, isFolder, moveFile, diff --git a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.test.tsx b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.test.tsx index bf57a3c26b0f4..066433f54138a 100644 --- a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.test.tsx +++ b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.test.tsx @@ -1,14 +1,4 @@ -import { render, screen, waitFor, within } from "@testing-library/react"; -import userEvent, { type UserEvent } from "@testing-library/user-event"; import { AppProviders } from "App"; -import * as apiModule from "api/api"; -import { templateVersionVariablesKey } from "api/queries/templates"; -import type { TemplateVersion } from "api/typesGenerated"; -import { RequireAuth } from "contexts/auth/RequireAuth"; -import WS from "jest-websocket-mock"; -import { http, HttpResponse } from "msw"; -import { QueryClient } from "react-query"; -import { RouterProvider, createMemoryRouter } from "react-router"; import { MockTemplate, MockTemplateVersion, @@ -22,6 +12,16 @@ import { waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { render, screen, waitFor, within } from "@testing-library/react"; +import userEvent, { type UserEvent } from "@testing-library/user-event"; +import * as apiModule from "api/api"; +import { templateVersionVariablesKey } from "api/queries/templates"; +import type { TemplateVersion } from "api/typesGenerated"; +import { RequireAuth } from "contexts/auth/RequireAuth"; +import WS from "jest-websocket-mock"; +import { HttpResponse, http } from "msw"; +import { QueryClient } from "react-query"; +import { createMemoryRouter, RouterProvider } from "react-router"; import type { FileTree } from "utils/filetree"; import type { MonacoEditorProps } from "./MonacoEditor"; import { Language } from "./PublishTemplateVersionDialog"; diff --git a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx index c0a26196c6b85..33a53b5eb352f 100644 --- a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx +++ b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx @@ -25,7 +25,7 @@ import { useQueryClient, } from "react-query"; import { useNavigate, useParams, useSearchParams } from "react-router"; -import { type FileTree, existsFile, traverse } from "utils/filetree"; +import { existsFile, type FileTree, traverse } from "utils/filetree"; import { pageTitle } from "utils/page"; import { TarReader, TarWriter } from "utils/tar"; import { createTemplateVersionFileTree } from "utils/templateVersion"; diff --git a/site/src/pages/TemplateVersionEditorPage/TemplateVersionStatusBadge.tsx b/site/src/pages/TemplateVersionEditorPage/TemplateVersionStatusBadge.tsx index bdafbd115a557..5a339fedfdd34 100644 --- a/site/src/pages/TemplateVersionEditorPage/TemplateVersionStatusBadge.tsx +++ b/site/src/pages/TemplateVersionEditorPage/TemplateVersionStatusBadge.tsx @@ -1,7 +1,6 @@ import type { TemplateVersion } from "api/typesGenerated"; import { Pill, PillSpinner } from "components/Pill/Pill"; -import { HourglassIcon } from "lucide-react"; -import { CheckIcon, CircleAlertIcon } from "lucide-react"; +import { CheckIcon, CircleAlertIcon, HourglassIcon } from "lucide-react"; import type { FC, ReactNode } from "react"; import type { ThemeRole } from "theme/roles"; import { getPendingStatusLabel } from "utils/provisionerJob"; diff --git a/site/src/pages/TemplateVersionPage/TemplateVersionPage.test.tsx b/site/src/pages/TemplateVersionPage/TemplateVersionPage.test.tsx index ee47b53ff09c0..a737d8c7851dc 100644 --- a/site/src/pages/TemplateVersionPage/TemplateVersionPage.test.tsx +++ b/site/src/pages/TemplateVersionPage/TemplateVersionPage.test.tsx @@ -1,8 +1,8 @@ -import { screen, within } from "@testing-library/react"; import { renderWithAuth, waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; +import { screen, within } from "@testing-library/react"; import * as CreateDayString from "utils/createDayString"; import * as templateVersionUtils from "utils/templateVersion"; import TemplateVersionPage from "./TemplateVersionPage"; diff --git a/site/src/pages/TemplateVersionPage/TemplateVersionPageView.stories.tsx b/site/src/pages/TemplateVersionPage/TemplateVersionPageView.stories.tsx index 312b556d5a422..94d6cd593e951 100644 --- a/site/src/pages/TemplateVersionPage/TemplateVersionPageView.stories.tsx +++ b/site/src/pages/TemplateVersionPage/TemplateVersionPageView.stories.tsx @@ -1,4 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockTemplate, MockTemplateVersion, @@ -6,6 +5,7 @@ import { mockApiError, } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { TemplateVersionPageView, type TemplateVersionPageViewProps, diff --git a/site/src/pages/TemplatesPage/TemplatesFilter.tsx b/site/src/pages/TemplatesPage/TemplatesFilter.tsx index 59ab5729f787b..f9951dec2cca6 100644 --- a/site/src/pages/TemplatesPage/TemplatesFilter.tsx +++ b/site/src/pages/TemplatesPage/TemplatesFilter.tsx @@ -2,11 +2,11 @@ import { API } from "api/api"; import type { Organization } from "api/typesGenerated"; import { Avatar } from "components/Avatar/Avatar"; import { Filter, MenuSkeleton, type useFilter } from "components/Filter/Filter"; +import { useFilterMenu } from "components/Filter/menu"; import { SelectFilter, type SelectFilterOption, } from "components/Filter/SelectFilter"; -import { useFilterMenu } from "components/Filter/menu"; import type { FC } from "react"; interface TemplatesFilterProps { diff --git a/site/src/pages/TemplatesPage/TemplatesPageView.stories.tsx b/site/src/pages/TemplatesPage/TemplatesPageView.stories.tsx index deadabf5fe93f..9d8e55c171ea9 100644 --- a/site/src/pages/TemplatesPage/TemplatesPageView.stories.tsx +++ b/site/src/pages/TemplatesPage/TemplatesPageView.stories.tsx @@ -1,5 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { getDefaultFilterProps } from "components/Filter/storyHelpers"; import { chromaticWithTablet } from "testHelpers/chromatic"; import { MockTemplate, @@ -8,6 +6,8 @@ import { mockApiError, } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { getDefaultFilterProps } from "components/Filter/storyHelpers"; import { TemplatesPageView } from "./TemplatesPageView"; const meta: Meta = { diff --git a/site/src/pages/TerminalPage/TerminalPage.stories.tsx b/site/src/pages/TerminalPage/TerminalPage.stories.tsx index 3b5e4b509b6b1..2953e7e03a77e 100644 --- a/site/src/pages/TerminalPage/TerminalPage.stories.tsx +++ b/site/src/pages/TerminalPage/TerminalPage.stories.tsx @@ -1,14 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { getAuthorizationKey } from "api/queries/authCheck"; -import { workspaceByOwnerAndNameKey } from "api/queries/workspaces"; -import type { Workspace, WorkspaceAgentLifecycle } from "api/typesGenerated"; -import { AuthProvider } from "contexts/auth/AuthProvider"; -import { RequireAuth } from "contexts/auth/RequireAuth"; -import { permissionChecks } from "modules/permissions"; -import { - reactRouterOutlet, - reactRouterParameters, -} from "storybook-addon-remix-react-router"; import { MockAppearanceConfig, MockAuthMethodsAll, @@ -23,6 +12,17 @@ import { MockWorkspaceAgent, } from "testHelpers/entities"; import { withWebSocket } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { getAuthorizationKey } from "api/queries/authCheck"; +import { workspaceByOwnerAndNameKey } from "api/queries/workspaces"; +import type { Workspace, WorkspaceAgentLifecycle } from "api/typesGenerated"; +import { AuthProvider } from "contexts/auth/AuthProvider"; +import { RequireAuth } from "contexts/auth/RequireAuth"; +import { permissionChecks } from "modules/permissions"; +import { + reactRouterOutlet, + reactRouterParameters, +} from "storybook-addon-remix-react-router"; import TerminalPage from "./TerminalPage"; const createWorkspaceWithAgent = (lifecycle: WorkspaceAgentLifecycle) => { diff --git a/site/src/pages/TerminalPage/TerminalPage.test.tsx b/site/src/pages/TerminalPage/TerminalPage.test.tsx index 7530a45914a85..3db81a9298d1c 100644 --- a/site/src/pages/TerminalPage/TerminalPage.test.tsx +++ b/site/src/pages/TerminalPage/TerminalPage.test.tsx @@ -1,9 +1,4 @@ import "jest-canvas-mock"; -import { waitFor } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; -import WS from "jest-websocket-mock"; -import { http, HttpResponse } from "msw"; import { MockUserOwner, MockWorkspace, @@ -11,6 +6,11 @@ import { } from "testHelpers/entities"; import { renderWithAuth } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; +import WS from "jest-websocket-mock"; +import { HttpResponse, http } from "msw"; import TerminalPage, { Language } from "./TerminalPage"; const renderTerminal = async ( diff --git a/site/src/pages/UserSettingsPage/AccountPage/AccountForm.stories.tsx b/site/src/pages/UserSettingsPage/AccountPage/AccountForm.stories.tsx index a79f814d1abaf..572bfbbc712d7 100644 --- a/site/src/pages/UserSettingsPage/AccountPage/AccountForm.stories.tsx +++ b/site/src/pages/UserSettingsPage/AccountPage/AccountForm.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { mockApiError } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { AccountForm } from "./AccountForm"; const meta: Meta = { diff --git a/site/src/pages/UserSettingsPage/AccountPage/AccountForm.test.tsx b/site/src/pages/UserSettingsPage/AccountPage/AccountForm.test.tsx index f32d83c69507e..1369cc1dc5ef3 100644 --- a/site/src/pages/UserSettingsPage/AccountPage/AccountForm.test.tsx +++ b/site/src/pages/UserSettingsPage/AccountPage/AccountForm.test.tsx @@ -1,7 +1,7 @@ -import { screen } from "@testing-library/react"; -import type { UpdateUserProfileRequest } from "api/typesGenerated"; import { MockUserMember } from "testHelpers/entities"; import { render } from "testHelpers/renderHelpers"; +import { screen } from "@testing-library/react"; +import type { UpdateUserProfileRequest } from "api/typesGenerated"; import { AccountForm } from "./AccountForm"; // NOTE: it does not matter what the role props of MockUser are set to, diff --git a/site/src/pages/UserSettingsPage/AccountPage/AccountPage.test.tsx b/site/src/pages/UserSettingsPage/AccountPage/AccountPage.test.tsx index 23d1fdf5ddeaf..4215e62c44365 100644 --- a/site/src/pages/UserSettingsPage/AccountPage/AccountPage.test.tsx +++ b/site/src/pages/UserSettingsPage/AccountPage/AccountPage.test.tsx @@ -1,7 +1,7 @@ -import { fireEvent, screen, waitFor } from "@testing-library/react"; -import { API } from "api/api"; import { mockApiError } from "testHelpers/entities"; import { renderWithAuth } from "testHelpers/renderHelpers"; +import { fireEvent, screen, waitFor } from "@testing-library/react"; +import { API } from "api/api"; import * as AccountForm from "./AccountForm"; import AccountPage from "./AccountPage"; diff --git a/site/src/pages/UserSettingsPage/AccountPage/AccountUserGroups.stories.tsx b/site/src/pages/UserSettingsPage/AccountPage/AccountUserGroups.stories.tsx index 9bda00adfe1f1..443df4bf0aba1 100644 --- a/site/src/pages/UserSettingsPage/AccountPage/AccountUserGroups.stories.tsx +++ b/site/src/pages/UserSettingsPage/AccountPage/AccountUserGroups.stories.tsx @@ -1,10 +1,10 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockGroup as MockGroup1, MockUserOwner, mockApiError, } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { AccountUserGroups } from "./AccountUserGroups"; const MockGroup2 = { diff --git a/site/src/pages/UserSettingsPage/AppearancePage/AppearancePage.test.tsx b/site/src/pages/UserSettingsPage/AppearancePage/AppearancePage.test.tsx index e6c2462acfabc..c130764a8337f 100644 --- a/site/src/pages/UserSettingsPage/AppearancePage/AppearancePage.test.tsx +++ b/site/src/pages/UserSettingsPage/AppearancePage/AppearancePage.test.tsx @@ -1,8 +1,8 @@ +import { MockUserOwner } from "testHelpers/entities"; +import { renderWithAuth } from "testHelpers/renderHelpers"; import { screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { API } from "api/api"; -import { MockUserOwner } from "testHelpers/entities"; -import { renderWithAuth } from "testHelpers/renderHelpers"; import AppearancePage from "./AppearancePage"; describe("appearance page", () => { diff --git a/site/src/pages/UserSettingsPage/AppearancePage/AppearancePage.tsx b/site/src/pages/UserSettingsPage/AppearancePage/AppearancePage.tsx index 2b25f8e296d49..40294ee9ca5a3 100644 --- a/site/src/pages/UserSettingsPage/AppearancePage/AppearancePage.tsx +++ b/site/src/pages/UserSettingsPage/AppearancePage/AppearancePage.tsx @@ -1,5 +1,7 @@ -import { updateAppearanceSettings } from "api/queries/users"; -import { appearanceSettings } from "api/queries/users"; +import { + appearanceSettings, + updateAppearanceSettings, +} from "api/queries/users"; import { ErrorAlert } from "components/Alert/ErrorAlert"; import { Loader } from "components/Loader/Loader"; import { useEmbeddedMetadata } from "hooks/useEmbeddedMetadata"; @@ -27,17 +29,15 @@ const AppearancePage: FC = () => { } return ( - <> - - + ); }; diff --git a/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.stories.tsx b/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.stories.tsx index 4fc77efebe1c8..b94d51e8433e2 100644 --- a/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.stories.tsx +++ b/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.stories.tsx @@ -1,8 +1,8 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockGithubAuthLink, MockGithubExternalProvider, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { ExternalAuthPageView } from "./ExternalAuthPageView"; const meta: Meta = { diff --git a/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.tsx b/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.tsx index b4924a5a09381..617e3bde52b34 100644 --- a/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.tsx +++ b/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.tsx @@ -59,43 +59,41 @@ export const ExternalAuthPageView: FC = ({ } return ( - <> - - - - - Application - - - Link to connect - - - - - - - {auths.providers === null || auths.providers?.length === 0 ? ( - - ) : ( - auths.providers?.map((app) => ( - l.provider_id === app.id)} - onUnlinkExternalAuth={() => { - onUnlinkExternalAuth(app.id); - }} - onValidateExternalAuth={() => { - onValidateExternalAuth(app.id); - }} - /> - )) - )} - -
      -
      - + + + + + Application + + + Link to connect + + + + + + + {auths.providers === null || auths.providers?.length === 0 ? ( + + ) : ( + auths.providers?.map((app) => ( + l.provider_id === app.id)} + onUnlinkExternalAuth={() => { + onUnlinkExternalAuth(app.id); + }} + onValidateExternalAuth={() => { + onValidateExternalAuth(app.id); + }} + /> + )) + )} + +
      +
      ); }; diff --git a/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.stories.tsx b/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.stories.tsx index 2af87e66a7e46..cd93877f600e9 100644 --- a/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.stories.tsx +++ b/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.stories.tsx @@ -1,12 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { API } from "api/api"; -import { - notificationDispatchMethodsKey, - systemNotificationTemplatesKey, - userNotificationPreferencesKey, -} from "api/queries/notifications"; -import { reactRouterParameters } from "storybook-addon-remix-react-router"; -import { expect, spyOn, userEvent, within } from "storybook/test"; import { MockNotificationMethodsResponse, MockNotificationPreferences, @@ -18,6 +9,15 @@ import { withDashboardProvider, withGlobalSnackbar, } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { API } from "api/api"; +import { + notificationDispatchMethodsKey, + systemNotificationTemplatesKey, + userNotificationPreferencesKey, +} from "api/queries/notifications"; +import { expect, spyOn, userEvent, within } from "storybook/test"; +import { reactRouterParameters } from "storybook-addon-remix-react-router"; import NotificationsPage from "./NotificationsPage"; const meta = { diff --git a/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.tsx b/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.tsx index 4f47064e45355..d9e8e99c076cb 100644 --- a/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.tsx +++ b/site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.tsx @@ -29,8 +29,7 @@ import { methodLabels, } from "modules/notifications/utils"; import type { Permissions } from "modules/permissions"; -import { type FC, Fragment } from "react"; -import { useEffect } from "react"; +import { type FC, Fragment, useEffect } from "react"; import { Helmet } from "react-helmet-async"; import { useMutation, useQueries, useQueryClient } from "react-query"; import { useSearchParams } from "react-router"; diff --git a/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.stories.tsx b/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.stories.tsx index 406bf58ab6239..257ca13851903 100644 --- a/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.stories.tsx +++ b/site/src/pages/UserSettingsPage/OAuth2ProviderPage/OAuth2ProviderPageView.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockOAuth2ProviderApps } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import OAuth2ProviderPageView from "./OAuth2ProviderPageView"; const meta: Meta = { diff --git a/site/src/pages/UserSettingsPage/SSHKeysPage/SSHKeysPage.test.tsx b/site/src/pages/UserSettingsPage/SSHKeysPage/SSHKeysPage.test.tsx index 57021e8f14907..f4124026ecdfa 100644 --- a/site/src/pages/UserSettingsPage/SSHKeysPage/SSHKeysPage.test.tsx +++ b/site/src/pages/UserSettingsPage/SSHKeysPage/SSHKeysPage.test.tsx @@ -1,7 +1,7 @@ -import { fireEvent, screen, within } from "@testing-library/react"; -import { API } from "api/api"; import { MockGitSSHKey, mockApiError } from "testHelpers/entities"; import { renderWithAuth } from "testHelpers/renderHelpers"; +import { fireEvent, screen, within } from "@testing-library/react"; +import { API } from "api/api"; import SSHKeysPage, { Language as SSHKeysPageLanguage } from "./SSHKeysPage"; describe("SSH keys Page", () => { diff --git a/site/src/pages/UserSettingsPage/SSHKeysPage/SSHKeysPageView.stories.tsx b/site/src/pages/UserSettingsPage/SSHKeysPage/SSHKeysPageView.stories.tsx index f496a6b02c4ad..a46732ee96992 100644 --- a/site/src/pages/UserSettingsPage/SSHKeysPage/SSHKeysPageView.stories.tsx +++ b/site/src/pages/UserSettingsPage/SSHKeysPage/SSHKeysPageView.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { mockApiError } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { SSHKeysPageView } from "./SSHKeysPageView"; const meta: Meta = { diff --git a/site/src/pages/UserSettingsPage/SchedulePage/ScheduleForm.stories.tsx b/site/src/pages/UserSettingsPage/SchedulePage/ScheduleForm.stories.tsx index d91a6e1cf9af9..ca53d69b592a3 100644 --- a/site/src/pages/UserSettingsPage/SchedulePage/ScheduleForm.stories.tsx +++ b/site/src/pages/UserSettingsPage/SchedulePage/ScheduleForm.stories.tsx @@ -1,6 +1,6 @@ +import { mockApiError } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { action } from "storybook/actions"; -import { mockApiError } from "testHelpers/entities"; import { ScheduleForm } from "./ScheduleForm"; const defaultArgs = { diff --git a/site/src/pages/UserSettingsPage/SchedulePage/SchedulePage.test.tsx b/site/src/pages/UserSettingsPage/SchedulePage/SchedulePage.test.tsx index 874dbf3c7fb32..6d63489397a78 100644 --- a/site/src/pages/UserSettingsPage/SchedulePage/SchedulePage.test.tsx +++ b/site/src/pages/UserSettingsPage/SchedulePage/SchedulePage.test.tsx @@ -1,10 +1,10 @@ -import { fireEvent, screen, waitFor, within } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import type { UpdateUserQuietHoursScheduleRequest } from "api/typesGenerated"; -import { http, HttpResponse } from "msw"; import { MockUserOwner } from "testHelpers/entities"; import { renderWithAuth } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { fireEvent, screen, waitFor, within } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import type { UpdateUserQuietHoursScheduleRequest } from "api/typesGenerated"; +import { HttpResponse, http } from "msw"; import SchedulePage from "./SchedulePage"; const fillForm = async ({ diff --git a/site/src/pages/UserSettingsPage/SecurityPage/SecurityForm.stories.tsx b/site/src/pages/UserSettingsPage/SecurityPage/SecurityForm.stories.tsx index ad075fa985d90..be8a0ccff014c 100644 --- a/site/src/pages/UserSettingsPage/SecurityPage/SecurityForm.stories.tsx +++ b/site/src/pages/UserSettingsPage/SecurityPage/SecurityForm.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { mockApiError } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { SecurityForm } from "./SecurityForm"; const meta: Meta = { diff --git a/site/src/pages/UserSettingsPage/SecurityPage/SecurityForm.tsx b/site/src/pages/UserSettingsPage/SecurityPage/SecurityForm.tsx index 8a050f710d0f4..dc320a58d5ff3 100644 --- a/site/src/pages/UserSettingsPage/SecurityPage/SecurityForm.tsx +++ b/site/src/pages/UserSettingsPage/SecurityPage/SecurityForm.tsx @@ -73,39 +73,37 @@ export const SecurityForm: FC = ({ } return ( - <> -
      - - {Boolean(error) && } - - - + + + {Boolean(error) && } + + + -
      - -
      -
      - - +
      + +
      +
      + ); }; diff --git a/site/src/pages/UserSettingsPage/SecurityPage/SecurityPage.test.tsx b/site/src/pages/UserSettingsPage/SecurityPage/SecurityPage.test.tsx index b3706fab19327..de8c14253dbe4 100644 --- a/site/src/pages/UserSettingsPage/SecurityPage/SecurityPage.test.tsx +++ b/site/src/pages/UserSettingsPage/SecurityPage/SecurityPage.test.tsx @@ -1,12 +1,12 @@ -import { fireEvent, screen, waitFor, within } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; -import type { OAuthConversionResponse } from "api/typesGenerated"; import { MockAuthMethodsAll, mockApiError } from "testHelpers/entities"; import { renderWithAuth, waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; +import { fireEvent, screen, waitFor, within } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; +import type { OAuthConversionResponse } from "api/typesGenerated"; import { Language } from "./SecurityForm"; import SecurityPage from "./SecurityPage"; import * as SSO from "./SingleSignOnSection"; diff --git a/site/src/pages/UserSettingsPage/SecurityPage/SecurityPageView.stories.tsx b/site/src/pages/UserSettingsPage/SecurityPage/SecurityPageView.stories.tsx index 624cc4453612b..149c1015b35b7 100644 --- a/site/src/pages/UserSettingsPage/SecurityPage/SecurityPageView.stories.tsx +++ b/site/src/pages/UserSettingsPage/SecurityPage/SecurityPageView.stories.tsx @@ -1,11 +1,11 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import set from "lodash/fp/set"; -import type { ComponentProps } from "react"; -import { action } from "storybook/actions"; import { MockAuthMethodsAll, MockAuthMethodsPasswordOnly, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import set from "lodash/fp/set"; +import type { ComponentProps } from "react"; +import { action } from "storybook/actions"; import { SecurityPageView } from "./SecurityPage"; const defaultArgs: ComponentProps = { diff --git a/site/src/pages/UserSettingsPage/TokensPage/ConfirmDeleteDialog.stories.tsx b/site/src/pages/UserSettingsPage/TokensPage/ConfirmDeleteDialog.stories.tsx index 161145e2e414a..56ba22c7be381 100644 --- a/site/src/pages/UserSettingsPage/TokensPage/ConfirmDeleteDialog.stories.tsx +++ b/site/src/pages/UserSettingsPage/TokensPage/ConfirmDeleteDialog.stories.tsx @@ -1,6 +1,6 @@ +import { MockToken } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { QueryClient, QueryClientProvider } from "react-query"; -import { MockToken } from "testHelpers/entities"; import { ConfirmDeleteDialog } from "./ConfirmDeleteDialog"; const queryClient = new QueryClient({ diff --git a/site/src/pages/UserSettingsPage/TokensPage/TokensPage.tsx b/site/src/pages/UserSettingsPage/TokensPage/TokensPage.tsx index 18bc0b4acfa63..9e2918832cd7c 100644 --- a/site/src/pages/UserSettingsPage/TokensPage/TokensPage.tsx +++ b/site/src/pages/UserSettingsPage/TokensPage/TokensPage.tsx @@ -1,4 +1,4 @@ -import { type Interpolation, type Theme, css } from "@emotion/react"; +import { css, type Interpolation, type Theme } from "@emotion/react"; import Button from "@mui/material/Button"; import type { APIKeyWithOwner } from "api/typesGenerated"; import { Stack } from "components/Stack/Stack"; @@ -7,8 +7,8 @@ import { type FC, useState } from "react"; import { Link as RouterLink } from "react-router"; import { Section } from "../Section"; import { ConfirmDeleteDialog } from "./ConfirmDeleteDialog"; -import { TokensPageView } from "./TokensPageView"; import { useTokensData } from "./hooks"; +import { TokensPageView } from "./TokensPageView"; const cliCreateCommand = "coder tokens create"; diff --git a/site/src/pages/UserSettingsPage/TokensPage/TokensPageView.stories.tsx b/site/src/pages/UserSettingsPage/TokensPage/TokensPageView.stories.tsx index cd84b64976f39..51d4e30e24cb7 100644 --- a/site/src/pages/UserSettingsPage/TokensPage/TokensPageView.stories.tsx +++ b/site/src/pages/UserSettingsPage/TokensPage/TokensPageView.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockTokens, mockApiError } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { TokensPageView } from "./TokensPageView"; const meta: Meta = { diff --git a/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyRow.tsx b/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyRow.tsx index 591e4bce59aae..417a5d731e33d 100644 --- a/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyRow.tsx +++ b/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyRow.tsx @@ -33,7 +33,6 @@ export const ProxyRow: FC = ({ proxy, latency }) => { case "http/1.0": case "http/1.1": extraWarnings.push( - // biome-ignore lint/style/useTemplate: easier to read short lines `Requests to the proxy from current browser are using "${latency.nextHopProtocol}". ` + "The proxy server might not support HTTP/2. " + "For usability reasons, HTTP/2 or above is recommended. " + @@ -141,7 +140,7 @@ const ProxyMessagesList: FC = ({ title, messages }) => { const theme = useTheme(); if (!messages) { - return <>; + return null; } return ( diff --git a/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.stories.tsx b/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.stories.tsx index da9715f27d4b4..e84f50b922f16 100644 --- a/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.stories.tsx +++ b/site/src/pages/UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView.stories.tsx @@ -1,4 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockHealthyWildWorkspaceProxy, MockPrimaryWorkspaceProxy, @@ -6,6 +5,7 @@ import { MockWorkspaceProxies, mockApiError, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { WorkspaceProxyView } from "./WorkspaceProxyView"; const meta: Meta = { diff --git a/site/src/pages/UsersPage/ResetPasswordDialog.stories.tsx b/site/src/pages/UsersPage/ResetPasswordDialog.stories.tsx index 37300b6224157..2525cd2bfd5db 100644 --- a/site/src/pages/UsersPage/ResetPasswordDialog.stories.tsx +++ b/site/src/pages/UsersPage/ResetPasswordDialog.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockUserOwner } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { ResetPasswordDialog } from "./ResetPasswordDialog"; const meta: Meta = { diff --git a/site/src/pages/UsersPage/UsersFilter.tsx b/site/src/pages/UsersPage/UsersFilter.tsx index fb123c423a2c1..782ba3de504b8 100644 --- a/site/src/pages/UsersPage/UsersFilter.tsx +++ b/site/src/pages/UsersPage/UsersFilter.tsx @@ -1,12 +1,12 @@ import { Filter, MenuSkeleton, type useFilter } from "components/Filter/Filter"; -import { - SelectFilter, - type SelectFilterOption, -} from "components/Filter/SelectFilter"; import { type UseFilterMenuOptions, useFilterMenu, } from "components/Filter/menu"; +import { + SelectFilter, + type SelectFilterOption, +} from "components/Filter/SelectFilter"; import { StatusIndicatorDot } from "components/StatusIndicator/StatusIndicator"; import type { FC } from "react"; import { docs } from "utils/docs"; diff --git a/site/src/pages/UsersPage/UsersPage.stories.tsx b/site/src/pages/UsersPage/UsersPage.stories.tsx index 185ad19786aca..3802a1968ef42 100644 --- a/site/src/pages/UsersPage/UsersPage.stories.tsx +++ b/site/src/pages/UsersPage/UsersPage.stories.tsx @@ -1,3 +1,9 @@ +import { MockAuthMethodsAll, MockUserOwner } from "testHelpers/entities"; +import { + withAuthProvider, + withDashboardProvider, + withGlobalSnackbar, +} from "testHelpers/storybook"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { API } from "api/api"; import { deploymentConfigQueryKey } from "api/queries/deployment"; @@ -9,12 +15,6 @@ import { MockGroups } from "pages/UsersPage/storybookData/groups"; import { MockRoles } from "pages/UsersPage/storybookData/roles"; import { MockUsers } from "pages/UsersPage/storybookData/users"; import { screen, spyOn, userEvent, within } from "storybook/test"; -import { MockAuthMethodsAll, MockUserOwner } from "testHelpers/entities"; -import { - withAuthProvider, - withDashboardProvider, - withGlobalSnackbar, -} from "testHelpers/storybook"; import UsersPage from "./UsersPage"; const parameters = { diff --git a/site/src/pages/UsersPage/UsersPageView.stories.tsx b/site/src/pages/UsersPage/UsersPageView.stories.tsx index a78b7801b877d..fee8aa6c879f1 100644 --- a/site/src/pages/UsersPage/UsersPageView.stories.tsx +++ b/site/src/pages/UsersPage/UsersPageView.stories.tsx @@ -1,11 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { - MockMenu, - getDefaultFilterProps, -} from "components/Filter/storyHelpers"; -import { mockSuccessResult } from "components/PaginationWidget/PaginationContainer.mocks"; -import type { UsePaginatedQueryResult } from "hooks/usePaginatedQuery"; -import type { ComponentProps } from "react"; import { MockAssignableSiteRoles, MockAuthMethodsPasswordOnly, @@ -13,6 +5,14 @@ import { MockUserOwner, mockApiError, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { + getDefaultFilterProps, + MockMenu, +} from "components/Filter/storyHelpers"; +import { mockSuccessResult } from "components/PaginationWidget/PaginationContainer.mocks"; +import type { UsePaginatedQueryResult } from "hooks/usePaginatedQuery"; +import type { ComponentProps } from "react"; import { UsersPageView } from "./UsersPageView"; type FilterProps = ComponentProps["filterProps"]; diff --git a/site/src/pages/UsersPage/UsersTable/UserGroupsCell.tsx b/site/src/pages/UsersPage/UsersTable/UserGroupsCell.tsx index c7c4586c0ec51..1b4a44a4542c9 100644 --- a/site/src/pages/UsersPage/UsersTable/UserGroupsCell.tsx +++ b/site/src/pages/UsersPage/UsersTable/UserGroupsCell.tsx @@ -4,13 +4,13 @@ import List from "@mui/material/List"; import ListItem from "@mui/material/ListItem"; import type { Group } from "api/typesGenerated"; import { Avatar } from "components/Avatar/Avatar"; -import { OverflowY } from "components/OverflowY/OverflowY"; -import { TableCell } from "components/Table/Table"; import { Popover, PopoverContent, PopoverTrigger, } from "components/deprecated/Popover/Popover"; +import { OverflowY } from "components/OverflowY/OverflowY"; +import { TableCell } from "components/Table/Table"; import type { FC } from "react"; type GroupsCellProps = { diff --git a/site/src/pages/UsersPage/UsersTable/UsersTable.stories.tsx b/site/src/pages/UsersPage/UsersTable/UsersTable.stories.tsx index 0cbb457a45100..aceee691b2f42 100644 --- a/site/src/pages/UsersPage/UsersTable/UsersTable.stories.tsx +++ b/site/src/pages/UsersPage/UsersTable/UsersTable.stories.tsx @@ -1,4 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockAssignableSiteRoles, MockAuditorRole, @@ -10,6 +9,7 @@ import { MockUserMember, MockUserOwner, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { UsersTable } from "./UsersTable"; const mockGroupsByUserId = new Map([ diff --git a/site/src/pages/UsersPage/UsersTable/UsersTableBody.tsx b/site/src/pages/UsersPage/UsersTable/UsersTableBody.tsx index 894a75daef78a..408ea411a84f9 100644 --- a/site/src/pages/UsersPage/UsersTable/UsersTableBody.tsx +++ b/site/src/pages/UsersPage/UsersTable/UsersTableBody.tsx @@ -28,8 +28,7 @@ import { } from "components/TableLoader/TableLoader"; import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; -import { TrashIcon } from "lucide-react"; -import { EllipsisVertical } from "lucide-react"; +import { EllipsisVertical, TrashIcon } from "lucide-react"; import type { FC } from "react"; import { UserRoleCell } from "../../OrganizationSettingsPage/UserTable/UserRoleCell"; import { UserGroupsCell } from "./UserGroupsCell"; diff --git a/site/src/pages/WorkspaceBuildPage/WorkspaceBuildPage.test.tsx b/site/src/pages/WorkspaceBuildPage/WorkspaceBuildPage.test.tsx index f1f1edb54a5f7..427405ae5a0a1 100644 --- a/site/src/pages/WorkspaceBuildPage/WorkspaceBuildPage.test.tsx +++ b/site/src/pages/WorkspaceBuildPage/WorkspaceBuildPage.test.tsx @@ -1,6 +1,3 @@ -import { screen, waitFor } from "@testing-library/react"; -import { API } from "api/api"; -import WS from "jest-websocket-mock"; import { MockWorkspace, MockWorkspaceAgent, @@ -8,6 +5,9 @@ import { MockWorkspaceBuild, } from "testHelpers/entities"; import { renderWithAuth } from "testHelpers/renderHelpers"; +import { screen, waitFor } from "@testing-library/react"; +import { API } from "api/api"; +import WS from "jest-websocket-mock"; import WorkspaceBuildPage from "./WorkspaceBuildPage"; import { LOGS_TAB_KEY } from "./WorkspaceBuildPageView"; diff --git a/site/src/pages/WorkspaceBuildPage/WorkspaceBuildPageView.stories.tsx b/site/src/pages/WorkspaceBuildPage/WorkspaceBuildPageView.stories.tsx index 8b9fa443f8f61..a026f9a5b391f 100644 --- a/site/src/pages/WorkspaceBuildPage/WorkspaceBuildPageView.stories.tsx +++ b/site/src/pages/WorkspaceBuildPage/WorkspaceBuildPageView.stories.tsx @@ -1,10 +1,10 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { chromatic } from "testHelpers/chromatic"; import { MockFailedWorkspaceBuild, MockWorkspaceBuild, MockWorkspaceBuildLogs, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { WorkspaceBuildPageView } from "./WorkspaceBuildPageView"; const defaultBuilds = Array.from({ length: 15 }, (_, i) => ({ diff --git a/site/src/pages/WorkspacePage/AppStatuses.stories.tsx b/site/src/pages/WorkspacePage/AppStatuses.stories.tsx index 062d06e1c3f20..2e8324aef2e0b 100644 --- a/site/src/pages/WorkspacePage/AppStatuses.stories.tsx +++ b/site/src/pages/WorkspacePage/AppStatuses.stories.tsx @@ -1,15 +1,15 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import type { WorkspaceAppStatus } from "api/typesGenerated"; -import { userEvent, within } from "storybook/test"; import { + createTimestamp, MockWorkspace, MockWorkspaceAgent, MockWorkspaceApp, MockWorkspaceAppStatus, MockWorkspaceAppStatuses, - createTimestamp, } from "testHelpers/entities"; import { withProxyProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import type { WorkspaceAppStatus } from "api/typesGenerated"; +import { userEvent, within } from "storybook/test"; import { AppStatuses } from "./AppStatuses"; const meta: Meta = { diff --git a/site/src/pages/WorkspacePage/AppStatuses.tsx b/site/src/pages/WorkspacePage/AppStatuses.tsx index 55066d9094e8f..26f239b627101 100644 --- a/site/src/pages/WorkspacePage/AppStatuses.tsx +++ b/site/src/pages/WorkspacePage/AppStatuses.tsx @@ -6,6 +6,7 @@ import type { } from "api/typesGenerated"; import { Button } from "components/Button/Button"; import { ExternalImage } from "components/ExternalImage/ExternalImage"; +import { ScrollArea } from "components/ScrollArea/ScrollArea"; import { Tooltip, TooltipContent, @@ -13,9 +14,6 @@ import { TooltipTrigger, } from "components/Tooltip/Tooltip"; import capitalize from "lodash/capitalize"; -import { timeFrom } from "utils/time"; - -import { ScrollArea } from "components/ScrollArea/ScrollArea"; import { ChevronDownIcon, ChevronUpIcon, @@ -28,6 +26,7 @@ import { AppStatusStateIcon } from "modules/apps/AppStatusStateIcon"; import { useAppLink } from "modules/apps/useAppLink"; import { type FC, useState } from "react"; import { Link as RouterLink } from "react-router"; +import { timeFrom } from "utils/time"; import { truncateURI } from "utils/uri"; interface AppStatusesProps { diff --git a/site/src/pages/WorkspacePage/ResourceMetadata.stories.tsx b/site/src/pages/WorkspacePage/ResourceMetadata.stories.tsx index 20f173d5e225d..00bc197ed1559 100644 --- a/site/src/pages/WorkspacePage/ResourceMetadata.stories.tsx +++ b/site/src/pages/WorkspacePage/ResourceMetadata.stories.tsx @@ -1,5 +1,5 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; import { MockWorkspaceResource } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; import { ResourceMetadata } from "./ResourceMetadata"; const meta: Meta = { diff --git a/site/src/pages/WorkspacePage/Workspace.stories.tsx b/site/src/pages/WorkspacePage/Workspace.stories.tsx index 77ba7d67e94de..df07c59c1c660 100644 --- a/site/src/pages/WorkspacePage/Workspace.stories.tsx +++ b/site/src/pages/WorkspacePage/Workspace.stories.tsx @@ -1,12 +1,12 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import type { ProvisionerJobLog } from "api/typesGenerated"; -import { action } from "storybook/actions"; import * as Mocks from "testHelpers/entities"; import { withAuthProvider, withDashboardProvider, withProxyProvider, } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import type { ProvisionerJobLog } from "api/typesGenerated"; +import { action } from "storybook/actions"; import type { WorkspacePermissions } from "../../modules/workspaces/permissions"; import { Workspace } from "./Workspace"; diff --git a/site/src/pages/WorkspacePage/Workspace.tsx b/site/src/pages/WorkspacePage/Workspace.tsx index b96ddcdf7b7fe..37f30ab2f2d8d 100644 --- a/site/src/pages/WorkspacePage/Workspace.tsx +++ b/site/src/pages/WorkspacePage/Workspace.tsx @@ -14,6 +14,7 @@ import type { WorkspacePermissions } from "../../modules/workspaces/permissions" import { HistorySidebar } from "./HistorySidebar"; import { ResourceMetadata } from "./ResourceMetadata"; import { ResourcesSidebar } from "./ResourcesSidebar"; +import { resourceOptionValue, useResourcesNav } from "./useResourcesNav"; import { WorkspaceBuildLogsSection } from "./WorkspaceBuildLogsSection"; import { ActiveTransition, @@ -21,7 +22,6 @@ import { } from "./WorkspaceBuildProgress"; import { WorkspaceDeletedBanner } from "./WorkspaceDeletedBanner"; import { WorkspaceTopbar } from "./WorkspaceTopbar"; -import { resourceOptionValue, useResourcesNav } from "./useResourcesNav"; interface WorkspaceProps { workspace: TypesGen.Workspace; diff --git a/site/src/pages/WorkspacePage/WorkspaceActions/BuildParametersPopover.tsx b/site/src/pages/WorkspacePage/WorkspaceActions/BuildParametersPopover.tsx index 56c481cc96fd5..7aef1dc7c7357 100644 --- a/site/src/pages/WorkspacePage/WorkspaceActions/BuildParametersPopover.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceActions/BuildParametersPopover.tsx @@ -7,6 +7,12 @@ import type { WorkspaceBuildParameter, } from "api/typesGenerated"; import { Button } from "components/Button/Button"; +import { + Popover, + PopoverContent, + PopoverTrigger, + usePopover, +} from "components/deprecated/Popover/Popover"; import { FormFields } from "components/Form/Form"; import { TopbarButton } from "components/FullPageLayout/Topbar"; import { @@ -17,12 +23,6 @@ import { } from "components/HelpTooltip/HelpTooltip"; import { Loader } from "components/Loader/Loader"; import { RichParameterInput } from "components/RichParameterInput/RichParameterInput"; -import { - Popover, - PopoverContent, - PopoverTrigger, - usePopover, -} from "components/deprecated/Popover/Popover"; import { useFormik } from "formik"; import { ChevronDownIcon } from "lucide-react"; import type { FC } from "react"; diff --git a/site/src/pages/WorkspacePage/WorkspaceActions/DebugButton.stories.tsx b/site/src/pages/WorkspacePage/WorkspaceActions/DebugButton.stories.tsx index a9e2d398e602e..e1e4fb4851eb0 100644 --- a/site/src/pages/WorkspacePage/WorkspaceActions/DebugButton.stories.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceActions/DebugButton.stories.tsx @@ -1,6 +1,6 @@ +import { MockWorkspace } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, waitFor, within } from "storybook/test"; -import { MockWorkspace } from "testHelpers/entities"; import { DebugButton } from "./DebugButton"; const meta: Meta = { diff --git a/site/src/pages/WorkspacePage/WorkspaceActions/RetryButton.stories.tsx b/site/src/pages/WorkspacePage/WorkspaceActions/RetryButton.stories.tsx index 678158c57a3d2..12ff75dc64616 100644 --- a/site/src/pages/WorkspacePage/WorkspaceActions/RetryButton.stories.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceActions/RetryButton.stories.tsx @@ -1,6 +1,6 @@ +import { MockWorkspace } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, waitFor, within } from "storybook/test"; -import { MockWorkspace } from "testHelpers/entities"; import { RetryButton } from "./RetryButton"; const meta: Meta = { diff --git a/site/src/pages/WorkspacePage/WorkspaceActions/WorkspaceActions.stories.tsx b/site/src/pages/WorkspacePage/WorkspaceActions/WorkspaceActions.stories.tsx index 005368e336aff..3d1d1dcff0c00 100644 --- a/site/src/pages/WorkspacePage/WorkspaceActions/WorkspaceActions.stories.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceActions/WorkspaceActions.stories.tsx @@ -1,13 +1,13 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { deploymentConfigQueryKey } from "api/queries/deployment"; -import { agentLogsKey, buildLogsKey } from "api/queries/workspaces"; -import { expect, userEvent, within } from "storybook/test"; import * as Mocks from "testHelpers/entities"; import { withAuthProvider, withDashboardProvider, withDesktopViewport, } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { deploymentConfigQueryKey } from "api/queries/deployment"; +import { agentLogsKey, buildLogsKey } from "api/queries/workspaces"; +import { expect, userEvent, within } from "storybook/test"; import { WorkspaceActions } from "./WorkspaceActions"; const meta: Meta = { diff --git a/site/src/pages/WorkspacePage/WorkspaceActions/WorkspaceActions.tsx b/site/src/pages/WorkspacePage/WorkspaceActions/WorkspaceActions.tsx index 1c38caa14ec21..f46589a0a67fb 100644 --- a/site/src/pages/WorkspacePage/WorkspaceActions/WorkspaceActions.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceActions/WorkspaceActions.tsx @@ -1,12 +1,12 @@ import { deploymentConfig } from "api/queries/deployment"; import type { Workspace, WorkspaceBuildParameter } from "api/typesGenerated"; import { useAuthenticated } from "hooks/useAuthenticated"; -import { WorkspaceMoreActions } from "modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions"; import { type ActionType, abilitiesByWorkspaceStatus, } from "modules/workspaces/actions"; import type { WorkspacePermissions } from "modules/workspaces/permissions"; +import { WorkspaceMoreActions } from "modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions"; import { type FC, Fragment, type ReactNode } from "react"; import { useQuery } from "react-query"; import { mustUpdateWorkspace } from "utils/workspace"; diff --git a/site/src/pages/WorkspacePage/WorkspaceBuildProgress.stories.tsx b/site/src/pages/WorkspacePage/WorkspaceBuildProgress.stories.tsx index 5a91ef71c633a..d7a6526bfbdff 100644 --- a/site/src/pages/WorkspacePage/WorkspaceBuildProgress.stories.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceBuildProgress.stories.tsx @@ -1,10 +1,10 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import dayjs from "dayjs"; import { MockProvisionerJob, MockStartingWorkspace, MockWorkspaceBuild, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import dayjs from "dayjs"; import { WorkspaceBuildProgress } from "./WorkspaceBuildProgress"; const meta: Meta = { diff --git a/site/src/pages/WorkspacePage/WorkspaceBuildProgress.tsx b/site/src/pages/WorkspacePage/WorkspaceBuildProgress.tsx index 306da719be0ca..bf61f8de6649c 100644 --- a/site/src/pages/WorkspacePage/WorkspaceBuildProgress.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceBuildProgress.tsx @@ -117,7 +117,7 @@ export const WorkspaceBuildProgress: FC = ({ // HACK: the codersdk type generator doesn't support null values, but this // can be null when the template is new. if ((transitionStats.P50 as number | null) === null) { - return <>; + return null; } return (
      diff --git a/site/src/pages/WorkspacePage/WorkspaceNotifications/Notifications.tsx b/site/src/pages/WorkspacePage/WorkspaceNotifications/Notifications.tsx index ad63ced0952cf..bc72396932e77 100644 --- a/site/src/pages/WorkspacePage/WorkspaceNotifications/Notifications.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceNotifications/Notifications.tsx @@ -1,13 +1,13 @@ import { type Interpolation, type Theme, useTheme } from "@emotion/react"; import type { AlertProps } from "components/Alert/Alert"; import { Button, type ButtonProps } from "components/Button/Button"; -import { Pill } from "components/Pill/Pill"; import { Popover, PopoverContent, PopoverTrigger, usePopover, } from "components/deprecated/Popover/Popover"; +import { Pill } from "components/Pill/Pill"; import type { FC, ReactNode } from "react"; import type { ThemeRole } from "theme/roles"; diff --git a/site/src/pages/WorkspacePage/WorkspaceNotifications/WorkspaceNotifications.stories.tsx b/site/src/pages/WorkspacePage/WorkspaceNotifications/WorkspaceNotifications.stories.tsx index f5707df9a5b81..073a5090f2e42 100644 --- a/site/src/pages/WorkspacePage/WorkspaceNotifications/WorkspaceNotifications.stories.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceNotifications/WorkspaceNotifications.stories.tsx @@ -1,7 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { getWorkspaceResolveAutostartQueryKey } from "api/queries/workspaceQuota"; -import type { WorkspacePermissions } from "modules/workspaces/permissions"; -import { expect, userEvent, waitFor, within } from "storybook/test"; import { MockOutdatedWorkspace, MockTemplate, @@ -10,6 +6,10 @@ import { MockWorkspace, } from "testHelpers/entities"; import { withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { getWorkspaceResolveAutostartQueryKey } from "api/queries/workspaceQuota"; +import type { WorkspacePermissions } from "modules/workspaces/permissions"; +import { expect, userEvent, waitFor, within } from "storybook/test"; import { WorkspaceNotifications } from "./WorkspaceNotifications"; const defaultPermissions: WorkspacePermissions = { diff --git a/site/src/pages/WorkspacePage/WorkspaceNotifications/WorkspaceNotifications.tsx b/site/src/pages/WorkspacePage/WorkspaceNotifications/WorkspaceNotifications.tsx index c9bf60fbecaaa..92e6eeb708e48 100644 --- a/site/src/pages/WorkspacePage/WorkspaceNotifications/WorkspaceNotifications.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceNotifications/WorkspaceNotifications.tsx @@ -9,13 +9,13 @@ import type { import { MemoizedInlineMarkdown } from "components/Markdown/Markdown"; import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; -import { TriangleAlertIcon } from "lucide-react"; -import { InfoIcon } from "lucide-react"; +import { InfoIcon, TriangleAlertIcon } from "lucide-react"; import { useDashboard } from "modules/dashboard/useDashboard"; import { TemplateUpdateMessage } from "modules/templates/TemplateUpdateMessage"; import { type FC, useEffect, useState } from "react"; dayjs.extend(relativeTime); + import { useQuery } from "react-query"; import type { WorkspacePermissions } from "../../../modules/workspaces/permissions"; import { diff --git a/site/src/pages/WorkspacePage/WorkspacePage.test.tsx b/site/src/pages/WorkspacePage/WorkspacePage.test.tsx index 18a9e1a6f7232..b089a420bcb33 100644 --- a/site/src/pages/WorkspacePage/WorkspacePage.test.tsx +++ b/site/src/pages/WorkspacePage/WorkspacePage.test.tsx @@ -1,15 +1,3 @@ -import { screen, waitFor, within } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import * as apiModule from "api/api"; -import type { TemplateVersionParameter, Workspace } from "api/typesGenerated"; -import MockServerSocket from "jest-websocket-mock"; -import { - DashboardContext, - type DashboardProvider, -} from "modules/dashboard/DashboardProvider"; -import type { WorkspacePermissions } from "modules/workspaces/permissions"; -import { http, HttpResponse } from "msw"; -import type { FC } from "react"; import { MockAppearanceConfig, MockBuildInfo, @@ -34,6 +22,18 @@ import { renderWithAuth, } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { screen, waitFor, within } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import * as apiModule from "api/api"; +import type { TemplateVersionParameter, Workspace } from "api/typesGenerated"; +import MockServerSocket from "jest-websocket-mock"; +import { + DashboardContext, + type DashboardProvider, +} from "modules/dashboard/DashboardProvider"; +import type { WorkspacePermissions } from "modules/workspaces/permissions"; +import { HttpResponse, http } from "msw"; +import type { FC } from "react"; import WorkspacePage from "./WorkspacePage"; const { API, MissingBuildParameters } = apiModule; diff --git a/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx b/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx index 4034cc144e127..667df7cd34252 100644 --- a/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx @@ -1,6 +1,5 @@ import { API } from "api/api"; -import { type ApiError, getErrorMessage } from "api/errors"; -import { isApiError } from "api/errors"; +import { type ApiError, getErrorMessage, isApiError } from "api/errors"; import { templateVersion } from "api/queries/templates"; import { workspaceBuildTimings } from "api/queries/workspaceBuilds"; import { @@ -20,12 +19,12 @@ import { displayError } from "components/GlobalSnackbar/utils"; import { useWorkspaceBuildLogs } from "hooks/useWorkspaceBuildLogs"; import { EphemeralParametersDialog } from "modules/workspaces/EphemeralParametersDialog/EphemeralParametersDialog"; import { WorkspaceErrorDialog } from "modules/workspaces/ErrorDialog/WorkspaceErrorDialog"; +import type { WorkspacePermissions } from "modules/workspaces/permissions"; import { WorkspaceBuildCancelDialog } from "modules/workspaces/WorkspaceBuildCancelDialog/WorkspaceBuildCancelDialog"; import { - WorkspaceUpdateDialogs, useWorkspaceUpdate, + WorkspaceUpdateDialogs, } from "modules/workspaces/WorkspaceUpdateDialogs"; -import type { WorkspacePermissions } from "modules/workspaces/permissions"; import { type FC, useEffect, useState } from "react"; import { Helmet } from "react-helmet-async"; import { useMutation, useQuery, useQueryClient } from "react-query"; @@ -212,7 +211,7 @@ export const WorkspaceReadyPage: FC = ({ hasEphemeral: ephemeralParameters.length > 0, ephemeralParameters, }; - } catch (error) { + } catch (_error) { return { hasEphemeral: false, ephemeralParameters: [] }; } }; diff --git a/site/src/pages/WorkspacePage/WorkspaceScheduleControls.test.tsx b/site/src/pages/WorkspacePage/WorkspaceScheduleControls.test.tsx index 225db7c8a44c0..388f23625f043 100644 --- a/site/src/pages/WorkspacePage/WorkspaceScheduleControls.test.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceScheduleControls.test.tsx @@ -1,14 +1,14 @@ +import { MockTemplate, MockWorkspace } from "testHelpers/entities"; +import { render } from "testHelpers/renderHelpers"; +import { server } from "testHelpers/server"; import { screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { API } from "api/api"; import { workspaceByOwnerAndName } from "api/queries/workspaces"; import dayjs from "dayjs"; -import { http, HttpResponse } from "msw"; +import { HttpResponse, http } from "msw"; import type { FC } from "react"; import { useQuery } from "react-query"; -import { MockTemplate, MockWorkspace } from "testHelpers/entities"; -import { render } from "testHelpers/renderHelpers"; -import { server } from "testHelpers/server"; import { WorkspaceScheduleControls } from "./WorkspaceScheduleControls"; const Wrapper: FC = () => { diff --git a/site/src/pages/WorkspacePage/WorkspaceScheduleControls.tsx b/site/src/pages/WorkspacePage/WorkspaceScheduleControls.tsx index c8da5c0cfba17..965c206932015 100644 --- a/site/src/pages/WorkspacePage/WorkspaceScheduleControls.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceScheduleControls.tsx @@ -15,7 +15,7 @@ import dayjs, { type Dayjs } from "dayjs"; import { useTime } from "hooks/useTime"; import { ClockIcon, MinusIcon, PlusIcon } from "lucide-react"; import { getWorkspaceActivityStatus } from "modules/workspaces/activity"; -import { type FC, type ReactNode, forwardRef, useRef, useState } from "react"; +import { type FC, forwardRef, type ReactNode, useRef, useState } from "react"; import { useMutation, useQueryClient } from "react-query"; import { Link as RouterLink } from "react-router"; import { diff --git a/site/src/pages/WorkspacePage/WorkspaceTopbar.stories.tsx b/site/src/pages/WorkspacePage/WorkspaceTopbar.stories.tsx index 9a8a1878d9369..aafd16d9c099d 100644 --- a/site/src/pages/WorkspacePage/WorkspaceTopbar.stories.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceTopbar.stories.tsx @@ -1,8 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { getWorkspaceQuotaQueryKey } from "api/queries/workspaceQuota"; -import type { Workspace, WorkspaceQuota } from "api/typesGenerated"; -import dayjs from "dayjs"; -import { expect, screen, userEvent, waitFor, within } from "storybook/test"; import { MockOrganization, MockTemplate, @@ -11,6 +6,11 @@ import { MockWorkspace, } from "testHelpers/entities"; import { withAuthProvider, withDashboardProvider } from "testHelpers/storybook"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { getWorkspaceQuotaQueryKey } from "api/queries/workspaceQuota"; +import type { Workspace, WorkspaceQuota } from "api/typesGenerated"; +import dayjs from "dayjs"; +import { expect, screen, userEvent, waitFor, within } from "storybook/test"; import { WorkspaceTopbar } from "./WorkspaceTopbar"; // We want a workspace without a deadline to not pollute the screenshot. Also diff --git a/site/src/pages/WorkspacePage/WorkspaceTopbar.tsx b/site/src/pages/WorkspacePage/WorkspaceTopbar.tsx index ff0a92761b731..b6b21b6f226b9 100644 --- a/site/src/pages/WorkspacePage/WorkspaceTopbar.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceTopbar.tsx @@ -6,6 +6,7 @@ import type * as TypesGen from "api/typesGenerated"; import { Avatar } from "components/Avatar/Avatar"; import { AvatarData } from "components/Avatar/AvatarData"; import { CopyButton } from "components/CopyButton/CopyButton"; +import { Popover, PopoverTrigger } from "components/deprecated/Popover/Popover"; import { Topbar, TopbarAvatar, @@ -15,10 +16,7 @@ import { TopbarIconButton, } from "components/FullPageLayout/Topbar"; import { HelpTooltipContent } from "components/HelpTooltip/HelpTooltip"; -import { Popover, PopoverTrigger } from "components/deprecated/Popover/Popover"; -import { ChevronLeftIcon } from "lucide-react"; -import { CircleDollarSign } from "lucide-react"; -import { TrashIcon } from "lucide-react"; +import { ChevronLeftIcon, CircleDollarSign, TrashIcon } from "lucide-react"; import { useDashboard } from "modules/dashboard/useDashboard"; import { linkToTemplate, useLinks } from "modules/navigation"; import { WorkspaceStatusIndicator } from "modules/workspaces/WorkspaceStatusIndicator/WorkspaceStatusIndicator"; diff --git a/site/src/pages/WorkspacePage/useResourcesNav.test.tsx b/site/src/pages/WorkspacePage/useResourcesNav.test.tsx index 693a0a90d3053..77ac0c3204315 100644 --- a/site/src/pages/WorkspacePage/useResourcesNav.test.tsx +++ b/site/src/pages/WorkspacePage/useResourcesNav.test.tsx @@ -1,7 +1,7 @@ +import { MockWorkspaceResource } from "testHelpers/entities"; import { renderHook } from "@testing-library/react"; import type { WorkspaceResource } from "api/typesGenerated"; -import { RouterProvider, createMemoryRouter } from "react-router"; -import { MockWorkspaceResource } from "testHelpers/entities"; +import { createMemoryRouter, RouterProvider } from "react-router"; import { resourceOptionValue, useResourcesNav } from "./useResourcesNav"; describe("useResourcesNav", () => { diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.stories.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.stories.tsx index 35f80410a51d6..16fa4819763af 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.stories.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.stories.tsx @@ -1,5 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { action } from "storybook/actions"; import { MockOutdatedStoppedWorkspaceRequireActiveVersion, MockTemplateVersionParameter1, @@ -10,6 +8,8 @@ import { MockWorkspaceBuildParameter2, MockWorkspaceBuildParameter3, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { action } from "storybook/actions"; import { WorkspaceParametersPageView } from "./WorkspaceParametersPage"; const meta: Meta = { diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.test.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.test.tsx index dc4c127b9506e..90337e871e6cd 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.test.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.test.tsx @@ -1,6 +1,3 @@ -import { screen, waitFor, within } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; import { MockTemplateVersionParameter1, MockTemplateVersionParameter2, @@ -15,6 +12,9 @@ import { renderWithWorkspaceSettingsLayout, waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; +import { screen, waitFor, within } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; import WorkspaceParametersPage from "./WorkspaceParametersPage"; test("Submit the workspace settings page successfully", async () => { diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceScheduleForm.stories.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceScheduleForm.stories.tsx index 961f5589df9b2..1de412679d16b 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceScheduleForm.stories.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceScheduleForm.stories.tsx @@ -1,3 +1,4 @@ +import { MockTemplate, mockApiError } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import dayjs from "dayjs"; import advancedFormat from "dayjs/plugin/advancedFormat"; @@ -9,7 +10,6 @@ import { } from "pages/WorkspaceSettingsPage/WorkspaceSchedulePage/schedule"; import { emptyTTL } from "pages/WorkspaceSettingsPage/WorkspaceSchedulePage/ttl"; import { action } from "storybook/actions"; -import { MockTemplate, mockApiError } from "testHelpers/entities"; import { WorkspaceScheduleForm } from "./WorkspaceScheduleForm"; dayjs.extend(advancedFormat); diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceScheduleForm.test.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceScheduleForm.test.tsx index 59f2798d76568..68ffdac9e77d9 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceScheduleForm.test.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceScheduleForm.test.tsx @@ -1,16 +1,16 @@ +import { MockTemplate } from "testHelpers/entities"; +import { render } from "testHelpers/renderHelpers"; import { screen } from "@testing-library/react"; import { API } from "api/api"; import { defaultSchedule } from "pages/WorkspaceSettingsPage/WorkspaceSchedulePage/schedule"; -import { MockTemplate } from "testHelpers/entities"; -import { render } from "testHelpers/renderHelpers"; import { timeZones } from "utils/timeZones"; import { Language, + ttlShutdownAt, + validationSchema, WorkspaceScheduleForm, type WorkspaceScheduleFormProps, type WorkspaceScheduleFormValues, - ttlShutdownAt, - validationSchema, } from "./WorkspaceScheduleForm"; const valid: WorkspaceScheduleFormValues = { diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceSchedulePage.stories.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceSchedulePage.stories.tsx index 22be968323ee1..623b3b4d09fa8 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceSchedulePage.stories.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceSchedulePage.stories.tsx @@ -1,3 +1,10 @@ +import { + MockPrebuiltWorkspace, + MockTemplate, + MockUserOwner, + MockWorkspace, +} from "testHelpers/entities"; +import { withAuthProvider, withDashboardProvider } from "testHelpers/storybook"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { getAuthorizationKey } from "api/queries/authCheck"; import { templateByNameKey } from "api/queries/templates"; @@ -7,13 +14,6 @@ import { reactRouterNestedAncestors, reactRouterParameters, } from "storybook-addon-remix-react-router"; -import { - MockPrebuiltWorkspace, - MockTemplate, - MockUserOwner, - MockWorkspace, -} from "testHelpers/entities"; -import { withAuthProvider, withDashboardProvider } from "testHelpers/storybook"; import { WorkspaceSettingsLayout } from "../WorkspaceSettingsLayout"; import WorkspaceSchedulePage from "./WorkspaceSchedulePage"; diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceSchedulePage.test.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceSchedulePage.test.tsx index 9ebede41abe60..f125071ebe9f3 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceSchedulePage.test.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceSchedulePage.test.tsx @@ -1,20 +1,20 @@ -import { screen } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { http, HttpResponse } from "msw"; import { MockUserOwner, MockWorkspace } from "testHelpers/entities"; import { renderWithWorkspaceSettingsLayout } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; -import { - Language as FormLanguage, - type WorkspaceScheduleFormValues, -} from "./WorkspaceScheduleForm"; -import WorkspaceSchedulePage from "./WorkspaceSchedulePage"; +import { screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { HttpResponse, http } from "msw"; import { formValuesToAutostartRequest, formValuesToTTLRequest, } from "./formToRequest"; import { scheduleToAutostart } from "./schedule"; import { ttlMsToAutostop } from "./ttl"; +import { + Language as FormLanguage, + type WorkspaceScheduleFormValues, +} from "./WorkspaceScheduleForm"; +import WorkspaceSchedulePage from "./WorkspaceSchedulePage"; const validValues: WorkspaceScheduleFormValues = { autostartEnabled: true, diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceSchedulePage.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceSchedulePage.tsx index 161197fcb759f..23255316d2d25 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceSchedulePage.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceSchedulePage.tsx @@ -23,11 +23,11 @@ import { useMutation, useQuery, useQueryClient } from "react-query"; import { useNavigate, useParams } from "react-router"; import { docs } from "utils/docs"; import { pageTitle } from "utils/page"; -import { WorkspaceScheduleForm } from "./WorkspaceScheduleForm"; import { formValuesToAutostartRequest, formValuesToTTLRequest, } from "./formToRequest"; +import { WorkspaceScheduleForm } from "./WorkspaceScheduleForm"; const permissionsToCheck = (workspace: TypesGen.Workspace) => ({ diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/schedule.ts b/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/schedule.ts index b188145cf8a92..edaf480aee617 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/schedule.ts +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/schedule.ts @@ -5,8 +5,8 @@ import utc from "dayjs/plugin/utc"; import map from "lodash/map"; import some from "lodash/some"; import { extractTimezone, stripTimezone } from "utils/schedule"; -import type { WorkspaceScheduleFormValues } from "./WorkspaceScheduleForm"; import type { Autostop } from "./ttl"; +import type { WorkspaceScheduleFormValues } from "./WorkspaceScheduleForm"; // REMARK: timezone plugin depends on UTC // diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceSettingsLayout.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceSettingsLayout.tsx index 3dd53f84ad0c0..af64c06bef66c 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceSettingsLayout.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceSettingsLayout.tsx @@ -4,7 +4,7 @@ import { ErrorAlert } from "components/Alert/ErrorAlert"; import { Loader } from "components/Loader/Loader"; import { Margins } from "components/Margins/Margins"; import { Stack } from "components/Stack/Stack"; -import { type FC, Suspense, createContext, useContext } from "react"; +import { createContext, type FC, Suspense, useContext } from "react"; import { Helmet } from "react-helmet-async"; import { useQuery } from "react-query"; import { Outlet, useParams } from "react-router"; diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceSettingsPage.test.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceSettingsPage.test.tsx index 209388e2346d7..2b4637200d123 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceSettingsPage.test.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceSettingsPage.test.tsx @@ -1,11 +1,11 @@ -import { screen, waitFor, within } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; import { MockWorkspace } from "testHelpers/entities"; import { renderWithWorkspaceSettingsLayout, waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; +import { screen, waitFor, within } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; import WorkspaceSettingsPage from "./WorkspaceSettingsPage"; test("Submit the workspace settings page successfully", async () => { diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceSettingsPageView.stories.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceSettingsPageView.stories.tsx index 911b418fc010e..3a1eb37e75e99 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceSettingsPageView.stories.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceSettingsPageView.stories.tsx @@ -1,6 +1,6 @@ +import { MockWorkspace } from "testHelpers/entities"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { action } from "storybook/actions"; -import { MockWorkspace } from "testHelpers/entities"; import { WorkspaceSettingsPageView } from "./WorkspaceSettingsPageView"; const meta: Meta = { diff --git a/site/src/pages/WorkspacesPage/BatchDeleteConfirmation.stories.tsx b/site/src/pages/WorkspacesPage/BatchDeleteConfirmation.stories.tsx index 9de4850a8965b..6f5921023073b 100644 --- a/site/src/pages/WorkspacesPage/BatchDeleteConfirmation.stories.tsx +++ b/site/src/pages/WorkspacesPage/BatchDeleteConfirmation.stories.tsx @@ -1,7 +1,7 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { action } from "storybook/actions"; import { chromatic } from "testHelpers/chromatic"; import { MockUserMember, MockWorkspace } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { action } from "storybook/actions"; import { BatchDeleteConfirmation } from "./BatchDeleteConfirmation"; const meta: Meta = { diff --git a/site/src/pages/WorkspacesPage/BatchUpdateConfirmation.stories.tsx b/site/src/pages/WorkspacesPage/BatchUpdateConfirmation.stories.tsx index 429d47e1c4eb3..14a7db55b19ec 100644 --- a/site/src/pages/WorkspacesPage/BatchUpdateConfirmation.stories.tsx +++ b/site/src/pages/WorkspacesPage/BatchUpdateConfirmation.stories.tsx @@ -1,7 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import type { Workspace } from "api/typesGenerated"; -import { useQueryClient } from "react-query"; -import { action } from "storybook/actions"; import { chromatic } from "testHelpers/chromatic"; import { MockDormantOutdatedWorkspace, @@ -11,6 +7,10 @@ import { MockUserMember, MockWorkspace, } from "testHelpers/entities"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import type { Workspace } from "api/typesGenerated"; +import { useQueryClient } from "react-query"; +import { action } from "storybook/actions"; import { BatchUpdateConfirmation, type Update, diff --git a/site/src/pages/WorkspacesPage/BatchUpdateConfirmation.tsx b/site/src/pages/WorkspacesPage/BatchUpdateConfirmation.tsx index a6b0a27b374f4..879f27d53c8ae 100644 --- a/site/src/pages/WorkspacesPage/BatchUpdateConfirmation.tsx +++ b/site/src/pages/WorkspacesPage/BatchUpdateConfirmation.tsx @@ -8,8 +8,12 @@ import { MemoizedInlineMarkdown } from "components/Markdown/Markdown"; import { Stack } from "components/Stack/Stack"; import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; -import { MonitorDownIcon } from "lucide-react"; -import { ClockIcon, SettingsIcon, UserIcon } from "lucide-react"; +import { + ClockIcon, + MonitorDownIcon, + SettingsIcon, + UserIcon, +} from "lucide-react"; import { type FC, type ReactNode, useEffect, useMemo, useState } from "react"; import { useQueries } from "react-query"; @@ -260,17 +264,9 @@ const DormantWorkspaces: FC = ({ workspaces }) => { return ( <>

      - {workspaces.length === 1 ? ( - <> - This selected workspace is dormant, and must be activated before it - can be updated. - - ) : ( - <> - These selected workspaces are dormant, and must be activated before - they can be updated. - - )} + {workspaces.length === 1 + ? "This selected workspace is dormant, and must be activated before it can be updated." + : "These selected workspaces are dormant, and must be activated before they can be updated."}

        {workspaces.map((workspace) => ( diff --git a/site/src/pages/WorkspacesPage/WorkspacesButton.tsx b/site/src/pages/WorkspacesPage/WorkspacesButton.tsx index 78692b28bec69..eda60e4fdc8f9 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesButton.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesButton.tsx @@ -2,17 +2,16 @@ import Link from "@mui/material/Link"; import type { Template } from "api/typesGenerated"; import { Avatar } from "components/Avatar/Avatar"; import { Button } from "components/Button/Button"; -import { Loader } from "components/Loader/Loader"; -import { MenuSearch } from "components/Menu/MenuSearch"; -import { OverflowY } from "components/OverflowY/OverflowY"; -import { SearchEmpty, searchStyles } from "components/Search/Search"; import { Popover, PopoverContent, PopoverTrigger, } from "components/deprecated/Popover/Popover"; -import { ExternalLinkIcon } from "lucide-react"; -import { ChevronDownIcon } from "lucide-react"; +import { Loader } from "components/Loader/Loader"; +import { MenuSearch } from "components/Menu/MenuSearch"; +import { OverflowY } from "components/OverflowY/OverflowY"; +import { SearchEmpty, searchStyles } from "components/Search/Search"; +import { ChevronDownIcon, ExternalLinkIcon } from "lucide-react"; import { linkToTemplate, useLinks } from "modules/navigation"; import { type FC, type ReactNode, useState } from "react"; import type { UseQueryResult } from "react-query"; @@ -39,7 +38,7 @@ export const WorkspacesButton: FC = ({ const [searchTerm, setSearchTerm] = useState(""); const processed = sortTemplatesByUsersDesc(templates ?? [], searchTerm); - let emptyState: ReactNode = undefined; + let emptyState: ReactNode; if (templates?.length === 0) { emptyState = ( diff --git a/site/src/pages/WorkspacesPage/WorkspacesPage.test.tsx b/site/src/pages/WorkspacesPage/WorkspacesPage.test.tsx index 678f0331331a6..988e9a5385098 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPage.test.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPage.test.tsx @@ -1,8 +1,3 @@ -import { screen, waitFor, within } from "@testing-library/react"; -import userEvent from "@testing-library/user-event"; -import { API } from "api/api"; -import type { Workspace, WorkspacesResponse } from "api/typesGenerated"; -import { http, HttpResponse } from "msw"; import { MockDormantOutdatedWorkspace, MockDormantWorkspace, @@ -17,6 +12,11 @@ import { waitForLoaderToBeRemoved, } from "testHelpers/renderHelpers"; import { server } from "testHelpers/server"; +import { screen, waitFor, within } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { API } from "api/api"; +import type { Workspace, WorkspacesResponse } from "api/typesGenerated"; +import { HttpResponse, http } from "msw"; import * as CreateDayString from "utils/createDayString"; import WorkspacesPage from "./WorkspacesPage"; diff --git a/site/src/pages/WorkspacesPage/WorkspacesPage.tsx b/site/src/pages/WorkspacesPage/WorkspacesPage.tsx index 2fec0c3975403..62ed7bfed7fe4 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPage.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPage.tsx @@ -1,6 +1,6 @@ import { getErrorDetail, getErrorMessage } from "api/errors"; import { workspacePermissionsByOrganization } from "api/queries/organizations"; -import { templateVersionRoot, templates } from "api/queries/templates"; +import { templates, templateVersionRoot } from "api/queries/templates"; import { workspaces } from "api/queries/workspaces"; import type { WorkspaceStatus } from "api/typesGenerated"; import { useFilter } from "components/Filter/Filter"; @@ -18,9 +18,9 @@ import { useSearchParams } from "react-router"; import { pageTitle } from "utils/page"; import { BatchDeleteConfirmation } from "./BatchDeleteConfirmation"; import { BatchUpdateConfirmation } from "./BatchUpdateConfirmation"; -import { WorkspacesPageView } from "./WorkspacesPageView"; import { useBatchActions } from "./batchActions"; import { useStatusFilterMenu, useTemplateFilterMenu } from "./filter/menus"; +import { WorkspacesPageView } from "./WorkspacesPageView"; /** * The set of all workspace statuses that indicate that the state for a diff --git a/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx b/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx index 5696721a089d6..006a2fb62a8ff 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx @@ -1,17 +1,3 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { - type Workspace, - type WorkspaceStatus, - WorkspaceStatuses, -} from "api/typesGenerated"; -import { - MockMenu, - getDefaultFilterProps, -} from "components/Filter/storyHelpers"; -import { DEFAULT_RECORDS_PER_PAGE } from "components/PaginationWidget/utils"; -import dayjs from "dayjs"; -import uniqueId from "lodash/uniqueId"; -import { expect, within } from "storybook/test"; import { MockBuildInfo, MockOrganization, @@ -29,8 +15,22 @@ import { withDashboardProvider, withProxyProvider, } from "testHelpers/storybook"; -import { WorkspacesPageView } from "./WorkspacesPageView"; +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { + type Workspace, + type WorkspaceStatus, + WorkspaceStatuses, +} from "api/typesGenerated"; +import { + getDefaultFilterProps, + MockMenu, +} from "components/Filter/storyHelpers"; +import { DEFAULT_RECORDS_PER_PAGE } from "components/PaginationWidget/utils"; +import dayjs from "dayjs"; +import uniqueId from "lodash/uniqueId"; +import { expect, within } from "storybook/test"; import type { WorkspaceFilterState } from "./filter/WorkspacesFilter"; +import { WorkspacesPageView } from "./WorkspacesPageView"; const createWorkspace = ( name: string, diff --git a/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx b/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx index 4476211387871..d5b7b4a03ef31 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx @@ -17,18 +17,23 @@ import { PaginationWidgetBase } from "components/PaginationWidget/PaginationWidg import { Spinner } from "components/Spinner/Spinner"; import { Stack } from "components/Stack/Stack"; import { TableToolbar } from "components/TableToolbar/TableToolbar"; -import { CloudIcon } from "lucide-react"; -import { ChevronDownIcon, PlayIcon, SquareIcon, TrashIcon } from "lucide-react"; +import { + ChevronDownIcon, + CloudIcon, + PlayIcon, + SquareIcon, + TrashIcon, +} from "lucide-react"; import { WorkspacesTable } from "pages/WorkspacesPage/WorkspacesTable"; import type { FC } from "react"; import type { UseQueryResult } from "react-query"; import { mustUpdateWorkspace } from "utils/workspace"; -import { WorkspaceHelpTooltip } from "./WorkspaceHelpTooltip"; -import { WorkspacesButton } from "./WorkspacesButton"; import { type WorkspaceFilterState, WorkspacesFilter, } from "./filter/WorkspacesFilter"; +import { WorkspaceHelpTooltip } from "./WorkspaceHelpTooltip"; +import { WorkspacesButton } from "./WorkspacesButton"; const Language = { pageTitle: "Workspaces", diff --git a/site/src/pages/WorkspacesPage/WorkspacesTable.tsx b/site/src/pages/WorkspacesPage/WorkspacesTable.tsx index e45291222f5ce..8b5f60881d9fb 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesTable.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesTable.tsx @@ -44,15 +44,17 @@ import { } from "components/Tooltip/Tooltip"; import { useAuthenticated } from "hooks"; import { useClickableTableRow } from "hooks/useClickableTableRow"; -import { ExternalLinkIcon, FileIcon, StarIcon } from "lucide-react"; -import { EllipsisVertical } from "lucide-react"; import { BanIcon, CloudIcon, + EllipsisVertical, + ExternalLinkIcon, + FileIcon, PlayIcon, RefreshCcwIcon, SquareIcon, SquareTerminalIcon, + StarIcon, } from "lucide-react"; import { getTerminalHref, @@ -61,6 +63,7 @@ import { } from "modules/apps/apps"; import { useAppLink } from "modules/apps/useAppLink"; import { useDashboard } from "modules/dashboard/useDashboard"; +import { abilitiesByWorkspaceStatus } from "modules/workspaces/actions"; import { WorkspaceAppStatus } from "modules/workspaces/WorkspaceAppStatus/WorkspaceAppStatus"; import { WorkspaceBuildCancelDialog } from "modules/workspaces/WorkspaceBuildCancelDialog/WorkspaceBuildCancelDialog"; import { WorkspaceDormantBadge } from "modules/workspaces/WorkspaceDormantBadge/WorkspaceDormantBadge"; @@ -68,10 +71,9 @@ import { WorkspaceMoreActions } from "modules/workspaces/WorkspaceMoreActions/Wo import { WorkspaceOutdatedTooltip } from "modules/workspaces/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip"; import { WorkspaceStatusIndicator } from "modules/workspaces/WorkspaceStatusIndicator/WorkspaceStatusIndicator"; import { - WorkspaceUpdateDialogs, useWorkspaceUpdate, + WorkspaceUpdateDialogs, } from "modules/workspaces/WorkspaceUpdateDialogs"; -import { abilitiesByWorkspaceStatus } from "modules/workspaces/actions"; import type React from "react"; import { type FC, diff --git a/site/src/pages/WorkspacesPage/filter/menus.tsx b/site/src/pages/WorkspacesPage/filter/menus.tsx index cb07ab160ed11..c886f06a84494 100644 --- a/site/src/pages/WorkspacesPage/filter/menus.tsx +++ b/site/src/pages/WorkspacesPage/filter/menus.tsx @@ -1,15 +1,15 @@ import { API } from "api/api"; import type { Template, WorkspaceStatus } from "api/typesGenerated"; import { Avatar } from "components/Avatar/Avatar"; +import { + type UseFilterMenuOptions, + useFilterMenu, +} from "components/Filter/menu"; import { SelectFilter, type SelectFilterOption, SelectFilterSearch, } from "components/Filter/SelectFilter"; -import { - type UseFilterMenuOptions, - useFilterMenu, -} from "components/Filter/menu"; import { StatusIndicatorDot, type StatusIndicatorDotProps, diff --git a/site/src/router.tsx b/site/src/router.tsx index 76925ba7162aa..6aaefb77d8731 100644 --- a/site/src/router.tsx +++ b/site/src/router.tsx @@ -1,12 +1,12 @@ import { GlobalErrorBoundary } from "components/ErrorBoundary/GlobalErrorBoundary"; import { TemplateRedirectController } from "pages/TemplatePage/TemplateRedirectController"; -import { Suspense, lazy } from "react"; +import { lazy, Suspense } from "react"; import { + createBrowserRouter, + createRoutesFromChildren, Navigate, Outlet, Route, - createBrowserRouter, - createRoutesFromChildren, } from "react-router"; import { Loader } from "./components/Loader/Loader"; import { RequireAuth } from "./contexts/auth/RequireAuth"; diff --git a/site/src/serviceWorker.ts b/site/src/serviceWorker.ts index bc99983e02a6c..ad613d2421824 100644 --- a/site/src/serviceWorker.ts +++ b/site/src/serviceWorker.ts @@ -2,10 +2,9 @@ import type { WebpushMessage } from "api/typesGenerated"; -// @ts-ignore declare const self: ServiceWorkerGlobalScope; -self.addEventListener("install", (event) => { +self.addEventListener("install", (_event) => { self.skipWaiting(); }); diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index 8aac9f6233615..e0f692dacbfec 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -614,7 +614,7 @@ const MockUserAuthProvisioner: TypesGen.ProvisionerDaemon = { tags: { scope: "user" }, }; -const MockPskProvisioner: TypesGen.ProvisionerDaemon = { +const _MockPskProvisioner: TypesGen.ProvisionerDaemon = { ...MockProvisioner, id: "test-psk-provisioner", key_id: MockProvisionerPskKey.id, @@ -622,7 +622,7 @@ const MockPskProvisioner: TypesGen.ProvisionerDaemon = { name: "Test psk provisioner", }; -const MockKeyProvisioner: TypesGen.ProvisionerDaemon = { +const _MockKeyProvisioner: TypesGen.ProvisionerDaemon = { ...MockProvisioner, id: "test-key-provisioner", key_id: MockProvisionerKey.id, @@ -632,7 +632,7 @@ const MockKeyProvisioner: TypesGen.ProvisionerDaemon = { tags: MockProvisionerKey.tags, }; -const MockProvisioner2: TypesGen.ProvisionerDaemon = { +const _MockProvisioner2: TypesGen.ProvisionerDaemon = { ...MockProvisioner, id: "test-provisioner-2", name: "Test Provisioner 2", @@ -831,7 +831,7 @@ export const MockTemplate: TypesGen.Template = { cors_behavior: "simple", }; -const MockTemplateVersionFiles: TemplateVersionFiles = { +const _MockTemplateVersionFiles: TemplateVersionFiles = { "README.md": "# Example\n\nThis is an example template.", "main.tf": `// Provides info about the workspace. data "coder_workspace" "me" {} @@ -1201,7 +1201,7 @@ export const MockWorkspaceResourceMultipleAgents: TypesGen.WorkspaceResource = { ], }; -const MockWorkspaceResourceHidden: TypesGen.WorkspaceResource = { +const _MockWorkspaceResourceHidden: TypesGen.WorkspaceResource = { ...MockWorkspaceResource, id: "test-workspace-resource-hidden", name: "workspace-resource-hidden", @@ -1244,7 +1244,7 @@ export const MockWorkspaceContainerResource: TypesGen.WorkspaceResource = { daily_cost: 0, }; -const MockWorkspaceAutostartDisabled: TypesGen.UpdateWorkspaceAutostartRequest = +const _MockWorkspaceAutostartDisabled: TypesGen.UpdateWorkspaceAutostartRequest = { schedule: "", }; @@ -1554,7 +1554,7 @@ export const MockOutdatedStoppedWorkspaceRequireActiveVersion: TypesGen.Workspac }, }; -const MockOutdatedStoppedWorkspaceAlwaysUpdate: TypesGen.Workspace = { +const _MockOutdatedStoppedWorkspaceAlwaysUpdate: TypesGen.Workspace = { ...MockOutdatedRunningWorkspaceAlwaysUpdate, latest_build: { ...MockWorkspaceBuild, @@ -1583,7 +1583,7 @@ export const MockWorkspacesResponse: TypesGen.WorkspacesResponse = { count: 26, }; -const MockWorkspacesResponseWithDeletions = { +const _MockWorkspacesResponseWithDeletions = { workspaces: [...MockWorkspacesResponse.workspaces, MockWorkspaceWithDeletion], count: MockWorkspacesResponse.count + 1, }; @@ -1738,7 +1738,7 @@ export const MockWorkspaceRichParametersRequest: TypesGen.CreateWorkspaceRequest ], }; -const MockUserAgent = { +const _MockUserAgent = { browser: "Chrome 99.0.4844", device: "Other", ip_address: "11.22.33.44", @@ -2420,7 +2420,7 @@ export const MockEntitlements: TypesGen.Entitlements = { refreshed_at: "2022-05-20T16:45:57.122Z", }; -const MockEntitlementsWithWarnings: TypesGen.Entitlements = { +const _MockEntitlementsWithWarnings: TypesGen.Entitlements = { errors: [], warnings: ["You are over your active user limit.", "And another thing."], has_license: true, @@ -2490,7 +2490,7 @@ export const MockEntitlementsWithScheduling: TypesGen.Entitlements = { }), }; -const MockEntitlementsWithUserLimit: TypesGen.Entitlements = { +const _MockEntitlementsWithUserLimit: TypesGen.Entitlements = { errors: [], warnings: [], has_license: true, @@ -2667,7 +2667,7 @@ export const MockAuditLogGitSSH: TypesGen.AuditLog = { }, }; -const MockAuditOauthConvert: TypesGen.AuditLog = { +const _MockAuditOauthConvert: TypesGen.AuditLog = { ...MockAuditLog, resource_type: "convert_login", resource_target: "oidc", diff --git a/site/src/testHelpers/handlers.ts b/site/src/testHelpers/handlers.ts index 3f163a4d3a0e8..1a166ed41eaba 100644 --- a/site/src/testHelpers/handlers.ts +++ b/site/src/testHelpers/handlers.ts @@ -2,7 +2,7 @@ import fs from "node:fs"; import path from "node:path"; import type { CreateWorkspaceBuildRequest } from "api/typesGenerated"; import { permissionChecks } from "modules/permissions"; -import { http, HttpResponse } from "msw"; +import { HttpResponse, http } from "msw"; import * as M from "./entities"; import { MockGroup, MockWorkspaceQuota } from "./entities"; diff --git a/site/src/testHelpers/hooks.tsx b/site/src/testHelpers/hooks.tsx index 4e8b22f5a1d1e..86d0c1fb8d26a 100644 --- a/site/src/testHelpers/hooks.tsx +++ b/site/src/testHelpers/hooks.tsx @@ -1,11 +1,11 @@ +import { AppProviders } from "App"; import { + act, type RenderHookOptions, type RenderHookResult, - act, renderHook, waitFor, } from "@testing-library/react"; -import { AppProviders } from "App"; import { RequireAuth } from "contexts/auth/RequireAuth"; import { type FC, @@ -15,14 +15,14 @@ import { } from "react"; import type { QueryClient } from "react-query"; import { + createMemoryRouter, type Location, RouterProvider, - createMemoryRouter, useLocation, } from "react-router"; import { - type RenderWithAuthOptions, createTestQueryClient, + type RenderWithAuthOptions, } from "./renderHelpers"; type RouterLocationSnapshot = Readonly<{ @@ -98,7 +98,7 @@ export async function renderHookWithAuth( }; let forceUpdateRenderHookChildren!: () => void; - let currentRenderHookChildren: ReactNode = undefined; + let currentRenderHookChildren: ReactNode; const InitialRoute: FC = () => { const [, forceRerender] = useReducer((b: boolean) => !b, false); diff --git a/site/src/testHelpers/renderHelpers.tsx b/site/src/testHelpers/renderHelpers.tsx index d40c01c0ddb05..c928e376992bd 100644 --- a/site/src/testHelpers/renderHelpers.tsx +++ b/site/src/testHelpers/renderHelpers.tsx @@ -1,12 +1,12 @@ +import { AppProviders } from "App"; import { screen, render as testingLibraryRender, waitFor, } from "@testing-library/react"; -import { AppProviders } from "App"; +import { RequireAuth } from "contexts/auth/RequireAuth"; import type { ProxyProvider } from "contexts/ProxyContext"; import { ThemeOverride } from "contexts/ThemeProvider"; -import { RequireAuth } from "contexts/auth/RequireAuth"; import { DashboardLayout } from "modules/dashboard/DashboardLayout"; import type { DashboardProvider } from "modules/dashboard/DashboardProvider"; import OrganizationSettingsLayout from "modules/management/OrganizationSettingsLayout"; @@ -15,9 +15,9 @@ import { WorkspaceSettingsLayout } from "pages/WorkspaceSettingsPage/WorkspaceSe import type { ReactNode } from "react"; import { QueryClient } from "react-query"; import { + createMemoryRouter, type RouteObject, RouterProvider, - createMemoryRouter, } from "react-router"; import themes, { DEFAULT_THEME } from "theme"; import { MockUserOwner } from "./entities"; diff --git a/site/src/testHelpers/storybook.tsx b/site/src/testHelpers/storybook.tsx index 4a1c045b9609a..4561d7b7348c6 100644 --- a/site/src/testHelpers/storybook.tsx +++ b/site/src/testHelpers/storybook.tsx @@ -4,12 +4,12 @@ import { getAuthorizationKey } from "api/queries/authCheck"; import { hasFirstUserKey, meKey } from "api/queries/users"; import type { Entitlements } from "api/typesGenerated"; import { GlobalSnackbar } from "components/GlobalSnackbar/GlobalSnackbar"; +import { AuthProvider } from "contexts/auth/AuthProvider"; import { + getPreferredProxy, ProxyContext, type ProxyContextValue, - getPreferredProxy, } from "contexts/ProxyContext"; -import { AuthProvider } from "contexts/auth/AuthProvider"; import { DashboardContext } from "modules/dashboard/DashboardProvider"; import { DeploymentConfigContext } from "modules/management/DeploymentConfigProvider"; import { OrganizationSettingsContext } from "modules/management/OrganizationSettingsLayout"; @@ -106,7 +106,7 @@ export const withWebSocket = (Story: FC, { parameters }: StoryContext) => { }, 0); } - removeEventListener(type: string, callback: CallbackFn) {} + removeEventListener(_type: string, _callback: CallbackFn) {} close() {} } as unknown as typeof window.WebSocket; diff --git a/site/src/theme/dark/mui.ts b/site/src/theme/dark/mui.ts index e0902d857125f..0d3133db1cbb8 100644 --- a/site/src/theme/dark/mui.ts +++ b/site/src/theme/dark/mui.ts @@ -1,4 +1,4 @@ -// biome-ignore lint/nursery/noRestrictedImports: createTheme +// biome-ignore lint/style/noRestrictedImports: createTheme import { createTheme } from "@mui/material/styles"; import { BODY_FONT_FAMILY, borderRadius } from "../constants"; import { components } from "../mui"; diff --git a/site/src/theme/index.ts b/site/src/theme/index.ts index a36bd9b223e8d..9ffc9b75668e9 100644 --- a/site/src/theme/index.ts +++ b/site/src/theme/index.ts @@ -1,4 +1,4 @@ -// biome-ignore lint/nursery/noRestrictedImports: We still use `Theme` as a basis for our actual theme, for now. +// biome-ignore lint/style/noRestrictedImports: We still use `Theme` as a basis for our actual theme, for now. import type { Theme as MuiTheme } from "@mui/material/styles"; import type * as monaco from "monaco-editor"; import type { Branding } from "./branding"; diff --git a/site/src/theme/light/mui.ts b/site/src/theme/light/mui.ts index 179297c132f0d..8092b5f8cbe80 100644 --- a/site/src/theme/light/mui.ts +++ b/site/src/theme/light/mui.ts @@ -1,4 +1,4 @@ -// biome-ignore lint/nursery/noRestrictedImports: createTheme +// biome-ignore lint/style/noRestrictedImports: createTheme import { createTheme } from "@mui/material/styles"; import { BODY_FONT_FAMILY, borderRadius } from "../constants"; import { components } from "../mui"; diff --git a/site/src/theme/mui.ts b/site/src/theme/mui.ts index 346ca90bcd04c..fc20b0a9f9be1 100644 --- a/site/src/theme/mui.ts +++ b/site/src/theme/mui.ts @@ -1,6 +1,6 @@ -// biome-ignore lint/nursery/noRestrictedImports: we use the classes for customization +// biome-ignore lint/style/noRestrictedImports: we use the classes for customization import { alertClasses } from "@mui/material/Alert"; -// biome-ignore lint/nursery/noRestrictedImports: we use the MUI theme as a base +// biome-ignore lint/style/noRestrictedImports: we use the MUI theme as a base import type { ThemeOptions } from "@mui/material/styles"; import { BODY_FONT_FAMILY, @@ -12,18 +12,6 @@ import { } from "./constants"; import tw from "./tailwindColors"; -type PaletteIndex = - | "primary" - | "secondary" - | "background" - | "text" - | "error" - | "warning" - | "info" - | "success" - | "action" - | "neutral"; - // biome-ignore lint/suspicious/noExplicitAny: needed for MUI overrides type MuiStyle = any; diff --git a/site/src/theme/roles.ts b/site/src/theme/roles.ts index b83bd6ad15f09..702cebf1ad158 100644 --- a/site/src/theme/roles.ts +++ b/site/src/theme/roles.ts @@ -1,9 +1,5 @@ export type ThemeRole = keyof Roles; -type InteractiveThemeRole = keyof { - [K in keyof Roles as Roles[K] extends InteractiveRole ? K : never]: unknown; -}; - export interface Roles { /** Something is wrong; either unexpectedly, or in a meaningful way. */ error: Role; diff --git a/site/src/utils/OneWayWebSocket.test.ts b/site/src/utils/OneWayWebSocket.test.ts index a0492dab9b439..3a4b954145f99 100644 --- a/site/src/utils/OneWayWebSocket.test.ts +++ b/site/src/utils/OneWayWebSocket.test.ts @@ -8,8 +8,8 @@ */ import { - type MockWebSocketServer, createMockWebSocket, + type MockWebSocketServer, } from "testHelpers/websockets"; import { type OneWayMessageEvent, OneWayWebSocket } from "./OneWayWebSocket"; diff --git a/site/src/utils/dormant.test.ts b/site/src/utils/dormant.test.ts index 9f52ffafa3ade..ff4b935df5f3d 100644 --- a/site/src/utils/dormant.test.ts +++ b/site/src/utils/dormant.test.ts @@ -1,5 +1,5 @@ -import type * as TypesGen from "api/typesGenerated"; import * as Mocks from "testHelpers/entities"; +import type * as TypesGen from "api/typesGenerated"; import { displayDormantDeletion } from "./dormant"; describe("displayDormantDeletion", () => { diff --git a/site/src/utils/filetree.test.ts b/site/src/utils/filetree.test.ts index e4aadaabbe424..f7e3eb48f3ae7 100644 --- a/site/src/utils/filetree.test.ts +++ b/site/src/utils/filetree.test.ts @@ -1,7 +1,7 @@ import { - type FileTree, createFile, existsFile, + type FileTree, getFileContent, isFolder, moveFile, diff --git a/site/src/utils/formUtils.test.ts b/site/src/utils/formUtils.test.ts index c009b38dd929e..2b3d6b3df1b0f 100644 --- a/site/src/utils/formUtils.test.ts +++ b/site/src/utils/formUtils.test.ts @@ -1,5 +1,5 @@ -import type { FormikContextType } from "formik/dist/types"; import { mockApiError } from "testHelpers/entities"; +import type { FormikContextType } from "formik/dist/types"; import { getFormHelpers, nameValidator, onChangeTrimmed } from "./formUtils"; interface TestType { diff --git a/site/src/utils/portForward.ts b/site/src/utils/portForward.ts index 448c521155ac2..78dae8c1543ff 100644 --- a/site/src/utils/portForward.ts +++ b/site/src/utils/portForward.ts @@ -65,7 +65,7 @@ export const openMaybePortForwardedURL = ( open( portForwardURL( proxyHost, - Number.parseInt(url.port), + Number.parseInt(url.port, 10), agentName, workspaceName, username, @@ -74,7 +74,7 @@ export const openMaybePortForwardedURL = ( url.search, ), ); - } catch (ex) { + } catch (_ex) { open(uri); } }; diff --git a/site/src/utils/schedule.test.ts b/site/src/utils/schedule.test.ts index cae8d3bda7a47..20289ddddeca6 100644 --- a/site/src/utils/schedule.test.ts +++ b/site/src/utils/schedule.test.ts @@ -1,7 +1,7 @@ +import * as Mocks from "testHelpers/entities"; import type { Workspace } from "api/typesGenerated"; import dayjs from "dayjs"; import duration from "dayjs/plugin/duration"; -import * as Mocks from "testHelpers/entities"; import { deadlineExtensionMax, deadlineExtensionMin, diff --git a/site/src/utils/workspace.test.ts b/site/src/utils/workspace.test.ts index 4e6f4b287fe0e..b534a4b367ab8 100644 --- a/site/src/utils/workspace.test.ts +++ b/site/src/utils/workspace.test.ts @@ -1,6 +1,6 @@ +import * as Mocks from "testHelpers/entities"; import type * as TypesGen from "api/typesGenerated"; import dayjs from "dayjs"; -import * as Mocks from "testHelpers/entities"; import { agentVersionStatus, defaultWorkspaceExtension, diff --git a/site/src/utils/workspace.tsx b/site/src/utils/workspace.tsx index 49e885581497d..3c89ddce6db3f 100644 --- a/site/src/utils/workspace.tsx +++ b/site/src/utils/workspace.tsx @@ -5,8 +5,12 @@ import dayjs from "dayjs"; import duration from "dayjs/plugin/duration"; import minMax from "dayjs/plugin/minMax"; import utc from "dayjs/plugin/utc"; -import { HourglassIcon } from "lucide-react"; -import { CircleAlertIcon, PlayIcon, SquareIcon } from "lucide-react"; +import { + CircleAlertIcon, + HourglassIcon, + PlayIcon, + SquareIcon, +} from "lucide-react"; import semver from "semver"; import { getPendingStatusLabel } from "./provisionerJob"; diff --git a/site/vite.config.mts b/site/vite.config.mts index e6a30aa71744e..d2da0a1a93752 100644 --- a/site/vite.config.mts +++ b/site/vite.config.mts @@ -1,7 +1,7 @@ import * as path from "node:path"; import react from "@vitejs/plugin-react"; import { visualizer } from "rollup-plugin-visualizer"; -import { type PluginOption, defineConfig } from "vite"; +import { defineConfig, type PluginOption } from "vite"; import checker from "vite-plugin-checker"; const plugins: PluginOption[] = [ @@ -89,7 +89,7 @@ export default defineConfig({ // Vite does not catch socket errors, and stops the webserver. // As /logs endpoint can return HTTP 4xx status, we need to embrace // Vite with a custom error handler to prevent from quitting. - proxy.on("proxyReqWs", (proxyReq, req, socket) => { + proxy.on("proxyReqWs", (proxyReq, _req, socket) => { if (process.env.NODE_ENV === "development") { proxyReq.setHeader( "origin",