Add referenced secret delete warning to batch delete modal inside env

This commit is contained in:
carlosmonastyrski
2025-04-11 10:12:41 -03:00
parent aeaa5babab
commit aec131543f
4 changed files with 25 additions and 5 deletions
@@ -440,6 +440,7 @@ const Page = () => {
onToggleRowType={handleToggleRowType} onToggleRowType={handleToggleRowType}
onClickRollbackMode={() => handlePopUpToggle("snapshots", true)} onClickRollbackMode={() => handlePopUpToggle("snapshots", true)}
protectedBranchPolicyName={boardPolicy?.name} protectedBranchPolicyName={boardPolicy?.name}
importedBy={importedBy}
/> />
<div className="thin-scrollbar mt-3 overflow-y-auto overflow-x-hidden rounded-md rounded-b-none bg-mineshaft-800 text-left text-sm text-bunker-300"> <div className="thin-scrollbar mt-3 overflow-y-auto overflow-x-hidden rounded-md rounded-b-none bg-mineshaft-800 text-left text-sm text-bunker-300">
<div className="flex flex-col" id="dashboard"> <div className="flex flex-col" id="dashboard">
@@ -86,6 +86,7 @@ import { CreateDynamicSecretForm } from "./CreateDynamicSecretForm";
import { CreateSecretImportForm } from "./CreateSecretImportForm"; import { CreateSecretImportForm } from "./CreateSecretImportForm";
import { FolderForm } from "./FolderForm"; import { FolderForm } from "./FolderForm";
import { MoveSecretsModal } from "./MoveSecretsModal"; import { MoveSecretsModal } from "./MoveSecretsModal";
import { CollapsibleSecretImports } from "../SecretListView/CollapsibleSecretImports";
type TParsedEnv = Record<string, { value: string; comments: string[]; secretPath?: string }>; type TParsedEnv = Record<string, { value: string; comments: string[]; secretPath?: string }>;
type TParsedFolderEnv = Record< type TParsedFolderEnv = Record<
@@ -112,6 +113,14 @@ type Props = {
onVisibilityToggle: () => void; onVisibilityToggle: () => void;
onToggleRowType: (rowType: RowType) => void; onToggleRowType: (rowType: RowType) => void;
onClickRollbackMode: () => void; onClickRollbackMode: () => void;
importedBy?: {
environment: { name: string; slug: string };
folders: {
name: string;
secrets?: { secretId: string; referencedSecretKey: string }[];
isImported: boolean;
}[];
}[];
}; };
export const ActionBar = ({ export const ActionBar = ({
@@ -129,7 +138,8 @@ export const ActionBar = ({
onVisibilityToggle, onVisibilityToggle,
onClickRollbackMode, onClickRollbackMode,
onToggleRowType, onToggleRowType,
protectedBranchPolicyName protectedBranchPolicyName,
importedBy
}: Props) => { }: Props) => {
const { handlePopUpOpen, handlePopUpToggle, handlePopUpClose, popUp } = usePopUp([ const { handlePopUpOpen, handlePopUpToggle, handlePopUpClose, popUp } = usePopUp([
"addFolder", "addFolder",
@@ -1059,6 +1069,15 @@ export const ActionBar = ({
title="Do you want to delete these secrets?" title="Do you want to delete these secrets?"
onChange={(isOpen) => handlePopUpToggle("bulkDeleteSecrets", isOpen)} onChange={(isOpen) => handlePopUpToggle("bulkDeleteSecrets", isOpen)}
onDeleteApproved={handleSecretBulkDelete} onDeleteApproved={handleSecretBulkDelete}
formContent={
importedBy &&
importedBy.length > 0 && (
<CollapsibleSecretImports
importedBy={importedBy}
secretsToDelete={Object.values(selectedSecrets).map((s) => s.key)}
/>
)
}
/> />
<MoveSecretsModal <MoveSecretsModal
popUp={popUp} popUp={popUp}
@@ -28,12 +28,12 @@ interface CollapsibleSecretImportsProps {
isImported: boolean; isImported: boolean;
}[]; }[];
}[]; }[];
secretToDelete: string; secretsToDelete: string[];
} }
export const CollapsibleSecretImports: React.FC<CollapsibleSecretImportsProps> = ({ export const CollapsibleSecretImports: React.FC<CollapsibleSecretImportsProps> = ({
importedBy = [], importedBy = [],
secretToDelete secretsToDelete
}) => { }) => {
const { currentWorkspace } = useWorkspace(); const { currentWorkspace } = useWorkspace();
@@ -83,7 +83,7 @@ export const CollapsibleSecretImports: React.FC<CollapsibleSecretImportsProps> =
if (folder.secrets?.length) { if (folder.secrets?.length) {
folder.secrets.forEach(({ secretId: secret, referencedSecretKey }) => { folder.secrets.forEach(({ secretId: secret, referencedSecretKey }) => {
const secretPath = folder.name === "/" ? `/${secret}` : `${folder.name}/${secret}`; const secretPath = folder.name === "/" ? `/${secret}` : `${folder.name}/${secret}`;
if (referencedSecretKey === secretToDelete) { if (secretsToDelete.includes(referencedSecretKey)) {
items.push({ items.push({
type: ItemType.Secret, type: ItemType.Secret,
path: secretPath, path: secretPath,
@@ -372,7 +372,7 @@ export const SecretListView = ({
importedBy.length > 0 && ( importedBy.length > 0 && (
<CollapsibleSecretImports <CollapsibleSecretImports
importedBy={importedBy} importedBy={importedBy}
secretToDelete={(popUp.deleteSecret?.data as SecretV3RawSanitized)?.key} secretsToDelete={[(popUp.deleteSecret?.data as SecretV3RawSanitized)?.key || ""]}
/> />
) )
} }