Skip to content

Commit 69e963b

Browse files
authored
refactor: move dashboard functionality to modules/dashboard/ (#11721)
1 parent 14f114b commit 69e963b

File tree

68 files changed

+249
-230
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+249
-230
lines changed

site/package.json

+3-4
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,9 @@
170170
"vite-plugin-turbosnap": "1.0.2"
171171
},
172172
"browserslist": [
173-
"chrome 66",
174-
"firefox 63",
175-
"edge 79",
176-
"safari 15.4"
173+
"chrome 110",
174+
"firefox 111",
175+
"safari 16.0"
177176
],
178177
"resolutions": {
179178
"optionator": "0.9.3",

site/src/AppRouter.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import {
55
BrowserRouter as Router,
66
Navigate,
77
} from "react-router-dom";
8+
import { DashboardLayout } from "./modules/dashboard/DashboardLayout";
89
import { RequireAuth } from "./contexts/auth/RequireAuth";
9-
import { DashboardLayout } from "./components/Dashboard/DashboardLayout";
1010
import { FullScreenLoader } from "./components/Loader/FullScreenLoader";
1111
import AuditPage from "./pages/AuditPage/AuditPage";
1212
import { DeploySettingsLayout } from "./pages/DeploySettingsPage/DeploySettingsLayout";

site/src/components/WorkspaceStatusBadge/DormantDeletionText.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { type FC } from "react";
22
import type { Workspace } from "api/typesGenerated";
33
import { displayDormantDeletion } from "utils/dormant";
4-
import { useDashboard } from "components/Dashboard/DashboardProvider";
4+
import { useDashboard } from "modules/dashboard/useDashboard";
55

66
interface DormantDeletionTextProps {
77
workspace: Workspace;

site/src/components/WorkspaceStatusBadge/WorkspaceStatusBadge.stories.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
MockAppearanceConfig,
1616
} from "testHelpers/entities";
1717
import { WorkspaceStatusBadge } from "./WorkspaceStatusBadge";
18-
import { DashboardProviderContext } from "components/Dashboard/DashboardProvider";
18+
import { DashboardContext } from "modules/dashboard/DashboardProvider";
1919
import type { Meta, StoryObj } from "@storybook/react";
2020

2121
const MockedAppearance = {
@@ -29,7 +29,7 @@ const meta: Meta<typeof WorkspaceStatusBadge> = {
2929
component: WorkspaceStatusBadge,
3030
decorators: [
3131
(Story) => (
32-
<DashboardProviderContext.Provider
32+
<DashboardContext.Provider
3333
value={{
3434
buildInfo: MockBuildInfo,
3535
entitlements: MockEntitlementsWithScheduling,
@@ -38,7 +38,7 @@ const meta: Meta<typeof WorkspaceStatusBadge> = {
3838
}}
3939
>
4040
<Story />
41-
</DashboardProviderContext.Provider>
41+
</DashboardContext.Provider>
4242
),
4343
],
4444
};

site/src/contexts/auth/RequireAuth.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Outlet, Navigate, useLocation } from "react-router-dom";
44
import { embedRedirect } from "utils/redirect";
55
import { isApiError } from "api/errors";
66
import { ProxyProvider } from "contexts/ProxyContext";
7-
import { DashboardProvider } from "components/Dashboard/DashboardProvider";
7+
import { DashboardProvider } from "modules/dashboard/DashboardProvider";
88
import { FullScreenLoader } from "components/Loader/FullScreenLoader";
99
import { useAuth } from "./useAuth";
1010

site/src/hooks/index.ts

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
export * from "./useClickable";
22
export * from "./useClickableTableRow";
33
export * from "./useClipboard";
4-
export * from "./useFeatureVisibility";
54
export * from "./usePagination";
65
export * from "./useTab";

site/src/components/Dashboard/DashboardLayout.tsx renamed to site/src/modules/dashboard/DashboardLayout.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import Button from "@mui/material/Button";
44
import InfoOutlined from "@mui/icons-material/InfoOutlined";
55
import { type FC, type HTMLAttributes, Suspense } from "react";
66
import { Outlet } from "react-router-dom";
7+
import { LicenseBanner } from "modules/dashboard/LicenseBanner/LicenseBanner";
8+
import { ServiceBanner } from "modules/dashboard/ServiceBanner/ServiceBanner";
79
import { usePermissions } from "contexts/auth/usePermissions";
8-
import { LicenseBanner } from "components/Dashboard/LicenseBanner/LicenseBanner";
910
import { Loader } from "components/Loader/Loader";
10-
import { ServiceBanner } from "components/Dashboard/ServiceBanner/ServiceBanner";
1111
import { dashboardContentBottomPadding } from "theme/constants";
1212
import { docs } from "utils/docs";
1313
import { Navbar } from "./Navbar/Navbar";

site/src/components/Dashboard/DashboardProvider.tsx renamed to site/src/modules/dashboard/DashboardProvider.tsx

+6-24
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import {
1414
type PropsWithChildren,
1515
createContext,
1616
useCallback,
17-
useContext,
1817
useState,
1918
} from "react";
2019
import { appearance } from "api/queries/appearance";
@@ -27,16 +26,16 @@ interface Appearance {
2726
setPreview: (config: AppearanceConfig) => void;
2827
}
2928

30-
interface DashboardProviderValue {
29+
export interface DashboardValue {
3130
buildInfo: BuildInfoResponse;
3231
entitlements: Entitlements;
3332
experiments: Experiments;
3433
appearance: Appearance;
3534
}
3635

37-
export const DashboardProviderContext = createContext<
38-
DashboardProviderValue | undefined
39-
>(undefined);
36+
export const DashboardContext = createContext<DashboardValue | undefined>(
37+
undefined,
38+
);
4039

4140
export const DashboardProvider: FC<PropsWithChildren> = ({ children }) => {
4241
const buildInfoQuery = useQuery(buildInfo());
@@ -83,7 +82,7 @@ export const DashboardProvider: FC<PropsWithChildren> = ({ children }) => {
8382
}
8483

8584
return (
86-
<DashboardProviderContext.Provider
85+
<DashboardContext.Provider
8786
value={{
8887
buildInfo: buildInfoQuery.data,
8988
entitlements: entitlementsQuery.data,
@@ -96,23 +95,6 @@ export const DashboardProvider: FC<PropsWithChildren> = ({ children }) => {
9695
}}
9796
>
9897
{children}
99-
</DashboardProviderContext.Provider>
98+
</DashboardContext.Provider>
10099
);
101100
};
102-
103-
export const useDashboard = (): DashboardProviderValue => {
104-
const context = useContext(DashboardProviderContext);
105-
106-
if (!context) {
107-
throw new Error(
108-
"useDashboard only can be used inside of DashboardProvider",
109-
);
110-
}
111-
112-
return context;
113-
};
114-
115-
export const useIsWorkspaceActionsEnabled = (): boolean => {
116-
const { entitlements } = useDashboard();
117-
return entitlements.features["advanced_template_scheduling"].enabled;
118-
};

site/src/components/Dashboard/LicenseBanner/LicenseBanner.tsx renamed to site/src/modules/dashboard/LicenseBanner/LicenseBanner.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { type FC } from "react";
2-
import { useDashboard } from "components/Dashboard/DashboardProvider";
2+
import { useDashboard } from "modules/dashboard/useDashboard";
33
import { LicenseBannerView } from "./LicenseBannerView";
44

55
export const LicenseBanner: FC = () => {

site/src/components/Dashboard/Navbar/Navbar.tsx renamed to site/src/modules/dashboard/Navbar/Navbar.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { useAuth } from "contexts/auth/useAuth";
33
import { useMe } from "contexts/auth/useMe";
44
import { usePermissions } from "contexts/auth/usePermissions";
55
import { useProxy } from "contexts/ProxyContext";
6-
import { useDashboard } from "components/Dashboard/DashboardProvider";
7-
import { useFeatureVisibility } from "hooks/useFeatureVisibility";
6+
import { useDashboard } from "modules/dashboard/useDashboard";
7+
import { useFeatureVisibility } from "../useFeatureVisibility";
88
import { NavbarView } from "./NavbarView";
99

1010
export const Navbar: FC = () => {

site/src/components/Dashboard/ServiceBanner/ServiceBanner.tsx renamed to site/src/modules/dashboard/ServiceBanner/ServiceBanner.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { type FC } from "react";
2-
import { useDashboard } from "components/Dashboard/DashboardProvider";
2+
import { useDashboard } from "modules/dashboard/useDashboard";
33
import { ServiceBannerView } from "./ServiceBannerView";
44

55
export const ServiceBanner: FC = () => {
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { useContext } from "react";
2+
import { DashboardContext, type DashboardValue } from "./DashboardProvider";
3+
4+
export const useDashboard = (): DashboardValue => {
5+
const context = useContext(DashboardContext);
6+
7+
if (!context) {
8+
throw new Error(
9+
"useDashboard only can be used inside of DashboardProvider",
10+
);
11+
}
12+
13+
return context;
14+
};

site/src/hooks/useFeatureVisibility.ts renamed to site/src/modules/dashboard/useFeatureVisibility.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { FeatureName } from "api/typesGenerated";
2-
import { useDashboard } from "components/Dashboard/DashboardProvider";
2+
import { useDashboard } from "./useDashboard";
33
import { selectFeatureVisibility } from "utils/entitlements";
44

55
export const useFeatureVisibility = (): Record<FeatureName, boolean> => {

site/src/components/Dashboard/useUpdateCheck.test.tsx renamed to site/src/modules/dashboard/useUpdateCheck.test.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { act, renderHook, waitFor } from "@testing-library/react";
2-
import { useUpdateCheck } from "./useUpdateCheck";
3-
import { QueryClient, QueryClientProvider } from "react-query";
42
import { type FC, type PropsWithChildren } from "react";
3+
import { QueryClient, QueryClientProvider } from "react-query";
54
import { rest } from "msw";
65
import { MockUpdateCheck } from "testHelpers/entities";
76
import { server } from "testHelpers/server";
7+
import { useUpdateCheck } from "./useUpdateCheck";
88

99
const createWrapper = (): FC<PropsWithChildren> => {
1010
const queryClient = new QueryClient();

site/src/pages/AuditPage/AuditPage.tsx

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import { isNonInitialPage } from "components/PaginationWidget/utils";
2-
import { useFeatureVisibility } from "hooks/useFeatureVisibility";
3-
import { FC } from "react";
1+
import { type FC } from "react";
42
import { Helmet } from "react-helmet-async";
53
import { useSearchParams } from "react-router-dom";
4+
import { useFeatureVisibility } from "modules/dashboard/useFeatureVisibility";
65
import { pageTitle } from "utils/page";
7-
import { AuditPageView } from "./AuditPageView";
6+
import { paginatedAudits } from "api/queries/audits";
7+
import { usePaginatedQuery } from "hooks/usePaginatedQuery";
88
import { useUserFilterMenu } from "components/Filter/UserFilter";
9+
import { isNonInitialPage } from "components/PaginationWidget/utils";
910
import { useFilter } from "components/Filter/filter";
1011
import { useActionFilterMenu, useResourceTypeFilterMenu } from "./AuditFilter";
11-
import { usePaginatedQuery } from "hooks/usePaginatedQuery";
12-
import { paginatedAudits } from "api/queries/audits";
12+
import { AuditPageView } from "./AuditPageView";
1313

1414
const AuditPage: FC = () => {
1515
const { audit_log: isAuditLogVisible } = useFeatureVisibility();

site/src/pages/CreateTemplatePage/DuplicateTemplateView.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import {
1010
createTemplate,
1111
} from "api/queries/templates";
1212
import { useOrganizationId } from "contexts/auth/useOrganizationId";
13+
import { useDashboard } from "modules/dashboard/useDashboard";
1314
import { ErrorAlert } from "components/Alert/ErrorAlert";
1415
import { Loader } from "components/Loader/Loader";
15-
import { useDashboard } from "components/Dashboard/DashboardProvider";
1616
import { CreateTemplateForm } from "./CreateTemplateForm";
1717
import { firstVersionFromFile, getFormPermissions, newTemplate } from "./utils";
1818

site/src/pages/CreateTemplatePage/ImportStarterTemplateView.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import {
99
templateVersionVariables,
1010
} from "api/queries/templates";
1111
import { useOrganizationId } from "contexts/auth/useOrganizationId";
12+
import { useDashboard } from "modules/dashboard/useDashboard";
1213
import { ErrorAlert } from "components/Alert/ErrorAlert";
1314
import { Loader } from "components/Loader/Loader";
14-
import { useDashboard } from "components/Dashboard/DashboardProvider";
1515
import { CreateTemplateForm } from "./CreateTemplateForm";
1616
import {
1717
firstVersionFromExample,

site/src/pages/CreateTemplatePage/UploadTemplateView.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
} from "api/queries/templates";
99
import { uploadFile } from "api/queries/files";
1010
import { useOrganizationId } from "contexts/auth/useOrganizationId";
11-
import { useDashboard } from "components/Dashboard/DashboardProvider";
11+
import { useDashboard } from "modules/dashboard/useDashboard";
1212
import { CreateTemplateForm } from "./CreateTemplateForm";
1313
import { firstVersionFromFile, getFormPermissions, newTemplate } from "./utils";
1414

site/src/pages/DeploySettingsPage/AppearanceSettingsPage/AppearanceSettingsPage.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import { UpdateAppearanceConfig } from "api/typesGenerated";
2-
import { useDashboard } from "components/Dashboard/DashboardProvider";
3-
import { FC } from "react";
1+
import { type FC } from "react";
42
import { Helmet } from "react-helmet-async";
5-
import { pageTitle } from "utils/page";
6-
import { AppearanceSettingsPageView } from "./AppearanceSettingsPageView";
73
import { useMutation, useQueryClient } from "react-query";
4+
import type { UpdateAppearanceConfig } from "api/typesGenerated";
5+
import { useDashboard } from "modules/dashboard/useDashboard";
6+
import { pageTitle } from "utils/page";
87
import { updateAppearance } from "api/queries/appearance";
98
import { getErrorMessage } from "api/errors";
109
import { displayError, displaySuccess } from "components/GlobalSnackbar/utils";
10+
import { AppearanceSettingsPageView } from "./AppearanceSettingsPageView";
1111

1212
// ServiceBanner is unlike the other Deployment Settings pages because it
1313
// implements a form, whereas the others are read-only. We make this

site/src/pages/DeploySettingsPage/OAuth2AppsSettingsPage/OAuth2AppsSettingsPage.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1+
import { type FC } from "react";
2+
import { Helmet } from "react-helmet-async";
13
import { useQuery } from "react-query";
24
import { getApps } from "api/queries/oauth2";
3-
import { useDashboard } from "components/Dashboard/DashboardProvider";
4-
import { FC } from "react";
5-
import { Helmet } from "react-helmet-async";
5+
import { useDashboard } from "modules/dashboard/useDashboard";
66
import { pageTitle } from "utils/page";
77
import OAuth2AppsSettingsPageView from "./OAuth2AppsSettingsPageView";
88

site/src/pages/DeploySettingsPage/ObservabilitySettingsPage/ObservabilitySettingsPage.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { type FC } from "react";
22
import { Helmet } from "react-helmet-async";
33
import { pageTitle } from "utils/page";
4-
import { useDashboard } from "components/Dashboard/DashboardProvider";
4+
import { useDashboard } from "modules/dashboard/useDashboard";
55
import { useDeploySettings } from "../DeploySettingsLayout";
66
import { ObservabilitySettingsPageView } from "./ObservabilitySettingsPageView";
77

site/src/pages/DeploySettingsPage/SecuritySettingsPage/SecuritySettingsPage.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { type FC } from "react";
22
import { Helmet } from "react-helmet-async";
33
import { pageTitle } from "utils/page";
4-
import { useDashboard } from "components/Dashboard/DashboardProvider";
4+
import { useDashboard } from "modules/dashboard/useDashboard";
55
import { SecuritySettingsPageView } from "./SecuritySettingsPageView";
66
import { useDeploySettings } from "../DeploySettingsLayout";
77

site/src/pages/GroupsPage/GroupsPage.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import { getErrorMessage } from "api/errors";
55
import { groups } from "api/queries/groups";
66
import { useOrganizationId } from "contexts/auth/useOrganizationId";
77
import { usePermissions } from "contexts/auth/usePermissions";
8-
import { useFeatureVisibility } from "hooks/useFeatureVisibility";
9-
import { pageTitle } from "utils/page";
8+
import { useFeatureVisibility } from "modules/dashboard/useFeatureVisibility";
109
import { displayError } from "components/GlobalSnackbar/utils";
10+
import { pageTitle } from "utils/page";
1111
import GroupsPageView from "./GroupsPageView";
1212

1313
export const GroupsPage: FC = () => {

site/src/pages/HealthPage/AccessURLPage.stories.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ const meta: Meta = {
1313
export default meta;
1414
type Story = StoryObj;
1515

16-
export const Default: Story = {};
16+
const Example: Story = {};
17+
18+
export { Example as AccessURL };

site/src/pages/HealthPage/DERPPage.stories.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ const meta: Meta = {
1313
export default meta;
1414
type Story = StoryObj;
1515

16-
export const Default: Story = {};
16+
const Example: Story = {};
17+
18+
export { Example as DERP };

site/src/pages/HealthPage/DERPRegionPage.stories.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,6 @@ const meta: Meta = {
1818
export default meta;
1919
type Story = StoryObj;
2020

21-
export const Default: Story = {};
21+
const Example: Story = {};
22+
23+
export { Example as DERPRegion };

site/src/pages/HealthPage/DatabasePage.stories.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ const meta: Meta = {
1313
export default meta;
1414
type Story = StoryObj;
1515

16-
export const Default: Story = {};
16+
const Example: Story = {};
17+
18+
export { Example as Database };

0 commit comments

Comments
 (0)