mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
chore: additional typescript import modernization (#23722)
This commit is contained in:
@@ -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
@@ -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
@@ -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.
|
||||
|
||||
@@ -29,7 +29,7 @@ import {
|
||||
updateInfiniteChatsCache,
|
||||
} from "./chats";
|
||||
|
||||
vi.mock("api/api", () => ({
|
||||
vi.mock("#/api/api", () => ({
|
||||
API: {
|
||||
experimental: {
|
||||
updateChat: vi.fn(),
|
||||
|
||||
@@ -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,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";
|
||||
|
||||
@@ -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,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,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,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";
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
export * from "./useAuthenticated";
|
||||
export * from "./useClickable";
|
||||
export * from "./useClickableTableRow";
|
||||
export * from "./useClipboard";
|
||||
export * from "./usePagination";
|
||||
@@ -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,
|
||||
|
||||
+2
-2
@@ -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";
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
-1
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,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
-1
@@ -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
-1
@@ -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
-1
@@ -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,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,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
-1
@@ -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,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,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,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,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,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,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,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
Reference in New Issue
Block a user