From 64cd858f9cf01ac8f62689081d03166322dc73d0 Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Wed, 17 Sep 2025 16:49:08 -0700 Subject: [PATCH 1/2] fix: add project slug param for moving secrets on dashboard overview and environment view --- frontend/src/hooks/api/secrets/mutations.tsx | 4 ++-- frontend/src/hooks/api/secrets/types.ts | 1 + .../components/MoveSecretsDialog/MoveSecretsDialog.tsx | 2 ++ .../SecretDashboardPage/components/ActionBar/ActionBar.tsx | 6 ++---- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/frontend/src/hooks/api/secrets/mutations.tsx b/frontend/src/hooks/api/secrets/mutations.tsx index de960cd04..5c1986b21 100644 --- a/frontend/src/hooks/api/secrets/mutations.tsx +++ b/frontend/src/hooks/api/secrets/mutations.tsx @@ -337,7 +337,7 @@ export const useMoveSecrets = ({ destinationSecretPath, secretIds, shouldOverwrite, - projectId + projectSlug }) => { const { data } = await apiRequest.post<{ isSourceUpdated: boolean; @@ -349,7 +349,7 @@ export const useMoveSecrets = ({ destinationSecretPath, secretIds, shouldOverwrite, - projectId + projectSlug }); return data; diff --git a/frontend/src/hooks/api/secrets/types.ts b/frontend/src/hooks/api/secrets/types.ts index 327d3659d..4b45d2d6a 100644 --- a/frontend/src/hooks/api/secrets/types.ts +++ b/frontend/src/hooks/api/secrets/types.ts @@ -228,6 +228,7 @@ export type TDeleteSecretBatchDTO = { export type TMoveSecretsDTO = { projectId: string; + projectSlug: string; sourceEnvironment: string; sourceSecretPath: string; destinationEnvironment: string; diff --git a/frontend/src/pages/secret-manager/OverviewPage/components/SelectionPanel/components/MoveSecretsDialog/MoveSecretsDialog.tsx b/frontend/src/pages/secret-manager/OverviewPage/components/SelectionPanel/components/MoveSecretsDialog/MoveSecretsDialog.tsx index 30ea57957..30d7bf676 100644 --- a/frontend/src/pages/secret-manager/OverviewPage/components/SelectionPanel/components/MoveSecretsDialog/MoveSecretsDialog.tsx +++ b/frontend/src/pages/secret-manager/OverviewPage/components/SelectionPanel/components/MoveSecretsDialog/MoveSecretsDialog.tsx @@ -66,6 +66,7 @@ const Content = ({ secrets, environments, projectId, + projectSlug, sourceSecretPath }: ContentProps) => { const [search, setSearch] = useState(sourceSecretPath); @@ -194,6 +195,7 @@ const Content = ({ destinationEnvironment: environment.slug, destinationSecretPath: value.secretPath, projectId, + projectSlug, secretIds: secretsToMove.map((sec) => sec.id) }); diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx index 226230c1a..2097fc650 100644 --- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx +++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx @@ -72,10 +72,7 @@ import { useMoveSecrets, useUpdateSecretBatch } from "@app/hooks/api"; -import { - dashboardKeys, - fetchDashboardProjectSecretsByKeys -} from "@app/hooks/api/dashboard/queries"; +import { dashboardKeys, fetchDashboardProjectSecretsByKeys } from "@app/hooks/api/dashboard/queries"; import { UsedBySecretSyncs } from "@app/hooks/api/dashboard/types"; import { secretApprovalRequestKeys } from "@app/hooks/api/secretApprovalRequest/queries"; import { PendingAction } from "@app/hooks/api/secretFolders/types"; @@ -349,6 +346,7 @@ export const ActionBar = ({ destinationEnvironment, destinationSecretPath, projectId, + projectSlug: currentProject.slug, secretIds: secretsToMove.map((sec) => sec.id) }); From 70372771229a10053b4d385235a68458cf4d6435 Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Wed, 17 Sep 2025 17:18:29 -0700 Subject: [PATCH 2/2] fix: prevent rotation secrets from select all bulk selection --- .../src/pages/secret-manager/OverviewPage/OverviewPage.tsx | 3 +++ .../secret-manager/SecretDashboardPage/SecretDashboardPage.tsx | 3 +++ 2 files changed, 6 insertions(+) diff --git a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx index ab9b332b0..d884f3b6a 100644 --- a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx +++ b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx @@ -731,6 +731,9 @@ export const OverviewPage = () => { userAvailableEnvs.forEach((env) => { secrets?.forEach((secret) => { + // bulk actions don't apply to rotation secrets (move/delete) + if (secret.isRotatedSecret) return; + if (allRowsSelectedOnPage.isChecked) { delete newChecks[EntryType.SECRET][secret.key]; } else { diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/SecretDashboardPage.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/SecretDashboardPage.tsx index c926450eb..72232058d 100644 --- a/frontend/src/pages/secret-manager/SecretDashboardPage/SecretDashboardPage.tsx +++ b/frontend/src/pages/secret-manager/SecretDashboardPage/SecretDashboardPage.tsx @@ -570,6 +570,9 @@ const Page = () => { const newChecks = { ...selectedSecrets }; secrets?.forEach((secret) => { + // bulk actions don't apply to rotation secrets (move/delete) + if (secret.isRotatedSecret) return; + if (allRowsSelectedOnPage.isChecked) { delete newChecks[secret.id]; } else {