diff --git a/site/src/api/api.ts b/site/src/api/api.ts index b0fd104d6fda0..8c559cece176b 100644 --- a/site/src/api/api.ts +++ b/site/src/api/api.ts @@ -719,9 +719,7 @@ export const updateUserPassword = async ( ): Promise => axios.put(`/api/v2/users/${userId}/password`, updatePassword); -export const getSiteRoles = async (): Promise< - Array -> => { +export const getRoles = async (): Promise> => { const response = await axios.get>( `/api/v2/users/roles`, ); diff --git a/site/src/api/queries/roles.ts b/site/src/api/queries/roles.ts new file mode 100644 index 0000000000000..37b2af49f3e74 --- /dev/null +++ b/site/src/api/queries/roles.ts @@ -0,0 +1,8 @@ +import * as API from "api/api"; + +export const roles = () => { + return { + queryKey: ["roles"], + queryFn: API.getRoles, + }; +}; diff --git a/site/src/pages/UsersPage/UsersPage.tsx b/site/src/pages/UsersPage/UsersPage.tsx index 809b14c6836b7..4e279290817da 100644 --- a/site/src/pages/UsersPage/UsersPage.tsx +++ b/site/src/pages/UsersPage/UsersPage.tsx @@ -10,7 +10,6 @@ import { usePermissions } from "hooks/usePermissions"; import { FC, ReactNode, useEffect } from "react"; import { Helmet } from "react-helmet-async"; import { useSearchParams, useNavigate } from "react-router-dom"; -import { siteRolesMachine } from "xServices/roles/siteRolesXService"; import { usersMachine } from "xServices/users/usersXService"; import { ConfirmDialog } from "../../components/Dialogs/ConfirmDialog/ConfirmDialog"; import { ResetPasswordDialog } from "./ResetPasswordDialog"; @@ -22,6 +21,7 @@ import { useDashboard } from "components/Dashboard/DashboardProvider"; import { deploymentConfigMachine } from "xServices/deploymentConfig/deploymentConfigMachine"; import { useQuery } from "@tanstack/react-query"; import { getAuthMethods } from "api/api"; +import { roles } from "api/queries/roles"; export const Language = { suspendDialogTitle: "Suspend user", @@ -64,12 +64,7 @@ export const UsersPage: FC<{ children?: ReactNode }> = () => { } = usersState.context; const { updateUsers: canEditUsers, viewDeploymentValues } = usePermissions(); - const [rolesState] = useMachine(siteRolesMachine, { - context: { - hasPermission: canEditUsers, - }, - }); - const { roles } = rolesState.context; + const rolesQuery = useQuery({ ...roles(), enabled: canEditUsers }); // Ideally this only runs if 'canViewDeployment' is true. // TODO: Prevent api call if the user does not have the perms. @@ -109,7 +104,7 @@ export const UsersPage: FC<{ children?: ReactNode }> = () => { // - the user can edit the users but the roles are loading const isLoading = usersState.matches("gettingUsers") || - (canEditUsers && rolesState.matches("gettingRoles")) || + rolesQuery.isLoading || authMethods.isLoading; return ( @@ -119,7 +114,7 @@ export const UsersPage: FC<{ children?: ReactNode }> = () => { event.data, - }), - assignGetRolesError: assign({ - getRolesError: (_, event) => event.data, - }), - displayGetRolesError: () => { - displayError(Language.getRolesError); - }, - clearGetRolesError: assign({ - getRolesError: (_) => undefined, - }), - }, - services: { - getRoles: () => API.getSiteRoles(), - }, - guards: { - hasPermission: ({ hasPermission }) => hasPermission, - }, - }, -);