Skip to content

refactor: move dashboard functionality to modules/dashboard/ #11721

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jan 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions site/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -170,10 +170,9 @@
"vite-plugin-turbosnap": "1.0.2"
},
"browserslist": [
"chrome 66",
"firefox 63",
"edge 79",
"safari 15.4"
"chrome 110",
"firefox 111",
"safari 16.0"
],
"resolutions": {
"optionator": "0.9.3",
Expand Down
2 changes: 1 addition & 1 deletion site/src/AppRouter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import {
BrowserRouter as Router,
Navigate,
} from "react-router-dom";
import { DashboardLayout } from "./modules/dashboard/DashboardLayout";
import { RequireAuth } from "./contexts/auth/RequireAuth";
import { DashboardLayout } from "./components/Dashboard/DashboardLayout";
import { FullScreenLoader } from "./components/Loader/FullScreenLoader";
import AuditPage from "./pages/AuditPage/AuditPage";
import { DeploySettingsLayout } from "./pages/DeploySettingsPage/DeploySettingsLayout";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { type FC } from "react";
import type { Workspace } from "api/typesGenerated";
import { displayDormantDeletion } from "utils/dormant";
import { useDashboard } from "components/Dashboard/DashboardProvider";
import { useDashboard } from "modules/dashboard/useDashboard";

interface DormantDeletionTextProps {
workspace: Workspace;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import {
MockAppearanceConfig,
} from "testHelpers/entities";
import { WorkspaceStatusBadge } from "./WorkspaceStatusBadge";
import { DashboardProviderContext } from "components/Dashboard/DashboardProvider";
import { DashboardContext } from "modules/dashboard/DashboardProvider";
import type { Meta, StoryObj } from "@storybook/react";

const MockedAppearance = {
Expand All @@ -29,7 +29,7 @@ const meta: Meta<typeof WorkspaceStatusBadge> = {
component: WorkspaceStatusBadge,
decorators: [
(Story) => (
<DashboardProviderContext.Provider
<DashboardContext.Provider
value={{
buildInfo: MockBuildInfo,
entitlements: MockEntitlementsWithScheduling,
Expand All @@ -38,7 +38,7 @@ const meta: Meta<typeof WorkspaceStatusBadge> = {
}}
>
<Story />
</DashboardProviderContext.Provider>
</DashboardContext.Provider>
),
],
};
Expand Down
2 changes: 1 addition & 1 deletion site/src/contexts/auth/RequireAuth.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { Outlet, Navigate, useLocation } from "react-router-dom";
import { embedRedirect } from "utils/redirect";
import { isApiError } from "api/errors";
import { ProxyProvider } from "contexts/ProxyContext";
import { DashboardProvider } from "components/Dashboard/DashboardProvider";
import { DashboardProvider } from "modules/dashboard/DashboardProvider";
import { FullScreenLoader } from "components/Loader/FullScreenLoader";
import { useAuth } from "./useAuth";

Expand Down
1 change: 0 additions & 1 deletion site/src/hooks/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
export * from "./useClickable";
export * from "./useClickableTableRow";
export * from "./useClipboard";
export * from "./useFeatureVisibility";
export * from "./usePagination";
export * from "./useTab";
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import Button from "@mui/material/Button";
import InfoOutlined from "@mui/icons-material/InfoOutlined";
import { type FC, type HTMLAttributes, Suspense } from "react";
import { Outlet } from "react-router-dom";
import { LicenseBanner } from "modules/dashboard/LicenseBanner/LicenseBanner";
import { ServiceBanner } from "modules/dashboard/ServiceBanner/ServiceBanner";
import { usePermissions } from "contexts/auth/usePermissions";
import { LicenseBanner } from "components/Dashboard/LicenseBanner/LicenseBanner";
import { Loader } from "components/Loader/Loader";
import { ServiceBanner } from "components/Dashboard/ServiceBanner/ServiceBanner";
import { dashboardContentBottomPadding } from "theme/constants";
import { docs } from "utils/docs";
import { Navbar } from "./Navbar/Navbar";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import {
type PropsWithChildren,
createContext,
useCallback,
useContext,
useState,
} from "react";
import { appearance } from "api/queries/appearance";
Expand All @@ -27,16 +26,16 @@ interface Appearance {
setPreview: (config: AppearanceConfig) => void;
}

interface DashboardProviderValue {
export interface DashboardValue {
buildInfo: BuildInfoResponse;
entitlements: Entitlements;
experiments: Experiments;
appearance: Appearance;
}

export const DashboardProviderContext = createContext<
DashboardProviderValue | undefined
>(undefined);
export const DashboardContext = createContext<DashboardValue | undefined>(
undefined,
);

export const DashboardProvider: FC<PropsWithChildren> = ({ children }) => {
const buildInfoQuery = useQuery(buildInfo());
Expand Down Expand Up @@ -83,7 +82,7 @@ export const DashboardProvider: FC<PropsWithChildren> = ({ children }) => {
}

return (
<DashboardProviderContext.Provider
<DashboardContext.Provider
value={{
buildInfo: buildInfoQuery.data,
entitlements: entitlementsQuery.data,
Expand All @@ -96,23 +95,6 @@ export const DashboardProvider: FC<PropsWithChildren> = ({ children }) => {
}}
>
{children}
</DashboardProviderContext.Provider>
</DashboardContext.Provider>
);
};

export const useDashboard = (): DashboardProviderValue => {
const context = useContext(DashboardProviderContext);

if (!context) {
throw new Error(
"useDashboard only can be used inside of DashboardProvider",
);
}

return context;
};

export const useIsWorkspaceActionsEnabled = (): boolean => {
const { entitlements } = useDashboard();
return entitlements.features["advanced_template_scheduling"].enabled;
};
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { type FC } from "react";
import { useDashboard } from "components/Dashboard/DashboardProvider";
import { useDashboard } from "modules/dashboard/useDashboard";
import { LicenseBannerView } from "./LicenseBannerView";

export const LicenseBanner: FC = () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import { useAuth } from "contexts/auth/useAuth";
import { useMe } from "contexts/auth/useMe";
import { usePermissions } from "contexts/auth/usePermissions";
import { useProxy } from "contexts/ProxyContext";
import { useDashboard } from "components/Dashboard/DashboardProvider";
import { useFeatureVisibility } from "hooks/useFeatureVisibility";
import { useDashboard } from "modules/dashboard/useDashboard";
import { useFeatureVisibility } from "../useFeatureVisibility";
import { NavbarView } from "./NavbarView";

export const Navbar: FC = () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { type FC } from "react";
import { useDashboard } from "components/Dashboard/DashboardProvider";
import { useDashboard } from "modules/dashboard/useDashboard";
import { ServiceBannerView } from "./ServiceBannerView";

export const ServiceBanner: FC = () => {
Expand Down
14 changes: 14 additions & 0 deletions site/src/modules/dashboard/useDashboard.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { useContext } from "react";
import { DashboardContext, type DashboardValue } from "./DashboardProvider";

export const useDashboard = (): DashboardValue => {
const context = useContext(DashboardContext);

if (!context) {
throw new Error(
"useDashboard only can be used inside of DashboardProvider",
);
}

return context;
};
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { FeatureName } from "api/typesGenerated";
import { useDashboard } from "components/Dashboard/DashboardProvider";
import { useDashboard } from "./useDashboard";
import { selectFeatureVisibility } from "utils/entitlements";

export const useFeatureVisibility = (): Record<FeatureName, boolean> => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { act, renderHook, waitFor } from "@testing-library/react";
import { useUpdateCheck } from "./useUpdateCheck";
import { QueryClient, QueryClientProvider } from "react-query";
import { type FC, type PropsWithChildren } from "react";
import { QueryClient, QueryClientProvider } from "react-query";
import { rest } from "msw";
import { MockUpdateCheck } from "testHelpers/entities";
import { server } from "testHelpers/server";
import { useUpdateCheck } from "./useUpdateCheck";

const createWrapper = (): FC<PropsWithChildren> => {
const queryClient = new QueryClient();
Expand Down
12 changes: 6 additions & 6 deletions site/src/pages/AuditPage/AuditPage.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { isNonInitialPage } from "components/PaginationWidget/utils";
import { useFeatureVisibility } from "hooks/useFeatureVisibility";
import { FC } from "react";
import { type FC } from "react";
import { Helmet } from "react-helmet-async";
import { useSearchParams } from "react-router-dom";
import { useFeatureVisibility } from "modules/dashboard/useFeatureVisibility";
import { pageTitle } from "utils/page";
import { AuditPageView } from "./AuditPageView";
import { paginatedAudits } from "api/queries/audits";
import { usePaginatedQuery } from "hooks/usePaginatedQuery";
import { useUserFilterMenu } from "components/Filter/UserFilter";
import { isNonInitialPage } from "components/PaginationWidget/utils";
import { useFilter } from "components/Filter/filter";
import { useActionFilterMenu, useResourceTypeFilterMenu } from "./AuditFilter";
import { usePaginatedQuery } from "hooks/usePaginatedQuery";
import { paginatedAudits } from "api/queries/audits";
import { AuditPageView } from "./AuditPageView";

const AuditPage: FC = () => {
const { audit_log: isAuditLogVisible } = useFeatureVisibility();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ import {
createTemplate,
} from "api/queries/templates";
import { useOrganizationId } from "contexts/auth/useOrganizationId";
import { useDashboard } from "modules/dashboard/useDashboard";
import { ErrorAlert } from "components/Alert/ErrorAlert";
import { Loader } from "components/Loader/Loader";
import { useDashboard } from "components/Dashboard/DashboardProvider";
import { CreateTemplateForm } from "./CreateTemplateForm";
import { firstVersionFromFile, getFormPermissions, newTemplate } from "./utils";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import {
templateVersionVariables,
} from "api/queries/templates";
import { useOrganizationId } from "contexts/auth/useOrganizationId";
import { useDashboard } from "modules/dashboard/useDashboard";
import { ErrorAlert } from "components/Alert/ErrorAlert";
import { Loader } from "components/Loader/Loader";
import { useDashboard } from "components/Dashboard/DashboardProvider";
import { CreateTemplateForm } from "./CreateTemplateForm";
import {
firstVersionFromExample,
Expand Down
2 changes: 1 addition & 1 deletion site/src/pages/CreateTemplatePage/UploadTemplateView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
} from "api/queries/templates";
import { uploadFile } from "api/queries/files";
import { useOrganizationId } from "contexts/auth/useOrganizationId";
import { useDashboard } from "components/Dashboard/DashboardProvider";
import { useDashboard } from "modules/dashboard/useDashboard";
import { CreateTemplateForm } from "./CreateTemplateForm";
import { firstVersionFromFile, getFormPermissions, newTemplate } from "./utils";

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { UpdateAppearanceConfig } from "api/typesGenerated";
import { useDashboard } from "components/Dashboard/DashboardProvider";
import { FC } from "react";
import { type FC } from "react";
import { Helmet } from "react-helmet-async";
import { pageTitle } from "utils/page";
import { AppearanceSettingsPageView } from "./AppearanceSettingsPageView";
import { useMutation, useQueryClient } from "react-query";
import type { UpdateAppearanceConfig } from "api/typesGenerated";
import { useDashboard } from "modules/dashboard/useDashboard";
import { pageTitle } from "utils/page";
import { updateAppearance } from "api/queries/appearance";
import { getErrorMessage } from "api/errors";
import { displayError, displaySuccess } from "components/GlobalSnackbar/utils";
import { AppearanceSettingsPageView } from "./AppearanceSettingsPageView";

// ServiceBanner is unlike the other Deployment Settings pages because it
// implements a form, whereas the others are read-only. We make this
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { type FC } from "react";
import { Helmet } from "react-helmet-async";
import { useQuery } from "react-query";
import { getApps } from "api/queries/oauth2";
import { useDashboard } from "components/Dashboard/DashboardProvider";
import { FC } from "react";
import { Helmet } from "react-helmet-async";
import { useDashboard } from "modules/dashboard/useDashboard";
import { pageTitle } from "utils/page";
import OAuth2AppsSettingsPageView from "./OAuth2AppsSettingsPageView";

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { type FC } from "react";
import { Helmet } from "react-helmet-async";
import { pageTitle } from "utils/page";
import { useDashboard } from "components/Dashboard/DashboardProvider";
import { useDashboard } from "modules/dashboard/useDashboard";
import { useDeploySettings } from "../DeploySettingsLayout";
import { ObservabilitySettingsPageView } from "./ObservabilitySettingsPageView";

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { type FC } from "react";
import { Helmet } from "react-helmet-async";
import { pageTitle } from "utils/page";
import { useDashboard } from "components/Dashboard/DashboardProvider";
import { useDashboard } from "modules/dashboard/useDashboard";
import { SecuritySettingsPageView } from "./SecuritySettingsPageView";
import { useDeploySettings } from "../DeploySettingsLayout";

Expand Down
4 changes: 2 additions & 2 deletions site/src/pages/GroupsPage/GroupsPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import { getErrorMessage } from "api/errors";
import { groups } from "api/queries/groups";
import { useOrganizationId } from "contexts/auth/useOrganizationId";
import { usePermissions } from "contexts/auth/usePermissions";
import { useFeatureVisibility } from "hooks/useFeatureVisibility";
import { pageTitle } from "utils/page";
import { useFeatureVisibility } from "modules/dashboard/useFeatureVisibility";
import { displayError } from "components/GlobalSnackbar/utils";
import { pageTitle } from "utils/page";
import GroupsPageView from "./GroupsPageView";

export const GroupsPage: FC = () => {
Expand Down
4 changes: 3 additions & 1 deletion site/src/pages/HealthPage/AccessURLPage.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@ const meta: Meta = {
export default meta;
type Story = StoryObj;

export const Default: Story = {};
const Example: Story = {};

export { Example as AccessURL };
4 changes: 3 additions & 1 deletion site/src/pages/HealthPage/DERPPage.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@ const meta: Meta = {
export default meta;
type Story = StoryObj;

export const Default: Story = {};
const Example: Story = {};

export { Example as DERP };
4 changes: 3 additions & 1 deletion site/src/pages/HealthPage/DERPRegionPage.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,6 @@ const meta: Meta = {
export default meta;
type Story = StoryObj;

export const Default: Story = {};
const Example: Story = {};

export { Example as DERPRegion };
4 changes: 3 additions & 1 deletion site/src/pages/HealthPage/DatabasePage.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@ const meta: Meta = {
export default meta;
type Story = StoryObj;

export const Default: Story = {};
const Example: Story = {};

export { Example as Database };
Loading