From c7b1889537d6f3ae226ab9617dc29dde887114bd Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Mon, 13 May 2024 18:49:02 +0000 Subject: [PATCH 1/5] chore: add setting to enabled multi-organization ui --- .../AccountPage/AccountPage.tsx | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx b/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx index da461e6193c28..1ccf475987834 100644 --- a/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx +++ b/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx @@ -1,4 +1,5 @@ -import type { FC } from "react"; +import Button from "@mui/material/Button"; +import { type FC, useEffect, useState } from "react"; import { useQuery } from "react-query"; import { groupsForUser } from "api/queries/groups"; import { Stack } from "components/Stack/Stack"; @@ -8,12 +9,13 @@ import { useDashboard } from "modules/dashboard/useDashboard"; import { Section } from "../Section"; import { AccountForm } from "./AccountForm"; import { AccountUserGroups } from "./AccountUserGroups"; +import { DisabledBadge, EnabledBadge } from "components/Badges/Badges"; export const AccountPage: FC = () => { const { user: me, permissions, organizationId } = useAuthenticated(); const { updateProfile, updateProfileError, isUpdatingProfile } = useAuthContext(); - const { entitlements } = useDashboard(); + const { entitlements, experiments } = useDashboard(); const hasGroupsFeature = entitlements.features.user_role_management.enabled; const groupsQuery = useQuery({ @@ -21,6 +23,21 @@ export const AccountPage: FC = () => { enabled: hasGroupsFeature, }); + const multiOrgExperimentEnabled = experiments.includes("multi-organization"); + const [multiOrgUiEnabled, setMultiOrgUiEnabled] = useState( + () => + multiOrgExperimentEnabled && + Boolean(localStorage.getItem("enableMultiOrganizationUi")), + ); + + useEffect(() => { + if (multiOrgUiEnabled) { + localStorage.setItem("enableMultiOrganizationUi", "true"); + } else { + localStorage.removeItem("enableMultiOrganizationUi"); + } + }, [multiOrgUiEnabled]); + return (
@@ -41,6 +58,23 @@ export const AccountPage: FC = () => { error={groupsQuery.error} /> )} + + {multiOrgExperimentEnabled && ( +
Danger: enabling will break things in the UI. + } + > + + {multiOrgUiEnabled ? : } + + +
+ )} ); }; From 45545c4bbe83e57fc5a0a0c67eb4406b9d69311c Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Mon, 13 May 2024 19:12:13 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=A7=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx b/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx index 1ccf475987834..38bac36ef6ed4 100644 --- a/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx +++ b/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx @@ -2,6 +2,7 @@ import Button from "@mui/material/Button"; import { type FC, useEffect, useState } from "react"; import { useQuery } from "react-query"; import { groupsForUser } from "api/queries/groups"; +import { DisabledBadge, EnabledBadge } from "components/Badges/Badges"; import { Stack } from "components/Stack/Stack"; import { useAuthContext } from "contexts/auth/AuthProvider"; import { useAuthenticated } from "contexts/auth/RequireAuth"; @@ -9,7 +10,6 @@ import { useDashboard } from "modules/dashboard/useDashboard"; import { Section } from "../Section"; import { AccountForm } from "./AccountForm"; import { AccountUserGroups } from "./AccountUserGroups"; -import { DisabledBadge, EnabledBadge } from "components/Badges/Badges"; export const AccountPage: FC = () => { const { user: me, permissions, organizationId } = useAuthenticated(); From fbd5daa5c417d6a199b5a1299f6a4a6c34521ed0 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Mon, 13 May 2024 20:49:37 +0000 Subject: [PATCH 3/5] chore: expose all organization ids from `AuthContext` --- site/src/contexts/auth/AuthProvider.tsx | 4 +- site/src/contexts/auth/RequireAuth.test.tsx | 2 +- site/src/contexts/auth/RequireAuth.tsx | 21 ++++++--- .../modules/dashboard/DashboardProvider.tsx | 31 ++++++++++++- .../WorkspaceStatusBadge.stories.tsx | 18 +------- .../DuplicateTemplateView.tsx | 6 +-- .../ImportStarterTemplateView.tsx | 6 +-- .../CreateTemplatePage/UploadTemplateView.tsx | 5 +-- .../pages/CreateUserPage/CreateUserPage.tsx | 4 +- .../CreateWorkspacePage.tsx | 4 +- site/src/pages/GroupsPage/CreateGroupPage.tsx | 4 +- site/src/pages/GroupsPage/GroupsPage.tsx | 4 +- .../StarterTemplatePage.tsx | 4 +- .../StarterTemplatesPage.tsx | 4 +- .../TemplateFilesPage/TemplateFilesPage.tsx | 4 +- .../src/pages/TemplatePage/TemplateLayout.tsx | 4 +- .../TemplateSettingsPage.tsx | 4 +- .../TemplatePermissionsPage.tsx | 4 +- .../TemplateSchedulePage.tsx | 4 +- .../TemplateSettingsLayout.tsx | 4 +- .../TemplateVariablesPage.tsx | 4 +- .../TemplateVersionEditorPage.tsx | 4 +- .../TemplateVersionPage.tsx | 3 +- .../src/pages/TemplatesPage/TemplatesPage.tsx | 5 ++- .../AccountPage/AccountPage.tsx | 4 +- site/src/pages/UsersPage/UsersPage.tsx | 6 +-- .../pages/WorkspacePage/Workspace.stories.tsx | 44 ++++++++----------- .../src/pages/WorkspacePage/WorkspacePage.tsx | 4 +- .../pages/WorkspacesPage/WorkspacesPage.tsx | 4 +- .../WorkspacesPageView.stories.tsx | 15 +------ site/src/testHelpers/storybook.tsx | 2 + 31 files changed, 119 insertions(+), 117 deletions(-) diff --git a/site/src/contexts/auth/AuthProvider.tsx b/site/src/contexts/auth/AuthProvider.tsx index 767606e8d605f..2925ac095aadd 100644 --- a/site/src/contexts/auth/AuthProvider.tsx +++ b/site/src/contexts/auth/AuthProvider.tsx @@ -30,7 +30,7 @@ export type AuthContextValue = { isUpdatingProfile: boolean; user: User | undefined; permissions: Permissions | undefined; - organizationId: string | undefined; + organizationIds: readonly string[] | undefined; signInError: unknown; updateProfileError: unknown; signOut: () => void; @@ -119,7 +119,7 @@ export const AuthProvider: FC = ({ children }) => { permissions: permissionsQuery.data as Permissions | undefined, signInError: loginMutation.error, updateProfileError: updateProfileMutation.error, - organizationId: userQuery.data?.organization_ids[0], + organizationIds: userQuery.data?.organization_ids, }} > {children} diff --git a/site/src/contexts/auth/RequireAuth.test.tsx b/site/src/contexts/auth/RequireAuth.test.tsx index 0f128417a96f9..29cd9b6c54f96 100644 --- a/site/src/contexts/auth/RequireAuth.test.tsx +++ b/site/src/contexts/auth/RequireAuth.test.tsx @@ -45,7 +45,7 @@ const createAuthWrapper = (override: Partial) => { isUpdatingProfile: false, permissions: undefined, authMethods: undefined, - organizationId: undefined, + organizationIds: undefined, signInError: undefined, updateProfileError: undefined, signOut: jest.fn(), diff --git a/site/src/contexts/auth/RequireAuth.tsx b/site/src/contexts/auth/RequireAuth.tsx index 2d6b14d3db69f..b1def94fd9485 100644 --- a/site/src/contexts/auth/RequireAuth.tsx +++ b/site/src/contexts/auth/RequireAuth.tsx @@ -66,15 +66,18 @@ export const RequireAuth: FC = () => { ); }; +type RequireKeys = Omit & { + [K in keyof Pick]: NonNullable; +}; + // We can do some TS magic here but I would rather to be explicit on what // values are not undefined when authenticated -type NonNullableAuth = AuthContextValue & { - user: Exclude; - permissions: Exclude; - organizationId: Exclude; -}; +type AuthenticatedAuthContextValue = RequireKeys< + AuthContextValue, + "user" | "permissions" | "organizationIds" +>; -export const useAuthenticated = (): NonNullableAuth => { +export const useAuthenticated = (): AuthenticatedAuthContextValue => { const auth = useAuthContext(); if (!auth.user) { @@ -85,5 +88,9 @@ export const useAuthenticated = (): NonNullableAuth => { throw new Error("Permissions are not available."); } - return auth as NonNullableAuth; + if (!auth.organizationIds) { + throw new Error("Organization ID is not available."); + } + + return auth as AuthenticatedAuthContextValue; }; diff --git a/site/src/modules/dashboard/DashboardProvider.tsx b/site/src/modules/dashboard/DashboardProvider.tsx index 19daf886f02f8..3c56a367ad1b6 100644 --- a/site/src/modules/dashboard/DashboardProvider.tsx +++ b/site/src/modules/dashboard/DashboardProvider.tsx @@ -1,4 +1,9 @@ -import { createContext, type FC, type PropsWithChildren } from "react"; +import { + createContext, + type FC, + type PropsWithChildren, + useState, +} from "react"; import { useQuery } from "react-query"; import { appearance } from "api/queries/appearance"; import { entitlements } from "api/queries/entitlements"; @@ -10,8 +15,12 @@ import type { } from "api/typesGenerated"; import { Loader } from "components/Loader/Loader"; import { useEmbeddedMetadata } from "hooks/useEmbeddedMetadata"; +import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useEffectEvent } from "hooks/hookPolyfills"; export interface DashboardValue { + organizationId: string; + setOrganizationId: (id: string) => void; entitlements: Entitlements; experiments: Experiments; appearance: AppearanceConfig; @@ -23,6 +32,7 @@ export const DashboardContext = createContext( export const DashboardProvider: FC = ({ children }) => { const { metadata } = useEmbeddedMetadata(); + const { user, organizationIds } = useAuthenticated(); const entitlementsQuery = useQuery(entitlements(metadata.entitlements)); const experimentsQuery = useQuery(experiments(metadata.experiments)); const appearanceQuery = useQuery(appearance(metadata.appearance)); @@ -30,6 +40,23 @@ export const DashboardProvider: FC = ({ children }) => { const isLoading = !entitlementsQuery.data || !appearanceQuery.data || !experimentsQuery.data; + const lastUsedOrganizationId = localStorage.getItem( + `user:${user.id}.lastUsedOrganizationId`, + ); + const [activeOrganizationId, setActiveOrganizationId] = useState(() => + lastUsedOrganizationId && organizationIds.includes(lastUsedOrganizationId) + ? lastUsedOrganizationId + : organizationIds[0], + ); + + const setOrganizationId = useEffectEvent((id: string) => { + if (!organizationIds.includes(id)) { + throw new ReferenceError("Invalid organization ID"); + } + localStorage.setItem(`user:${user.id}.lastUsedOrganizationId`, id); + setActiveOrganizationId(id); + }); + if (isLoading) { return ; } @@ -37,6 +64,8 @@ export const DashboardProvider: FC = ({ children }) => { return ( = { title: "modules/workspaces/WorkspaceStatusBadge", @@ -29,19 +27,7 @@ const meta: Meta = { }, ], }, - decorators: [ - (Story) => ( - - - - ), - ], + decorators: [withDashboardProvider], }; export default meta; diff --git a/site/src/pages/CreateTemplatePage/DuplicateTemplateView.tsx b/site/src/pages/CreateTemplatePage/DuplicateTemplateView.tsx index 91ac28acc9127..d108d89ca1ba0 100644 --- a/site/src/pages/CreateTemplatePage/DuplicateTemplateView.tsx +++ b/site/src/pages/CreateTemplatePage/DuplicateTemplateView.tsx @@ -10,7 +10,6 @@ import { } from "api/queries/templates"; import { ErrorAlert } from "components/Alert/ErrorAlert"; import { Loader } from "components/Loader/Loader"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; import { useDashboard } from "modules/dashboard/useDashboard"; import { CreateTemplateForm } from "./CreateTemplateForm"; import type { CreateTemplatePageViewProps } from "./types"; @@ -24,7 +23,7 @@ export const DuplicateTemplateView: FC = ({ isCreating, }) => { const navigate = useNavigate(); - const { organizationId } = useAuthenticated(); + const { entitlements, organizationId } = useDashboard(); const [searchParams] = useSearchParams(); const templateByNameQuery = useQuery( templateByName(organizationId, searchParams.get("fromTemplate")!), @@ -47,8 +46,7 @@ export const DuplicateTemplateView: FC = ({ templateVersionQuery.error || templateVersionVariablesQuery.error; - const dashboard = useDashboard(); - const formPermissions = getFormPermissions(dashboard.entitlements); + const formPermissions = getFormPermissions(entitlements); const isJobError = error instanceof JobError; const templateVersionLogsQuery = useQuery({ diff --git a/site/src/pages/CreateTemplatePage/ImportStarterTemplateView.tsx b/site/src/pages/CreateTemplatePage/ImportStarterTemplateView.tsx index a7212a1410d13..e62cda910f847 100644 --- a/site/src/pages/CreateTemplatePage/ImportStarterTemplateView.tsx +++ b/site/src/pages/CreateTemplatePage/ImportStarterTemplateView.tsx @@ -9,7 +9,6 @@ import { } from "api/queries/templates"; import { ErrorAlert } from "components/Alert/ErrorAlert"; import { Loader } from "components/Loader/Loader"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; import { useDashboard } from "modules/dashboard/useDashboard"; import { CreateTemplateForm } from "./CreateTemplateForm"; import type { CreateTemplatePageViewProps } from "./types"; @@ -27,7 +26,7 @@ export const ImportStarterTemplateView: FC = ({ isCreating, }) => { const navigate = useNavigate(); - const { organizationId } = useAuthenticated(); + const { entitlements, organizationId } = useDashboard(); const [searchParams] = useSearchParams(); const templateExamplesQuery = useQuery(templateExamples(organizationId)); const templateExample = templateExamplesQuery.data?.find( @@ -37,8 +36,7 @@ export const ImportStarterTemplateView: FC = ({ const isLoading = templateExamplesQuery.isLoading; const loadingError = templateExamplesQuery.error; - const dashboard = useDashboard(); - const formPermissions = getFormPermissions(dashboard.entitlements); + const formPermissions = getFormPermissions(entitlements); const isJobError = error instanceof JobError; const templateVersionLogsQuery = useQuery({ diff --git a/site/src/pages/CreateTemplatePage/UploadTemplateView.tsx b/site/src/pages/CreateTemplatePage/UploadTemplateView.tsx index ac650baff112b..06bb4f1625e2b 100644 --- a/site/src/pages/CreateTemplatePage/UploadTemplateView.tsx +++ b/site/src/pages/CreateTemplatePage/UploadTemplateView.tsx @@ -21,10 +21,9 @@ export const UploadTemplateView: FC = ({ error, }) => { const navigate = useNavigate(); - const { organizationId } = useAuthenticated(); - const dashboard = useDashboard(); - const formPermissions = getFormPermissions(dashboard.entitlements); + const { entitlements, organizationId } = useDashboard(); + const formPermissions = getFormPermissions(entitlements); const uploadFileMutation = useMutation(uploadFile()); const uploadedFile = uploadFileMutation.data; diff --git a/site/src/pages/CreateUserPage/CreateUserPage.tsx b/site/src/pages/CreateUserPage/CreateUserPage.tsx index 5de615241ebd0..bec3e7c637e05 100644 --- a/site/src/pages/CreateUserPage/CreateUserPage.tsx +++ b/site/src/pages/CreateUserPage/CreateUserPage.tsx @@ -5,7 +5,7 @@ import { useNavigate } from "react-router-dom"; import { authMethods, createUser } from "api/queries/users"; import { displaySuccess } from "components/GlobalSnackbar/utils"; import { Margins } from "components/Margins/Margins"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { pageTitle } from "utils/page"; import { CreateUserForm } from "./CreateUserForm"; @@ -14,7 +14,7 @@ export const Language = { }; export const CreateUserPage: FC = () => { - const { organizationId } = useAuthenticated(); + const { organizationId } = useDashboard(); const navigate = useNavigate(); const queryClient = useQueryClient(); const createUserMutation = useMutation(createUser(queryClient)); diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx index df0bb38891f03..c2cd9ab9da3ae 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx @@ -35,10 +35,10 @@ export type ExternalAuthPollingState = "idle" | "polling" | "abandoned"; const CreateWorkspacePage: FC = () => { const { template: templateName } = useParams() as { template: string }; - const { user: me, organizationId } = useAuthenticated(); + const { user: me } = useAuthenticated(); const navigate = useNavigate(); const [searchParams, setSearchParams] = useSearchParams(); - const { experiments } = useDashboard(); + const { experiments, organizationId } = useDashboard(); const customVersionId = searchParams.get("version") ?? undefined; const defaultName = searchParams.get("name"); diff --git a/site/src/pages/GroupsPage/CreateGroupPage.tsx b/site/src/pages/GroupsPage/CreateGroupPage.tsx index 9a08da1cd4d0b..d5fd2c1f73c01 100644 --- a/site/src/pages/GroupsPage/CreateGroupPage.tsx +++ b/site/src/pages/GroupsPage/CreateGroupPage.tsx @@ -3,14 +3,14 @@ import { Helmet } from "react-helmet-async"; import { useMutation, useQueryClient } from "react-query"; import { useNavigate } from "react-router-dom"; import { createGroup } from "api/queries/groups"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { pageTitle } from "utils/page"; import CreateGroupPageView from "./CreateGroupPageView"; export const CreateGroupPage: FC = () => { const queryClient = useQueryClient(); const navigate = useNavigate(); - const { organizationId } = useAuthenticated(); + const { organizationId } = useDashboard(); const createGroupMutation = useMutation(createGroup(queryClient)); return ( diff --git a/site/src/pages/GroupsPage/GroupsPage.tsx b/site/src/pages/GroupsPage/GroupsPage.tsx index 8ad9c2a3b00f5..41303d533bbbe 100644 --- a/site/src/pages/GroupsPage/GroupsPage.tsx +++ b/site/src/pages/GroupsPage/GroupsPage.tsx @@ -5,12 +5,14 @@ import { getErrorMessage } from "api/errors"; import { groups } from "api/queries/groups"; import { displayError } from "components/GlobalSnackbar/utils"; import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { useFeatureVisibility } from "modules/dashboard/useFeatureVisibility"; import { pageTitle } from "utils/page"; import GroupsPageView from "./GroupsPageView"; export const GroupsPage: FC = () => { - const { organizationId, permissions } = useAuthenticated(); + const { permissions } = useAuthenticated(); + const { organizationId } = useDashboard(); const { createGroup: canCreateGroup } = permissions; const { template_rbac: isTemplateRBACEnabled } = useFeatureVisibility(); const groupsQuery = useQuery(groups(organizationId)); diff --git a/site/src/pages/StarterTemplatePage/StarterTemplatePage.tsx b/site/src/pages/StarterTemplatePage/StarterTemplatePage.tsx index 2278461b40b83..ed7b5b1c9d92f 100644 --- a/site/src/pages/StarterTemplatePage/StarterTemplatePage.tsx +++ b/site/src/pages/StarterTemplatePage/StarterTemplatePage.tsx @@ -3,13 +3,13 @@ import { Helmet } from "react-helmet-async"; import { useQuery } from "react-query"; import { useParams } from "react-router-dom"; import { templateExamples } from "api/queries/templates"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { pageTitle } from "utils/page"; import { StarterTemplatePageView } from "./StarterTemplatePageView"; const StarterTemplatePage: FC = () => { const { exampleId } = useParams() as { exampleId: string }; - const { organizationId } = useAuthenticated(); + const { organizationId } = useDashboard(); const templateExamplesQuery = useQuery(templateExamples(organizationId)); const starterTemplate = templateExamplesQuery.data?.find( (example) => example.id === exampleId, diff --git a/site/src/pages/StarterTemplatesPage/StarterTemplatesPage.tsx b/site/src/pages/StarterTemplatesPage/StarterTemplatesPage.tsx index 74b31388f614c..d52c92a12df82 100644 --- a/site/src/pages/StarterTemplatesPage/StarterTemplatesPage.tsx +++ b/site/src/pages/StarterTemplatesPage/StarterTemplatesPage.tsx @@ -3,13 +3,13 @@ import { Helmet } from "react-helmet-async"; import { useQuery } from "react-query"; import { templateExamples } from "api/queries/templates"; import type { TemplateExample } from "api/typesGenerated"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { pageTitle } from "utils/page"; import { getTemplatesByTag } from "utils/starterTemplates"; import { StarterTemplatesPageView } from "./StarterTemplatesPageView"; const StarterTemplatesPage: FC = () => { - const { organizationId } = useAuthenticated(); + const { organizationId } = useDashboard(); const templateExamplesQuery = useQuery(templateExamples(organizationId)); const starterTemplatesByTag = templateExamplesQuery.data ? // Currently, the scratch template should not be displayed on the starter templates page. diff --git a/site/src/pages/TemplatePage/TemplateFilesPage/TemplateFilesPage.tsx b/site/src/pages/TemplatePage/TemplateFilesPage/TemplateFilesPage.tsx index 9ee7161899d88..915241780c3fa 100644 --- a/site/src/pages/TemplatePage/TemplateFilesPage/TemplateFilesPage.tsx +++ b/site/src/pages/TemplatePage/TemplateFilesPage/TemplateFilesPage.tsx @@ -3,13 +3,13 @@ import { Helmet } from "react-helmet-async"; import { useQuery } from "react-query"; import { previousTemplateVersion, templateFiles } from "api/queries/templates"; import { Loader } from "components/Loader/Loader"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { TemplateFiles } from "modules/templates/TemplateFiles/TemplateFiles"; import { useTemplateLayoutContext } from "pages/TemplatePage/TemplateLayout"; import { getTemplatePageTitle } from "../utils"; const TemplateFilesPage: FC = () => { - const { organizationId } = useAuthenticated(); + const { organizationId } = useDashboard(); const { template, activeVersion } = useTemplateLayoutContext(); const { data: currentFiles } = useQuery( templateFiles(activeVersion.job.file_id), diff --git a/site/src/pages/TemplatePage/TemplateLayout.tsx b/site/src/pages/TemplatePage/TemplateLayout.tsx index e388c81feb27e..ec19d80c166cc 100644 --- a/site/src/pages/TemplatePage/TemplateLayout.tsx +++ b/site/src/pages/TemplatePage/TemplateLayout.tsx @@ -13,7 +13,7 @@ import { ErrorAlert } from "components/Alert/ErrorAlert"; import { Loader } from "components/Loader/Loader"; import { Margins } from "components/Margins/Margins"; import { TAB_PADDING_Y, TabLink, Tabs, TabsList } from "components/Tabs/Tabs"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { TemplatePageHeader } from "./TemplatePageHeader"; const templatePermissions = ( @@ -71,7 +71,7 @@ export const TemplateLayout: FC = ({ children = , }) => { const navigate = useNavigate(); - const { organizationId } = useAuthenticated(); + const { organizationId } = useDashboard(); const { template: templateName } = useParams() as { template: string }; const { data, error, isLoading } = useQuery({ queryKey: ["template", templateName], diff --git a/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.tsx b/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.tsx index 4438cec0bea06..674505afd89e0 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.tsx @@ -6,7 +6,6 @@ import { API } from "api/api"; import { templateByNameKey } from "api/queries/templates"; import type { UpdateTemplateMeta } from "api/typesGenerated"; import { displaySuccess } from "components/GlobalSnackbar/utils"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; import { useDashboard } from "modules/dashboard/useDashboard"; import { pageTitle } from "utils/page"; import { useTemplateSettings } from "../TemplateSettingsLayout"; @@ -15,10 +14,9 @@ import { TemplateSettingsPageView } from "./TemplateSettingsPageView"; export const TemplateSettingsPage: FC = () => { const { template: templateName } = useParams() as { template: string }; const navigate = useNavigate(); - const { organizationId } = useAuthenticated(); const { template } = useTemplateSettings(); const queryClient = useQueryClient(); - const { entitlements } = useDashboard(); + const { entitlements, organizationId } = useDashboard(); const accessControlEnabled = entitlements.features.access_control.enabled; const advancedSchedulingEnabled = entitlements.features.advanced_template_scheduling.enabled; diff --git a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPage.tsx b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPage.tsx index 79f0068147717..2e9aa072e699a 100644 --- a/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPage.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPage.tsx @@ -4,7 +4,7 @@ import { useMutation, useQuery, useQueryClient } from "react-query"; import { setGroupRole, setUserRole, templateACL } from "api/queries/templates"; import { displaySuccess } from "components/GlobalSnackbar/utils"; import { Paywall } from "components/Paywall/Paywall"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { useFeatureVisibility } from "modules/dashboard/useFeatureVisibility"; import { docs } from "utils/docs"; import { pageTitle } from "utils/page"; @@ -12,7 +12,7 @@ import { useTemplateSettings } from "../TemplateSettingsLayout"; import { TemplatePermissionsPageView } from "./TemplatePermissionsPageView"; export const TemplatePermissionsPage: FC = () => { - const { organizationId } = useAuthenticated(); + const { organizationId } = useDashboard(); const { template, permissions } = useTemplateSettings(); const { template_rbac: isTemplateRBACEnabled } = useFeatureVisibility(); const templateACLQuery = useQuery(templateACL(template.id)); diff --git a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePage.tsx b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePage.tsx index db37ed32dbcc3..45f87bdda5a5b 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePage.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePage.tsx @@ -6,7 +6,6 @@ import { API } from "api/api"; import { templateByNameKey } from "api/queries/templates"; import type { UpdateTemplateMeta } from "api/typesGenerated"; import { displaySuccess } from "components/GlobalSnackbar/utils"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; import { useDashboard } from "modules/dashboard/useDashboard"; import { pageTitle } from "utils/page"; import { useTemplateSettings } from "../TemplateSettingsLayout"; @@ -16,9 +15,8 @@ const TemplateSchedulePage: FC = () => { const { template: templateName } = useParams() as { template: string }; const navigate = useNavigate(); const queryClient = useQueryClient(); - const { organizationId } = useAuthenticated(); const { template } = useTemplateSettings(); - const { entitlements } = useDashboard(); + const { entitlements, organizationId } = useDashboard(); const allowAdvancedScheduling = entitlements.features["advanced_template_scheduling"].enabled; diff --git a/site/src/pages/TemplateSettingsPage/TemplateSettingsLayout.tsx b/site/src/pages/TemplateSettingsPage/TemplateSettingsLayout.tsx index 8e4bed6fb4b28..8e157dac3bd95 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateSettingsLayout.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateSettingsLayout.tsx @@ -9,7 +9,7 @@ import { ErrorAlert } from "components/Alert/ErrorAlert"; import { Loader } from "components/Loader/Loader"; import { Margins } from "components/Margins/Margins"; import { Stack } from "components/Stack/Stack"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { pageTitle } from "utils/page"; import { Sidebar } from "./Sidebar"; @@ -27,7 +27,7 @@ export function useTemplateSettings() { } export const TemplateSettingsLayout: FC = () => { - const { organizationId } = useAuthenticated(); + const { organizationId } = useDashboard(); const { template: templateName } = useParams() as { template: string }; const templateQuery = useQuery(templateByName(organizationId, templateName)); const permissionsQuery = useQuery({ diff --git a/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesPage.tsx b/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesPage.tsx index 94710daf4a98f..e717e24a2aab5 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesPage.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateVariablesPage/TemplateVariablesPage.tsx @@ -16,7 +16,7 @@ import type { import { ErrorAlert } from "components/Alert/ErrorAlert"; import { displaySuccess } from "components/GlobalSnackbar/utils"; import { Loader } from "components/Loader/Loader"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { pageTitle } from "utils/page"; import { useTemplateSettings } from "../TemplateSettingsLayout"; import { TemplateVariablesPageView } from "./TemplateVariablesPageView"; @@ -26,7 +26,7 @@ export const TemplateVariablesPage: FC = () => { organization: string; template: string; }; - const { organizationId } = useAuthenticated(); + const { organizationId } = useDashboard(); const { template } = useTemplateSettings(); const navigate = useNavigate(); const queryClient = useQueryClient(); diff --git a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx index 3a622630cd770..fa9d5e25be527 100644 --- a/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx +++ b/site/src/pages/TemplateVersionEditorPage/TemplateVersionEditorPage.tsx @@ -18,7 +18,7 @@ import type { } from "api/typesGenerated"; import { displayError } from "components/GlobalSnackbar/utils"; import { Loader } from "components/Loader/Loader"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { useWatchVersionLogs } from "modules/templates/useWatchVersionLogs"; import { type FileTree, traverse } from "utils/filetree"; import { pageTitle } from "utils/page"; @@ -36,7 +36,7 @@ export const TemplateVersionEditorPage: FC = () => { const navigate = useNavigate(); const { version: versionName, template: templateName } = useParams() as Params; - const { organizationId } = useAuthenticated(); + const { organizationId } = useDashboard(); const templateQuery = useQuery(templateByName(organizationId, templateName)); const templateVersionOptions = templateVersionByName( organizationId, diff --git a/site/src/pages/TemplateVersionPage/TemplateVersionPage.tsx b/site/src/pages/TemplateVersionPage/TemplateVersionPage.tsx index 673fd5b5e91dc..dba108caa750b 100644 --- a/site/src/pages/TemplateVersionPage/TemplateVersionPage.tsx +++ b/site/src/pages/TemplateVersionPage/TemplateVersionPage.tsx @@ -9,6 +9,7 @@ import { templateVersionByName, } from "api/queries/templates"; import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { pageTitle } from "utils/page"; import TemplateVersionPageView from "./TemplateVersionPageView"; @@ -20,7 +21,7 @@ type Params = { export const TemplateVersionPage: FC = () => { const { version: versionName, template: templateName } = useParams() as Params; - const { organizationId } = useAuthenticated(); + const { organizationId } = useDashboard(); /** * Template version files diff --git a/site/src/pages/TemplatesPage/TemplatesPage.tsx b/site/src/pages/TemplatesPage/TemplatesPage.tsx index 019f32b1d7656..4f42435a11c5a 100644 --- a/site/src/pages/TemplatesPage/TemplatesPage.tsx +++ b/site/src/pages/TemplatesPage/TemplatesPage.tsx @@ -5,9 +5,12 @@ import { templateExamples, templates } from "api/queries/templates"; import { useAuthenticated } from "contexts/auth/RequireAuth"; import { pageTitle } from "utils/page"; import { TemplatesPageView } from "./TemplatesPageView"; +import { useDashboard } from "modules/dashboard/useDashboard"; export const TemplatesPage: FC = () => { - const { organizationId, permissions } = useAuthenticated(); + const { permissions } = useAuthenticated(); + const { organizationId } = useDashboard(); + const templatesQuery = useQuery(templates(organizationId)); const examplesQuery = useQuery({ ...templateExamples(organizationId), diff --git a/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx b/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx index 38bac36ef6ed4..3a299e37b20aa 100644 --- a/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx +++ b/site/src/pages/UserSettingsPage/AccountPage/AccountPage.tsx @@ -12,10 +12,10 @@ import { AccountForm } from "./AccountForm"; import { AccountUserGroups } from "./AccountUserGroups"; export const AccountPage: FC = () => { - const { user: me, permissions, organizationId } = useAuthenticated(); + const { permissions, user: me } = useAuthenticated(); const { updateProfile, updateProfileError, isUpdatingProfile } = useAuthContext(); - const { entitlements, experiments } = useDashboard(); + const { entitlements, experiments, organizationId } = useDashboard(); const hasGroupsFeature = entitlements.features.user_role_management.enabled; const groupsQuery = useQuery({ diff --git a/site/src/pages/UsersPage/UsersPage.tsx b/site/src/pages/UsersPage/UsersPage.tsx index be864a8634079..8ddc42e630aff 100644 --- a/site/src/pages/UsersPage/UsersPage.tsx +++ b/site/src/pages/UsersPage/UsersPage.tsx @@ -35,15 +35,13 @@ export const UsersPage: FC = () => { const navigate = useNavigate(); const searchParamsResult = useSearchParams(); - const { entitlements } = useDashboard(); + const { entitlements, organizationId } = useDashboard(); const [searchParams] = searchParamsResult; - const { organizationId } = useAuthenticated(); const groupsByUserIdQuery = useQuery(groupsByUserId(organizationId)); const authMethodsQuery = useQuery(authMethods()); - const { user: me } = useAuthenticated(); - const { permissions } = useAuthenticated(); + const { permissions, user: me } = useAuthenticated(); const { updateUsers: canEditUsers, viewDeploymentValues } = permissions; const rolesQuery = useQuery(roles()); const { data: deploymentValues } = useQuery({ diff --git a/site/src/pages/WorkspacePage/Workspace.stories.tsx b/site/src/pages/WorkspacePage/Workspace.stories.tsx index c321366862264..7ebc302297b86 100644 --- a/site/src/pages/WorkspacePage/Workspace.stories.tsx +++ b/site/src/pages/WorkspacePage/Workspace.stories.tsx @@ -7,6 +7,7 @@ import * as Mocks from "testHelpers/entities"; import type { WorkspacePermissions } from "./permissions"; import { Workspace } from "./Workspace"; import { WorkspaceBuildLogsSection } from "./WorkspaceBuildLogsSection"; +import { withDashboardProvider } from "testHelpers/storybook"; const permissions: WorkspacePermissions = { readWorkspace: true, @@ -32,35 +33,28 @@ const meta: Meta = { ], }, decorators: [ + withDashboardProvider, (Story) => ( - { + return; + }, + setProxy: () => { + return; + }, + refetchProxyLatencies: (): Date => { + return new Date(); + }, }} > - { - return; - }, - setProxy: () => { - return; - }, - refetchProxyLatencies: (): Date => { - return new Date(); - }, - }} - > - - - + + ), ], }; diff --git a/site/src/pages/WorkspacePage/WorkspacePage.tsx b/site/src/pages/WorkspacePage/WorkspacePage.tsx index 0331f5290bb73..5a9cfe18fe29e 100644 --- a/site/src/pages/WorkspacePage/WorkspacePage.tsx +++ b/site/src/pages/WorkspacePage/WorkspacePage.tsx @@ -10,9 +10,9 @@ import type { Workspace } from "api/typesGenerated"; import { ErrorAlert } from "components/Alert/ErrorAlert"; import { Loader } from "components/Loader/Loader"; import { Margins } from "components/Margins/Margins"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; import { useEffectEvent } from "hooks/hookPolyfills"; import { Navbar } from "modules/dashboard/Navbar/Navbar"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { NotificationBanners } from "modules/dashboard/NotificationBanners/NotificationBanners"; import { workspaceChecks, type WorkspacePermissions } from "./permissions"; import { WorkspaceReadyPage } from "./WorkspaceReadyPage"; @@ -25,7 +25,7 @@ export const WorkspacePage: FC = () => { }; const workspaceName = params.workspace; const username = params.username.replace("@", ""); - const { organizationId } = useAuthenticated(); + const { organizationId } = useDashboard(); // Workspace const workspaceQueryOptions = workspaceByOwnerAndName( diff --git a/site/src/pages/WorkspacesPage/WorkspacesPage.tsx b/site/src/pages/WorkspacesPage/WorkspacesPage.tsx index bf959073aaeaa..277716f6a959c 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPage.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPage.tsx @@ -38,8 +38,9 @@ const WorkspacesPage: FC = () => { // each hook. const searchParamsResult = useSafeSearchParams(); const pagination = usePagination({ searchParamsResult }); + const { permissions } = useAuthenticated(); + const { entitlements, organizationId } = useDashboard(); - const { organizationId, permissions } = useAuthenticated(); const templatesQuery = useQuery(templates(organizationId, false)); const filterProps = useWorkspacesFilter({ @@ -61,7 +62,6 @@ const WorkspacesPage: FC = () => { "delete" | "update" | null >(null); const [urlSearchParams] = searchParamsResult; - const { entitlements } = useDashboard(); const canCheckWorkspaces = entitlements.features["workspace_batch_actions"].enabled; const batchActions = useBatchActions({ diff --git a/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx b/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx index 11fc39b142448..78bad70957c00 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx @@ -25,6 +25,7 @@ import { MockTemplate, } from "testHelpers/entities"; import { WorkspacesPageView } from "./WorkspacesPageView"; +import { withDashboardProvider } from "testHelpers/storybook"; const createWorkspace = ( status: WorkspaceStatus, @@ -141,19 +142,7 @@ const meta: Meta = { }, ], }, - decorators: [ - (Story) => ( - - - - ), - ], + decorators: [withDashboardProvider], }; export default meta; diff --git a/site/src/testHelpers/storybook.tsx b/site/src/testHelpers/storybook.tsx index 4d601e0dd67ef..77c0305d1aa2b 100644 --- a/site/src/testHelpers/storybook.tsx +++ b/site/src/testHelpers/storybook.tsx @@ -26,6 +26,8 @@ export const withDashboardProvider = ( return ( {}, entitlements, experiments, appearance: MockAppearanceConfig, From 387b3a28ff840963cdfde645a41355bee5176377 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Mon, 13 May 2024 21:38:57 +0000 Subject: [PATCH 4/5] =?UTF-8?q?=F0=9F=A7=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/src/modules/dashboard/DashboardProvider.tsx | 2 +- .../WorkspaceStatusBadge/WorkspaceStatusBadge.stories.tsx | 3 +-- site/src/pages/CreateTemplatePage/UploadTemplateView.tsx | 1 - site/src/pages/TemplatesPage/TemplatesPage.tsx | 2 +- site/src/pages/WorkspacePage/Workspace.stories.tsx | 3 +-- site/src/pages/WorkspacePage/WorkspacePage.tsx | 2 +- .../src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx | 6 +----- 7 files changed, 6 insertions(+), 13 deletions(-) diff --git a/site/src/modules/dashboard/DashboardProvider.tsx b/site/src/modules/dashboard/DashboardProvider.tsx index 3c56a367ad1b6..a44a162b994dd 100644 --- a/site/src/modules/dashboard/DashboardProvider.tsx +++ b/site/src/modules/dashboard/DashboardProvider.tsx @@ -14,9 +14,9 @@ import type { Experiments, } from "api/typesGenerated"; import { Loader } from "components/Loader/Loader"; -import { useEmbeddedMetadata } from "hooks/useEmbeddedMetadata"; import { useAuthenticated } from "contexts/auth/RequireAuth"; import { useEffectEvent } from "hooks/hookPolyfills"; +import { useEmbeddedMetadata } from "hooks/useEmbeddedMetadata"; export interface DashboardValue { organizationId: string; diff --git a/site/src/modules/workspaces/WorkspaceStatusBadge/WorkspaceStatusBadge.stories.tsx b/site/src/modules/workspaces/WorkspaceStatusBadge/WorkspaceStatusBadge.stories.tsx index a286d42b6c2c7..071123a4122a7 100644 --- a/site/src/modules/workspaces/WorkspaceStatusBadge/WorkspaceStatusBadge.stories.tsx +++ b/site/src/modules/workspaces/WorkspaceStatusBadge/WorkspaceStatusBadge.stories.tsx @@ -1,5 +1,4 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { DashboardContext } from "modules/dashboard/DashboardProvider"; import { MockBuildInfo, MockCanceledWorkspace, @@ -13,8 +12,8 @@ import { MockStoppingWorkspace, MockWorkspace, } from "testHelpers/entities"; -import { WorkspaceStatusBadge } from "./WorkspaceStatusBadge"; import { withDashboardProvider } from "testHelpers/storybook"; +import { WorkspaceStatusBadge } from "./WorkspaceStatusBadge"; const meta: Meta = { title: "modules/workspaces/WorkspaceStatusBadge", diff --git a/site/src/pages/CreateTemplatePage/UploadTemplateView.tsx b/site/src/pages/CreateTemplatePage/UploadTemplateView.tsx index 06bb4f1625e2b..b9f49d4a46b94 100644 --- a/site/src/pages/CreateTemplatePage/UploadTemplateView.tsx +++ b/site/src/pages/CreateTemplatePage/UploadTemplateView.tsx @@ -7,7 +7,6 @@ import { JobError, templateVersionVariables, } from "api/queries/templates"; -import { useAuthenticated } from "contexts/auth/RequireAuth"; import { useDashboard } from "modules/dashboard/useDashboard"; import { CreateTemplateForm } from "./CreateTemplateForm"; import type { CreateTemplatePageViewProps } from "./types"; diff --git a/site/src/pages/TemplatesPage/TemplatesPage.tsx b/site/src/pages/TemplatesPage/TemplatesPage.tsx index 4f42435a11c5a..75c98d5221320 100644 --- a/site/src/pages/TemplatesPage/TemplatesPage.tsx +++ b/site/src/pages/TemplatesPage/TemplatesPage.tsx @@ -3,9 +3,9 @@ import { Helmet } from "react-helmet-async"; import { useQuery } from "react-query"; import { templateExamples, templates } from "api/queries/templates"; import { useAuthenticated } from "contexts/auth/RequireAuth"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { pageTitle } from "utils/page"; import { TemplatesPageView } from "./TemplatesPageView"; -import { useDashboard } from "modules/dashboard/useDashboard"; export const TemplatesPage: FC = () => { const { permissions } = useAuthenticated(); diff --git a/site/src/pages/WorkspacePage/Workspace.stories.tsx b/site/src/pages/WorkspacePage/Workspace.stories.tsx index 7ebc302297b86..eb00430a8b30c 100644 --- a/site/src/pages/WorkspacePage/Workspace.stories.tsx +++ b/site/src/pages/WorkspacePage/Workspace.stories.tsx @@ -2,12 +2,11 @@ import { action } from "@storybook/addon-actions"; import type { Meta, StoryObj } from "@storybook/react"; import type { ProvisionerJobLog } from "api/typesGenerated"; import { ProxyContext, getPreferredProxy } from "contexts/ProxyContext"; -import { DashboardContext } from "modules/dashboard/DashboardProvider"; import * as Mocks from "testHelpers/entities"; +import { withDashboardProvider } from "testHelpers/storybook"; import type { WorkspacePermissions } from "./permissions"; import { Workspace } from "./Workspace"; import { WorkspaceBuildLogsSection } from "./WorkspaceBuildLogsSection"; -import { withDashboardProvider } from "testHelpers/storybook"; const permissions: WorkspacePermissions = { readWorkspace: true, diff --git a/site/src/pages/WorkspacePage/WorkspacePage.tsx b/site/src/pages/WorkspacePage/WorkspacePage.tsx index 5a9cfe18fe29e..11869d6254f82 100644 --- a/site/src/pages/WorkspacePage/WorkspacePage.tsx +++ b/site/src/pages/WorkspacePage/WorkspacePage.tsx @@ -12,8 +12,8 @@ import { Loader } from "components/Loader/Loader"; import { Margins } from "components/Margins/Margins"; import { useEffectEvent } from "hooks/hookPolyfills"; import { Navbar } from "modules/dashboard/Navbar/Navbar"; -import { useDashboard } from "modules/dashboard/useDashboard"; import { NotificationBanners } from "modules/dashboard/NotificationBanners/NotificationBanners"; +import { useDashboard } from "modules/dashboard/useDashboard"; import { workspaceChecks, type WorkspacePermissions } from "./permissions"; import { WorkspaceReadyPage } from "./WorkspaceReadyPage"; diff --git a/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx b/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx index 78bad70957c00..ac8b854c5a29d 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPageView.stories.tsx @@ -12,20 +12,16 @@ import { getDefaultFilterProps, } from "components/Filter/storyHelpers"; import { DEFAULT_RECORDS_PER_PAGE } from "components/PaginationWidget/utils"; -import { DashboardContext } from "modules/dashboard/DashboardProvider"; import { MockWorkspace, - MockAppearanceConfig, MockBuildInfo, - MockEntitlementsWithScheduling, - MockExperiments, mockApiError, MockUser, MockPendingProvisionerJob, MockTemplate, } from "testHelpers/entities"; -import { WorkspacesPageView } from "./WorkspacesPageView"; import { withDashboardProvider } from "testHelpers/storybook"; +import { WorkspacesPageView } from "./WorkspacesPageView"; const createWorkspace = ( status: WorkspaceStatus, From cd7b026885dfa2c3aeb6d27bbe10ab92a19b2d5d Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Tue, 14 May 2024 16:32:21 +0000 Subject: [PATCH 5/5] fix test --- site/src/contexts/auth/RequireAuth.test.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/site/src/contexts/auth/RequireAuth.test.tsx b/site/src/contexts/auth/RequireAuth.test.tsx index 29cd9b6c54f96..e1194cb601cbc 100644 --- a/site/src/contexts/auth/RequireAuth.test.tsx +++ b/site/src/contexts/auth/RequireAuth.test.tsx @@ -95,6 +95,7 @@ describe("useAuthenticated", () => { wrapper: createAuthWrapper({ user: MockUser, permissions: MockPermissions, + organizationIds: [], }), }); }).not.toThrow();