Skip to content

Commit 76e7328

Browse files
authored
refactor: add modules/templates and modules/workspaces (#11947)
1 parent 4604db0 commit 76e7328

32 files changed

+86
-66
lines changed

site/src/modules/resources/AgentRow.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import {
2525
Line,
2626
LogLine,
2727
logLineHeight,
28-
} from "components/WorkspaceBuildLogs/Logs";
28+
} from "modules/workspaces/WorkspaceBuildLogs/Logs";
2929
import { useProxy } from "contexts/ProxyContext";
3030
import { Stack } from "components/Stack/Stack";
3131
import { AgentLatency } from "./AgentLatency";

site/src/components/TemplateExampleCard/TemplateExampleCard.stories.tsx renamed to site/src/modules/templates/TemplateExampleCard/TemplateExampleCard.stories.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
import { TemplateExampleCard } from "./TemplateExampleCard";
88

99
const meta: Meta<typeof TemplateExampleCard> = {
10-
title: "components/TemplateExampleCard",
10+
title: "modules/templates/TemplateExampleCard",
1111
parameters: { chromatic },
1212
component: TemplateExampleCard,
1313
args: {

site/src/components/TemplateFiles/TemplateFiles.stories.tsx renamed to site/src/modules/templates/TemplateFiles/TemplateFiles.stories.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const exampleFiles = {
1313
};
1414

1515
const meta: Meta<typeof TemplateFiles> = {
16-
title: "components/TemplateFiles",
16+
title: "modules/templates/TemplateFiles",
1717
parameters: { chromatic },
1818
component: TemplateFiles,
1919
args: {

site/src/components/WorkspaceBuildLogs/WorkspaceBuildLogs.stories.tsx renamed to site/src/modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs.stories.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { MockWorkspaceBuildLogs } from "testHelpers/entities";
44
import { WorkspaceBuildLogs } from "./WorkspaceBuildLogs";
55

66
const meta: Meta<typeof WorkspaceBuildLogs> = {
7-
title: "components/WorkspaceBuildLogs",
7+
title: "modules/workspaces/WorkspaceBuildLogs",
88
parameters: { chromatic },
99
component: WorkspaceBuildLogs,
1010
};

site/src/components/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.stories.tsx renamed to site/src/modules/workspaces/WorkspaceOutdatedTooltip/WorkspaceOutdatedTooltip.stories.tsx

+16-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import { action } from "@storybook/addon-actions";
22
import type { Meta, StoryObj } from "@storybook/react";
3+
import { expect, userEvent, waitFor, within } from "@storybook/test";
34
import { MockTemplateVersion, MockTemplate } from "testHelpers/entities";
45
import { WorkspaceOutdatedTooltip } from "./WorkspaceOutdatedTooltip";
56

67
const meta: Meta<typeof WorkspaceOutdatedTooltip> = {
7-
title: "components/WorkspaceOutdatedTooltip",
8+
title: "modules/workspaces/WorkspaceOutdatedTooltip",
89
component: WorkspaceOutdatedTooltip,
910
parameters: {
1011
queries: [
@@ -24,6 +25,19 @@ const meta: Meta<typeof WorkspaceOutdatedTooltip> = {
2425
export default meta;
2526
type Story = StoryObj<typeof WorkspaceOutdatedTooltip>;
2627

27-
const Example: Story = {};
28+
const Example: Story = {
29+
play: async ({ canvasElement, step }) => {
30+
const screen = within(canvasElement);
31+
32+
await step("activate hover trigger", async () => {
33+
await userEvent.hover(screen.getByRole("button"));
34+
await waitFor(() =>
35+
expect(
36+
screen.getByText(MockTemplateVersion.message),
37+
).toBeInTheDocument(),
38+
);
39+
});
40+
},
41+
};
2842

2943
export { Example as WorkspaceOutdatedTooltip };

site/src/components/WorkspaceStatusBadge/WorkspaceStatusBadge.stories.tsx renamed to site/src/modules/workspaces/WorkspaceStatusBadge/WorkspaceStatusBadge.stories.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const MockedAppearance = {
2525
};
2626

2727
const meta: Meta<typeof WorkspaceStatusBadge> = {
28-
title: "components/WorkspaceStatusBadge",
28+
title: "modules/workspaces/WorkspaceStatusBadge",
2929
component: WorkspaceStatusBadge,
3030
decorators: [
3131
(Story) => (

site/src/pages/CreateTemplatePage/CreateTemplateForm.tsx

+12-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import { type Interpolation, type Theme } from "@emotion/react";
22
import TextField from "@mui/material/TextField";
3+
import { useFormik } from "formik";
4+
import { type FC, useEffect } from "react";
5+
import camelCase from "lodash/camelCase";
6+
import capitalize from "lodash/capitalize";
7+
import * as Yup from "yup";
38
import type {
49
ProvisionerJobLog,
510
Template,
@@ -8,33 +13,28 @@ import type {
813
VariableValue,
914
} from "api/typesGenerated";
1015
import { Stack } from "components/Stack/Stack";
11-
import { TemplateUpload, type TemplateUploadProps } from "./TemplateUpload";
12-
import { useFormik } from "formik";
1316
import { SelectedTemplate } from "pages/CreateWorkspacePage/SelectedTemplate";
14-
import { type FC, useEffect } from "react";
1517
import {
1618
nameValidator,
1719
getFormHelpers,
1820
onChangeTrimmed,
1921
templateDisplayNameValidator,
2022
} from "utils/formUtils";
21-
import * as Yup from "yup";
22-
import { WorkspaceBuildLogs } from "components/WorkspaceBuildLogs/WorkspaceBuildLogs";
23+
import {
24+
type TemplateAutostartRequirementDaysValue,
25+
type TemplateAutostopRequirementDaysValue,
26+
} from "utils/schedule";
27+
import { sortedDays } from "modules/templates/TemplateScheduleAutostart/TemplateScheduleAutostart";
28+
import { WorkspaceBuildLogs } from "modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs";
2329
import { IconField } from "components/IconField/IconField";
2430
import {
2531
HorizontalForm,
2632
FormSection,
2733
FormFields,
2834
FormFooter,
2935
} from "components/Form/Form";
30-
import camelCase from "lodash/camelCase";
31-
import capitalize from "lodash/capitalize";
36+
import { TemplateUpload, type TemplateUploadProps } from "./TemplateUpload";
3237
import { VariableInput } from "./VariableInput";
33-
import {
34-
type TemplateAutostartRequirementDaysValue,
35-
type TemplateAutostopRequirementDaysValue,
36-
} from "utils/schedule";
37-
import { sortedDays } from "components/TemplateScheduleAutostart/TemplateScheduleAutostart";
3838

3939
const MAX_DESCRIPTION_CHAR_LIMIT = 128;
4040

site/src/pages/StarterTemplatesPage/StarterTemplatesPageView.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { type Interpolation, type Theme } from "@emotion/react";
2+
import { type FC } from "react";
3+
import { Link, useSearchParams } from "react-router-dom";
24
import { ErrorAlert } from "components/Alert/ErrorAlert";
35
import { Loader } from "components/Loader/Loader";
46
import { Margins } from "components/Margins/Margins";
@@ -8,9 +10,7 @@ import {
810
PageHeaderTitle,
911
} from "components/PageHeader/PageHeader";
1012
import { Stack } from "components/Stack/Stack";
11-
import { TemplateExampleCard } from "components/TemplateExampleCard/TemplateExampleCard";
12-
import { type FC } from "react";
13-
import { Link, useSearchParams } from "react-router-dom";
13+
import { TemplateExampleCard } from "modules/templates/TemplateExampleCard/TemplateExampleCard";
1414
import type { StarterTemplatesByTag } from "utils/starterTemplates";
1515

1616
const getTagLabel = (tag: string) => {

site/src/pages/TemplatePage/TemplateFilesPage/TemplateFilesPage.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { Loader } from "components/Loader/Loader";
66
import {
77
TemplateFiles,
88
useFileTab,
9-
} from "components/TemplateFiles/TemplateFiles";
9+
} from "modules/templates/TemplateFiles/TemplateFiles";
1010
import { useTemplateLayoutContext } from "pages/TemplatePage/TemplateLayout";
1111
import { useOrganizationId } from "contexts/auth/useOrganizationId";
1212
import { getTemplatePageTitle } from "../utils";

site/src/pages/TemplatePage/TemplateSummaryPage/TemplateSummaryPageView.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type {
77
} from "api/typesGenerated";
88
import { Loader } from "components/Loader/Loader";
99
import { Stack } from "components/Stack/Stack";
10-
import { TemplateResourcesTable } from "components/TemplateResourcesTable/TemplateResourcesTable";
10+
import { TemplateResourcesTable } from "modules/templates/TemplateResourcesTable/TemplateResourcesTable";
1111
import { TemplateStats } from "./TemplateStats";
1212

1313
export interface TemplateSummaryPageViewProps {

site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleForm.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import Checkbox from "@mui/material/Checkbox";
55
import FormControlLabel from "@mui/material/FormControlLabel";
66
import Switch from "@mui/material/Switch";
77
import { FormikTouched, useFormik } from "formik";
8-
import { FC, ChangeEvent, useState, useEffect } from "react";
9-
import { Template, UpdateTemplateMeta } from "api/typesGenerated";
8+
import { type FC, ChangeEvent, useState, useEffect } from "react";
9+
import { useTheme } from "@emotion/react";
10+
import type { Template, UpdateTemplateMeta } from "api/typesGenerated";
1011
import { getFormHelpers } from "utils/formUtils";
1112
import { docs } from "utils/docs";
1213
import {
@@ -20,6 +21,7 @@ import {
2021
FormFields,
2122
} from "components/Form/Form";
2223
import { Stack } from "components/Stack/Stack";
24+
import { TemplateScheduleAutostart } from "modules/templates/TemplateScheduleAutostart/TemplateScheduleAutostart";
2325
import {
2426
useWorkspacesToGoDormant,
2527
useWorkspacesToBeDeleted,
@@ -38,8 +40,6 @@ import {
3840
AutostopRequirementWeeksHelperText,
3941
convertAutostopRequirementDaysValue,
4042
} from "./AutostopRequirementHelperText";
41-
import { useTheme } from "@emotion/react";
42-
import { TemplateScheduleAutostart } from "components/TemplateScheduleAutostart/TemplateScheduleAutostart";
4343

4444
const MS_HOUR_CONVERSION = 3600000;
4545
const MS_DAY_CONVERSION = 86400000;

site/src/pages/TemplateVersionEditorPage/TemplateVersionEditor.tsx

+10-10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@ import Button from "@mui/material/Button";
22
import IconButton from "@mui/material/IconButton";
33
import Tooltip from "@mui/material/Tooltip";
44
import CreateIcon from "@mui/icons-material/AddOutlined";
5+
import { Link as RouterLink } from "react-router-dom";
6+
import { type Interpolation, type Theme, useTheme } from "@emotion/react";
7+
import { type FC, useCallback, useEffect, useRef, useState } from "react";
8+
import AlertTitle from "@mui/material/AlertTitle";
9+
import ButtonGroup from "@mui/material/ButtonGroup";
10+
import ArrowBackOutlined from "@mui/icons-material/ArrowBackOutlined";
11+
import CloseOutlined from "@mui/icons-material/CloseOutlined";
12+
import PlayArrowOutlined from "@mui/icons-material/PlayArrowOutlined";
513
import type {
614
ProvisionerJobLog,
715
Template,
@@ -10,13 +18,10 @@ import type {
1018
VariableValue,
1119
WorkspaceResource,
1220
} from "api/typesGenerated";
13-
import { Link as RouterLink } from "react-router-dom";
1421
import { Alert, AlertDetail } from "components/Alert/Alert";
15-
import { TemplateResourcesTable } from "components/TemplateResourcesTable/TemplateResourcesTable";
16-
import { WorkspaceBuildLogs } from "components/WorkspaceBuildLogs/WorkspaceBuildLogs";
22+
import { TemplateResourcesTable } from "modules/templates/TemplateResourcesTable/TemplateResourcesTable";
23+
import { WorkspaceBuildLogs } from "modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs";
1724
import { PublishVersionData } from "pages/TemplateVersionEditorPage/types";
18-
import { type FC, useCallback, useEffect, useRef, useState } from "react";
19-
import PlayArrowOutlined from "@mui/icons-material/PlayArrowOutlined";
2025
import {
2126
createFile,
2227
existsFile,
@@ -38,10 +43,6 @@ import { MissingTemplateVariablesDialog } from "./MissingTemplateVariablesDialog
3843
import { MonacoEditor } from "./MonacoEditor";
3944
import { PublishTemplateVersionDialog } from "./PublishTemplateVersionDialog";
4045
import { TemplateVersionStatusBadge } from "./TemplateVersionStatusBadge";
41-
import AlertTitle from "@mui/material/AlertTitle";
42-
import { type Interpolation, type Theme, useTheme } from "@emotion/react";
43-
import ArrowBackOutlined from "@mui/icons-material/ArrowBackOutlined";
44-
import CloseOutlined from "@mui/icons-material/CloseOutlined";
4546
import { MONOSPACE_FONT_FAMILY } from "theme/constants";
4647
import { Loader } from "components/Loader/Loader";
4748
import {
@@ -53,7 +54,6 @@ import {
5354
TopbarIconButton,
5455
} from "components/FullPageLayout/Topbar";
5556
import { Sidebar } from "components/FullPageLayout/Sidebar";
56-
import ButtonGroup from "@mui/material/ButtonGroup";
5757
import { ProvisionerTagsPopover } from "./ProvisionerTagsPopover";
5858

5959
type Tab = "logs" | "resources" | undefined; // Undefined is to hide the tab

site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.test.tsx

+7-6
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ import { AppProviders } from "App";
2424

2525
// For some reason this component in Jest is throwing a MUI style warning so,
2626
// since we don't need it for this test, we can mock it out
27-
jest.mock("components/TemplateResourcesTable/TemplateResourcesTable", () => {
28-
return {
29-
TemplateResourcesTable: () => <div />,
30-
};
31-
});
27+
jest.mock(
28+
"modules/templates/TemplateResourcesTable/TemplateResourcesTable",
29+
() => ({
30+
TemplateResourcesTable: () => <div></div>,
31+
}),
32+
);
3233

3334
const renderTemplateEditorPage = () => {
3435
renderWithAuth(<TemplateVersionEditorPage />, {
@@ -37,7 +38,7 @@ const renderTemplateEditorPage = () => {
3738
extraRoutes: [
3839
{
3940
path: "/templates/:templateId",
40-
element: <div />,
41+
element: <div></div>,
4142
},
4243
],
4344
});

site/src/pages/TemplateVersionPage/TemplateVersionPage.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { useParams } from "react-router-dom";
55
import { usePermissions } from "contexts/auth/usePermissions";
66
import { useOrganizationId } from "contexts/auth/useOrganizationId";
77
import { pageTitle } from "utils/page";
8-
import { useFileTab } from "components/TemplateFiles/TemplateFiles";
8+
import { useFileTab } from "modules/templates/TemplateFiles/TemplateFiles";
99
import TemplateVersionPageView from "./TemplateVersionPageView";
1010
import {
1111
templateByName,

site/src/pages/TemplateVersionPage/TemplateVersionPageView.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import Button from "@mui/material/Button";
22
import AddIcon from "@mui/icons-material/Add";
33
import EditIcon from "@mui/icons-material/Edit";
4+
import { type FC } from "react";
5+
import { Link as RouterLink } from "react-router-dom";
46
import { Loader } from "components/Loader/Loader";
57
import { Margins } from "components/Margins/Margins";
68
import {
@@ -11,14 +13,12 @@ import {
1113
} from "components/PageHeader/PageHeader";
1214
import { Stack } from "components/Stack/Stack";
1315
import { Stats, StatsItem } from "components/Stats/Stats";
14-
import { TemplateFiles } from "components/TemplateFiles/TemplateFiles";
16+
import { TemplateFiles } from "modules/templates/TemplateFiles/TemplateFiles";
1517
import { UseTabResult } from "hooks/useTab";
16-
import { type FC } from "react";
17-
import { Link as RouterLink } from "react-router-dom";
18+
import type { TemplateVersion } from "api/typesGenerated";
1819
import { createDayString } from "utils/createDayString";
19-
import { ErrorAlert } from "components/Alert/ErrorAlert";
20-
import { TemplateVersion } from "api/typesGenerated";
2120
import { TemplateVersionFiles } from "utils/templateVersion";
21+
import { ErrorAlert } from "components/Alert/ErrorAlert";
2222

2323
export interface TemplateVersionPageViewProps {
2424
versionName: string;

site/src/pages/TemplatesPage/EmptyTemplates.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type { TemplateExample } from "api/typesGenerated";
77
import { CodeExample } from "components/CodeExample/CodeExample";
88
import { Stack } from "components/Stack/Stack";
99
import { TableEmpty } from "components/TableEmpty/TableEmpty";
10-
import { TemplateExampleCard } from "components/TemplateExampleCard/TemplateExampleCard";
10+
import { TemplateExampleCard } from "modules/templates/TemplateExampleCard/TemplateExampleCard";
1111
import { docs } from "utils/docs";
1212

1313
// Those are from https://github.com/coder/coder/tree/main/examples/templates

site/src/pages/WorkspaceBuildPage/WorkspaceBuildPageView.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { DashboardFullPage } from "modules/dashboard/DashboardLayout";
77
import { BuildAvatar } from "components/BuildAvatar/BuildAvatar";
88
import { Loader } from "components/Loader/Loader";
99
import { Stack } from "components/Stack/Stack";
10-
import { WorkspaceBuildLogs } from "components/WorkspaceBuildLogs/WorkspaceBuildLogs";
10+
import { WorkspaceBuildLogs } from "modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs";
1111
import {
1212
FullWidthPageHeader,
1313
PageHeaderTitle,
@@ -18,7 +18,7 @@ import { Alert } from "components/Alert/Alert";
1818
import {
1919
WorkspaceBuildData,
2020
WorkspaceBuildDataSkeleton,
21-
} from "components/WorkspaceBuild/WorkspaceBuildData";
21+
} from "modules/workspaces/WorkspaceBuild/WorkspaceBuildData";
2222
import { Sidebar, SidebarCaption, SidebarItem } from "./Sidebar";
2323

2424
const sortLogsByCreatedAt = (logs: ProvisionerJobLog[]) => {

site/src/pages/WorkspacePage/HistorySidebar.tsx

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import ArrowDownwardOutlined from "@mui/icons-material/ArrowDownwardOutlined";
22
import LoadingButton from "@mui/lab/LoadingButton";
3+
import { type FC } from "react";
4+
import { useInfiniteQuery } from "react-query";
35
import { infiniteWorkspaceBuilds } from "api/queries/workspaceBuilds";
4-
import { Workspace } from "api/typesGenerated";
6+
import type { Workspace } from "api/typesGenerated";
57
import {
68
Sidebar,
79
SidebarCaption,
@@ -11,10 +13,13 @@ import {
1113
import {
1214
WorkspaceBuildData,
1315
WorkspaceBuildDataSkeleton,
14-
} from "components/WorkspaceBuild/WorkspaceBuildData";
15-
import { useInfiniteQuery } from "react-query";
16+
} from "modules/workspaces/WorkspaceBuild/WorkspaceBuildData";
17+
18+
interface HistorySidebarProps {
19+
workspace: Workspace;
20+
}
1621

17-
export const HistorySidebar = ({ workspace }: { workspace: Workspace }) => {
22+
export const HistorySidebar: FC<HistorySidebarProps> = ({ workspace }) => {
1823
const buildsQuery = useInfiniteQuery({
1924
...infiniteWorkspaceBuilds(workspace?.id ?? ""),
2025
enabled: workspace !== undefined,

site/src/pages/WorkspacePage/WorkspaceBuildLogsSection.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { useTheme } from "@emotion/react";
22
import { type FC, useRef, useEffect } from "react";
33
import type { ProvisionerJobLog } from "api/typesGenerated";
44
import { Loader } from "components/Loader/Loader";
5-
import { WorkspaceBuildLogs } from "components/WorkspaceBuildLogs/WorkspaceBuildLogs";
5+
import { WorkspaceBuildLogs } from "modules/workspaces/WorkspaceBuildLogs/WorkspaceBuildLogs";
66

77
interface WorkspaceBuildLogsSectionProps {
88
logs?: ProvisionerJobLog[];

0 commit comments

Comments
 (0)