From a75993a00561e346f74da9c4992905b08f54f197 Mon Sep 17 00:00:00 2001 From: Brett Kolodny Date: Tue, 29 Apr 2025 14:59:25 +0000 Subject: [PATCH 01/23] chore: add knip as dev dep and create config --- site/.knip.jsonc | 13 ++++++ site/package.json | 10 ++++- site/pnpm-lock.yaml | 105 ++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 123 insertions(+), 5 deletions(-) create mode 100644 site/.knip.jsonc diff --git a/site/.knip.jsonc b/site/.knip.jsonc new file mode 100644 index 0000000000000..760a2dfea4dd3 --- /dev/null +++ b/site/.knip.jsonc @@ -0,0 +1,13 @@ +{ + "$schema": "https://unpkg.com/knip@5/schema.json", + "entry": [ + "./src/index.tsx" + ], + "project": [ + "./src/**/*.ts", + "./src/**/*.tsx" + ], + "ignore": [ + "**/*Generated.ts" + ] +} \ No newline at end of file diff --git a/site/package.json b/site/package.json index 8a08e837dc8a5..67be24f8a7928 100644 --- a/site/package.json +++ b/site/package.json @@ -16,6 +16,7 @@ "lint": "pnpm run lint:check && pnpm run lint:types && pnpm run lint:circular-deps", "lint:check": " biome lint --error-on-warnings .", "lint:circular-deps": "dpdm --no-tree --no-warning -T ./src/App.tsx", + "lint:knip": "knip", "lint:fix": " biome lint --error-on-warnings --write .", "lint:types": "tsc -p .", "playwright:install": "playwright install --with-deps chromium", @@ -181,6 +182,7 @@ "jest-location-mock": "2.0.0", "jest-websocket-mock": "2.5.0", "jest_workaround": "0.1.14", + "knip": "5.51.0", "msw": "2.4.8", "postcss": "8.5.1", "protobufjs": "7.4.0", @@ -198,7 +200,11 @@ "vite-plugin-checker": "0.8.0", "vite-plugin-turbosnap": "1.0.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" @@ -215,4 +221,4 @@ "prismjs": "1.30.0" } } -} +} \ No newline at end of file diff --git a/site/pnpm-lock.yaml b/site/pnpm-lock.yaml index 15bc6709ef011..f6b735a0d5ea2 100644 --- a/site/pnpm-lock.yaml +++ b/site/pnpm-lock.yaml @@ -449,6 +449,9 @@ importers: jest_workaround: specifier: 0.1.14 version: 0.1.14(@swc/core@1.3.38)(@swc/jest@0.2.37(@swc/core@1.3.38)) + knip: + specifier: 5.51.0 + version: 5.51.0(@types/node@20.17.16)(typescript@5.6.3) msw: specifier: 2.4.8 version: 2.4.8(typescript@5.6.3) @@ -3606,6 +3609,9 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, tarball: https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz} + easy-table@1.2.0: + resolution: {integrity: sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==, tarball: https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==, tarball: https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz} @@ -3642,6 +3648,10 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, tarball: https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz} + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==, tarball: https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz} + engines: {node: '>=10.13.0'} + entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, tarball: https://registry.npmjs.org/entities/-/entities-2.2.0.tgz} @@ -4525,6 +4535,10 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==, tarball: https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz} hasBin: true + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==, tarball: https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz} + hasBin: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, tarball: https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz} @@ -4587,6 +4601,14 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, tarball: https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz} engines: {node: '>=6'} + knip@5.51.0: + resolution: {integrity: sha512-gw5TzLt9FikIk1oPWDc7jPRb/+L3Aw1ia25hWUQBb+hXS/Rbdki/0rrzQygjU5/CVYnRWYqc1kgdNi60Jm1lPg==, tarball: https://registry.npmjs.org/knip/-/knip-5.51.0.tgz} + engines: {node: '>=18.18.0'} + hasBin: true + peerDependencies: + '@types/node': '>=18' + typescript: '>=5.0.4' + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, tarball: https://registry.npmjs.org/leven/-/leven-3.1.0.tgz} engines: {node: '>=6'} @@ -5143,6 +5165,10 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, tarball: https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz} engines: {node: '>=8'} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==, tarball: https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz} + engines: {node: '>=18'} + parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==, tarball: https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz} @@ -5298,6 +5324,10 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==, tarball: https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==, tarball: https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz} + engines: {node: '>=18'} + prismjs@1.30.0: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==, tarball: https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz} engines: {node: '>=6'} @@ -5778,6 +5808,10 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, tarball: https://registry.npmjs.org/slash/-/slash-3.0.0.tgz} engines: {node: '>=8'} + smol-toml@1.3.4: + resolution: {integrity: sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==, tarball: https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.4.tgz} + engines: {node: '>= 18'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, tarball: https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz} engines: {node: '>=0.10.0'} @@ -5919,6 +5953,10 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, tarball: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz} engines: {node: '>=8'} + strip-json-comments@5.0.1: + resolution: {integrity: sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==, tarball: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.1.tgz} + engines: {node: '>=14.16'} + style-to-object@1.0.8: resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==, tarball: https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz} @@ -5966,6 +6004,10 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, tarball: https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz} + engines: {node: '>=6'} + tar-fs@2.1.2: resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==, tarball: https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz} @@ -6521,6 +6563,15 @@ packages: yup@1.6.1: resolution: {integrity: sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==, tarball: https://registry.npmjs.org/yup/-/yup-1.6.1.tgz} + zod-validation-error@3.4.0: + resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==, tarball: https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.4.0.tgz} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.18.0 + + zod@3.24.3: + resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==, tarball: https://registry.npmjs.org/zod/-/zod-3.24.3.tgz} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==, tarball: https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz} @@ -9135,8 +9186,7 @@ snapshots: dependencies: sprintf-js: 1.0.3 - argparse@2.0.1: - optional: true + argparse@2.0.1: {} aria-hidden@1.2.4: dependencies: @@ -9811,6 +9861,12 @@ snapshots: eastasianwidth@0.2.0: {} + easy-table@1.2.0: + dependencies: + ansi-regex: 5.0.1 + optionalDependencies: + wcwidth: 1.0.1 + ee-first@1.1.1: {} electron-to-chromium@1.5.50: {} @@ -9835,6 +9891,11 @@ snapshots: dependencies: once: 1.4.0 + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + entities@2.2.0: {} entities@4.5.0: {} @@ -11047,6 +11108,8 @@ snapshots: jiti@1.21.7: {} + jiti@2.4.2: {} + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -11057,7 +11120,6 @@ snapshots: js-yaml@4.1.0: dependencies: argparse: 2.0.1 - optional: true jsdoc-type-pratt-parser@4.1.0: {} @@ -11133,6 +11195,25 @@ snapshots: kleur@3.0.3: {} + knip@5.51.0(@types/node@20.17.16)(typescript@5.6.3): + dependencies: + '@nodelib/fs.walk': 1.2.8 + '@types/node': 20.17.16 + easy-table: 1.2.0 + enhanced-resolve: 5.18.1 + fast-glob: 3.3.3 + jiti: 2.4.2 + js-yaml: 4.1.0 + minimist: 1.2.8 + picocolors: 1.1.1 + picomatch: 4.0.2 + pretty-ms: 9.2.0 + smol-toml: 1.3.4 + strip-json-comments: 5.0.1 + typescript: 5.6.3 + zod: 3.24.3 + zod-validation-error: 3.4.0(zod@3.24.3) + leven@3.1.0: {} levn@0.4.1: @@ -11971,6 +12052,8 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-ms@4.0.0: {} + parse5@7.1.2: dependencies: entities: 4.5.0 @@ -12106,6 +12189,10 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + pretty-ms@9.2.0: + dependencies: + parse-ms: 4.0.0 + prismjs@1.30.0: {} process-nextick-args@2.0.1: {} @@ -12706,6 +12793,8 @@ snapshots: slash@3.0.0: {} + smol-toml@1.3.4: {} + source-map-js@1.2.1: {} source-map-support@0.5.13: @@ -12837,6 +12926,8 @@ snapshots: strip-json-comments@3.1.1: {} + strip-json-comments@5.0.1: {} + style-to-object@1.0.8: dependencies: inline-style-parser: 0.2.4 @@ -12906,6 +12997,8 @@ snapshots: transitivePeerDependencies: - ts-node + tapable@2.2.1: {} + tar-fs@2.1.2: dependencies: chownr: 1.1.4 @@ -13443,4 +13536,10 @@ snapshots: toposort: 2.0.2 type-fest: 2.19.0 + zod-validation-error@3.4.0(zod@3.24.3): + dependencies: + zod: 3.24.3 + + zod@3.24.3: {} + zwitch@2.0.4: {} From d947dc748978b5bfac4ef23e6f1cf3e6ee29a6ae Mon Sep 17 00:00:00 2001 From: Brett Kolodny Date: Tue, 29 Apr 2025 15:03:24 +0000 Subject: [PATCH 02/23] chore: update knip config to ignore exported types and interfaces --- site/.knip.jsonc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/site/.knip.jsonc b/site/.knip.jsonc index 760a2dfea4dd3..ff286737fde13 100644 --- a/site/.knip.jsonc +++ b/site/.knip.jsonc @@ -9,5 +9,11 @@ ], "ignore": [ "**/*Generated.ts" - ] + ], + // This sets knip not to report unused exports of types and interfaces + // as long as they are used within the file. + "ignoreExportsUsedInFile": { + "interface": true, + "type": true + } } \ No newline at end of file From a23554cbd213e068a7ee7fb720d8ef1a607399ad Mon Sep 17 00:00:00 2001 From: Brett Kolodny Date: Tue, 29 Apr 2025 15:15:40 +0000 Subject: [PATCH 03/23] chore: add unused imports to biome config --- site/biome.jsonc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/site/biome.jsonc b/site/biome.jsonc index d26636fabef18..bc6fa8de6e946 100644 --- a/site/biome.jsonc +++ b/site/biome.jsonc @@ -16,6 +16,9 @@ "useButtonType": { "level": "off" }, "useSemanticElements": { "level": "off" } }, + "correctness": { + "noUnusedImports": "warn" + }, "style": { "noNonNullAssertion": { "level": "off" }, "noParameterAssign": { "level": "off" }, From cf48a1b4c4853e9577777c54aada55815d43cedf Mon Sep 17 00:00:00 2001 From: Brett Kolodny Date: Tue, 29 Apr 2025 15:24:34 +0000 Subject: [PATCH 04/23] chore: remove unused imports --- site/.knip.jsonc | 29 +++++++------------ site/e2e/tests/deployment/idpOrgSync.spec.ts | 1 - .../e2e/tests/organizations/auditLogs.spec.ts | 2 +- site/package.json | 8 ++--- site/src/api/queries/organizations.ts | 1 - .../components/Avatar/AvatarDataSkeleton.tsx | 1 - .../modules/dashboard/Navbar/NavbarView.tsx | 3 -- .../management/DeploymentSidebarView.tsx | 1 - .../InboxPopover.stories.tsx | 2 +- .../JobStatusIndicator.stories.tsx | 1 - .../resources/AgentDevcontainerCard.tsx | 2 +- .../src/modules/resources/AppLink/AppLink.tsx | 1 - site/src/pages/AuditPage/AuditPage.tsx | 1 - .../NotificationsPage/NotificationsPage.tsx | 1 - .../OrganizationMembersPageView.tsx | 1 - .../JobRow.stories.tsx | 2 +- .../OrganizationProvisionerJobsPage.tsx | 2 -- .../ExternalAuthPage/ExternalAuthPageView.tsx | 3 -- site/src/pages/UserSettingsPage/Sidebar.tsx | 1 - site/src/pages/UsersPage/UsersPageView.tsx | 1 - site/vite.config.mts | 1 - 21 files changed, 17 insertions(+), 48 deletions(-) diff --git a/site/.knip.jsonc b/site/.knip.jsonc index ff286737fde13..f687288c814a7 100644 --- a/site/.knip.jsonc +++ b/site/.knip.jsonc @@ -1,19 +1,12 @@ { - "$schema": "https://unpkg.com/knip@5/schema.json", - "entry": [ - "./src/index.tsx" - ], - "project": [ - "./src/**/*.ts", - "./src/**/*.tsx" - ], - "ignore": [ - "**/*Generated.ts" - ], - // This sets knip not to report unused exports of types and interfaces - // as long as they are used within the file. - "ignoreExportsUsedInFile": { - "interface": true, - "type": true - } -} \ No newline at end of file + "$schema": "https://unpkg.com/knip@5/schema.json", + "entry": ["./src/index.tsx"], + "project": ["./src/**/*.ts", "./src/**/*.tsx"], + "ignore": ["**/*Generated.ts"], + // This sets knip not to report unused exports of types and interfaces + // as long as they are used within the file. + "ignoreExportsUsedInFile": { + "interface": true, + "type": true + } +} diff --git a/site/e2e/tests/deployment/idpOrgSync.spec.ts b/site/e2e/tests/deployment/idpOrgSync.spec.ts index a693e70007d4d..4f175b93183c0 100644 --- a/site/e2e/tests/deployment/idpOrgSync.spec.ts +++ b/site/e2e/tests/deployment/idpOrgSync.spec.ts @@ -5,7 +5,6 @@ import { deleteOrganization, setupApiCalls, } from "../../api"; -import { users } from "../../constants"; import { login, randomName, requiresLicense } from "../../helpers"; import { beforeCoderTest } from "../../hooks"; diff --git a/site/e2e/tests/organizations/auditLogs.spec.ts b/site/e2e/tests/organizations/auditLogs.spec.ts index 3044d9da2d7ca..0cb92c94a5692 100644 --- a/site/e2e/tests/organizations/auditLogs.spec.ts +++ b/site/e2e/tests/organizations/auditLogs.spec.ts @@ -1,4 +1,4 @@ -import { type Page, expect, test } from "@playwright/test"; +import { expect, test } from "@playwright/test"; import { createOrganization, createOrganizationMember, diff --git a/site/package.json b/site/package.json index 67be24f8a7928..15cba9e021dab 100644 --- a/site/package.json +++ b/site/package.json @@ -200,11 +200,7 @@ "vite-plugin-checker": "0.8.0", "vite-plugin-turbosnap": "1.0.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" @@ -221,4 +217,4 @@ "prismjs": "1.30.0" } } -} \ No newline at end of file +} diff --git a/site/src/api/queries/organizations.ts b/site/src/api/queries/organizations.ts index 238fb4493fb52..e4483ad620ca7 100644 --- a/site/src/api/queries/organizations.ts +++ b/site/src/api/queries/organizations.ts @@ -8,7 +8,6 @@ import type { GroupSyncSettings, PaginatedMembersRequest, PaginatedMembersResponse, - ProvisionerJobStatus, RoleSyncSettings, UpdateOrganizationRequest, } from "api/typesGenerated"; diff --git a/site/src/components/Avatar/AvatarDataSkeleton.tsx b/site/src/components/Avatar/AvatarDataSkeleton.tsx index 5aa18fdcbc2b0..d388a44f2d766 100644 --- a/site/src/components/Avatar/AvatarDataSkeleton.tsx +++ b/site/src/components/Avatar/AvatarDataSkeleton.tsx @@ -1,5 +1,4 @@ import Skeleton from "@mui/material/Skeleton"; -import { Stack } from "components/Stack/Stack"; import type { FC } from "react"; export const AvatarDataSkeleton: FC = () => { diff --git a/site/src/modules/dashboard/Navbar/NavbarView.tsx b/site/src/modules/dashboard/Navbar/NavbarView.tsx index a581e2b2434f7..0447e762ed67e 100644 --- a/site/src/modules/dashboard/Navbar/NavbarView.tsx +++ b/site/src/modules/dashboard/Navbar/NavbarView.tsx @@ -1,15 +1,12 @@ import { API } from "api/api"; -import { experiments } from "api/queries/experiments"; import type * as TypesGen from "api/typesGenerated"; import { Button } from "components/Button/Button"; import { ExternalImage } from "components/ExternalImage/ExternalImage"; import { CoderIcon } from "components/Icons/CoderIcon"; import type { ProxyContextValue } from "contexts/ProxyContext"; import { useWebpushNotifications } from "contexts/useWebpushNotifications"; -import { useEmbeddedMetadata } from "hooks/useEmbeddedMetadata"; import { NotificationsInbox } from "modules/notifications/NotificationsInbox/NotificationsInbox"; import type { FC } from "react"; -import { useQuery } from "react-query"; import { NavLink, useLocation } from "react-router-dom"; import { cn } from "utils/cn"; import { DeploymentDropdown } from "./DeploymentDropdown"; diff --git a/site/src/modules/management/DeploymentSidebarView.tsx b/site/src/modules/management/DeploymentSidebarView.tsx index 21d5ca840cf56..3576f96f3c130 100644 --- a/site/src/modules/management/DeploymentSidebarView.tsx +++ b/site/src/modules/management/DeploymentSidebarView.tsx @@ -1,4 +1,3 @@ -import { FeatureStageBadge } from "components/FeatureStageBadge/FeatureStageBadge"; import { Sidebar as BaseSidebar, SettingsSidebarNavItem as SidebarNavItem, diff --git a/site/src/modules/notifications/NotificationsInbox/InboxPopover.stories.tsx b/site/src/modules/notifications/NotificationsInbox/InboxPopover.stories.tsx index af474966e7708..8e18efd042ab4 100644 --- a/site/src/modules/notifications/NotificationsInbox/InboxPopover.stories.tsx +++ b/site/src/modules/notifications/NotificationsInbox/InboxPopover.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { expect, fn, userEvent, waitFor, within } from "@storybook/test"; +import { expect, fn, userEvent, within } from "@storybook/test"; import { MockNotifications } from "testHelpers/entities"; import { InboxPopover } from "./InboxPopover"; diff --git a/site/src/modules/provisioners/JobStatusIndicator.stories.tsx b/site/src/modules/provisioners/JobStatusIndicator.stories.tsx index 621aa36c3f14e..25c0fa273ce09 100644 --- a/site/src/modules/provisioners/JobStatusIndicator.stories.tsx +++ b/site/src/modules/provisioners/JobStatusIndicator.stories.tsx @@ -1,5 +1,4 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { MockProvisionerJob } from "testHelpers/entities"; import { JobStatusIndicator } from "./JobStatusIndicator"; const meta: Meta = { diff --git a/site/src/modules/resources/AgentDevcontainerCard.tsx b/site/src/modules/resources/AgentDevcontainerCard.tsx index c96ea924fd9ae..91a90a75db85f 100644 --- a/site/src/modules/resources/AgentDevcontainerCard.tsx +++ b/site/src/modules/resources/AgentDevcontainerCard.tsx @@ -1,5 +1,5 @@ import Link from "@mui/material/Link"; -import Tooltip, { type TooltipProps } from "@mui/material/Tooltip"; +import Tooltip from "@mui/material/Tooltip"; import type { Workspace, WorkspaceAgent, diff --git a/site/src/modules/resources/AppLink/AppLink.tsx b/site/src/modules/resources/AppLink/AppLink.tsx index 3dea2fd7c4bab..5bf2114acf879 100644 --- a/site/src/modules/resources/AppLink/AppLink.tsx +++ b/site/src/modules/resources/AppLink/AppLink.tsx @@ -7,7 +7,6 @@ import { API } from "api/api"; import type * as TypesGen from "api/typesGenerated"; import { displayError } from "components/GlobalSnackbar/utils"; import { useProxy } from "contexts/ProxyContext"; -import { useEffect } from "react"; import { type FC, type MouseEvent, useState } from "react"; import { createAppLinkHref } from "utils/apps"; import { generateRandomString } from "utils/random"; diff --git a/site/src/pages/AuditPage/AuditPage.tsx b/site/src/pages/AuditPage/AuditPage.tsx index 69dbb235f6ac2..f63adbcd4136b 100644 --- a/site/src/pages/AuditPage/AuditPage.tsx +++ b/site/src/pages/AuditPage/AuditPage.tsx @@ -1,5 +1,4 @@ import { paginatedAudits } from "api/queries/audits"; -import { ErrorAlert } from "components/Alert/ErrorAlert"; import { useFilter } from "components/Filter/Filter"; import { useUserFilterMenu } from "components/Filter/UserFilter"; import { isNonInitialPage } from "components/PaginationWidget/utils"; diff --git a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx index 9e3bc342167d4..f545765ce9210 100644 --- a/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx +++ b/site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx @@ -4,7 +4,6 @@ import { selectTemplatesByGroup, systemNotificationTemplates, } from "api/queries/notifications"; -import { FeatureStageBadge } from "components/FeatureStageBadge/FeatureStageBadge"; import { Loader } from "components/Loader/Loader"; import { SettingsHeader, diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationMembersPageView.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationMembersPageView.tsx index d0bb441a1ed25..296ea9a8c658a 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationMembersPageView.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationMembersPageView.tsx @@ -33,7 +33,6 @@ import { TableHeader, TableRow, } from "components/Table/Table"; -import { TableLoader } from "components/TableLoader/TableLoader"; import { UserAutocomplete } from "components/UserAutocomplete/UserAutocomplete"; import type { PaginationResultInfo } from "hooks/usePaginatedQuery"; import { TriangleAlert } from "lucide-react"; diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/JobRow.stories.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/JobRow.stories.tsx index 35818baeed2e3..8fcc52e4957a6 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/JobRow.stories.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/JobRow.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { expect, userEvent, waitFor, within } from "@storybook/test"; +import { expect, userEvent, within } from "@storybook/test"; import { Table, TableBody } from "components/Table/Table"; import { MockProvisionerJob } from "testHelpers/entities"; import { daysAgo } from "utils/time"; diff --git a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPage.tsx b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPage.tsx index e7c8e30efcf17..e64feaf2e31c6 100644 --- a/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPage.tsx +++ b/site/src/pages/OrganizationSettingsPage/OrganizationProvisionerJobsPage/OrganizationProvisionerJobsPage.tsx @@ -1,6 +1,4 @@ -import type { GetProvisionerJobsParams } from "api/api"; import { provisionerJobs } from "api/queries/organizations"; -import type { ProvisionerJobStatus } from "api/typesGenerated"; import { useOrganizationSettings } from "modules/management/OrganizationSettingsLayout"; import type { FC } from "react"; import { useQuery } from "react-query"; diff --git a/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.tsx b/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.tsx index 845918a7b75ed..6cf9204b70540 100644 --- a/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.tsx +++ b/site/src/pages/UserSettingsPage/ExternalAuthPage/ExternalAuthPageView.tsx @@ -1,7 +1,6 @@ import { useTheme } from "@emotion/react"; import AutorenewIcon from "@mui/icons-material/Autorenew"; import LoadingButton from "@mui/lab/LoadingButton"; -import Badge from "@mui/material/Badge"; import Divider from "@mui/material/Divider"; import Table from "@mui/material/Table"; import TableBody from "@mui/material/TableBody"; @@ -10,8 +9,6 @@ import TableContainer from "@mui/material/TableContainer"; import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; import Tooltip from "@mui/material/Tooltip"; -// biome-ignore lint/nursery/noRestrictedImports: styled -import { styled } from "@mui/material/styles"; import visuallyHidden from "@mui/utils/visuallyHidden"; import { externalAuthProvider } from "api/queries/externalAuth"; import type { diff --git a/site/src/pages/UserSettingsPage/Sidebar.tsx b/site/src/pages/UserSettingsPage/Sidebar.tsx index 80efe6fbd7923..4a1e44bd16dd0 100644 --- a/site/src/pages/UserSettingsPage/Sidebar.tsx +++ b/site/src/pages/UserSettingsPage/Sidebar.tsx @@ -7,7 +7,6 @@ import AccountIcon from "@mui/icons-material/Person"; import VpnKeyOutlined from "@mui/icons-material/VpnKeyOutlined"; import type { User } from "api/typesGenerated"; import { Avatar } from "components/Avatar/Avatar"; -import { FeatureStageBadge } from "components/FeatureStageBadge/FeatureStageBadge"; import { GitIcon } from "components/Icons/GitIcon"; import { Sidebar as BaseSidebar, diff --git a/site/src/pages/UsersPage/UsersPageView.tsx b/site/src/pages/UsersPage/UsersPageView.tsx index 4a36246106bf7..03b4bff7d45f7 100644 --- a/site/src/pages/UsersPage/UsersPageView.tsx +++ b/site/src/pages/UsersPage/UsersPageView.tsx @@ -10,7 +10,6 @@ import { SettingsHeaderDescription, SettingsHeaderTitle, } from "components/SettingsHeader/SettingsHeader"; -import { Stack } from "components/Stack/Stack"; import { UserPlusIcon } from "lucide-react"; import type { ComponentProps, FC } from "react"; import { Link as RouterLink } from "react-router-dom"; diff --git a/site/vite.config.mts b/site/vite.config.mts index 89c5c924a8563..e2afaa430bfe5 100644 --- a/site/vite.config.mts +++ b/site/vite.config.mts @@ -1,6 +1,5 @@ import * as path from "node:path"; import react from "@vitejs/plugin-react"; -import { buildSync } from "esbuild"; import { visualizer } from "rollup-plugin-visualizer"; import { type PluginOption, defineConfig } from "vite"; import checker from "vite-plugin-checker"; From 1e2abbfe3ca16b4c8a9baa41b18a8180de3d2731 Mon Sep 17 00:00:00 2001 From: Brett Kolodny Date: Tue, 29 Apr 2025 16:03:17 +0000 Subject: [PATCH 05/23] chore: remove unused exports --- site/src/testHelpers/entities.ts | 6 ------ site/src/testHelpers/localStorage.ts | 2 +- site/src/testHelpers/storybook.tsx | 25 ------------------------- site/src/theme/dark/branding.ts | 2 +- site/src/theme/light/branding.ts | 2 +- site/src/utils/appearance.ts | 15 --------------- site/src/utils/colors.ts | 24 ------------------------ site/src/utils/schedule.tsx | 7 ++----- site/src/utils/workspace.tsx | 4 ---- 9 files changed, 5 insertions(+), 82 deletions(-) diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index 8b19905286a22..97d5b7471021b 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -4335,9 +4335,3 @@ export const MockWorkspaceAgentContainer: TypesGen.WorkspaceAgentContainer = { "/mnt/volume1": "/volume1", }, }; - -export const MockWorkspaceAgentListContainersResponse: TypesGen.WorkspaceAgentListContainersResponse = - { - containers: [MockWorkspaceAgentContainer], - warnings: ["This is a warning"], - }; diff --git a/site/src/testHelpers/localStorage.ts b/site/src/testHelpers/localStorage.ts index 272715fab59d4..d8fbe447dbfcd 100644 --- a/site/src/testHelpers/localStorage.ts +++ b/site/src/testHelpers/localStorage.ts @@ -1,4 +1,4 @@ -export const localStorageMock = (): Storage => { +const localStorageMock = (): Storage => { const store = new Map(); return { diff --git a/site/src/testHelpers/storybook.tsx b/site/src/testHelpers/storybook.tsx index b98f250012d08..84b2f3dd1a4b8 100644 --- a/site/src/testHelpers/storybook.tsx +++ b/site/src/testHelpers/storybook.tsx @@ -1,7 +1,6 @@ import type { StoryContext } from "@storybook/react"; import { withDefaultFeatures } from "api/api"; import { getAuthorizationKey } from "api/queries/authCheck"; -import { getProvisionerDaemonsKey } from "api/queries/organizations"; import { hasFirstUserKey, meKey } from "api/queries/users"; import type { Entitlements } from "api/typesGenerated"; import { GlobalSnackbar } from "components/GlobalSnackbar/GlobalSnackbar"; @@ -125,30 +124,6 @@ export const withAuthProvider = (Story: FC, { parameters }: StoryContext) => { ); }; -export const withProvisioners = (Story: FC, { parameters }: StoryContext) => { - if (!parameters.organization_id) { - throw new Error( - "You forgot to add `parameters.organization_id` to your story", - ); - } - if (!parameters.provisioners) { - throw new Error( - "You forgot to add `parameters.provisioners` to your story", - ); - } - if (!parameters.tags) { - throw new Error("You forgot to add `parameters.tags` to your story"); - } - - const queryClient = useQueryClient(); - queryClient.setQueryData( - getProvisionerDaemonsKey(parameters.organization_id, parameters.tags), - parameters.provisioners, - ); - - return ; -}; - export const withGlobalSnackbar = (Story: FC) => ( <> diff --git a/site/src/theme/dark/branding.ts b/site/src/theme/dark/branding.ts index 614bf630b51bf..e29a10ab2cc30 100644 --- a/site/src/theme/dark/branding.ts +++ b/site/src/theme/dark/branding.ts @@ -1,7 +1,7 @@ import type { Branding } from "../branding"; import colors from "../tailwindColors"; -export const branding: Branding = { +const branding: Branding = { enterprise: { background: colors.blue[950], divider: colors.blue[900], diff --git a/site/src/theme/light/branding.ts b/site/src/theme/light/branding.ts index a23e43239355f..83813445deb4b 100644 --- a/site/src/theme/light/branding.ts +++ b/site/src/theme/light/branding.ts @@ -1,7 +1,7 @@ import type { Branding } from "../branding"; import colors from "../tailwindColors"; -export const branding: Branding = { +const branding: Branding = { enterprise: { background: colors.blue[100], divider: colors.blue[300], diff --git a/site/src/utils/appearance.ts b/site/src/utils/appearance.ts index a7c2fb142b4f8..d025ec15df197 100644 --- a/site/src/utils/appearance.ts +++ b/site/src/utils/appearance.ts @@ -14,18 +14,3 @@ export const getLogoURL = (): string => { ?.getAttribute("content"); return c && !c.startsWith("{{ .") ? c : ""; }; - -/** - * Exposes an easy way to determine if a given URL is for an emoji hosted on - * the Coder deployment. - * - * Helps when you need to style emojis differently (i.e., not adding rounding to - * the container so that the emoji doesn't get cut off). - */ -export function isEmojiUrl(url: string | undefined): boolean { - if (!url) { - return false; - } - - return url.startsWith("/emojis/"); -} diff --git a/site/src/utils/colors.ts b/site/src/utils/colors.ts index cd5701c2d9a4d..e754aff5fac79 100644 --- a/site/src/utils/colors.ts +++ b/site/src/utils/colors.ts @@ -62,30 +62,6 @@ export function isHslColor(input: string): boolean { return true; } -// Used to convert our theme colors to Hex since monaco theme only support hex colors -// From https://www.jameslmilner.com/posts/converting-rgb-hex-hsl-colors/ -export function hslToHex(hsl: string): string { - const [h, s, l] = hsl - .replace("hsl(", "") - .replace(")", "") - .replaceAll("%", "") - .split(",") - .map(Number); - - const hDecimal = l / 100; - const a = (s * Math.min(hDecimal, 1 - hDecimal)) / 100; - const f = (n: number) => { - const k = (n + h / 30) % 12; - const color = hDecimal - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); - - // Convert to Hex and prefix with "0" if required - return Math.round(255 * color) - .toString(16) - .padStart(2, "0"); - }; - return `#${f(0)}${f(8)}${f(4)}`; -} - export const readableForegroundColor = (backgroundColor: string): string => { const rgb = hex.rgb(backgroundColor); diff --git a/site/src/utils/schedule.tsx b/site/src/utils/schedule.tsx index 21a112137ade0..763ce78a8867b 100644 --- a/site/src/utils/schedule.tsx +++ b/site/src/utils/schedule.tsx @@ -55,7 +55,7 @@ export const extractTimezone = ( }; /** Language used in the schedule components */ -export const Language = { +const Language = { manual: "Manual", workspaceShuttingDownLabel: "Workspace is shutting down", afterStart: "after start", @@ -77,10 +77,7 @@ export const autostartDisplay = (schedule: string | undefined): string => { return Language.manual; }; -export const isShuttingDown = ( - workspace: Workspace, - deadline?: Dayjs, -): boolean => { +const isShuttingDown = (workspace: Workspace, deadline?: Dayjs): boolean => { if (!deadline) { if (!workspace.latest_build.deadline) { return false; diff --git a/site/src/utils/workspace.tsx b/site/src/utils/workspace.tsx index 32fd6ce153d0e..de94ea8ca9589 100644 --- a/site/src/utils/workspace.tsx +++ b/site/src/utils/workspace.tsx @@ -256,10 +256,6 @@ export const getDisplayWorkspaceStatus = ( } }; -export const hasJobError = (workspace: TypesGen.Workspace) => { - return workspace.latest_build.job.error !== undefined; -}; - export const paramsUsedToCreateWorkspace = ( param: TypesGen.TemplateVersionParameter, ) => !param.ephemeral; From acb2dd363a857c2c197c50a644e17c28372695e7 Mon Sep 17 00:00:00 2001 From: Brett Kolodny Date: Tue, 29 Apr 2025 16:45:11 +0000 Subject: [PATCH 06/23] chore: remove unused exports --- .../TemplateVersionEditorPage/TemplateVersionEditorPage.tsx | 2 +- .../TemplateVersionStatusBadge.tsx | 2 +- site/src/pages/TemplateVersionPage/TemplateVersionPage.tsx | 2 +- site/src/pages/TemplatesPage/TemplatesPage.tsx | 2 +- site/src/pages/TemplatesPage/TemplatesPageView.tsx | 2 +- site/src/pages/TerminalPage/TerminalAlerts.tsx | 6 +++--- .../UserSettingsPage/AppearancePage/AppearanceForm.tsx | 2 +- site/src/pages/UserSettingsPage/TokensPage/TokensPage.tsx | 2 +- site/src/pages/UsersPage/ResetPasswordDialog.tsx | 2 +- site/src/pages/UsersPage/UsersTable/UsersTable.tsx | 2 +- site/src/pages/WorkspacePage/ResourcesSidebar.tsx | 2 +- site/src/pages/WorkspacePage/WorkspaceActions/constants.ts | 2 +- site/src/pages/WorkspacePage/WorkspaceScheduleControls.tsx | 6 ++---- site/src/pages/WorkspacesPage/WorkspacesPageView.tsx | 2 +- site/src/pages/WorkspacesPage/filter/WorkspacesFilter.tsx | 2 +- site/src/pages/WorkspacesPage/filter/menus.tsx | 2 +- 16 files changed, 19 insertions(+), 21 deletions(-) diff --git a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx index 0339d6df506f6..97fdc825d341e 100644 --- a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx +++ b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx @@ -26,7 +26,7 @@ import { TarReader, TarWriter } from "utils/tar"; import { createTemplateVersionFileTree } from "utils/templateVersion"; import { TemplateVersionEditor } from "./TemplateVersionEditor"; -export const TemplateVersionEditorPage: FC = () => { +const TemplateVersionEditorPage: FC = () => { const getLink = useLinks(); const queryClient = useQueryClient(); const navigate = useNavigate(); diff --git a/site/src/pages/TemplateVersionEditorPage/TemplateVersionStatusBadge.tsx b/site/src/pages/TemplateVersionEditorPage/TemplateVersionStatusBadge.tsx index a0d4856af6407..94f2d17769d08 100644 --- a/site/src/pages/TemplateVersionEditorPage/TemplateVersionStatusBadge.tsx +++ b/site/src/pages/TemplateVersionEditorPage/TemplateVersionStatusBadge.tsx @@ -27,7 +27,7 @@ export const TemplateVersionStatusBadge: FC< ); }; -export const getStatus = ( +const getStatus = ( version: TemplateVersion, ): { type?: ThemeRole; diff --git a/site/src/pages/TemplateVersionPage/TemplateVersionPage.tsx b/site/src/pages/TemplateVersionPage/TemplateVersionPage.tsx index 78fd1f9b60abb..0f4c566371a5c 100644 --- a/site/src/pages/TemplateVersionPage/TemplateVersionPage.tsx +++ b/site/src/pages/TemplateVersionPage/TemplateVersionPage.tsx @@ -13,7 +13,7 @@ import { useParams } from "react-router-dom"; import { pageTitle } from "utils/page"; import TemplateVersionPageView from "./TemplateVersionPageView"; -export const TemplateVersionPage: FC = () => { +const TemplateVersionPage: FC = () => { const getLink = useLinks(); const { organization: organizationName = "default", diff --git a/site/src/pages/TemplatesPage/TemplatesPage.tsx b/site/src/pages/TemplatesPage/TemplatesPage.tsx index b22b0272c10f3..bef25e17bb755 100644 --- a/site/src/pages/TemplatesPage/TemplatesPage.tsx +++ b/site/src/pages/TemplatesPage/TemplatesPage.tsx @@ -10,7 +10,7 @@ import { useSearchParams } from "react-router-dom"; import { pageTitle } from "utils/page"; import { TemplatesPageView } from "./TemplatesPageView"; -export const TemplatesPage: FC = () => { +const TemplatesPage: FC = () => { const { permissions, user: me } = useAuthenticated(); const { showOrganizations } = useDashboard(); diff --git a/site/src/pages/TemplatesPage/TemplatesPageView.tsx b/site/src/pages/TemplatesPage/TemplatesPageView.tsx index 30b1cd5093185..814efbe259f9b 100644 --- a/site/src/pages/TemplatesPage/TemplatesPageView.tsx +++ b/site/src/pages/TemplatesPage/TemplatesPageView.tsx @@ -52,7 +52,7 @@ import { import { EmptyTemplates } from "./EmptyTemplates"; import { TemplatesFilter } from "./TemplatesFilter"; -export const Language = { +const Language = { developerCount: (activeCount: number): string => { return `${formatTemplateActiveDevelopers(activeCount)} developer${ activeCount !== 1 ? "s" : "" diff --git a/site/src/pages/TerminalPage/TerminalAlerts.tsx b/site/src/pages/TerminalPage/TerminalAlerts.tsx index eb7369fc431b7..7295d80f731da 100644 --- a/site/src/pages/TerminalPage/TerminalAlerts.tsx +++ b/site/src/pages/TerminalPage/TerminalAlerts.tsx @@ -62,7 +62,7 @@ export const TerminalAlerts = ({ ); }; -export const ErrorScriptAlert: FC = () => { +const ErrorScriptAlert: FC = () => { return ( { ); }; -export const LoadedScriptsAlert: FC = () => { +const LoadedScriptsAlert: FC = () => { return ( = (props) => { ); }; -export const DisconnectedAlert: FC = (props) => { +const DisconnectedAlert: FC = (props) => { return ( = ({ ); }; -export function toTerminalFontName(value: string): TerminalFontName { +function toTerminalFontName(value: string): TerminalFontName { return TerminalFontNames.includes(value as TerminalFontName) ? (value as TerminalFontName) : ""; diff --git a/site/src/pages/UserSettingsPage/TokensPage/TokensPage.tsx b/site/src/pages/UserSettingsPage/TokensPage/TokensPage.tsx index 03926624f1134..92d0a4d977fd7 100644 --- a/site/src/pages/UserSettingsPage/TokensPage/TokensPage.tsx +++ b/site/src/pages/UserSettingsPage/TokensPage/TokensPage.tsx @@ -12,7 +12,7 @@ import { useTokensData } from "./hooks"; const cliCreateCommand = "coder tokens create"; -export const TokensPage: FC = () => { +const TokensPage: FC = () => { const [tokenToDelete, setTokenToDelete] = useState< APIKeyWithOwner | undefined >(undefined); diff --git a/site/src/pages/UsersPage/ResetPasswordDialog.tsx b/site/src/pages/UsersPage/ResetPasswordDialog.tsx index 1492cf48daf17..fef4bfa564f74 100644 --- a/site/src/pages/UsersPage/ResetPasswordDialog.tsx +++ b/site/src/pages/UsersPage/ResetPasswordDialog.tsx @@ -12,7 +12,7 @@ export interface ResetPasswordDialogProps { loading: boolean; } -export const Language = { +const Language = { title: "Reset password", message: (username?: string): JSX.Element => ( <> diff --git a/site/src/pages/UsersPage/UsersTable/UsersTable.tsx b/site/src/pages/UsersPage/UsersTable/UsersTable.tsx index b7655f23e3305..84affe8b1977a 100644 --- a/site/src/pages/UsersPage/UsersTable/UsersTable.tsx +++ b/site/src/pages/UsersPage/UsersTable/UsersTable.tsx @@ -12,7 +12,7 @@ import type { FC } from "react"; import { TableColumnHelpTooltip } from "../../OrganizationSettingsPage/UserTable/TableColumnHelpTooltip"; import { UsersTableBody } from "./UsersTableBody"; -export const Language = { +const Language = { usernameLabel: "User", rolesLabel: "Roles", groupsLabel: "Groups", diff --git a/site/src/pages/WorkspacePage/ResourcesSidebar.tsx b/site/src/pages/WorkspacePage/ResourcesSidebar.tsx index 06ff737624fb2..4a60443a98ddb 100644 --- a/site/src/pages/WorkspacePage/ResourcesSidebar.tsx +++ b/site/src/pages/WorkspacePage/ResourcesSidebar.tsx @@ -86,7 +86,7 @@ export const ResourcesSidebar: FC = ({ ); }; -export const ResourceSidebarItemSkeleton: FC = () => { +const ResourceSidebarItemSkeleton: FC = () => { return (
diff --git a/site/src/pages/WorkspacePage/WorkspaceActions/constants.ts b/site/src/pages/WorkspacePage/WorkspaceActions/constants.ts index 9a266c0efbc57..a327f0277d4f5 100644 --- a/site/src/pages/WorkspacePage/WorkspaceActions/constants.ts +++ b/site/src/pages/WorkspacePage/WorkspaceActions/constants.ts @@ -3,7 +3,7 @@ import type { Workspace } from "api/typesGenerated"; /** * An iterable of all action types supported by the workspace UI */ -export const actionTypes = [ +const actionTypes = [ "start", "starting", // Replaces start when an update is required. diff --git a/site/src/pages/WorkspacePage/WorkspaceScheduleControls.tsx b/site/src/pages/WorkspacePage/WorkspaceScheduleControls.tsx index 607ab4d86e4d1..dc5e14572e14e 100644 --- a/site/src/pages/WorkspacePage/WorkspaceScheduleControls.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceScheduleControls.tsx @@ -275,13 +275,11 @@ const hasAutoStart = (workspace: Workspace): boolean => { return Boolean(workspace.autostart_schedule); }; -export const canEditDeadline = (workspace: Workspace): boolean => { +const canEditDeadline = (workspace: Workspace): boolean => { return isWorkspaceOn(workspace) && hasDeadline(workspace); }; -export const shouldDisplayScheduleControls = ( - workspace: Workspace, -): boolean => { +const shouldDisplayScheduleControls = (workspace: Workspace): boolean => { const willAutoStop = isWorkspaceOn(workspace) && hasDeadline(workspace); const willAutoStart = !isWorkspaceOn(workspace) && hasAutoStart(workspace); return willAutoStop || willAutoStart; diff --git a/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx b/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx index b6a474f57b220..52de83378d2cf 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx @@ -33,7 +33,7 @@ import { WorkspacesFilter, } from "./filter/WorkspacesFilter"; -export const Language = { +const Language = { pageTitle: "Workspaces", yourWorkspacesButton: "Your workspaces", allWorkspacesButton: "All workspaces", diff --git a/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.tsx b/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.tsx index 5bc19abd7b12f..ea3081d84c7f3 100644 --- a/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.tsx +++ b/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.tsx @@ -14,7 +14,7 @@ import { TemplateMenu, } from "./menus"; -export const workspaceFilterQuery = { +const workspaceFilterQuery = { me: "owner:me", all: "", running: "status:running", diff --git a/site/src/pages/WorkspacesPage/filter/menus.tsx b/site/src/pages/WorkspacesPage/filter/menus.tsx index 238e897ea7b81..cb07ab160ed11 100644 --- a/site/src/pages/WorkspacesPage/filter/menus.tsx +++ b/site/src/pages/WorkspacesPage/filter/menus.tsx @@ -147,7 +147,7 @@ export const StatusMenu: FC = ({ width, menu }) => { ); }; -export const getStatusIndicatorVariant = ( +const getStatusIndicatorVariant = ( status: WorkspaceStatus, ): StatusIndicatorDotProps["variant"] => { switch (status) { From 952015b46e2ddbba33cac07ecf54a831c1f76002 Mon Sep 17 00:00:00 2001 From: Brett Kolodny Date: Tue, 29 Apr 2025 16:54:16 +0000 Subject: [PATCH 07/23] chore: remove unused exports --- site/src/api/api.ts | 2 +- site/src/api/errors.ts | 2 +- site/src/api/queries/authCheck.ts | 2 +- site/src/api/queries/groups.ts | 8 ++++---- site/src/api/queries/idpsync.ts | 4 +--- site/src/api/queries/organizations.ts | 10 +++++----- site/src/api/queries/settings.ts | 2 +- site/src/api/queries/templates.ts | 6 +++--- site/src/api/queries/workspaceBuilds.ts | 2 +- site/src/api/queries/workspaces.ts | 2 +- site/src/components/Badge/Badge.tsx | 2 +- site/src/components/Button/Button.tsx | 2 +- site/src/components/Chart/Chart.tsx | 11 ++++------ site/src/components/Command/Command.tsx | 4 ++-- site/src/components/CopyButton/CopyButton.tsx | 2 +- site/src/components/Dialog/Dialog.tsx | 6 +++--- .../components/DropdownMenu/DropdownMenu.tsx | 20 +++++++++---------- site/src/components/Link/Link.tsx | 2 +- site/src/components/Logs/LogLine.tsx | 2 +- .../PageHeader/FullWidthPageHeader.tsx | 2 +- site/src/components/ScrollArea/ScrollArea.tsx | 2 +- site/src/components/Select/Select.tsx | 6 +++--- site/src/components/Table/Table.tsx | 4 ++-- site/src/contexts/ProxyContext.tsx | 4 ++-- .../DeploymentBanner/DeploymentBannerView.tsx | 2 +- .../LicenseBanner/LicenseBannerView.tsx | 2 +- .../UserDropdown/UserDropdownContent.tsx | 2 +- site/src/modules/navigation.ts | 4 ++-- .../modules/provisioners/ProvisionerTag.tsx | 2 +- site/src/modules/resources/AgentMetadata.tsx | 2 +- .../resources/TerminalLink/TerminalLink.tsx | 2 +- .../WorkspaceBuildLogs/WorkspaceBuildLogs.tsx | 2 +- .../WorkspaceOutdatedTooltip.tsx | 4 ++-- .../workspaces/WorkspaceTiming/Chart/Bar.tsx | 7 +------ .../WorkspaceTiming/Chart/XAxis.tsx | 6 +++--- site/src/pages/404Page/404Page.tsx | 2 +- site/src/pages/AuditPage/AuditHelpTooltip.tsx | 2 +- site/src/pages/AuditPage/AuditPageView.tsx | 2 +- site/src/pages/CliAuthPage/CliAuthPage.tsx | 2 +- .../pages/CliInstallPage/CliInstallPage.tsx | 2 +- .../pages/CreateUserPage/CreateUserPage.tsx | 2 +- .../CreateWorkspacePage.tsx | 2 +- .../CreateWorkspacePageExperimental.tsx | 2 +- .../CreateWorkspacePageViewExperimental.tsx | 2 +- .../IdpOrgSyncPage/IdpOrgSyncPage.tsx | 2 +- .../IdpOrgSyncPage/IdpOrgSyncPageView.tsx | 2 +- .../NotificationsPage/storybookUtils.ts | 2 +- site/src/pages/GroupsPage/CreateGroupPage.tsx | 2 +- site/src/pages/GroupsPage/GroupPage.tsx | 2 +- .../pages/GroupsPage/GroupSettingsPage.tsx | 2 +- site/src/pages/GroupsPage/GroupsPage.tsx | 2 +- .../pages/GroupsPage/GroupsPageProvider.tsx | 6 +++--- .../CustomRolesPage/CreateEditRolePage.tsx | 2 +- .../CustomRolesPage/CustomRolesPage.tsx | 2 +- .../IdpSyncPage/IdpSyncPage.tsx | 2 +- .../UserTable/TableColumnHelpTooltip.tsx | 2 +- .../TemplateInsightsPage/IntervalMenu.tsx | 2 +- .../TemplateSummaryPage.tsx | 2 +- .../TemplateVersionsPage/VersionsTable.tsx | 2 +- .../TemplatePermissionsPage.tsx | 2 +- .../TemplateVariablesForm.tsx | 2 +- .../TemplateVariablesPage.tsx | 2 +- .../src/pages/TerminalPage/TerminalAlerts.tsx | 2 +- .../WorkspaceProxyPage/WorkspaceProxyPage.tsx | 2 +- .../pages/WorkspacePage/WorkspaceTopbar.tsx | 2 +- site/src/theme/externalImages.ts | 2 +- site/src/theme/mui.ts | 2 +- site/src/theme/roles.ts | 2 +- 68 files changed, 102 insertions(+), 112 deletions(-) diff --git a/site/src/api/api.ts b/site/src/api/api.ts index 0e29fa969c903..c577ff0ba6530 100644 --- a/site/src/api/api.ts +++ b/site/src/api/api.ts @@ -2554,7 +2554,7 @@ interface ClientApi extends ApiMethods { getAxiosInstance: () => AxiosInstance; } -export class Api extends ApiMethods implements ClientApi { +class Api extends ApiMethods implements ClientApi { constructor() { const scopedAxiosInstance = getConfiguredAxiosInstance(); super(scopedAxiosInstance); diff --git a/site/src/api/errors.ts b/site/src/api/errors.ts index 873163e11a68d..bb51bebce651b 100644 --- a/site/src/api/errors.ts +++ b/site/src/api/errors.ts @@ -31,7 +31,7 @@ export const isApiError = (err: unknown): err is ApiError => { ); }; -export const isApiErrorResponse = (err: unknown): err is ApiErrorResponse => { +const isApiErrorResponse = (err: unknown): err is ApiErrorResponse => { return ( typeof err === "object" && err !== null && diff --git a/site/src/api/queries/authCheck.ts b/site/src/api/queries/authCheck.ts index 813bec828500a..11f5fafa7d25a 100644 --- a/site/src/api/queries/authCheck.ts +++ b/site/src/api/queries/authCheck.ts @@ -1,7 +1,7 @@ import { API } from "api/api"; import type { AuthorizationRequest } from "api/typesGenerated"; -export const AUTHORIZATION_KEY = "authorization"; +const AUTHORIZATION_KEY = "authorization"; export const getAuthorizationKey = (req: AuthorizationRequest) => [AUTHORIZATION_KEY, req] as const; diff --git a/site/src/api/queries/groups.ts b/site/src/api/queries/groups.ts index 4ddce87a249a2..dc6285e8d6de7 100644 --- a/site/src/api/queries/groups.ts +++ b/site/src/api/queries/groups.ts @@ -10,7 +10,7 @@ type GroupSortOrder = "asc" | "desc"; export const groupsQueryKey = ["groups"]; -export const groups = () => { +const groups = () => { return { queryKey: groupsQueryKey, queryFn: () => API.getGroups(), @@ -60,7 +60,7 @@ export function groupsByUserIdInOrganization(organization: string) { } satisfies UseQueryOptions; } -export function selectGroupsByUserId(groups: Group[]): GroupsByUserId { +function selectGroupsByUserId(groups: Group[]): GroupsByUserId { // Sorting here means that nothing has to be sorted for the individual // user arrays later const sorted = sortGroupsByName(groups, "asc"); @@ -163,7 +163,7 @@ export const removeMember = (queryClient: QueryClient) => { }; }; -export const invalidateGroup = ( +const invalidateGroup = ( queryClient: QueryClient, organization: string, groupId: string, @@ -176,7 +176,7 @@ export const invalidateGroup = ( queryClient.invalidateQueries(getGroupQueryKey(organization, groupId)), ]); -export function sortGroupsByName( +function sortGroupsByName( groups: readonly T[], order: GroupSortOrder, ) { diff --git a/site/src/api/queries/idpsync.ts b/site/src/api/queries/idpsync.ts index 05fb26a4624d3..eca3ec496faee 100644 --- a/site/src/api/queries/idpsync.ts +++ b/site/src/api/queries/idpsync.ts @@ -2,9 +2,7 @@ import { API } from "api/api"; import type { OrganizationSyncSettings } from "api/typesGenerated"; import type { QueryClient } from "react-query"; -export const getOrganizationIdpSyncSettingsKey = () => [ - "organizationIdpSyncSettings", -]; +const getOrganizationIdpSyncSettingsKey = () => ["organizationIdpSyncSettings"]; export const patchOrganizationSyncSettings = (queryClient: QueryClient) => { return { diff --git a/site/src/api/queries/organizations.ts b/site/src/api/queries/organizations.ts index e4483ad620ca7..c7b42f5f0e79f 100644 --- a/site/src/api/queries/organizations.ts +++ b/site/src/api/queries/organizations.ts @@ -181,20 +181,20 @@ export const provisionerDaemons = ( }; }; -export const getProvisionerDaemonGroupsKey = (organization: string) => [ +const getProvisionerDaemonGroupsKey = (organization: string) => [ "organization", organization, "provisionerDaemons", ]; -export const provisionerDaemonGroups = (organization: string) => { +const provisionerDaemonGroups = (organization: string) => { return { queryKey: getProvisionerDaemonGroupsKey(organization), queryFn: () => API.getProvisionerDaemonGroupsByOrganization(organization), }; }; -export const getGroupIdpSyncSettingsKey = (organization: string) => [ +const getGroupIdpSyncSettingsKey = (organization: string) => [ "organizations", organization, "groupIdpSyncSettings", @@ -219,7 +219,7 @@ export const patchGroupSyncSettings = ( }; }; -export const getRoleIdpSyncSettingsKey = (organization: string) => [ +const getRoleIdpSyncSettingsKey = (organization: string) => [ "organizations", organization, "roleIdpSyncSettings", @@ -349,7 +349,7 @@ export const workspacePermissionsByOrganization = ( }; }; -export const getOrganizationIdpSyncClaimFieldValuesKey = ( +const getOrganizationIdpSyncClaimFieldValuesKey = ( organization: string, field: string, ) => [organization, "idpSync", "fieldValues", field]; diff --git a/site/src/api/queries/settings.ts b/site/src/api/queries/settings.ts index 5b040508ae686..7605d16c41d6d 100644 --- a/site/src/api/queries/settings.ts +++ b/site/src/api/queries/settings.ts @@ -5,7 +5,7 @@ import type { } from "api/typesGenerated"; import type { QueryClient, QueryOptions } from "react-query"; -export const userQuietHoursScheduleKey = (userId: string) => [ +const userQuietHoursScheduleKey = (userId: string) => [ "settings", userId, "quietHours", diff --git a/site/src/api/queries/templates.ts b/site/src/api/queries/templates.ts index 372863de41991..72e5deaefc72a 100644 --- a/site/src/api/queries/templates.ts +++ b/site/src/api/queries/templates.ts @@ -13,7 +13,7 @@ import type { MutationOptions, QueryClient, QueryOptions } from "react-query"; import { delay } from "utils/delay"; import { getTemplateVersionFiles } from "utils/templateVersion"; -export const templateKey = (templateId: string) => ["template", templateId]; +const templateKey = (templateId: string) => ["template", templateId]; export const template = (templateId: string): QueryOptions