From b06d183a3251ae744d7706c0775cc881961313dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kayla=20=E3=81=AF=E3=81=AA?= Date: Tue, 24 Mar 2026 11:14:44 -0600 Subject: [PATCH] chore: begin modernizing typescript imports (#23509) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - update some config settings to support "absolute"-style imports by using a `#/` prefix - migrate some of the imports in the `WorkspacesPage` to use the new import style as a proof of concept because of the change in import sorting behavior this results in, this diff is already kind of hard to look at–even just from a small migration for a single page. I think breaking this up into bite size pieces isn't gonna be worth the work, and leaves more time for merge conflicts to accrue, more times people would likely have to resolve them. so I think as far as process for this, I'd like to... - merge this PR as is, where the config changes are relatively easy to spot in the haystack, with just enough imports updated to prove that the config changes are correct - merge another mega PR after this one which just bites the bullet and migrates everything else in one fell swoop. it'll probably result in a ton of merge conflicts for open PRs, but at least it'll only do so once and then it can be over with. --- site/package.json | 3 + .../BatchDeleteConfirmation.tsx | 6 +- .../BatchUpdateModalForm.stories.tsx | 12 +-- .../WorkspacesPage/BatchUpdateModalForm.tsx | 28 +++--- .../WorkspacesPage/WorkspaceHelpTooltip.tsx | 6 +- .../WorkspaceSharingIndicator.stories.tsx | 2 +- .../WorkspaceSharingIndicator.tsx | 12 +-- .../pages/WorkspacesPage/WorkspacesButton.tsx | 26 +++--- .../pages/WorkspacesPage/WorkspacesEmpty.tsx | 8 +- .../WorkspacesPage/WorkspacesPage.test.tsx | 8 +- .../pages/WorkspacesPage/WorkspacesPage.tsx | 12 +-- .../WorkspacesPageView.stories.tsx | 12 +-- .../WorkspacesPage/WorkspacesPageView.tsx | 41 +++++---- .../pages/WorkspacesPage/WorkspacesTable.tsx | 88 +++++++++---------- site/src/pages/WorkspacesPage/batchActions.ts | 6 +- .../filter/WorkspacesFilter.stories.tsx | 2 +- .../filter/WorkspacesFilter.tsx | 20 ++--- .../src/pages/WorkspacesPage/filter/menus.tsx | 18 ++-- site/src/router.tsx | 4 +- site/tsconfig.json | 5 +- 20 files changed, 164 insertions(+), 155 deletions(-) diff --git a/site/package.json b/site/package.json index f13e7f45bf..bc7943eeb0 100644 --- a/site/package.json +++ b/site/package.json @@ -36,6 +36,9 @@ "stats": "STATS=true pnpm build && npx http-server ./stats -p 8081 -c-1", "update-emojis": "cp -rf ./node_modules/emoji-datasource-apple/img/apple/64/* ./static/emojis && cp -f ./node_modules/emoji-datasource-apple/img/apple/sheets-256/64.png ./static/emojis/spritesheet.png" }, + "imports": { + "#/*": "./src/*" + }, "dependencies": { "@emoji-mart/data": "1.2.1", "@emoji-mart/react": "1.1.1", diff --git a/site/src/pages/WorkspacesPage/BatchDeleteConfirmation.tsx b/site/src/pages/WorkspacesPage/BatchDeleteConfirmation.tsx index c37d88d7f0..8797b7a739 100644 --- a/site/src/pages/WorkspacesPage/BatchDeleteConfirmation.tsx +++ b/site/src/pages/WorkspacesPage/BatchDeleteConfirmation.tsx @@ -1,11 +1,11 @@ -import type { Workspace } from "api/typesGenerated"; -import { ConfirmDialog } from "components/Dialogs/ConfirmDialog/ConfirmDialog"; -import { ExternalImage } from "components/ExternalImage/ExternalImage"; import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; import { ClockIcon, UserIcon } from "lucide-react"; import { type FC, type ReactNode, useState } from "react"; import { getResourceIconPath } from "utils/workspace"; +import type { Workspace } from "#/api/typesGenerated"; +import { ConfirmDialog } from "#/components/Dialogs/ConfirmDialog/ConfirmDialog"; +import { ExternalImage } from "#/components/ExternalImage/ExternalImage"; dayjs.extend(relativeTime); diff --git a/site/src/pages/WorkspacesPage/BatchUpdateModalForm.stories.tsx b/site/src/pages/WorkspacesPage/BatchUpdateModalForm.stories.tsx index 469937f958..a6114d45f4 100644 --- a/site/src/pages/WorkspacesPage/BatchUpdateModalForm.stories.tsx +++ b/site/src/pages/WorkspacesPage/BatchUpdateModalForm.stories.tsx @@ -1,15 +1,15 @@ import { MockTemplateVersion, MockWorkspace } from "testHelpers/entities"; import type { Meta, Parameters, StoryObj } from "@storybook/react-vite"; -import { templateVersionRoot } from "api/queries/templates"; -import type { - TemplateVersion, - Workspace, - WorkspaceBuild, -} from "api/typesGenerated"; import { ACTIVE_BUILD_STATUSES } from "modules/workspaces/status"; import { useQueryClient } from "react-query"; import { action } from "storybook/actions"; import { expect, screen, userEvent, within } from "storybook/test"; +import { templateVersionRoot } from "#/api/queries/templates"; +import type { + TemplateVersion, + Workspace, + WorkspaceBuild, +} from "#/api/typesGenerated"; import { BatchUpdateModalForm } from "./BatchUpdateModalForm"; type Writeable = { -readonly [Key in keyof T]: T[Key] }; diff --git a/site/src/pages/WorkspacesPage/BatchUpdateModalForm.tsx b/site/src/pages/WorkspacesPage/BatchUpdateModalForm.tsx index 77bad68c8e..ee11896dc3 100644 --- a/site/src/pages/WorkspacesPage/BatchUpdateModalForm.tsx +++ b/site/src/pages/WorkspacesPage/BatchUpdateModalForm.tsx @@ -1,19 +1,5 @@ import { Label } from "@radix-ui/react-label"; import { Slot } from "@radix-ui/react-slot"; -import { templateVersion } from "api/queries/templates"; -import type { Workspace } from "api/typesGenerated"; -import { ErrorAlert } from "components/Alert/ErrorAlert"; -import { Avatar } from "components/Avatar/Avatar"; -import { Badge } from "components/Badge/Badge"; -import { Button } from "components/Button/Button"; -import { Checkbox } from "components/Checkbox/Checkbox"; -import { - Dialog, - DialogContent, - DialogDescription, - DialogTitle, -} from "components/Dialog/Dialog"; -import { Spinner } from "components/Spinner/Spinner"; import { TriangleAlert } from "lucide-react"; import { ACTIVE_BUILD_STATUSES } from "modules/workspaces/status"; import { @@ -26,6 +12,20 @@ import { } from "react"; import { useQueries } from "react-query"; import { cn } from "utils/cn"; +import { templateVersion } from "#/api/queries/templates"; +import type { Workspace } from "#/api/typesGenerated"; +import { ErrorAlert } from "#/components/Alert/ErrorAlert"; +import { Avatar } from "#/components/Avatar/Avatar"; +import { Badge } from "#/components/Badge/Badge"; +import { Button } from "#/components/Button/Button"; +import { Checkbox } from "#/components/Checkbox/Checkbox"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogTitle, +} from "#/components/Dialog/Dialog"; +import { Spinner } from "#/components/Spinner/Spinner"; export const BatchUpdateModalForm: FC = ({ open, diff --git a/site/src/pages/WorkspacesPage/WorkspaceHelpTooltip.tsx b/site/src/pages/WorkspacesPage/WorkspaceHelpTooltip.tsx index 5b07cc5eda..51725d5508 100644 --- a/site/src/pages/WorkspacesPage/WorkspaceHelpTooltip.tsx +++ b/site/src/pages/WorkspacesPage/WorkspaceHelpTooltip.tsx @@ -1,3 +1,5 @@ +import type { FC } from "react"; +import { docs } from "utils/docs"; import { HelpTooltip, HelpTooltipContent, @@ -6,9 +8,7 @@ import { HelpTooltipLinksGroup, HelpTooltipText, HelpTooltipTitle, -} from "components/HelpTooltip/HelpTooltip"; -import type { FC } from "react"; -import { docs } from "utils/docs"; +} from "#/components/HelpTooltip/HelpTooltip"; const Language = { workspaceTooltipTitle: "What is a workspace?", diff --git a/site/src/pages/WorkspacesPage/WorkspaceSharingIndicator.stories.tsx b/site/src/pages/WorkspacesPage/WorkspaceSharingIndicator.stories.tsx index 553f1050d8..0306ab445d 100644 --- a/site/src/pages/WorkspacesPage/WorkspaceSharingIndicator.stories.tsx +++ b/site/src/pages/WorkspacesPage/WorkspaceSharingIndicator.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import type { SharedWorkspaceActor } from "api/typesGenerated"; import { expect, screen, userEvent, waitFor } from "storybook/test"; +import type { SharedWorkspaceActor } from "#/api/typesGenerated"; import { WorkspaceSharingIndicator } from "./WorkspaceSharingIndicator"; const mockUser = ( diff --git a/site/src/pages/WorkspacesPage/WorkspaceSharingIndicator.tsx b/site/src/pages/WorkspacesPage/WorkspaceSharingIndicator.tsx index 220b9dd97f..f1b353f79e 100644 --- a/site/src/pages/WorkspacesPage/WorkspaceSharingIndicator.tsx +++ b/site/src/pages/WorkspacesPage/WorkspaceSharingIndicator.tsx @@ -1,13 +1,13 @@ -import type { SharedWorkspaceActor } from "api/typesGenerated"; -import { Badge } from "components/Badge/Badge"; -import { Link } from "components/Link/Link"; +import { UsersIcon } from "lucide-react"; +import type { FC } from "react"; +import type { SharedWorkspaceActor } from "#/api/typesGenerated"; +import { Badge } from "#/components/Badge/Badge"; +import { Link } from "#/components/Link/Link"; import { Tooltip, TooltipContent, TooltipTrigger, -} from "components/Tooltip/Tooltip"; -import { UsersIcon } from "lucide-react"; -import type { FC } from "react"; +} from "#/components/Tooltip/Tooltip"; interface WorkspaceSharingIndicatorProps { sharedWith: readonly SharedWorkspaceActor[]; diff --git a/site/src/pages/WorkspacesPage/WorkspacesButton.tsx b/site/src/pages/WorkspacesPage/WorkspacesButton.tsx index 8f58ee70cb..ea819f0cb6 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesButton.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesButton.tsx @@ -1,17 +1,4 @@ import Link from "@mui/material/Link"; -import type { Template } from "api/typesGenerated"; -import { ChevronDownIcon } from "components/AnimatedIcons/ChevronDown"; -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 { - Popover, - PopoverContent, - PopoverTrigger, -} from "components/Popover/Popover"; -import { SearchEmpty } from "components/Search/Search"; import { ExternalLinkIcon } from "lucide-react"; import { linkToTemplate, useLinks } from "modules/navigation"; import { type FC, type ReactNode, useState } from "react"; @@ -20,6 +7,19 @@ import { Link as RouterLink, type LinkProps as RouterLinkProps, } from "react-router"; +import type { Template } from "#/api/typesGenerated"; +import { ChevronDownIcon } from "#/components/AnimatedIcons/ChevronDown"; +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 { + Popover, + PopoverContent, + PopoverTrigger, +} from "#/components/Popover/Popover"; +import { SearchEmpty } from "#/components/Search/Search"; type TemplatesQuery = UseQueryResult; diff --git a/site/src/pages/WorkspacesPage/WorkspacesEmpty.tsx b/site/src/pages/WorkspacesPage/WorkspacesEmpty.tsx index 810a2598f3..a1337aced5 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesEmpty.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesEmpty.tsx @@ -1,10 +1,10 @@ -import type { Template } from "api/typesGenerated"; -import { Avatar } from "components/Avatar/Avatar"; -import { Button } from "components/Button/Button"; -import { EmptyState } from "components/EmptyState/EmptyState"; import { linkToTemplate, useLinks } from "modules/navigation"; import type { FC } from "react"; import { Link } from "react-router"; +import type { Template } from "#/api/typesGenerated"; +import { Avatar } from "#/components/Avatar/Avatar"; +import { Button } from "#/components/Button/Button"; +import { EmptyState } from "#/components/EmptyState/EmptyState"; interface WorkspacesEmptyProps { isUsingFilter: boolean; diff --git a/site/src/pages/WorkspacesPage/WorkspacesPage.test.tsx b/site/src/pages/WorkspacesPage/WorkspacesPage.test.tsx index a415d86e8c..ac1841a726 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPage.test.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPage.test.tsx @@ -16,15 +16,15 @@ import { 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 { HttpResponse, http } from "msw"; +import * as CreateDayString from "utils/createDayString"; +import { API } from "#/api/api"; import type { Workspace, WorkspaceApp, WorkspaceAppHealth, WorkspacesResponse, -} from "api/typesGenerated"; -import { HttpResponse, http } from "msw"; -import * as CreateDayString from "utils/createDayString"; +} from "#/api/typesGenerated"; import WorkspacesPage from "./WorkspacesPage"; describe("WorkspacesPage", () => { diff --git a/site/src/pages/WorkspacesPage/WorkspacesPage.tsx b/site/src/pages/WorkspacesPage/WorkspacesPage.tsx index e594338bd7..89eb2f5b78 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPage.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPage.tsx @@ -1,9 +1,3 @@ -import { getErrorDetail, getErrorMessage } from "api/errors"; -import { workspacePermissionsByOrganization } from "api/queries/organizations"; -import { templates, templateVersionRoot } from "api/queries/templates"; -import { workspaces } from "api/queries/workspaces"; -import { useFilter } from "components/Filter/Filter"; -import { useUserFilterMenu } from "components/Filter/UserFilter"; import { useAuthenticated } from "hooks"; import { useEffectEvent } from "hooks/hookPolyfills"; import { usePagination } from "hooks/usePagination"; @@ -15,6 +9,12 @@ import { useQuery, useQueryClient } from "react-query"; import { useSearchParams } from "react-router"; import { toast } from "sonner"; import { pageTitle } from "utils/page"; +import { getErrorDetail, getErrorMessage } from "#/api/errors"; +import { workspacePermissionsByOrganization } from "#/api/queries/organizations"; +import { templates, templateVersionRoot } from "#/api/queries/templates"; +import { workspaces } from "#/api/queries/workspaces"; +import { useFilter } from "#/components/Filter/Filter"; +import { useUserFilterMenu } from "#/components/Filter/UserFilter"; import { BatchDeleteConfirmation } from "./BatchDeleteConfirmation"; import { BatchUpdateModalForm } from "./BatchUpdateModalForm"; import { useBatchActions } from "./batchActions"; diff --git a/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx b/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx index c173fe0c68..997584c9f2 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx @@ -15,19 +15,19 @@ import { withProxyProvider, } from "testHelpers/storybook"; import type { Meta, StoryObj } from "@storybook/react-vite"; +import dayjs from "dayjs"; +import uniqueId from "lodash/uniqueId"; +import { expect, within } from "storybook/test"; import { type Workspace, type WorkspaceStatus, WorkspaceStatuses, -} from "api/typesGenerated"; +} 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"; +} from "#/components/Filter/storyHelpers"; +import { DEFAULT_RECORDS_PER_PAGE } from "#/components/PaginationWidget/utils"; import type { WorkspaceFilterState } from "./filter/WorkspacesFilter"; import { WorkspacesPageView } from "./WorkspacesPageView"; diff --git a/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx b/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx index 1eff6a6e1f..4e59beba60 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPageView.tsx @@ -1,28 +1,31 @@ -import { hasError, isApiValidationError } from "api/errors"; -import type { Template, Workspace } from "api/typesGenerated"; -import { ErrorAlert } from "components/Alert/ErrorAlert"; -import { ChevronDownIcon } from "components/AnimatedIcons/ChevronDown"; -import { Button } from "components/Button/Button"; +import { 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 { hasError, isApiValidationError } from "#/api/errors"; +import type { Template, Workspace } from "#/api/typesGenerated"; +import { ErrorAlert } from "#/components/Alert/ErrorAlert"; +import { ChevronDownIcon } from "#/components/AnimatedIcons/ChevronDown"; +import { Button } from "#/components/Button/Button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, -} from "components/DropdownMenu/DropdownMenu"; -import { EmptyState } from "components/EmptyState/EmptyState"; -import { Margins } from "components/Margins/Margins"; -import { PageHeader, PageHeaderTitle } from "components/PageHeader/PageHeader"; -import { PaginationAmount } from "components/PaginationWidget/PaginationAmount"; -import { PaginationWidgetBase } from "components/PaginationWidget/PaginationWidgetBase"; -import { Spinner } from "components/Spinner/Spinner"; -import { Stack } from "components/Stack/Stack"; -import { TableToolbar } from "components/TableToolbar/TableToolbar"; -import { 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"; +} from "#/components/DropdownMenu/DropdownMenu"; +import { EmptyState } from "#/components/EmptyState/EmptyState"; +import { Margins } from "#/components/Margins/Margins"; +import { + PageHeader, + PageHeaderTitle, +} from "#/components/PageHeader/PageHeader"; +import { PaginationAmount } from "#/components/PaginationWidget/PaginationAmount"; +import { PaginationWidgetBase } from "#/components/PaginationWidget/PaginationWidgetBase"; +import { Spinner } from "#/components/Spinner/Spinner"; +import { Stack } from "#/components/Stack/Stack"; +import { TableToolbar } from "#/components/TableToolbar/TableToolbar"; import { type WorkspaceFilterState, WorkspacesFilter, diff --git a/site/src/pages/WorkspacesPage/WorkspacesTable.tsx b/site/src/pages/WorkspacesPage/WorkspacesTable.tsx index 34766f1166..ac26b6d48a 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesTable.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesTable.tsx @@ -1,48 +1,4 @@ import Skeleton from "@mui/material/Skeleton"; -import { API } from "api/api"; -import { templateVersion } from "api/queries/templates"; -import { - cancelBuild, - deleteWorkspace, - startWorkspace, - stopWorkspace, -} from "api/queries/workspaces"; -import type { - Template, - Workspace, - WorkspaceAgent, - WorkspaceApp, -} from "api/typesGenerated"; -import { Avatar } from "components/Avatar/Avatar"; -import { AvatarData } from "components/Avatar/AvatarData"; -import { AvatarDataSkeleton } from "components/Avatar/AvatarDataSkeleton"; -import { Badge } from "components/Badge/Badge"; -import { Button } from "components/Button/Button"; -import { Checkbox } from "components/Checkbox/Checkbox"; -import { ConfirmDialog } from "components/Dialogs/ConfirmDialog/ConfirmDialog"; -import { ExternalImage } from "components/ExternalImage/ExternalImage"; -import { VSCodeIcon } from "components/Icons/VSCodeIcon"; -import { VSCodeInsidersIcon } from "components/Icons/VSCodeInsidersIcon"; -import { Spinner } from "components/Spinner/Spinner"; -import { Stack } from "components/Stack/Stack"; -import { - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from "components/Table/Table"; -import { - TableLoaderSkeleton, - TableRowSkeleton, -} from "components/TableLoader/TableLoader"; -import { - Tooltip, - TooltipContent, - TooltipProvider, - TooltipTrigger, -} from "components/Tooltip/Tooltip"; import { useAuthenticated } from "hooks"; import { useClickableTableRow } from "hooks/useClickableTableRow"; import { @@ -83,6 +39,50 @@ import { useMutation, useQuery, useQueryClient } from "react-query"; import { useNavigate } from "react-router"; import { cn } from "utils/cn"; import { getDisplayWorkspaceTemplateName } from "utils/workspace"; +import { API } from "#/api/api"; +import { templateVersion } from "#/api/queries/templates"; +import { + cancelBuild, + deleteWorkspace, + startWorkspace, + stopWorkspace, +} from "#/api/queries/workspaces"; +import type { + Template, + Workspace, + WorkspaceAgent, + WorkspaceApp, +} from "#/api/typesGenerated"; +import { Avatar } from "#/components/Avatar/Avatar"; +import { AvatarData } from "#/components/Avatar/AvatarData"; +import { AvatarDataSkeleton } from "#/components/Avatar/AvatarDataSkeleton"; +import { Badge } from "#/components/Badge/Badge"; +import { Button } from "#/components/Button/Button"; +import { Checkbox } from "#/components/Checkbox/Checkbox"; +import { ConfirmDialog } from "#/components/Dialogs/ConfirmDialog/ConfirmDialog"; +import { ExternalImage } from "#/components/ExternalImage/ExternalImage"; +import { VSCodeIcon } from "#/components/Icons/VSCodeIcon"; +import { VSCodeInsidersIcon } from "#/components/Icons/VSCodeInsidersIcon"; +import { Spinner } from "#/components/Spinner/Spinner"; +import { Stack } from "#/components/Stack/Stack"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "#/components/Table/Table"; +import { + TableLoaderSkeleton, + TableRowSkeleton, +} from "#/components/TableLoader/TableLoader"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "#/components/Tooltip/Tooltip"; import { WorkspaceSharingIndicator } from "./WorkspaceSharingIndicator"; import { WorkspacesEmpty } from "./WorkspacesEmpty"; diff --git a/site/src/pages/WorkspacesPage/batchActions.ts b/site/src/pages/WorkspacesPage/batchActions.ts index d4ec273a90..c4401a17cb 100644 --- a/site/src/pages/WorkspacesPage/batchActions.ts +++ b/site/src/pages/WorkspacesPage/batchActions.ts @@ -1,8 +1,8 @@ -import { API } from "api/api"; -import { getErrorDetail } from "api/errors"; -import type { Workspace, WorkspaceBuild } from "api/typesGenerated"; import { useMutation } from "react-query"; import { toast } from "sonner"; +import { API } from "#/api/api"; +import { getErrorDetail } from "#/api/errors"; +import type { Workspace, WorkspaceBuild } from "#/api/typesGenerated"; interface UseBatchActionsOptions { onSuccess: () => Promise; diff --git a/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.stories.tsx b/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.stories.tsx index f2fc79c071..5782bc731c 100644 --- a/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.stories.tsx +++ b/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.stories.tsx @@ -4,7 +4,7 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { getDefaultFilterProps, MockMenu, -} from "components/Filter/storyHelpers"; +} from "#/components/Filter/storyHelpers"; import type { WorkspaceFilterState } from "./WorkspacesFilter"; import { WorkspacesFilter } from "./WorkspacesFilter"; diff --git a/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.tsx b/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.tsx index 697d55a154..5169d277d1 100644 --- a/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.tsx +++ b/site/src/pages/WorkspacesPage/filter/WorkspacesFilter.tsx @@ -1,13 +1,3 @@ -import { - Filter, - MenuSkeleton, - type UseFilterResult, -} from "components/Filter/Filter"; -import { - DEFAULT_USER_FILTER_WIDTH, - type UserFilterMenu, - UserMenu, -} from "components/Filter/UserFilter"; import { useDashboard } from "modules/dashboard/useDashboard"; import { type OrganizationsFilterMenu, @@ -15,6 +5,16 @@ import { } from "modules/tableFiltering/options"; import type { FC } from "react"; import { docs } from "utils/docs"; +import { + Filter, + MenuSkeleton, + type UseFilterResult, +} from "#/components/Filter/Filter"; +import { + DEFAULT_USER_FILTER_WIDTH, + type UserFilterMenu, + UserMenu, +} from "#/components/Filter/UserFilter"; import { type StatusFilterMenu, StatusMenu, diff --git a/site/src/pages/WorkspacesPage/filter/menus.tsx b/site/src/pages/WorkspacesPage/filter/menus.tsx index 0726021e2f..89d9380a33 100644 --- a/site/src/pages/WorkspacesPage/filter/menus.tsx +++ b/site/src/pages/WorkspacesPage/filter/menus.tsx @@ -1,21 +1,21 @@ -import { API } from "api/api"; -import type { Template, WorkspaceStatus } from "api/typesGenerated"; -import { Avatar } from "components/Avatar/Avatar"; -import { ComboboxInput } from "components/Combobox/Combobox"; +import type { FC } from "react"; +import { getDisplayWorkspaceStatus } from "utils/workspace"; +import { API } from "#/api/api"; +import type { Template, WorkspaceStatus } from "#/api/typesGenerated"; +import { Avatar } from "#/components/Avatar/Avatar"; +import { ComboboxInput } from "#/components/Combobox/Combobox"; import { type UseFilterMenuOptions, useFilterMenu, -} from "components/Filter/menu"; +} from "#/components/Filter/menu"; import { SelectFilter, type SelectFilterOption, -} from "components/Filter/SelectFilter"; +} from "#/components/Filter/SelectFilter"; import { StatusIndicatorDot, type StatusIndicatorDotProps, -} from "components/StatusIndicator/StatusIndicator"; -import type { FC } from "react"; -import { getDisplayWorkspaceStatus } from "utils/workspace"; +} from "#/components/StatusIndicator/StatusIndicator"; export const useTemplateFilterMenu = ({ value, diff --git a/site/src/router.tsx b/site/src/router.tsx index cbc5509571..61324cf088 100644 --- a/site/src/router.tsx +++ b/site/src/router.tsx @@ -1,5 +1,3 @@ -import { GlobalErrorBoundary } from "components/ErrorBoundary/GlobalErrorBoundary"; -import { TemplateRedirectController } from "pages/TemplatePage/TemplateRedirectController"; import { lazy, Suspense } from "react"; import { createBrowserRouter, @@ -9,6 +7,7 @@ import { Route, ScrollRestoration, } from "react-router"; +import { GlobalErrorBoundary } from "./components/ErrorBoundary/GlobalErrorBoundary"; import { Loader } from "./components/Loader/Loader"; import { RequireAuth } from "./contexts/auth/RequireAuth"; import { DashboardLayout } from "./modules/dashboard/DashboardLayout"; @@ -19,6 +18,7 @@ import LoginOAuthDevicePage from "./pages/LoginOAuthDevicePage/LoginOAuthDeviceP import LoginPage from "./pages/LoginPage/LoginPage"; import { SetupPage } from "./pages/SetupPage/SetupPage"; import { TemplateLayout } from "./pages/TemplatePage/TemplateLayout"; +import { TemplateRedirectController } from "./pages/TemplatePage/TemplateRedirectController"; import { TemplateSettingsLayout } from "./pages/TemplateSettingsPage/TemplateSettingsLayout"; import TemplatesPage from "./pages/TemplatesPage/TemplatesPage"; import UserSettingsLayout from "./pages/UserSettingsPage/Layout"; diff --git a/site/tsconfig.json b/site/tsconfig.json index 69807f94b8..6cc30764f3 100644 --- a/site/tsconfig.json +++ b/site/tsconfig.json @@ -24,7 +24,10 @@ "vitest/globals", "novnc__novnc" ], - "baseUrl": "src/" + "baseUrl": "src/", + "paths": { + "#/*": ["*"] + } }, "include": ["**/*.ts", "**/*.tsx"], "exclude": ["node_modules/"]