From 92cebb2d72226a22e688853461e6201a908adfd2 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Wed, 24 Jul 2024 20:46:44 +0000 Subject: [PATCH 1/6] embed users page in management settings --- .../pages/ManagementSettingsPage/Sidebar.tsx | 5 ++++- site/src/pages/UsersPage/UsersPage.tsx | 19 ++++++++++++++++--- .../pages/UsersPage/UsersTable/UsersTable.tsx | 8 ++++---- site/src/router.tsx | 1 + 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/site/src/pages/ManagementSettingsPage/Sidebar.tsx b/site/src/pages/ManagementSettingsPage/Sidebar.tsx index cc5fbb5d97e1c..865693b335dee 100644 --- a/site/src/pages/ManagementSettingsPage/Sidebar.tsx +++ b/site/src/pages/ManagementSettingsPage/Sidebar.tsx @@ -10,6 +10,7 @@ import { Stack } from "components/Stack/Stack"; import { UserAvatar } from "components/UserAvatar/UserAvatar"; import { type ClassName, useClassName } from "hooks/useClassName"; import { useOrganizationSettings } from "./ManagementSettingsLayout"; +import { USERS_LINK } from "modules/navigation"; export const Sidebar: FC = () => { const { currentOrganizationId, organizations } = useOrganizationSettings(); @@ -77,7 +78,9 @@ const DeploymentSettingsNavigation: FC = () => { Observability - Users + + Users + )} diff --git a/site/src/pages/UsersPage/UsersPage.tsx b/site/src/pages/UsersPage/UsersPage.tsx index bdc6b31bc5d6f..d4a531831fafd 100644 --- a/site/src/pages/UsersPage/UsersPage.tsx +++ b/site/src/pages/UsersPage/UsersPage.tsx @@ -1,7 +1,12 @@ import { type FC, useState } from "react"; import { Helmet } from "react-helmet-async"; import { useMutation, useQuery, useQueryClient } from "react-query"; -import { useSearchParams, useNavigate } from "react-router-dom"; +import { + useSearchParams, + useNavigate, + Navigate, + useLocation, +} from "react-router-dom"; import { getErrorMessage } from "api/errors"; import { deploymentConfig } from "api/queries/deployment"; import { groupsByUserId } from "api/queries/groups"; @@ -33,9 +38,9 @@ import { UsersPageView } from "./UsersPageView"; const UsersPage: FC = () => { 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 groupsByUserIdQuery = useQuery(groupsByUserId(organizationId)); @@ -93,6 +98,14 @@ const UsersPage: FC = () => { authMethodsQuery.isLoading || groupsByUserIdQuery.isLoading; + if ( + experiments.includes("multi-organization") && + location.pathname !== "/deployment/users" + ) { + console.log(location.search); + return ; + } + return ( <> 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..f97c2eda67ffc 100644 --- a/site/src/router.tsx +++ b/site/src/router.tsx @@ -407,6 +407,7 @@ export const router = createBrowserRouter( } /> + } /> }> From f02441efd95685c3b067c21c6085c25c73b6f490 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Wed, 24 Jul 2024 21:02:51 +0000 Subject: [PATCH 2/6] =?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/ManagementSettingsPage/Sidebar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/pages/ManagementSettingsPage/Sidebar.tsx b/site/src/pages/ManagementSettingsPage/Sidebar.tsx index 865693b335dee..fe34a6088a01b 100644 --- a/site/src/pages/ManagementSettingsPage/Sidebar.tsx +++ b/site/src/pages/ManagementSettingsPage/Sidebar.tsx @@ -9,8 +9,8 @@ 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 { useOrganizationSettings } from "./ManagementSettingsLayout"; import { USERS_LINK } from "modules/navigation"; +import { useOrganizationSettings } from "./ManagementSettingsLayout"; export const Sidebar: FC = () => { const { currentOrganizationId, organizations } = useOrganizationSettings(); From 053b7479cd490523c4a5fa91fc549dbdaa76926a Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Wed, 24 Jul 2024 21:16:47 +0000 Subject: [PATCH 3/6] oof --- site/src/pages/UsersPage/UsersPage.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/site/src/pages/UsersPage/UsersPage.tsx b/site/src/pages/UsersPage/UsersPage.tsx index d4a531831fafd..ea311bc600e1a 100644 --- a/site/src/pages/UsersPage/UsersPage.tsx +++ b/site/src/pages/UsersPage/UsersPage.tsx @@ -102,7 +102,6 @@ const UsersPage: FC = () => { experiments.includes("multi-organization") && location.pathname !== "/deployment/users" ) { - console.log(location.search); return ; } From 267c54c7cf878827ad18bd4af4ff561b5ec1393b Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Wed, 24 Jul 2024 22:11:35 +0000 Subject: [PATCH 4/6] add user button is important --- site/src/pages/UsersPage/UsersLayout.tsx | 4 ++- site/src/pages/UsersPage/UsersPageView.tsx | 33 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) 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 && ( = ({ groupsByUserId, usersQuery, }) => { + const { experiments } = useDashboard(); + const { permissions } = useAuthenticated(); + const navigate = useNavigate(); + const { createUser: canCreateUser } = permissions; + + const isMultiOrg = experiments.includes("multi-organization"); + return ( <> + {isMultiOrg && ( + + {canCreateUser && ( + + )} + + } + > + Users + + )} + From ca0f5c22a45d6a0ffcd5eab89700f313a30fbbf2 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Wed, 24 Jul 2024 22:28:05 +0000 Subject: [PATCH 5/6] storybook friendly --- site/src/pages/UsersPage/UsersPage.tsx | 9 ++++++++- site/src/pages/UsersPage/UsersPageView.tsx | 13 ++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/site/src/pages/UsersPage/UsersPage.tsx b/site/src/pages/UsersPage/UsersPage.tsx index ea311bc600e1a..24880b94d80e3 100644 --- a/site/src/pages/UsersPage/UsersPage.tsx +++ b/site/src/pages/UsersPage/UsersPage.tsx @@ -42,12 +42,17 @@ const UsersPage: FC = () => { const searchParamsResult = useSearchParams(); 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(), @@ -159,6 +164,8 @@ const UsersPage: FC = () => { menus: { status: statusMenu }, }} usersQuery={usersQuery} + isMultiOrg={isMultiOrg} + canCreateUser={canCreateUser} /> = ({ @@ -61,13 +63,10 @@ export const UsersPageView: FC = ({ authMethods, groupsByUserId, usersQuery, + isMultiOrg, + canCreateUser, }) => { - const { experiments } = useDashboard(); - const { permissions } = useAuthenticated(); const navigate = useNavigate(); - const { createUser: canCreateUser } = permissions; - - const isMultiOrg = experiments.includes("multi-organization"); return ( <> From 1179e5102dd83dc039e4d35c77adbafabd73eb94 Mon Sep 17 00:00:00 2001 From: McKayla Washburn Date: Wed, 24 Jul 2024 22:34:11 +0000 Subject: [PATCH 6/6] fix navigation --- site/src/pages/CreateUserPage/CreateUserPage.tsx | 4 ++-- site/src/pages/UsersPage/UsersPageView.tsx | 2 +- site/src/router.tsx | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) 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/UsersPage/UsersPageView.tsx b/site/src/pages/UsersPage/UsersPageView.tsx index 873ba672cb586..ab6d04edf987d 100644 --- a/site/src/pages/UsersPage/UsersPageView.tsx +++ b/site/src/pages/UsersPage/UsersPageView.tsx @@ -77,7 +77,7 @@ export const UsersPageView: FC = ({ <> {canCreateUser && (