fix: returns error on duplicate folder creation

This commit is contained in:
Piyush Gupta
2025-10-17 22:02:09 +05:30
parent bd18a61f35
commit 3ad79bc7ea
5 changed files with 97 additions and 30 deletions
@@ -86,6 +86,7 @@ import {
useCreateSecretV3,
useDeleteSecretV3,
useGetImportedSecretsAllEnvs,
useGetOrCreateFolder,
useGetWsTags,
useUpdateSecretV3
} from "@app/hooks/api";
@@ -367,6 +368,7 @@ export const OverviewPage = () => {
const { mutateAsync: updateSecretV3 } = useUpdateSecretV3();
const { mutateAsync: deleteSecretV3 } = useDeleteSecretV3();
const { mutateAsync: createFolder } = useCreateFolder();
const { mutateAsync: getOrCreateFolder } = useGetOrCreateFolder();
const { mutateAsync: updateFolderBatch } = useUpdateFolderBatch();
const { handlePopUpOpen, handlePopUpToggle, handlePopUpClose, popUp } = usePopUp([
@@ -384,16 +386,32 @@ export const OverviewPage = () => {
] as const);
const handleFolderCreate = async (folderName: string, description: string | null) => {
const promises = userAvailableEnvs.map((env) => {
const environment = env.slug;
return createFolder({
name: folderName,
path: secretPath,
environment,
projectId,
description
const promises = userAvailableEnvs
.map((env) => {
const environment = env.slug;
const isFolderPresent = isFolderPresentInEnv(folderName, environment);
if (isFolderPresent) {
return undefined;
}
return createFolder({
name: folderName,
path: secretPath,
environment,
projectId,
description
});
})
.filter((promise) => promise !== undefined);
if (promises.length === 0) {
handlePopUpClose("addFolder");
createNotification({
type: "info",
text: "Folder already exists in all environments"
});
});
return;
}
const results = await Promise.allSettled(promises);
const isFoldersAdded = results.some((result) => result.status === "fulfilled");
@@ -481,7 +499,7 @@ export const OverviewPage = () => {
})
);
if (folderName && parentPath && canCreateFolder) {
await createFolder({
await getOrCreateFolder({
projectId,
path: parentPath,
environment: env,
@@ -645,7 +663,7 @@ export const OverviewPage = () => {
})
);
if (folderName && parentPath && canCreateFolder) {
await createFolder({
await getOrCreateFolder({
projectId,
environment: slug,
path: parentPath,
@@ -25,7 +25,12 @@ import {
} from "@app/context";
import { ProjectPermissionSecretActions } from "@app/context/ProjectPermissionContext/types";
import { getKeyValue } from "@app/helpers/parseEnvVar";
import { useCreateFolder, useCreateSecretV3, useCreateWsTag, useGetWsTags } from "@app/hooks/api";
import {
useCreateSecretV3,
useCreateWsTag,
useGetOrCreateFolder,
useGetWsTags
} from "@app/hooks/api";
import { SecretType } from "@app/hooks/api/types";
const typeSchema = z
@@ -64,7 +69,7 @@ export const CreateSecretForm = ({ secretPath = "/", onClose }: Props) => {
const environments = currentProject?.environments || [];
const { mutateAsync: createSecretV3 } = useCreateSecretV3();
const { mutateAsync: createFolder } = useCreateFolder();
const { mutateAsync: getOrCreateFolder } = useGetOrCreateFolder();
const { data: projectTags, isPending: isTagsLoading } = useGetWsTags(
canReadTags ? projectId : ""
);
@@ -92,7 +97,7 @@ export const CreateSecretForm = ({ secretPath = "/", onClose }: Props) => {
);
if (folderName && parentPath && canCreateFolder) {
await createFolder({
await getOrCreateFolder({
projectId,
path: parentPath,
environment,