diff --git a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx
index a611eb030..12e0100b6 100644
--- a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx
+++ b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx
@@ -866,7 +866,7 @@ export const OverviewPage = () => {
}
onClick={() => {
- if (subscription && subscription.dynamicSecret) {
+ if (subscription?.dynamicSecret) {
handlePopUpOpen("addDynamicSecret");
return;
}
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 28c58ec5f..0cf131ba8 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/ActionBar.tsx
@@ -655,7 +655,7 @@ export const ActionBar = ({
isOpen={popUp.addDynamicSecret.isOpen}
onToggle={(isOpen) => handlePopUpToggle("addDynamicSecret", isOpen)}
projectSlug={projectSlug}
- environments={[{ slug: environment, name: "not-used", id: "not-used" }]}
+ environments={[{ slug: environment, name: environment, id: "not-used" }]}
secretPath={secretPath}
/>
{
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
+ let hasErrors = false;
const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
@@ -117,15 +118,18 @@ export const AwsElastiCacheInputForm = ({
projectSlug,
environmentSlug: env.slug
});
- onCompleted();
} catch {
+ hasErrors = true;
createNotification({
type: "error",
- text: "Failed to create dynamic secret"
+ text: `Failed to create dynamic secret in environment ${env.name}`
});
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
return (
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/AwsIamInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/AwsIamInputForm.tsx
index f0590a4e1..7b9996075 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/AwsIamInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/AwsIamInputForm.tsx
@@ -83,7 +83,8 @@ export const AwsIamInputForm = ({
}: TForm) => {
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
- const promises = selectedEnvs.map(async (environment) => {
+ let hasErrors = false;
+ const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
provider: { type: DynamicSecretProviders.AwsIam, inputs: provider },
@@ -92,17 +93,20 @@ export const AwsIamInputForm = ({
path: secretPath,
defaultTTL,
projectSlug,
- environmentSlug: environment.slug
+ environmentSlug: env.slug
});
- onCompleted();
} catch {
+ hasErrors = true;
createNotification({
type: "error",
- text: "Failed to create dynamic secret"
+ text: `Failed to create dynamic secret in environment ${env.name}`
});
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
return (
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/AzureEntraIdInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/AzureEntraIdInputForm.tsx
index 4ab20c064..80ce5b361 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/AzureEntraIdInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/AzureEntraIdInputForm.tsx
@@ -116,8 +116,9 @@ export const AzureEntraIdInputForm = ({
environments: selectedEnvs
}: TForm) => {
// wait till previous request is finished
- const promises = selectedEnvs.map(async (environment) => {
- if (createDynamicSecret.isPending) return;
+ if (createDynamicSecret.isPending) return;
+ let hasErrors = false;
+ const promises = selectedEnvs.map(async (env) => {
try {
selectedUsers.map(async (user: { id: string; name: string; email: string }) => {
await createDynamicSecret.mutateAsync({
@@ -136,18 +137,21 @@ export const AzureEntraIdInputForm = ({
path: secretPath,
defaultTTL,
projectSlug,
- environmentSlug: environment.slug
+ environmentSlug: env.slug
});
});
- onCompleted();
} catch {
createNotification({
type: "error",
- text: "Failed to create dynamic secret"
+ text: `Failed to create dynamic secret in environment ${env.name}`
});
+ hasErrors = true;
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
return (
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/CassandraInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/CassandraInputForm.tsx
index f86a4728b..96c7958ee 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/CassandraInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/CassandraInputForm.tsx
@@ -106,7 +106,8 @@ export const CassandraInputForm = ({
}: TForm) => {
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
- const promises = selectedEnvs.map(async (environment) => {
+ let hasErrors = false;
+ const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
provider: { type: DynamicSecretProviders.Cassandra, inputs: provider },
@@ -115,17 +116,20 @@ export const CassandraInputForm = ({
path: secretPath,
defaultTTL,
projectSlug,
- environmentSlug: environment.slug
+ environmentSlug: env.slug
});
- onCompleted();
} catch {
createNotification({
type: "error",
- text: "Failed to create dynamic secret"
+ text: `Failed to create dynamic secret in environment ${env.name}`
});
+ hasErrors = true;
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
return (
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/ElasticSearchInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/ElasticSearchInputForm.tsx
index 828f98110..fbdd7ec75 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/ElasticSearchInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/ElasticSearchInputForm.tsx
@@ -126,7 +126,8 @@ export const ElasticSearchInputForm = ({
}: TForm) => {
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
- const promises = selectedEnvs.map(async (environment) => {
+ let hasErrors = false;
+ const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
provider: { type: DynamicSecretProviders.ElasticSearch, inputs: provider },
@@ -135,17 +136,20 @@ export const ElasticSearchInputForm = ({
path: secretPath,
defaultTTL,
projectSlug,
- environmentSlug: environment.slug
+ environmentSlug: env.slug
});
- onCompleted();
} catch {
createNotification({
type: "error",
- text: "Failed to create dynamic secret"
+ text: `Failed to create dynamic secret in environment ${env.name}`
});
+ hasErrors = true;
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
const selectedAuthType = watch("provider.auth.type");
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/LdapInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/LdapInputForm.tsx
index 361067d1b..88a9a41b6 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/LdapInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/LdapInputForm.tsx
@@ -135,7 +135,8 @@ export const LdapInputForm = ({
}: TForm) => {
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
- const promises = selectedEnvs.map(async (environment) => {
+ let hasErrors = false;
+ const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
provider: { type: DynamicSecretProviders.Ldap, inputs: provider },
@@ -144,17 +145,20 @@ export const LdapInputForm = ({
path: secretPath,
defaultTTL,
projectSlug,
- environmentSlug: environment.slug
+ environmentSlug: env.slug
});
- onCompleted();
} catch {
createNotification({
type: "error",
- text: "Failed to create dynamic secret"
+ text: `Failed to create dynamic secret in environment ${env.name}`
});
+ hasErrors = true;
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
return (
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/MongoAtlasInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/MongoAtlasInputForm.tsx
index a6725b652..e015f7f99 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/MongoAtlasInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/MongoAtlasInputForm.tsx
@@ -137,7 +137,8 @@ export const MongoAtlasInputForm = ({
}: TForm) => {
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
- const promises = selectedEnvs.map(async (environment) => {
+ let hasErrors = false;
+ const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
provider: { type: DynamicSecretProviders.MongoAtlas, inputs: provider },
@@ -146,17 +147,20 @@ export const MongoAtlasInputForm = ({
path: secretPath,
defaultTTL,
projectSlug,
- environmentSlug: environment.slug
+ environmentSlug: env.slug
});
- onCompleted();
} catch {
createNotification({
type: "error",
- text: "Failed to create dynamic secret"
+ text: `Failed to create dynamic secret in environment ${env.name}`
});
+ hasErrors = true;
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
return (
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/MongoDBInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/MongoDBInputForm.tsx
index 0a28a6913..729c6934d 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/MongoDBInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/MongoDBInputForm.tsx
@@ -107,7 +107,8 @@ export const MongoDBDatabaseInputForm = ({
}: TForm) => {
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
- const promises = selectedEnvs.map(async (environment) => {
+ let hasErrors = false;
+ const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
provider: {
@@ -123,17 +124,20 @@ export const MongoDBDatabaseInputForm = ({
path: secretPath,
defaultTTL,
projectSlug,
- environmentSlug: environment.slug
+ environmentSlug: env.slug
});
- onCompleted();
} catch {
createNotification({
type: "error",
- text: "Failed to create dynamic secret"
+ text: `Failed to create dynamic secret in environment ${env.name}`
});
+ hasErrors = true;
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
return (
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/RabbitMqInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/RabbitMqInputForm.tsx
index 0a6b84d41..7d8265662 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/RabbitMqInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/RabbitMqInputForm.tsx
@@ -115,7 +115,8 @@ export const RabbitMqInputForm = ({
}: TForm) => {
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
- const promises = selectedEnvs.map(async (environment) => {
+ let hasErrors = false;
+ const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
provider: { type: DynamicSecretProviders.RabbitMq, inputs: provider },
@@ -124,17 +125,20 @@ export const RabbitMqInputForm = ({
path: secretPath,
defaultTTL,
projectSlug,
- environmentSlug: environment.slug
+ environmentSlug: env.slug
});
- onCompleted();
} catch {
createNotification({
type: "error",
- text: "Failed to create dynamic secret"
+ text: `Failed to create dynamic secret in environment ${env.name}`
});
+ hasErrors = true;
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
const selectedTags = watch("provider.tags");
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/RedisInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/RedisInputForm.tsx
index 35f165056..f19095cb1 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/RedisInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/RedisInputForm.tsx
@@ -100,7 +100,8 @@ export const RedisInputForm = ({
}: TForm) => {
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
- const promises = selectedEnvs.map(async (environment) => {
+ let hasErrors = false;
+ const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
provider: { type: DynamicSecretProviders.Redis, inputs: provider },
@@ -109,17 +110,20 @@ export const RedisInputForm = ({
path: secretPath,
defaultTTL,
projectSlug,
- environmentSlug: environment.slug
+ environmentSlug: env.slug
});
- onCompleted();
} catch {
createNotification({
type: "error",
- text: "Failed to create dynamic secret"
+ text: `Failed to create dynamic secret in environment ${env.name}`
});
+ hasErrors = true;
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
return (
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SapAseInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SapAseInputForm.tsx
index de32565da..1fd2f63c0 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SapAseInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SapAseInputForm.tsx
@@ -101,7 +101,8 @@ sp_droplogin '{{username}}';`
}: TForm) => {
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
- const promises = selectedEnvs.map(async (environment) => {
+ let hasErrors = false;
+ const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
provider: { type: DynamicSecretProviders.SapAse, inputs: provider },
@@ -110,17 +111,20 @@ sp_droplogin '{{username}}';`
path: secretPath,
defaultTTL,
projectSlug,
- environmentSlug: environment.slug
+ environmentSlug: env.slug
});
- onCompleted();
} catch {
createNotification({
type: "error",
- text: "Failed to create dynamic secret"
+ text: `Failed to create dynamic secret in environment ${env.name}`
});
+ hasErrors = true;
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
return (
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SapHanaInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SapHanaInputForm.tsx
index d31464665..ab86c67a2 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SapHanaInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SapHanaInputForm.tsx
@@ -101,7 +101,8 @@ DROP USER {{username}};`,
}: TForm) => {
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
- const promises = selectedEnvs.map(async (environment) => {
+ let hasErrors = false;
+ const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
provider: { type: DynamicSecretProviders.SapHana, inputs: provider },
@@ -110,17 +111,20 @@ DROP USER {{username}};`,
path: secretPath,
defaultTTL,
projectSlug,
- environmentSlug: environment.slug
+ environmentSlug: env.slug
});
- onCompleted();
} catch {
createNotification({
type: "error",
- text: "Failed to create dynamic secret"
+ text: `Failed to create dynamic secret in environment ${env.name}`
});
+ hasErrors = true;
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
return (
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SnowflakeInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SnowflakeInputForm.tsx
index c5077f2ad..7c12e23f6 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SnowflakeInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SnowflakeInputForm.tsx
@@ -104,7 +104,8 @@ export const SnowflakeInputForm = ({
}: TForm) => {
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
- const promises = selectedEnvs.map(async (environment) => {
+ let hasErrors = false;
+ const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
provider: { type: DynamicSecretProviders.Snowflake, inputs: provider },
@@ -113,17 +114,20 @@ export const SnowflakeInputForm = ({
path: secretPath,
defaultTTL,
projectSlug,
- environmentSlug: environment.slug
+ environmentSlug: env.slug
});
- onCompleted();
} catch (err) {
createNotification({
type: "error",
text: err instanceof Error ? err.message : "Failed to create dynamic secret"
});
+ hasErrors = true;
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
return (
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SqlDatabaseInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SqlDatabaseInputForm.tsx
index 416d9c35b..9632f4063 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SqlDatabaseInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/SqlDatabaseInputForm.tsx
@@ -194,6 +194,7 @@ export const SqlDatabaseInputForm = ({
}: TForm) => {
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
+ let hasErrors = false;
const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
@@ -205,15 +206,18 @@ export const SqlDatabaseInputForm = ({
projectSlug,
environmentSlug: env.slug
});
- onCompleted();
} catch {
createNotification({
type: "error",
- text: "Failed to create dynamic secret"
+ text: `Failed to create dynamic secret for environment ${env.name}`
});
+ hasErrors = true;
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
const handleDatabaseChange = (type: SqlProviders) => {
diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/TotpInputForm.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/TotpInputForm.tsx
index 4ff83a741..a774c6c78 100644
--- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/TotpInputForm.tsx
+++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/ActionBar/CreateDynamicSecretForm/TotpInputForm.tsx
@@ -107,7 +107,8 @@ export const TotpInputForm = ({
}: TForm) => {
// wait till previous request is finished
if (createDynamicSecret.isPending) return;
- const promises = selectedEnvs.map(async (environment) => {
+ let hasErrors = false;
+ const promises = selectedEnvs.map(async (env) => {
try {
await createDynamicSecret.mutateAsync({
provider: { type: DynamicSecretProviders.Totp, inputs: provider },
@@ -116,17 +117,20 @@ export const TotpInputForm = ({
path: secretPath,
defaultTTL: "1m",
projectSlug,
- environmentSlug: environment.slug
+ environmentSlug: env.slug
});
- onCompleted();
} catch (err) {
createNotification({
type: "error",
text: err instanceof Error ? err.message : "Failed to create dynamic secret"
});
+ hasErrors = true;
}
});
await Promise.all(promises);
+ if (hasErrors) {
+ onCompleted();
+ }
};
return (