From 3c03a3aec037972af651e04263fdff17dd98e29d Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Fri, 17 Jan 2025 19:46:28 -0500 Subject: [PATCH 1/4] fix: add groups to deployment settings (#16185) fixes #16182 Screenshot 2025-01-17 at 23 20 04 Screenshot 2025-01-17 at 23 20 12 Screenshot 2025-01-17 at 23 20 22 (cherry picked from commit fbc2a73bef3110709e95f495a39fd9298871cdc8) --- site/e2e/helpers.ts | 18 ++++--- site/src/modules/management/SidebarView.tsx | 3 ++ site/src/pages/GroupsPage/CreateGroupPage.tsx | 2 +- .../pages/GroupsPage/CreateGroupPageView.tsx | 2 +- site/src/pages/GroupsPage/GroupPage.tsx | 2 +- site/src/pages/GroupsPage/GroupsPageView.tsx | 4 +- .../pages/GroupsPage/SettingsGroupPage.tsx | 4 +- site/src/pages/UsersPage/UsersLayout.tsx | 51 ++----------------- site/src/router.tsx | 17 +++++-- 9 files changed, 39 insertions(+), 64 deletions(-) diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index 8f69b90900538..2fc0112a9d222 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -232,13 +232,15 @@ export const createTemplate = async ( * random name. */ export const createGroup = async (page: Page): Promise => { - await page.goto("/groups/create", { waitUntil: "domcontentloaded" }); - await expectUrl(page).toHavePathName("/groups/create"); + await page.goto("/deployment/groups/create", { + waitUntil: "domcontentloaded", + }); + await expectUrl(page).toHavePathName("/deployment/groups/create"); const name = randomName(); await page.getByLabel("Name", { exact: true }).fill(name); - await page.getByTestId("form-submit").click(); - await expectUrl(page).toHavePathName(`/groups/${name}`); + await page.getByRole("button", { name: /save/i }).click(); + await expectUrl(page).toHavePathName(`/deployment/groups/${name}`); return name; }; @@ -468,10 +470,10 @@ export const waitUntilUrlIsNotResponding = async (url: string) => { // Allows users to more easily define properties they want for agents and resources! type RecursivePartial = { [P in keyof T]?: T[P] extends (infer U)[] - ? RecursivePartial[] - : T[P] extends object | undefined - ? RecursivePartial - : T[P]; + ? RecursivePartial[] + : T[P] extends object | undefined + ? RecursivePartial + : T[P]; }; interface EchoProvisionerResponses { diff --git a/site/src/modules/management/SidebarView.tsx b/site/src/modules/management/SidebarView.tsx index eabcac8f30ccc..1b4ba2d7b501e 100644 --- a/site/src/modules/management/SidebarView.tsx +++ b/site/src/modules/management/SidebarView.tsx @@ -147,6 +147,9 @@ const DeploymentSettingsNavigation: FC = ({ {permissions.viewAllUsers && ( Users )} + {permissions.viewAnyGroup && ( + Groups + )} {permissions.viewNotificationTemplate && ( diff --git a/site/src/pages/GroupsPage/CreateGroupPage.tsx b/site/src/pages/GroupsPage/CreateGroupPage.tsx index 26c5aef6d53da..92f480d8ab959 100644 --- a/site/src/pages/GroupsPage/CreateGroupPage.tsx +++ b/site/src/pages/GroupsPage/CreateGroupPage.tsx @@ -19,7 +19,7 @@ export const CreateGroupPage: FC = () => { { const newGroup = await createGroupMutation.mutateAsync(data); - navigate(`/groups/${newGroup.name}`); + navigate(`/deployment/groups/${newGroup.name}`); }} error={createGroupMutation.error} isLoading={createGroupMutation.isLoading} diff --git a/site/src/pages/GroupsPage/CreateGroupPageView.tsx b/site/src/pages/GroupsPage/CreateGroupPageView.tsx index 389dc6e0e89cb..e14767e257f2c 100644 --- a/site/src/pages/GroupsPage/CreateGroupPageView.tsx +++ b/site/src/pages/GroupsPage/CreateGroupPageView.tsx @@ -44,7 +44,7 @@ export const CreateGroupPageView: FC = ({ initialTouched, }); const getFieldHelpers = getFormHelpers(form, error); - const onCancel = () => navigate("/groups"); + const onCancel = () => navigate("/deployment/groups"); return ( diff --git a/site/src/pages/GroupsPage/GroupPage.tsx b/site/src/pages/GroupsPage/GroupPage.tsx index 1244118aa3840..0fc4a8122b151 100644 --- a/site/src/pages/GroupsPage/GroupPage.tsx +++ b/site/src/pages/GroupsPage/GroupPage.tsx @@ -211,7 +211,7 @@ export const GroupPage: FC = () => { try { await deleteGroupMutation.mutateAsync(groupId); displaySuccess("Group deleted successfully."); - navigate("/groups"); + navigate("/deployment/groups"); } catch (error) { displayError(getErrorMessage(error, "Failed to delete group.")); } diff --git a/site/src/pages/GroupsPage/GroupsPageView.tsx b/site/src/pages/GroupsPage/GroupsPageView.tsx index 8c9f1f8e46601..17d15a7f44683 100644 --- a/site/src/pages/GroupsPage/GroupsPageView.tsx +++ b/site/src/pages/GroupsPage/GroupsPageView.tsx @@ -81,7 +81,7 @@ export const GroupsPageView: FC = ({ canCreateGroup && ( - )} +
{permissions.createGroup && feats.template_rbac && ( )} - +
} > - Users + Groups
- {!showOrganizations && ( - - - - - Users - - - Groups - - - - - )} - }> diff --git a/site/src/router.tsx b/site/src/router.tsx index 1b23b55245e8f..6fc18130fc170 100644 --- a/site/src/router.tsx +++ b/site/src/router.tsx @@ -342,7 +342,7 @@ const templateRouter = () => { ); }; -const groupsRouter = () => { +const organizationGroupsRouter = () => { return ( } /> @@ -420,7 +420,7 @@ export const router = createBrowserRouter( } /> } /> - {groupsRouter()} + {organizationGroupsRouter()} } /> } /> @@ -473,7 +473,18 @@ export const router = createBrowserRouter( } /> } /> - {groupsRouter()} + + }> + } /> + + + } /> + } /> + } + /> + }> From b14b1e3e1ba77c27905627c475f75ec95907e6e8 Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Sat, 18 Jan 2025 01:59:29 +0000 Subject: [PATCH 2/4] fmt --- site/e2e/helpers.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index 2fc0112a9d222..4a2e86abf70b4 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -470,10 +470,10 @@ export const waitUntilUrlIsNotResponding = async (url: string) => { // Allows users to more easily define properties they want for agents and resources! type RecursivePartial = { [P in keyof T]?: T[P] extends (infer U)[] - ? RecursivePartial[] - : T[P] extends object | undefined - ? RecursivePartial - : T[P]; + ? RecursivePartial[] + : T[P] extends object | undefined + ? RecursivePartial + : T[P]; }; interface EchoProvisionerResponses { From 6df14a6127be7d02bd47a9d80fdd2c8e217301d0 Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Sat, 18 Jan 2025 02:14:18 +0000 Subject: [PATCH 3/4] fix create group test --- site/e2e/helpers.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index 4a2e86abf70b4..16ec81a94f863 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -239,7 +239,7 @@ export const createGroup = async (page: Page): Promise => { const name = randomName(); await page.getByLabel("Name", { exact: true }).fill(name); - await page.getByRole("button", { name: /save/i }).click(); + await page.getByTestId("form-submit").click(); await expectUrl(page).toHavePathName(`/deployment/groups/${name}`); return name; }; @@ -470,10 +470,10 @@ export const waitUntilUrlIsNotResponding = async (url: string) => { // Allows users to more easily define properties they want for agents and resources! type RecursivePartial = { [P in keyof T]?: T[P] extends (infer U)[] - ? RecursivePartial[] - : T[P] extends object | undefined - ? RecursivePartial - : T[P]; + ? RecursivePartial[] + : T[P] extends object | undefined + ? RecursivePartial + : T[P]; }; interface EchoProvisionerResponses { From 465912b98996c180151aa291f4face8ffbafc76e Mon Sep 17 00:00:00 2001 From: Ben Potter Date: Sat, 18 Jan 2025 02:14:54 +0000 Subject: [PATCH 4/4] fmt --- site/e2e/helpers.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index 16ec81a94f863..b79dd07e9de36 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -470,10 +470,10 @@ export const waitUntilUrlIsNotResponding = async (url: string) => { // Allows users to more easily define properties they want for agents and resources! type RecursivePartial = { [P in keyof T]?: T[P] extends (infer U)[] - ? RecursivePartial[] - : T[P] extends object | undefined - ? RecursivePartial - : T[P]; + ? RecursivePartial[] + : T[P] extends object | undefined + ? RecursivePartial + : T[P]; }; interface EchoProvisionerResponses { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy