diff --git a/site/src/pages/CreateUserPage/CreateUserPage.tsx b/site/src/pages/CreateUserPage/CreateUserPage.tsx index bec3e7c637e05..4e42442649384 100644 --- a/site/src/pages/CreateUserPage/CreateUserPage.tsx +++ b/site/src/pages/CreateUserPage/CreateUserPage.tsx @@ -32,10 +32,10 @@ export const CreateUserPage: FC = () => { onSubmit={async (user) => { await createUserMutation.mutateAsync(user); displaySuccess("Successfully created user."); - navigate("/users"); + navigate("..", { relative: "path" }); }} onCancel={() => { - navigate("/users"); + navigate("..", { relative: "path" }); }} isLoading={createUserMutation.isLoading} organizationId={organizationId} diff --git a/site/src/pages/ManagementSettingsPage/Sidebar.tsx b/site/src/pages/ManagementSettingsPage/Sidebar.tsx index cc5fbb5d97e1c..fe34a6088a01b 100644 --- a/site/src/pages/ManagementSettingsPage/Sidebar.tsx +++ b/site/src/pages/ManagementSettingsPage/Sidebar.tsx @@ -9,6 +9,7 @@ import { Sidebar as BaseSidebar } from "components/Sidebar/Sidebar"; import { Stack } from "components/Stack/Stack"; import { UserAvatar } from "components/UserAvatar/UserAvatar"; import { type ClassName, useClassName } from "hooks/useClassName"; +import { USERS_LINK } from "modules/navigation"; import { useOrganizationSettings } from "./ManagementSettingsLayout"; export const Sidebar: FC = () => { @@ -77,7 +78,9 @@ const DeploymentSettingsNavigation: FC = () => { Observability - Users + + Users + )} diff --git a/site/src/pages/UsersPage/UsersLayout.tsx b/site/src/pages/UsersPage/UsersLayout.tsx index ac11e008e436d..12ab40d409e15 100644 --- a/site/src/pages/UsersPage/UsersLayout.tsx +++ b/site/src/pages/UsersPage/UsersLayout.tsx @@ -27,6 +27,8 @@ export const UsersLayout: FC = () => { const location = useLocation(); const activeTab = location.pathname.endsWith("groups") ? "groups" : "users"; + const isMultiOrg = experiments.includes("multi-organization"); + return ( <> @@ -59,7 +61,7 @@ export const UsersLayout: FC = () => { - {!experiments.includes("multi-organization") && ( + {!isMultiOrg && ( { const queryClient = useQueryClient(); const navigate = useNavigate(); - + const location = useLocation(); const searchParamsResult = useSearchParams(); - const { entitlements, organizationId } = useDashboard(); + const { entitlements, experiments, organizationId } = useDashboard(); const [searchParams] = searchParamsResult; + const isMultiOrg = experiments.includes("multi-organization"); const groupsByUserIdQuery = useQuery(groupsByUserId(organizationId)); const authMethodsQuery = useQuery(authMethods()); const { permissions, user: me } = useAuthenticated(); - const { updateUsers: canEditUsers, viewDeploymentValues } = permissions; + const { + createUser: canCreateUser, + updateUsers: canEditUsers, + viewDeploymentValues, + } = permissions; const rolesQuery = useQuery(roles()); const { data: deploymentValues } = useQuery({ ...deploymentConfig(), @@ -93,6 +103,13 @@ const UsersPage: FC = () => { authMethodsQuery.isLoading || groupsByUserIdQuery.isLoading; + if ( + experiments.includes("multi-organization") && + location.pathname !== "/deployment/users" + ) { + return ; + } + return ( <> @@ -147,6 +164,8 @@ const UsersPage: FC = () => { menus: { status: statusMenu }, }} usersQuery={usersQuery} + isMultiOrg={isMultiOrg} + canCreateUser={canCreateUser} /> = ({ @@ -55,9 +63,33 @@ export const UsersPageView: FC = ({ authMethods, groupsByUserId, usersQuery, + isMultiOrg, + canCreateUser, }) => { + const navigate = useNavigate(); + return ( <> + {isMultiOrg && ( + + {canCreateUser && ( + + )} + + } + > + Users + + )} + diff --git a/site/src/pages/UsersPage/UsersTable/UsersTable.tsx b/site/src/pages/UsersPage/UsersTable/UsersTable.tsx index c27de3e05588c..f8b8b825e2b87 100644 --- a/site/src/pages/UsersPage/UsersTable/UsersTable.tsx +++ b/site/src/pages/UsersPage/UsersTable/UsersTable.tsx @@ -69,7 +69,7 @@ export const UsersTable: FC = ({ - {Language.usernameLabel} + {Language.usernameLabel} @@ -78,15 +78,15 @@ export const UsersTable: FC = ({ - + {Language.groupsLabel} - {Language.loginTypeLabel} - {Language.statusLabel} + {Language.loginTypeLabel} + {Language.statusLabel} {/* 1% is a trick to make the table cell width fit the content */} {canEditUsers && } diff --git a/site/src/router.tsx b/site/src/router.tsx index 36525099574f9..c66a98b8a9a6e 100644 --- a/site/src/router.tsx +++ b/site/src/router.tsx @@ -407,6 +407,8 @@ export const router = createBrowserRouter( } /> + } /> + } /> }>