diff --git a/src/App.tsx b/src/App.tsx index b968c265..74878cd9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -52,6 +52,7 @@ import TeamsOverviewPage from 'pages/teams/overview/TeamsOverviewPage' import WorkloadsCreateEditPage from 'pages/workloads/create-edit/WorkloadsCreateEditPage' import WorkloadsOverviewPage from 'pages/workloads/overview/WorkloadsOverviewPage' import WorkloadCatalogsPage from 'pages/workloads/catalog/WorkloadCatalogsPage' +import ThemeViewInitializer from 'components/ThemeViewInitializer' import { HttpErrorBadRequest } from './utils/error' import { NotistackProvider, SnackbarUtilsConfigurator } from './utils/snack' @@ -84,6 +85,7 @@ function App() { + { setCookiesLoaded(false) }, [themeView]) - // reset themeView to team if user is not admin - React.useEffect(() => { - const { isPlatformAdmin } = user - if (!isPlatformAdmin) onChangeView({ target: { value: 'team' } } as React.ChangeEvent) - }, []) // platform view base iframe urls const clusterResourceUtilization = `https://grafana.${domain}/d-solo/efa86fd1d0c121a26444b636a3f509a8/kubernetes-compute-resources-cluster?orgId=1&refresh=30s&theme=${theme.palette.mode}&panelId=` diff --git a/src/components/ThemeViewInitializer.tsx b/src/components/ThemeViewInitializer.tsx new file mode 100644 index 00000000..4bfd0bc5 --- /dev/null +++ b/src/components/ThemeViewInitializer.tsx @@ -0,0 +1,19 @@ +import React, { useEffect } from 'react' +import { useSession } from 'providers/Session' +import useSettings from 'hooks/useSettings' + +/** + * Initializes theme view based on user role. + * Non-platform admin users are automatically set to 'team' view. + */ +export default function ThemeViewInitializer() { + const { user } = useSession() + const { onChangeView } = useSettings() + + useEffect(() => { + const { isPlatformAdmin } = user + if (!isPlatformAdmin) onChangeView({ target: { value: 'team' } } as React.ChangeEvent) + }, []) + + return null +} diff --git a/src/pages/Dashboard.tsx b/src/pages/Dashboard.tsx index 30a94049..dd976bdd 100644 --- a/src/pages/Dashboard.tsx +++ b/src/pages/Dashboard.tsx @@ -28,11 +28,12 @@ export default function (): React.ReactElement { const { data: teamData } = useGetTeamQuery({ teamId: oboTeamId }, { skip: !oboTeamId || isPlatformAdmin }) const teamId = isPlatformView ? undefined : oboTeamId + const { data: dashboard, isFetching: isFetchingDashboard, refetch: refetchDashboard, - } = useGetDashboardQuery({ teamId }) + } = useGetDashboardQuery({ teamId }, { skip: !isPlatformAdmin && !teamId }) const isDirty = useAppSelector(({ global: { isDirty } }) => isDirty) useEffect(() => { diff --git a/src/redux/otomiApi.ts b/src/redux/otomiApi.ts index 05f3ddf9..0a70cea1 100644 --- a/src/redux/otomiApi.ts +++ b/src/redux/otomiApi.ts @@ -5238,7 +5238,9 @@ export type GetDockerConfigApiArg = { } export type GetSessionApiResponse = /** status 200 Get the session for the logged in user */ { ca?: string - core?: object + core?: { + [key: string]: any + } corrupt?: boolean editor?: string inactivityTimeout?: number @@ -5277,7 +5279,9 @@ export type GetSessionApiResponse = /** status 200 Get the session for the logge console?: string values?: string } - valuesSchema?: object + valuesSchema?: { + [key: string]: any + } } export type GetSessionApiArg = void export type GetApiDocApiResponse = /** status 200 The requested apiDoc. */ object @@ -5868,8 +5872,12 @@ export type EditSettingsApiArg = { export type GetAppsApiResponse = /** status 200 The request is successful. */ { enabled?: boolean id: string - rawValues?: object - values?: object + rawValues?: { + [key: string]: any + } + values?: { + [key: string]: any + } }[] export type GetAppsApiArg = { teamId: string @@ -5885,8 +5893,12 @@ export type ToggleAppsApiArg = { export type GetTeamAppApiResponse = /** status 200 The request is successful. */ { enabled?: boolean id: string - rawValues?: object - values?: object + rawValues?: { + [key: string]: any + } + values?: { + [key: string]: any + } } export type GetTeamAppApiArg = { teamId: string @@ -5900,8 +5912,12 @@ export type EditAppApiArg = { body: { enabled?: boolean id: string - rawValues?: object - values?: object + rawValues?: { + [key: string]: any + } + values?: { + [key: string]: any + } } } export type GetAiModelsApiResponse = /** status 200 Successfully obtained shared AI models */ ({