chore: additional typescript import modernization (#23722)

This commit is contained in:
Kayla はな
2026-03-27 16:41:56 -06:00
committed by GitHub
parent 71a492a374
commit 04f7d19645
146 changed files with 283 additions and 295 deletions
+2 -2
View File
@@ -1,4 +1,5 @@
import "../src/index.css";
import "../src/theme/globalFonts";
import { ThemeProvider as EmotionThemeProvider } from "@emotion/react";
import CssBaseline from "@mui/material/CssBaseline";
import {
@@ -6,13 +7,12 @@ import {
StyledEngineProvider,
} from "@mui/material/styles";
import { DecoratorHelpers } from "@storybook/addon-themes";
import type { Decorator, Loader, Parameters } from "@storybook/react-vite";
import isChromatic from "chromatic/isChromatic";
import { StrictMode } from "react";
import { QueryClient, QueryClientProvider } from "react-query";
import { withRouter } from "storybook-addon-remix-react-router";
import { TooltipProvider } from "../src/components/Tooltip/Tooltip";
import "theme/globalFonts";
import type { Decorator, Loader, Parameters } from "@storybook/react-vite";
import themes from "../src/theme";
DecoratorHelpers.initializeThemeState(Object.keys(themes), "dark");
+1 -1
View File
@@ -34,7 +34,7 @@ module.exports = {
testRegex: "(/__tests__/.*|(\\.|/)(jest))\\.tsx?$",
testPathIgnorePatterns: ["/node_modules/", "/e2e/"],
transformIgnorePatterns: [],
moduleDirectories: ["node_modules", "<rootDir>/src"],
moduleDirectories: ["node_modules"],
moduleNameMapper: {
"\\.css$": "<rootDir>/src/testHelpers/styleMock.ts",
"^@fontsource": "<rootDir>/src/testHelpers/styleMock.ts",
+2 -2
View File
@@ -2,15 +2,15 @@ import "@testing-library/jest-dom";
import "jest-location-mock";
import crypto from "node:crypto";
import { cleanup } from "@testing-library/react";
import type { ProxyLatencyReport } from "contexts/useProxyLatency";
import { useMemo } from "react";
import type { Region } from "#/api/typesGenerated";
import type { ProxyLatencyReport } from "#/contexts/useProxyLatency";
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
// actual network requests. So just globally mock this hook.
jest.mock("contexts/useProxyLatency", () => ({
jest.mock("#/contexts/useProxyLatency", () => ({
useProxyLatency: (proxies?: Region[]) => {
// Must use `useMemo` here to avoid infinite loop.
// Mocking the hook with a hook.
+1 -1
View File
@@ -29,7 +29,7 @@ import {
updateInfiniteChatsCache,
} from "./chats";
vi.mock("api/api", () => ({
vi.mock("#/api/api", () => ({
API: {
experimental: {
updateChat: vi.fn(),
+1 -1
View File
@@ -1,5 +1,4 @@
import type { Dayjs } from "dayjs";
import type { ConnectionStatus } from "pages/TerminalPage/types";
import type {
MutationOptions,
QueryClient,
@@ -29,6 +28,7 @@ import {
type WorkspacePermissions,
workspaceChecks,
} from "#/modules/workspaces/permissions";
import type { ConnectionStatus } from "#/pages/TerminalPage/types";
import { checkAuthorization } from "./authCheck";
import { disabledRefetchOptions } from "./util";
import { workspaceBuildsKey } from "./workspaceBuilds";
+1 -1
View File
@@ -1,4 +1,3 @@
import { useAuthenticated } from "hooks";
import type { FC } from "react";
import { API } from "#/api/api";
import { Avatar } from "#/components/Avatar/Avatar";
@@ -7,6 +6,7 @@ import {
SelectFilter,
type SelectFilterOption,
} from "#/components/Filter/SelectFilter";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { type UseFilterMenuOptions, useFilterMenu } from "./menu";
export const DEFAULT_USER_FILTER_WIDTH = 175;
@@ -1,5 +1,5 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { organizationMembersKey } from "api/queries/organizations";
import { organizationMembersKey } from "#/api/queries/organizations";
import { MockOrganizationMember } from "#/testHelpers/entities";
import { MultiMemberSelect } from "./MultiUserSelect";
@@ -1,8 +1,8 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { API } from "api/api";
import { usersKey } from "api/queries/users";
import { MockUsers } from "pages/UsersPage/storybookData/users";
import { spyOn } from "storybook/test";
import { API } from "#/api/api";
import { usersKey } from "#/api/queries/users";
import { MockUsers } from "#/pages/UsersPage/storybookData/users";
import { mockApiError } from "#/testHelpers/entities";
import { MultiUserSelect } from "./MultiUserSelect";
@@ -1,25 +1,30 @@
import { organizationMembers } from "api/queries/organizations";
import { users } from "api/queries/users";
import { type FC, type ReactNode, useState } from "react";
import { keepPreviousData, useQuery } from "react-query";
import { organizationMembers } from "#/api/queries/organizations";
import { users } from "#/api/queries/users";
import type {
OrganizationMemberWithUserData,
ReducedUser,
User,
} from "api/typesGenerated";
import { ErrorAlert } from "components/Alert/ErrorAlert";
import { AvatarData } from "components/Avatar/AvatarData";
import { AvatarDataSkeleton } from "components/Avatar/AvatarDataSkeleton";
import { Checkbox } from "components/Checkbox/Checkbox";
import { EmptyState } from "components/EmptyState/EmptyState";
import { SearchField } from "components/SearchField/SearchField";
import { Table, TableBody, TableCell, TableRow } from "components/Table/Table";
} from "#/api/typesGenerated";
import { ErrorAlert } from "#/components/Alert/ErrorAlert";
import { AvatarData } from "#/components/Avatar/AvatarData";
import { AvatarDataSkeleton } from "#/components/Avatar/AvatarDataSkeleton";
import { Checkbox } from "#/components/Checkbox/Checkbox";
import { EmptyState } from "#/components/EmptyState/EmptyState";
import { SearchField } from "#/components/SearchField/SearchField";
import {
Table,
TableBody,
TableCell,
TableRow,
} from "#/components/Table/Table";
import {
TableLoaderSkeleton,
TableRowSkeleton,
} from "components/TableLoader/TableLoader";
import { useDebouncedFunction } from "hooks/debounce";
import { useClickableTableRow } from "hooks/useClickableTableRow";
import { type FC, type ReactNode, useState } from "react";
import { keepPreviousData, useQuery } from "react-query";
} from "#/components/TableLoader/TableLoader";
import { useDebouncedFunction } from "#/hooks/debounce";
import { useClickableTableRow } from "#/hooks/useClickableTableRow";
import { cn } from "#/utils/cn";
import { prepareQuery } from "#/utils/filters";
@@ -496,7 +496,7 @@ const sampleMCPServers = [
created_at: "2025-01-01T00:00:00Z",
updated_at: "2025-01-01T00:00:00Z",
},
] satisfies readonly import("api/typesGenerated").MCPServerConfig[];
] satisfies readonly import("#/api/typesGenerated").MCPServerConfig[];
export const MCPToolRunning: Story = {
args: {
@@ -1,11 +1,11 @@
import { ExternalLinkIcon } from "lucide-react";
import {
type UseDesktopConnectionResult,
useDesktopConnection,
} from "pages/AgentsPage/hooks/useDesktopConnection";
import type React from "react";
import { useEffect, useRef, useState } from "react";
import { Spinner } from "#/components/Spinner/Spinner";
import {
type UseDesktopConnectionResult,
useDesktopConnection,
} from "#/pages/AgentsPage/hooks/useDesktopConnection";
/** Default aspect ratio used before the remote framebuffer size is known. */
const DEFAULT_ASPECT = "16 / 9";
+2 -2
View File
@@ -1,4 +1,4 @@
import "testHelpers/localStorage";
import "#/testHelpers/localStorage";
import { screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { HttpResponse, http } from "msw";
@@ -23,7 +23,7 @@ import {
import type * as ProxyLatency from "./useProxyLatency";
// Mock useProxyLatency to use a hard-coded latency.
vi.mock("contexts/useProxyLatency", () => ({
vi.mock("#/contexts/useProxyLatency", () => ({
useProxyLatency: () => {
return {
proxyLatencies: hardCodedLatencies,
+1 -1
View File
@@ -1,4 +1,3 @@
import { useAuthenticated } from "hooks";
import {
createContext,
type FC,
@@ -12,6 +11,7 @@ import { useQuery } from "react-query";
import { API } from "#/api/api";
import { cachedQuery } from "#/api/queries/util";
import type { Region, WorkspaceProxy } from "#/api/typesGenerated";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { useEmbeddedMetadata } from "#/hooks/useEmbeddedMetadata";
import { type ProxyLatencyReport, useProxyLatency } from "./useProxyLatency";
+1 -1
View File
@@ -1,8 +1,8 @@
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 { useAuthenticated } from "#/hooks/useAuthenticated";
import { MockPermissions, MockUserOwner } from "#/testHelpers/entities";
import {
createTestQueryClient,
+1 -1
View File
@@ -1,9 +1,9 @@
import { ProxyProvider as ProductionProxyProvider } from "contexts/ProxyContext";
import { type FC, useEffect } from "react";
import { Navigate, Outlet, useLocation } from "react-router";
import { API } from "#/api/api";
import { isApiError } from "#/api/errors";
import { Loader } from "#/components/Loader/Loader";
import { ProxyProvider as ProductionProxyProvider } from "#/contexts/ProxyContext";
import { DashboardProvider as ProductionDashboardProvider } from "#/modules/dashboard/DashboardProvider";
import { embedRedirect } from "#/utils/redirect";
import { useAuthContext } from "./AuthProvider";
-5
View File
@@ -1,5 +0,0 @@
export * from "./useAuthenticated";
export * from "./useClickable";
export * from "./useClickableTableRow";
export * from "./useClipboard";
export * from "./usePagination";
+1 -1
View File
@@ -1,4 +1,3 @@
import { useProxy } from "contexts/ProxyContext";
import type React from "react";
import { useQuery } from "react-query";
import { toast } from "sonner";
@@ -8,6 +7,7 @@ import type {
WorkspaceAgent,
WorkspaceApp,
} from "#/api/typesGenerated";
import { useProxy } from "#/contexts/ProxyContext";
import {
getAppHref,
isExternalApp,
@@ -1,7 +1,7 @@
import { chromatic } from "testHelpers/chromatic";
import type { Meta, StoryObj } from "@storybook/react-vite";
import { LicenseAIGovernance90PercentWarningText } from "api/typesGenerated";
import { expect, within } from "storybook/test";
import { LicenseAIGovernance90PercentWarningText } from "#/api/typesGenerated";
import { chromatic } from "#/testHelpers/chromatic";
import { AIGovernanceSeatBannerView } from "./AIGovernanceSeatBannerView";
const meta: Meta<typeof AIGovernanceSeatBannerView> = {
@@ -1,7 +1,7 @@
import { LicenseAIGovernance90PercentWarningText } from "api/typesGenerated";
import { Link } from "components/Link/Link";
import { TriangleAlertIcon } from "lucide-react";
import type { FC } from "react";
import { LicenseAIGovernance90PercentWarningText } from "#/api/typesGenerated";
import { Link } from "#/components/Link/Link";
type AIGovernanceSeatBannerViewProps =
| { variant: "over-limit"; actual: number; limit: number }
@@ -1,4 +1,3 @@
import { server } from "testHelpers/server";
import { screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { HttpResponse, http } from "msw";
@@ -11,6 +10,7 @@ import {
renderWithAuth,
waitForLoaderToBeRemoved,
} from "#/testHelpers/renderHelpers";
import { server } from "#/testHelpers/server";
import { DashboardLayout } from "./DashboardLayout";
const renderDashboardLayout = async ({
@@ -1,11 +1,11 @@
import Link from "@mui/material/Link";
import Snackbar from "@mui/material/Snackbar";
import { useAuthenticated } from "hooks";
import { InfoIcon } from "lucide-react";
import { type FC, type HTMLAttributes, Suspense } from "react";
import { Outlet } from "react-router";
import { Button } from "#/components/Button/Button";
import { Loader } from "#/components/Loader/Loader";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { AnnouncementBanners } from "#/modules/dashboard/AnnouncementBanners/AnnouncementBanners";
import { LicenseBanner } from "#/modules/dashboard/LicenseBanner/LicenseBanner";
import { cn } from "#/utils/cn";
@@ -1,4 +1,3 @@
import { useAuthenticated } from "hooks";
import { createContext, type FC, type PropsWithChildren } from "react";
import { useQuery } from "react-query";
import { appearance } from "#/api/queries/appearance";
@@ -15,6 +14,7 @@ import type {
} from "#/api/typesGenerated";
import { ErrorAlert } from "#/components/Alert/ErrorAlert";
import { Loader } from "#/components/Loader/Loader";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { useEmbeddedMetadata } from "#/hooks/useEmbeddedMetadata";
import { canViewAnyOrganization } from "#/modules/permissions";
import { selectFeatureVisibility } from "./entitlements";
@@ -1,9 +1,9 @@
import { useAuthenticated } from "hooks";
import type { FC } from "react";
import { useQuery } from "react-query";
import { useLocation } from "react-router";
import { health } from "#/api/queries/debug";
import { deploymentStats } from "#/api/queries/deployment";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { DeploymentBannerView } from "./DeploymentBannerView";
const HIDE_DEPLOYMENT_BANNER_PATHS = [
@@ -1,11 +1,3 @@
import { chromatic } from "testHelpers/chromatic";
import {
MockAppearanceConfig,
MockBuildInfo,
MockDefaultOrganization,
MockEntitlements,
MockExperiments,
} from "testHelpers/entities";
import type { Meta, StoryObj } from "@storybook/react-vite";
import { expect, within } from "storybook/test";
import {
@@ -13,6 +5,14 @@ import {
LicenseManagedAgentLimitExceededWarningText,
LicenseTelemetryRequiredErrorText,
} from "#/api/typesGenerated";
import { chromatic } from "#/testHelpers/chromatic";
import {
MockAppearanceConfig,
MockBuildInfo,
MockDefaultOrganization,
MockEntitlements,
MockExperiments,
} from "#/testHelpers/entities";
import { docs } from "#/utils/docs";
import { DashboardContext, type DashboardValue } from "../DashboardProvider";
import { LicenseBanner } from "./LicenseBanner";
@@ -1,4 +1,3 @@
import type { ProxyContextValue } from "contexts/ProxyContext";
import {
ChevronRightIcon,
CircleHelpIcon,
@@ -24,6 +23,7 @@ import {
DropdownMenuTrigger,
} from "#/components/DropdownMenu/DropdownMenu";
import { Latency } from "#/components/Latency/Latency";
import type { ProxyContextValue } from "#/contexts/ProxyContext";
import { cn } from "#/utils/cn";
import { sortProxiesByLatency } from "./proxyUtils";
+2 -2
View File
@@ -1,9 +1,9 @@
import { useProxy } from "contexts/ProxyContext";
import { useAuthenticated } from "hooks";
import type { FC } from "react";
import { useQuery } from "react-query";
import { buildInfo } from "#/api/queries/buildInfo";
import type { LinkConfig } from "#/api/typesGenerated";
import { useProxy } from "#/contexts/ProxyContext";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { useEmbeddedMetadata } from "#/hooks/useEmbeddedMetadata";
import { useDashboard } from "#/modules/dashboard/useDashboard";
import { canViewDeploymentSettings } from "#/modules/permissions";
@@ -1,4 +1,3 @@
import type { ProxyContextValue } from "contexts/ProxyContext";
import type { FC } from "react";
import { useQuery } from "react-query";
import { NavLink, useLocation } from "react-router";
@@ -13,6 +12,7 @@ import {
TooltipContent,
TooltipTrigger,
} from "#/components/Tooltip/Tooltip";
import type { ProxyContextValue } from "#/contexts/ProxyContext";
import { useEmbeddedMetadata } from "#/hooks/useEmbeddedMetadata";
import { useDashboard } from "#/modules/dashboard/useDashboard";
import { NotificationsInbox } from "#/modules/notifications/NotificationsInbox/NotificationsInbox";
@@ -1,8 +1,8 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { AuthProvider } from "contexts/auth/AuthProvider";
import { getPreferredProxy } from "contexts/ProxyContext";
import { fn, userEvent, within } from "storybook/test";
import { getAuthorizationKey } from "#/api/queries/authCheck";
import { AuthProvider } from "#/contexts/auth/AuthProvider";
import { getPreferredProxy } from "#/contexts/ProxyContext";
import { permissionChecks } from "#/modules/permissions";
import {
MockAuthMethodsAll,
@@ -1,6 +1,4 @@
import Skeleton from "@mui/material/Skeleton";
import type { ProxyContextValue } from "contexts/ProxyContext";
import { useAuthenticated } from "hooks";
import { type FC, useState } from "react";
import { Link } from "react-router";
import { toast } from "sonner";
@@ -18,6 +16,8 @@ import {
DropdownMenuTrigger,
} from "#/components/DropdownMenu/DropdownMenu";
import { Latency } from "#/components/Latency/Latency";
import type { ProxyContextValue } from "#/contexts/ProxyContext";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { sortProxiesByLatency } from "./proxyUtils";
interface ProxyMenuProps {
@@ -1,4 +1,4 @@
import type { Proxies, ProxyLatencies } from "contexts/ProxyContext";
import type { Proxies, ProxyLatencies } from "#/contexts/ProxyContext";
export function sortProxiesByLatency(
proxies: Proxies,
@@ -1,4 +1,3 @@
import { useAuthenticated } from "hooks";
import { type FC, Suspense } from "react";
import { Navigate, Outlet, useLocation } from "react-router";
import {
@@ -9,6 +8,7 @@ import {
BreadcrumbSeparator,
} from "#/components/Breadcrumb/Breadcrumb";
import { Loader } from "#/components/Loader/Loader";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { canViewDeploymentSettings } from "#/modules/permissions";
import { RequirePermission } from "#/modules/permissions/RequirePermission";
import { DeploymentSidebar } from "./DeploymentSidebar";
@@ -1,5 +1,5 @@
import { useAuthenticated } from "hooks";
import type { FC } from "react";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { useDashboard } from "#/modules/dashboard/useDashboard";
import { DeploymentSidebarView } from "./DeploymentSidebarView";
@@ -1,4 +1,3 @@
import NotFoundPage from "pages/404Page/404Page";
import { createContext, type FC, Suspense, useContext } from "react";
import { useQuery } from "react-query";
import { Outlet, useParams } from "react-router";
@@ -19,6 +18,7 @@ import {
canViewOrganization,
type OrganizationPermissions,
} from "#/modules/permissions/organizations";
import NotFoundPage from "#/pages/404Page/404Page";
export const OrganizationSettingsContext = createContext<
OrganizationSettingsValue | undefined
@@ -1,6 +1,6 @@
import { useAuthenticated } from "hooks";
import type { FC } from "react";
import { Sidebar as BaseSidebar } from "#/components/Sidebar/Sidebar";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { useOrganizationSettings } from "#/modules/management/OrganizationSettingsLayout";
import { OrganizationSidebarView } from "./OrganizationSidebarView";
@@ -1,7 +1,7 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { getPreferredProxy } from "contexts/ProxyContext";
import { screen, spyOn, userEvent, within } from "storybook/test";
import { API } from "#/api/api";
import { getPreferredProxy } from "#/contexts/ProxyContext";
import { chromatic } from "#/testHelpers/chromatic";
import {
MockListeningPortsResponse,
@@ -1,7 +1,5 @@
import Skeleton from "@mui/material/Skeleton";
import { useProxy } from "contexts/ProxyContext";
import { Container, ExternalLinkIcon } from "lucide-react";
import { AppStatuses } from "pages/WorkspacePage/AppStatuses";
import type { FC } from "react";
import { useMutation, useQueryClient } from "react-query";
import { toast } from "sonner";
@@ -34,7 +32,9 @@ import {
TooltipContent,
TooltipTrigger,
} from "#/components/Tooltip/Tooltip";
import { useProxy } from "#/contexts/ProxyContext";
import { useFeatureVisibility } from "#/modules/dashboard/useFeatureVisibility";
import { AppStatuses } from "#/pages/WorkspacePage/AppStatuses";
import { cn } from "#/utils/cn";
import { portForwardURL } from "#/utils/portForward";
import { AgentApps, organizeAgentApps } from "./AgentApps/AgentApps";
@@ -1,8 +1,8 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { getPreferredProxy } from "contexts/ProxyContext";
import { spyOn, userEvent, within } from "storybook/test";
import { API } from "#/api/api";
import { workspaceAgentContainersKey } from "#/api/queries/workspaces";
import { getPreferredProxy } from "#/contexts/ProxyContext";
import { chromatic } from "#/testHelpers/chromatic";
import * as M from "#/testHelpers/entities";
import {
+2 -2
View File
@@ -1,9 +1,7 @@
import Collapse from "@mui/material/Collapse";
import Divider from "@mui/material/Divider";
import Skeleton from "@mui/material/Skeleton";
import { useProxy } from "contexts/ProxyContext";
import { SquareCheckBigIcon } from "lucide-react";
import { AppStatuses } from "pages/WorkspacePage/AppStatuses";
import {
type FC,
useCallback,
@@ -23,7 +21,9 @@ import type {
} from "#/api/typesGenerated";
import { ChevronDownIcon } from "#/components/AnimatedIcons/ChevronDown";
import { Button } from "#/components/Button/Button";
import { useProxy } from "#/contexts/ProxyContext";
import { useFeatureVisibility } from "#/modules/dashboard/useFeatureVisibility";
import { AppStatuses } from "#/pages/WorkspacePage/AppStatuses";
import { cn } from "#/utils/cn";
import { AgentApps, organizeAgentApps } from "./AgentApps/AgentApps";
import { AgentDevcontainerCard } from "./AgentDevcontainerCard";
@@ -1,6 +1,6 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { getPreferredProxy } from "contexts/ProxyContext";
import { expect, screen, spyOn, userEvent, within } from "storybook/test";
import { getPreferredProxy } from "#/contexts/ProxyContext";
import {
MockPrimaryWorkspaceProxy,
MockWorkspace,
@@ -1,4 +1,3 @@
import { useProxy } from "contexts/ProxyContext";
import {
Building2Icon,
CircleAlertIcon,
@@ -18,6 +17,7 @@ import {
TooltipContent,
TooltipTrigger,
} from "#/components/Tooltip/Tooltip";
import { useProxy } from "#/contexts/ProxyContext";
import { isExternalApp, needsSessionToken } from "#/modules/apps/apps";
import { useAppLink } from "#/modules/apps/useAppLink";
import { docs } from "#/utils/docs";
@@ -1,8 +1,8 @@
import { useProxy } from "contexts/ProxyContext";
import type { FC } from "react";
import type { WorkspaceResource } from "#/api/typesGenerated";
import { Alert, AlertDescription, AlertTitle } from "#/components/Alert/Alert";
import { Link } from "#/components/Link/Link";
import { useProxy } from "#/contexts/ProxyContext";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { docs } from "#/utils/docs";
@@ -1,8 +1,8 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { MockUsers } from "pages/UsersPage/storybookData/users";
import { spyOn, userEvent, within } from "storybook/test";
import { reactRouterParameters } from "storybook-addon-remix-react-router";
import { API } from "#/api/api";
import { MockUsers } from "#/pages/UsersPage/storybookData/users";
import {
MockDisplayNameTasks,
MockTask,
@@ -1,4 +1,3 @@
import { useAuthenticated } from "hooks";
import {
EditIcon,
EllipsisIcon,
@@ -35,6 +34,7 @@ import {
TooltipProvider,
TooltipTrigger,
} from "#/components/Tooltip/Tooltip";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { useSearchParamsKey } from "#/hooks/useSearchParamsKey";
import { cn } from "#/utils/cn";
import { TaskDeleteDialog } from "../TaskDeleteDialog/TaskDeleteDialog";
@@ -1,9 +1,9 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { waitFor } from "@testing-library/react";
import { MockUsers } from "pages/UsersPage/storybookData/users";
import { useState } from "react";
import { expect, spyOn, userEvent, within } from "storybook/test";
import { API } from "#/api/api";
import { MockUsers } from "#/pages/UsersPage/storybookData/users";
import { MockUserOwner } from "#/testHelpers/entities";
import { withAuthProvider } from "#/testHelpers/storybook";
import { UserCombobox } from "./UserCombobox";
@@ -1,4 +1,3 @@
import { useAuthenticated } from "hooks";
import { CheckIcon, ChevronsUpDownIcon } from "lucide-react";
import { type FC, useState } from "react";
import { keepPreviousData, useQuery } from "react-query";
@@ -20,6 +19,7 @@ import {
PopoverTrigger,
} from "#/components/Popover/Popover";
import { useDebouncedValue } from "#/hooks/debounce";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { cn } from "#/utils/cn";
type UserOption = {
@@ -1,7 +1,7 @@
import { render, screen } from "@testing-library/react";
import { ClassicParameterFlowDeprecationWarning } from "./ClassicParameterFlowDeprecationWarning";
vi.mock("modules/navigation", () => ({
vi.mock("#/modules/navigation", () => ({
useLinks: () => () => "/mock-link",
linkToTemplate: () => "/mock-template-link",
}));
@@ -1,6 +1,6 @@
import { act, waitFor } from "@testing-library/react";
import CreateWorkspacePage from "pages/CreateWorkspacePage/CreateWorkspacePage";
import type { Workspace } from "#/api/typesGenerated";
import CreateWorkspacePage from "#/pages/CreateWorkspacePage/CreateWorkspacePage";
import * as M from "#/testHelpers/entities";
import {
type GetLocationSnapshot,
@@ -1,10 +1,10 @@
import type { CreateWorkspaceMode } from "pages/CreateWorkspacePage/CreateWorkspacePage";
import { useCallback } from "react";
import { useQuery } from "react-query";
import { useNavigate } from "react-router";
import { workspaceBuildParameters } from "#/api/queries/workspaceBuilds";
import type { Workspace, WorkspaceBuildParameter } from "#/api/typesGenerated";
import { linkToTemplate, useLinks } from "#/modules/navigation";
import type { CreateWorkspaceMode } from "#/pages/CreateWorkspacePage/CreateWorkspacePage";
function getDuplicationUrlParams(
workspaceParams: readonly WorkspaceBuildParameter[],
@@ -1,12 +1,12 @@
import { Link } from "components/Link/Link";
import { Margins } from "components/Margins/Margins";
import type { FC, PropsWithChildren } from "react";
import { Outlet } from "react-router";
import { Link } from "#/components/Link/Link";
import { Margins } from "#/components/Margins/Margins";
import {
PageHeader,
PageHeaderSubtitle,
PageHeaderTitle,
} from "components/PageHeader/PageHeader";
import type { FC, PropsWithChildren } from "react";
import { Outlet } from "react-router";
} from "#/components/PageHeader/PageHeader";
import { docs } from "#/utils/docs";
const AIBridgeSessionsLayout: FC<PropsWithChildren> = () => {
@@ -1,10 +1,14 @@
import { Filter, MenuSkeleton, type useFilter } from "components/Filter/Filter";
import { type UserFilterMenu, UserMenu } from "components/Filter/UserFilter";
import type { FC } from "react";
import {
Filter,
MenuSkeleton,
type useFilter,
} from "#/components/Filter/Filter";
import { type UserFilterMenu, UserMenu } from "#/components/Filter/UserFilter";
import {
ProviderFilter,
type ProviderFilterMenu,
} from "pages/AIBridgePage/RequestLogsPage/RequestLogsFilter/ProviderFilter";
import type { FC } from "react";
} from "#/pages/AIBridgePage/RequestLogsPage/RequestLogsFilter/ProviderFilter";
interface ListSessionsFilterProps {
filter: ReturnType<typeof useFilter>;
@@ -1,9 +1,9 @@
import { useFilter } from "components/Filter/Filter";
import { useUserFilterMenu } from "components/Filter/UserFilter";
import { useAuthenticated } from "hooks";
import type { FC } from "react";
import { useNavigate, useSearchParams } from "react-router";
import { paginatedSessions } from "#/api/queries/aiBridge";
import { useFilter } from "#/components/Filter/Filter";
import { useUserFilterMenu } from "#/components/Filter/UserFilter";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { usePaginatedQuery } from "#/hooks/usePaginatedQuery";
import { useDashboard } from "#/modules/dashboard/useDashboard";
import { RequirePermission } from "#/modules/permissions/RequirePermission";
@@ -1,14 +1,14 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import type { ComponentProps } from "react";
import { fn } from "storybook/test";
import {
getDefaultFilterProps,
MockMenu,
} from "components/Filter/storyHelpers";
} from "#/components/Filter/storyHelpers";
import {
mockInitialRenderResult,
mockSuccessResult,
} from "components/PaginationWidget/PaginationContainer.mocks";
import type { ComponentProps } from "react";
import { fn } from "storybook/test";
} from "#/components/PaginationWidget/PaginationContainer.mocks";
import { MockSession } from "#/testHelpers/entities";
import { ListSessionsPageView } from "./ListSessionsPageView";
@@ -1,28 +1,28 @@
import { Alert, AlertDescription, AlertTitle } from "components/Alert/Alert";
import { Link } from "components/Link/Link";
import { InfoIcon } from "lucide-react";
import type { ComponentProps, FC, PropsWithChildren } from "react";
import type { AIBridgeSession } from "#/api/typesGenerated";
import { Alert, AlertDescription, AlertTitle } from "#/components/Alert/Alert";
import { Link } from "#/components/Link/Link";
import {
PaginationContainer,
type PaginationResult,
} from "components/PaginationWidget/PaginationContainer";
import { PaywallAIGovernance } from "components/Paywall/PaywallAIGovernance";
} from "#/components/PaginationWidget/PaginationContainer";
import { PaywallAIGovernance } from "#/components/Paywall/PaywallAIGovernance";
import {
Table,
TableBody,
TableHead,
TableHeader,
TableRow,
} from "components/Table/Table";
import { TableEmpty } from "components/TableEmpty/TableEmpty";
import { TableLoader } from "components/TableLoader/TableLoader";
} from "#/components/Table/Table";
import { TableEmpty } from "#/components/TableEmpty/TableEmpty";
import { TableLoader } from "#/components/TableLoader/TableLoader";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "components/Tooltip/Tooltip";
import { InfoIcon } from "lucide-react";
import type { ComponentProps, FC, PropsWithChildren } from "react";
import type { AIBridgeSession } from "#/api/typesGenerated";
} from "#/components/Tooltip/Tooltip";
import { docs } from "#/utils/docs";
import { DATE_FORMAT, formatDateTime } from "#/utils/time";
import { ListSessionsFilter } from "./ListSessionsFilter";
@@ -1,6 +1,6 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { Table, TableBody } from "components/Table/Table";
import { fn } from "storybook/test";
import { Table, TableBody } from "#/components/Table/Table";
import { MockSession } from "#/testHelpers/entities";
import { ListSessionsRow } from "./ListSessionsRow";
@@ -1,17 +1,17 @@
import { Avatar } from "components/Avatar/Avatar";
import { Badge } from "components/Badge/Badge";
import { TableCell, TableRow } from "components/Table/Table";
import { ChevronRightIcon } from "lucide-react";
import type { FC } from "react";
import type { AIBridgeSession } from "#/api/typesGenerated";
import { Avatar } from "#/components/Avatar/Avatar";
import { Badge } from "#/components/Badge/Badge";
import { TableCell, TableRow } from "#/components/Table/Table";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "components/Tooltip/Tooltip";
import { ChevronRightIcon } from "lucide-react";
import { AIBridgeClientIcon } from "pages/AIBridgePage/RequestLogsPage/icons/AIBridgeClientIcon";
import { AIBridgeProviderIcon } from "pages/AIBridgePage/RequestLogsPage/icons/AIBridgeProviderIcon";
import type { FC } from "react";
import type { AIBridgeSession } from "#/api/typesGenerated";
} from "#/components/Tooltip/Tooltip";
import { AIBridgeClientIcon } from "#/pages/AIBridgePage/RequestLogsPage/icons/AIBridgeClientIcon";
import { AIBridgeProviderIcon } from "#/pages/AIBridgePage/RequestLogsPage/icons/AIBridgeProviderIcon";
import { DATE_FORMAT, formatDateTime } from "#/utils/time";
import { TokenBadges } from "../TokenBadges";
import { getProviderDisplayName, getProviderIconName } from "../utils";
@@ -1,10 +1,10 @@
import { API } from "api/api";
import { ComboboxInput } from "components/Combobox/Combobox";
import { API } from "#/api/api";
import { ComboboxInput } from "#/components/Combobox/Combobox";
import {
type UseFilterMenuOptions,
useFilterMenu,
} from "components/Filter/menu";
import { SelectFilter } from "components/Filter/SelectFilter";
} from "#/components/Filter/menu";
import { SelectFilter } from "#/components/Filter/SelectFilter";
import { AIBridgeClientIcon } from "../icons/AIBridgeClientIcon";
export const useClientFilterMenu = ({
@@ -3,7 +3,7 @@ import { useSearchParams } from "react-router";
import { paginatedInterceptions } from "#/api/queries/aiBridge";
import { useFilter } from "#/components/Filter/Filter";
import { useUserFilterMenu } from "#/components/Filter/UserFilter";
import { useAuthenticated } from "#/hooks";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { usePaginatedQuery } from "#/hooks/usePaginatedQuery";
import { useDashboard } from "#/modules/dashboard/useDashboard";
import { RequirePermission } from "#/modules/permissions/RequirePermission";
@@ -1,8 +1,8 @@
import { Avatar } from "components/Avatar/Avatar";
import { Badge } from "components/Badge/Badge";
import { AIBridgeClientIcon } from "pages/AIBridgePage/RequestLogsPage/icons/AIBridgeClientIcon";
import { AIBridgeProviderIcon } from "pages/AIBridgePage/RequestLogsPage/icons/AIBridgeProviderIcon";
import type { MinimalUser } from "#/api/typesGenerated";
import { Avatar } from "#/components/Avatar/Avatar";
import { Badge } from "#/components/Badge/Badge";
import { AIBridgeClientIcon } from "#/pages/AIBridgePage/RequestLogsPage/icons/AIBridgeClientIcon";
import { AIBridgeProviderIcon } from "#/pages/AIBridgePage/RequestLogsPage/icons/AIBridgeProviderIcon";
import { formatDateTime } from "#/utils/time";
import { TokenBadges } from "../TokenBadges";
import { getProviderDisplayName, getProviderIconName } from "../utils";
@@ -1,12 +1,12 @@
import { Badge } from "components/Badge/Badge";
import type { FC } from "react";
import { Badge } from "#/components/Badge/Badge";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "components/Tooltip/Tooltip";
import { AIBridgeModelIcon } from "pages/AIBridgePage/RequestLogsPage/icons/AIBridgeModelIcon";
import type { FC } from "react";
} from "#/components/Tooltip/Tooltip";
import { AIBridgeModelIcon } from "#/pages/AIBridgePage/RequestLogsPage/icons/AIBridgeModelIcon";
import { cn } from "#/utils/cn";
import { formatDate } from "#/utils/time";
import { TokenBadges } from "../../TokenBadges";
@@ -1,5 +1,5 @@
import { CopyButton } from "components/CopyButton/CopyButton";
import type { FC } from "react";
import { CopyButton } from "#/components/CopyButton/CopyButton";
import { cn } from "#/utils/cn";
import { formatDate } from "#/utils/time";
import { TokenBadges } from "../../TokenBadges";
+4 -4
View File
@@ -1,12 +1,12 @@
import { Badge } from "components/Badge/Badge";
import { ArrowDownIcon, ArrowUpIcon } from "lucide-react";
import type { FC } from "react";
import { Badge } from "#/components/Badge/Badge";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "components/Tooltip/Tooltip";
import { ArrowDownIcon, ArrowUpIcon } from "lucide-react";
import type { FC } from "react";
} from "#/components/Tooltip/Tooltip";
import { prettyFormatJSON, roundTokenDisplay } from "./utils";
interface TokenBadgesProps {
@@ -1,8 +1,8 @@
import { useAuthContext } from "contexts/auth/AuthProvider";
import dayjs, { type Dayjs } from "dayjs";
import { type FC, useState } from "react";
import { useQuery } from "react-query";
import { chatCostSummary } from "#/api/queries/chats";
import { useAuthContext } from "#/contexts/auth/AuthProvider";
import { AgentAnalyticsPageView } from "./AgentAnalyticsPageView";
import { AgentPageHeader } from "./components/AgentPageHeader";
+9 -9
View File
@@ -1,9 +1,3 @@
import { useProxy } from "contexts/ProxyContext";
import {
getTerminalHref,
getVSCodeHref,
openAppInNewWindow,
} from "modules/apps/apps";
import { type FC, useEffect, useLayoutEffect, useRef, useState } from "react";
import {
useInfiniteQuery,
@@ -14,9 +8,6 @@ import {
import { useOutletContext, useParams } from "react-router";
import { toast } from "sonner";
import type { UrlTransform } from "streamdown";
import { isMobileViewport } from "utils/mobile";
import { pageTitle } from "utils/page";
import { rewriteLocalhostURL } from "utils/portForward";
import { API, watchWorkspace } from "#/api/api";
import { isApiError } from "#/api/errors";
import {
@@ -37,6 +28,15 @@ import { deploymentSSHConfig } from "#/api/queries/deployment";
import { workspaceById, workspaceByIdKey } from "#/api/queries/workspaces";
import type * as TypesGen from "#/api/typesGenerated";
import type { ChatMessagePart } from "#/api/typesGenerated";
import { useProxy } from "#/contexts/ProxyContext";
import {
getTerminalHref,
getVSCodeHref,
openAppInNewWindow,
} from "#/modules/apps/apps";
import { isMobileViewport } from "#/utils/mobile";
import { pageTitle } from "#/utils/page";
import { rewriteLocalhostURL } from "#/utils/portForward";
import type { AgentsOutletContext } from "./AgentsPage";
import type { ChatMessageInputRef } from "./components/AgentChatInput";
import {
+4 -4
View File
@@ -1,13 +1,13 @@
import { useAuthContext } from "contexts/auth/AuthProvider";
import { ProxyProvider } from "contexts/ProxyContext";
import { DashboardProvider } from "modules/dashboard/DashboardProvider";
import { permissionChecks } from "modules/permissions";
import { type FC, useEffect, useLayoutEffect, useRef, useState } from "react";
import { useMutation, useQueryClient } from "react-query";
import { Outlet, useBlocker, useParams, useSearchParams } from "react-router";
import { getErrorMessage } from "#/api/errors";
import { Button } from "#/components/Button/Button";
import { Loader } from "#/components/Loader/Loader";
import { useAuthContext } from "#/contexts/auth/AuthProvider";
import { ProxyProvider } from "#/contexts/ProxyContext";
import { DashboardProvider } from "#/modules/dashboard/DashboardProvider";
import { permissionChecks } from "#/modules/permissions";
import type { AgentsOutletContext } from "./AgentsPage";
import {
bootstrapChatEmbedSession,
@@ -1,6 +1,6 @@
import { useAuthenticated } from "hooks";
import type { FC } from "react";
import { useParams } from "react-router";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { AgentSettingsPageView } from "./AgentSettingsPageView";
import { AgentPageHeader } from "./components/AgentPageHeader";
+1 -1
View File
@@ -1,4 +1,3 @@
import { useAuthenticated } from "hooks";
import { type FC, useEffect, useRef, useState } from "react";
import {
useInfiniteQuery,
@@ -31,6 +30,7 @@ import {
import { workspaceById } from "#/api/queries/workspaces";
import type * as TypesGen from "#/api/typesGenerated";
import { DeleteDialog } from "#/components/Dialogs/DeleteDialog/DeleteDialog";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { useDashboard } from "#/modules/dashboard/useDashboard";
import { createReconnectingWebSocket } from "#/utils/reconnectingWebSocket";
import { AgentsPageView } from "./AgentsPageView";
@@ -48,7 +48,7 @@ import {
useChatStore,
} from "./ChatContext";
vi.mock("api/api", () => ({
vi.mock("#/api/api", () => ({
watchChat: vi.fn(),
}));
@@ -1,9 +1,9 @@
import { asNumber, asString } from "components/ai-elements/runtimeTypeUtils";
import { useEffect, useRef, useState, useSyncExternalStore } from "react";
import { type InfiniteData, useQueryClient } from "react-query";
import { watchChat } from "#/api/api";
import { chatMessagesKey, updateInfiniteChatsCache } from "#/api/queries/chats";
import type * as TypesGen from "#/api/typesGenerated";
import { asNumber, asString } from "#/components/ai-elements/runtimeTypeUtils";
import type { OneWayMessageEvent } from "#/utils/OneWayWebSocket";
import { createReconnectingWebSocket } from "#/utils/reconnectingWebSocket";
import {
@@ -1,9 +1,9 @@
import { Alert, AlertDescription, AlertTitle } from "components/Alert/Alert";
import { Response, Shimmer } from "components/ai-elements";
import { Button } from "components/Button/Button";
import { Pill } from "components/Pill/Pill";
import { ExternalLinkIcon } from "lucide-react";
import { type FC, useEffect, useState } from "react";
import { Alert, AlertDescription, AlertTitle } from "#/components/Alert/Alert";
import { Response, Shimmer } from "#/components/ai-elements";
import { Button } from "#/components/Button/Button";
import { Pill } from "#/components/Pill/Pill";
import { getKindLabel, getProviderStatusURL } from "./chatStatusHelpers";
import type { LiveStatusModel } from "./liveStatusModel";
@@ -17,7 +17,6 @@ import {
import type { FC } from "react";
import { Link } from "react-router";
import { toast } from "sonner";
import { cn } from "utils/cn";
import type * as TypesGen from "#/api/typesGenerated";
import type { ChatDiffStatus } from "#/api/typesGenerated";
import { Button } from "#/components/Button/Button";
@@ -29,6 +28,7 @@ import {
DropdownMenuTrigger,
} from "#/components/DropdownMenu/DropdownMenu";
import { Spinner } from "#/components/Spinner/Spinner";
import { cn } from "#/utils/cn";
import { parsePullRequestUrl } from "../../utils/pullRequest";
import { useEmbedContext } from "../EmbedContext";
import { PrStateIcon } from "../GitPanel/GitPanel";
@@ -8,13 +8,13 @@ import {
useState,
} from "react";
import type { UrlTransform } from "streamdown";
import { cn } from "utils/cn";
import { pageTitle } from "utils/page";
import type * as TypesGen from "#/api/typesGenerated";
import type { ChatDiffStatus, ChatMessagePart } from "#/api/typesGenerated";
import type { ModelSelectorOption } from "#/components/ai-elements";
import { DesktopPanelContext } from "#/components/ai-elements/tool/DesktopPanelContext";
import { Button } from "#/components/Button/Button";
import { cn } from "#/utils/cn";
import { pageTitle } from "#/utils/page";
import type { ChatDetailError } from "../utils/usageLimitMessage";
import { AgentChatInput, type ChatMessageInputRef } from "./AgentChatInput";
import type { useChatStore } from "./AgentDetail/ChatContext";
@@ -1,6 +1,6 @@
import type { FC } from "react";
import { cn } from "utils/cn";
import { Skeleton } from "#/components/Skeleton/Skeleton";
import { cn } from "#/utils/cn";
/** localStorage keys shared with the agents panel components. */
const RIGHT_PANEL_OPEN_KEY = "agents.right-panel-open";
@@ -1,11 +1,11 @@
import { act, render } from "@testing-library/react";
import { ThemeOverride } from "contexts/ThemeProvider";
import type { FC, PropsWithChildren } from "react";
import { QueryClient, QueryClientProvider } from "react-query";
import { MemoryRouter } from "react-router";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import type * as TypesGen from "#/api/typesGenerated";
import type { Chat } from "#/api/typesGenerated";
import { ThemeOverride } from "#/contexts/ThemeProvider";
import { DashboardContext } from "#/modules/dashboard/DashboardProvider";
import {
MockAppearanceConfig,
@@ -37,10 +37,8 @@ class MockIntersectionObserver {
// ---- Auth mock ----
vi.mock("hooks", async () => {
const actual = await vi.importActual("hooks");
vi.mock("#/hooks/useAuthenticated", async () => {
return {
...actual,
useAuthenticated: () => ({
user: MockUserOwner,
permissions: {},
@@ -16,7 +16,6 @@ import {
verticalListSortingStrategy,
} from "@dnd-kit/sortable";
import { CSS } from "@dnd-kit/utilities";
import { useAuthenticated } from "hooks";
import {
AlertTriangleIcon,
ArchiveIcon,
@@ -85,6 +84,7 @@ import {
TooltipContent,
TooltipTrigger,
} from "#/components/Tooltip/Tooltip";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { UserDropdownContent } from "#/modules/dashboard/Navbar/UserDropdown/UserDropdownContent";
import { useDashboard } from "#/modules/dashboard/useDashboard";
import { cn } from "#/utils/cn";
@@ -1,4 +1,3 @@
import { useWebpushNotifications } from "contexts/useWebpushNotifications";
import { BellIcon, BellOffIcon } from "lucide-react";
import type { FC } from "react";
import { toast } from "sonner";
@@ -10,6 +9,7 @@ import {
TooltipContent,
TooltipTrigger,
} from "#/components/Tooltip/Tooltip";
import { useWebpushNotifications } from "#/contexts/useWebpushNotifications";
export const WebPushButton: FC = () => {
const webPush = useWebpushNotifications();
@@ -3,7 +3,7 @@ import { act } from "react";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { useDesktopConnection } from "./useDesktopConnection";
vi.mock("api/api", () => ({
vi.mock("#/api/api", () => ({
watchChatDesktop: vi.fn(),
}));
@@ -1,8 +1,8 @@
import RFB from "@novnc/novnc/lib/rfb";
import { useClipboard } from "hooks/useClipboard";
import { useEffect, useRef, useState } from "react";
import { toast } from "sonner";
import { watchChatDesktop } from "#/api/api";
import { useClipboard } from "#/hooks/useClipboard";
interface UseDesktopConnectionOptions {
chatId: string | undefined;
@@ -4,7 +4,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import type { WorkspaceAgentStatus } from "#/api/typesGenerated";
import { useGitWatcher } from "./useGitWatcher";
vi.mock("api/api", () => ({
vi.mock("#/api/api", () => ({
watchChatGit: vi.fn(),
}));
@@ -1,4 +1,3 @@
import { useClipboard } from "hooks";
import { CheckIcon, CopyIcon } from "lucide-react";
import type { FC } from "react";
import { Link as RouterLink } from "react-router";
@@ -6,6 +5,7 @@ import { Button } from "#/components/Button/Button";
import { SignInLayout } from "#/components/SignInLayout/SignInLayout";
import { Spinner } from "#/components/Spinner/Spinner";
import { Welcome } from "#/components/Welcome/Welcome";
import { useClipboard } from "#/hooks/useClipboard";
interface CliAuthPageViewProps {
sessionToken?: string;
@@ -3,7 +3,6 @@ import TextField from "@mui/material/TextField";
import { useFormik } from "formik";
import camelCase from "lodash/camelCase";
import capitalize from "lodash/capitalize";
import { SelectedTemplate } from "pages/CreateWorkspacePage/SelectedTemplate";
import { type FC, useState } from "react";
import { useQuery } from "react-query";
import { useSearchParams } from "react-router";
@@ -32,6 +31,7 @@ import { Label } from "#/components/Label/Label";
import { OrganizationAutocomplete } from "#/components/OrganizationAutocomplete/OrganizationAutocomplete";
import { Spinner } from "#/components/Spinner/Spinner";
import { ProvisionerTagsField } from "#/modules/provisioners/ProvisionerTagsField";
import { SelectedTemplate } from "#/pages/CreateWorkspacePage/SelectedTemplate";
import { docs } from "#/utils/docs";
import {
displayNameValidator,
@@ -1,4 +1,3 @@
import { useAuthenticated } from "hooks";
import {
type FC,
useCallback,
@@ -28,6 +27,7 @@ import type {
} from "#/api/typesGenerated";
import { Loader } from "#/components/Loader/Loader";
import { useEffectEvent } from "#/hooks/hookPolyfills";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { getInitialParameterValues } from "#/modules/workspaces/DynamicParameter/DynamicParameter";
import { generateWorkspaceName } from "#/modules/workspaces/generateWorkspaceName";
import { pageTitle } from "#/utils/page";
@@ -1,4 +1,3 @@
import { useAuthenticated } from "hooks";
import type { FC } from "react";
import { useMutation, useQueryClient } from "react-query";
import { toast } from "sonner";
@@ -8,6 +7,7 @@ import {
updateAppearance,
} from "#/api/queries/appearance";
import type { UpdateAppearanceConfig } from "#/api/typesGenerated";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { useDashboard } from "#/modules/dashboard/useDashboard";
import { useFeatureVisibility } from "#/modules/dashboard/useFeatureVisibility";
import { RequirePermission } from "#/modules/permissions/RequirePermission";
@@ -1,10 +1,10 @@
import { useAuthenticated } from "hooks";
import type { FC } from "react";
import { useMutation, useQueryClient } from "react-query";
import { useNavigate, useSearchParams } from "react-router";
import { toast } from "sonner";
import { getErrorDetail } from "#/api/errors";
import { postApp } from "#/api/queries/oauth2";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { pageTitle } from "#/utils/page";
import { CreateOAuth2AppPageView } from "./CreateOAuth2AppPageView";
@@ -1,4 +1,3 @@
import { useAuthenticated } from "hooks";
import { type FC, useState } from "react";
import { useMutation, useQuery, useQueryClient } from "react-query";
import { useNavigate, useParams } from "react-router";
@@ -6,6 +5,7 @@ import { toast } from "sonner";
import { getErrorDetail } from "#/api/errors";
import * as oauth2 from "#/api/queries/oauth2";
import type * as TypesGen from "#/api/typesGenerated";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { pageTitle } from "#/utils/page";
import { EditOAuth2AppPageView } from "./EditOAuth2AppPageView";
@@ -1,7 +1,7 @@
import { useAuthenticated } from "hooks";
import type { FC } from "react";
import { useQuery } from "react-query";
import { getApps } from "#/api/queries/oauth2";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { pageTitle } from "#/utils/page";
import OAuth2AppsSettingsPageView from "./OAuth2AppsSettingsPageView";
@@ -1,5 +1,4 @@
import { isAxiosError } from "axios";
import { useAuthenticated } from "hooks";
import type { FC } from "react";
import { useMemo } from "react";
import { useQuery, useQueryClient } from "react-query";
@@ -17,6 +16,7 @@ import {
} from "#/components/GitDeviceAuth/GitDeviceAuth";
import { SignInLayout } from "#/components/SignInLayout/SignInLayout";
import { Welcome } from "#/components/Welcome/Welcome";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import ExternalAuthPageView from "./ExternalAuthPageView";
const ExternalAuthPage: FC = () => {
+1 -1
View File
@@ -1,6 +1,5 @@
import type { Interpolation, Theme } from "@emotion/react";
import Skeleton from "@mui/material/Skeleton";
import { useClickableTableRow } from "hooks";
import { ChevronRightIcon, PlusIcon } from "lucide-react";
import type { FC } from "react";
import { Link as RouterLink, useNavigate } from "react-router";
@@ -25,6 +24,7 @@ import {
TableLoaderSkeleton,
TableRowSkeleton,
} from "#/components/TableLoader/TableLoader";
import { useClickableTableRow } from "#/hooks/useClickableTableRow";
import { docs } from "#/utils/docs";
type GroupsPageViewProps = {
+1 -1
View File
@@ -1,9 +1,9 @@
import { useAuthContext } from "contexts/auth/AuthProvider";
import { type FC, useEffect } from "react";
import { useQuery } from "react-query";
import { Navigate, useLocation, useNavigate } from "react-router";
import { buildInfo } from "#/api/queries/buildInfo";
import { authMethods } from "#/api/queries/users";
import { useAuthContext } from "#/contexts/auth/AuthProvider";
import { useEmbeddedMetadata } from "#/hooks/useEmbeddedMetadata";
import { getApplicationName } from "#/utils/appearance";
import { retrieveRedirect } from "#/utils/redirect";
@@ -1,9 +1,9 @@
import { useAuthenticated } from "hooks";
import type { FC } from "react";
import { useMutation, useQueryClient } from "react-query";
import { useNavigate } from "react-router";
import { toast } from "sonner";
import { createOrganization } from "#/api/queries/organizations";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { useFeatureVisibility } from "#/modules/dashboard/useFeatureVisibility";
import { RequirePermission } from "#/modules/permissions/RequirePermission";
import { CreateOrganizationPageView } from "./CreateOrganizationPageView";
@@ -1,6 +1,4 @@
import { EllipsisVertical, TriangleAlert, UserPlusIcon } from "lucide-react";
import { AISeatCell } from "modules/users/AISeatCell";
import { UserGroupsCell } from "pages/UsersPage/UsersTable/UserGroupsCell";
import { type FC, useState } from "react";
import { toast } from "sonner";
import { getErrorDetail, getErrorMessage } from "#/api/errors";
@@ -38,6 +36,8 @@ import {
} from "#/components/Table/Table";
import { UserAutocomplete } from "#/components/UserAutocomplete/UserAutocomplete";
import type { PaginationResultInfo } from "#/hooks/usePaginatedQuery";
import { AISeatCell } from "#/modules/users/AISeatCell";
import { UserGroupsCell } from "#/pages/UsersPage/UsersTable/UserGroupsCell";
import { TableColumnHelpTooltip } from "./UserTable/TableColumnHelpTooltip";
import { UserRoleCell } from "./UserTable/UserRoleCell";
@@ -1,5 +1,4 @@
import { ChevronRightIcon } from "lucide-react";
import { ProvisionerKey } from "pages/OrganizationSettingsPage/OrganizationProvisionersPage/ProvisionerKey";
import { type FC, useState } from "react";
import { Link as RouterLink } from "react-router";
import type {
@@ -19,6 +18,7 @@ import {
ProvisionerTags,
ProvisionerTruncateTags,
} from "#/modules/provisioners/ProvisionerTags";
import { ProvisionerKey } from "#/pages/OrganizationSettingsPage/OrganizationProvisionersPage/ProvisionerKey";
import { cn } from "#/utils/cn";
import { relativeTime } from "#/utils/time";
import { ProvisionerVersion } from "./ProvisionerVersion";
+1 -1
View File
@@ -1,10 +1,10 @@
import { useAuthContext } from "contexts/auth/AuthProvider";
import { type FC, useEffect, useRef } from "react";
import { useMutation, useQuery } from "react-query";
import { Navigate } from "react-router";
import { buildInfo } from "#/api/queries/buildInfo";
import { authMethods, createFirstUser } from "#/api/queries/users";
import { Loader } from "#/components/Loader/Loader";
import { useAuthContext } from "#/contexts/auth/AuthProvider";
import { useEmbeddedMetadata } from "#/hooks/useEmbeddedMetadata";
import { pageTitle } from "#/utils/page";
import { sendDeploymentEvent } from "#/utils/telemetry";
+1 -1
View File
@@ -1,4 +1,3 @@
import { useProxy } from "contexts/ProxyContext";
import { EllipsisVertical, ExternalLinkIcon, HouseIcon } from "lucide-react";
import { type FC, type HTMLProps, useRef } from "react";
import { Link as RouterLink } from "react-router";
@@ -11,6 +10,7 @@ import {
DropdownMenuTrigger,
} from "#/components/DropdownMenu/DropdownMenu";
import { Spinner } from "#/components/Spinner/Spinner";
import { useProxy } from "#/contexts/ProxyContext";
import { useAppLink } from "#/modules/apps/useAppLink";
import type { WorkspaceAppWithAgent } from "#/modules/tasks/apps";
import { cn } from "#/utils/cn";
+1 -1
View File
@@ -1,7 +1,7 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { getPreferredProxy } from "contexts/ProxyContext";
import kebabCase from "lodash/kebabCase";
import type { Task, Workspace, WorkspaceApp } from "#/api/typesGenerated";
import { getPreferredProxy } from "#/contexts/ProxyContext";
import {
MockPrimaryWorkspaceProxy,
MockTask,
+1 -1
View File
@@ -1,4 +1,3 @@
import { useClipboard } from "hooks";
import {
ArrowLeftIcon,
CheckIcon,
@@ -21,6 +20,7 @@ import {
TooltipProvider,
TooltipTrigger,
} from "#/components/Tooltip/Tooltip";
import { useClipboard } from "#/hooks/useClipboard";
import { ShareButton } from "../WorkspacePage/WorkspaceActions/ShareButton";
import { TaskStartupWarningButton } from "./TaskStartupWarningButton";
import { TaskStatusLink } from "./TaskStatusLink";
@@ -1,5 +1,4 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { MockUsers } from "pages/UsersPage/storybookData/users";
import {
expect,
fireEvent,
@@ -11,6 +10,7 @@ import {
} from "storybook/test";
import { API } from "#/api/api";
import { getTemplatesQueryKey } from "#/api/queries/templates";
import { MockUsers } from "#/pages/UsersPage/storybookData/users";
import {
MockDisplayNameTasks,
MockInitializingTasks,
+1 -1
View File
@@ -1,4 +1,3 @@
import { useAuthenticated } from "hooks";
import { ChevronDownIcon, TrashIcon } from "lucide-react";
import { type FC, useState } from "react";
import { useMutation, useQueries, useQuery, useQueryClient } from "react-query";
@@ -32,6 +31,7 @@ import {
import { Spinner } from "#/components/Spinner/Spinner";
import { Switch } from "#/components/Switch/Switch";
import { TableToolbar } from "#/components/TableToolbar/TableToolbar";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { useSearchParamsKey } from "#/hooks/useSearchParamsKey";
import {
isTaskNotification,
+1 -1
View File
@@ -1,4 +1,3 @@
import { useClickableTableRow } from "hooks";
import { EllipsisVertical, RotateCcwIcon, TrashIcon } from "lucide-react";
import { type FC, type ReactNode, useState } from "react";
import { useMutation, useQueryClient } from "react-query";
@@ -31,6 +30,7 @@ import {
TableLoaderSkeleton,
TableRowSkeleton,
} from "#/components/TableLoader/TableLoader";
import { useClickableTableRow } from "#/hooks/useClickableTableRow";
import { TaskActionButton } from "#/modules/tasks/TaskActionButton";
import { TaskDeleteDialog } from "#/modules/tasks/TaskDeleteDialog/TaskDeleteDialog";
import { TaskStatus } from "#/modules/tasks/TaskStatus/TaskStatus";
+1 -1
View File
@@ -1,5 +1,4 @@
import Skeleton from "@mui/material/Skeleton";
import { useAuthenticated } from "hooks";
import { CheckIcon, ChevronsUpDownIcon } from "lucide-react";
import { type FC, useState } from "react";
import { keepPreviousData, useQuery } from "react-query";
@@ -21,6 +20,7 @@ import {
PopoverTrigger,
} from "#/components/Popover/Popover";
import { useDebouncedValue } from "#/hooks/debounce";
import { useAuthenticated } from "#/hooks/useAuthenticated";
import { cn } from "#/utils/cn";
type UserOption = {
@@ -1,7 +1,7 @@
import { useTheme } from "@emotion/react";
import frontMatter from "front-matter";
import { useTemplateLayoutContext } from "pages/TemplatePage/TemplateLayout";
import { MemoizedMarkdown } from "#/components/Markdown/Markdown";
import { useTemplateLayoutContext } from "#/pages/TemplatePage/TemplateLayout";
import { pageTitle } from "#/utils/page";
export default function TemplateDocsPage() {

Some files were not shown because too many files have changed in this diff Show More