From 7d5d88ac2b4b1ed6e8841079054583a8a1cbf11f Mon Sep 17 00:00:00 2001
From: Piyush Gupta
Date: Tue, 25 Nov 2025 02:15:10 +0530
Subject: [PATCH 1/3] fix: minor bugs in project role access tree
---
.../AccessTree/utils/createFolderNode.ts | 21 ++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/frontend/src/components/permissions/AccessTree/utils/createFolderNode.ts b/frontend/src/components/permissions/AccessTree/utils/createFolderNode.ts
index a40398ba7..b05ea1c52 100644
--- a/frontend/src/components/permissions/AccessTree/utils/createFolderNode.ts
+++ b/frontend/src/components/permissions/AccessTree/utils/createFolderNode.ts
@@ -87,17 +87,24 @@ const shouldShowConditionalAccess = (
folderPath: string,
conditionalFields: string[]
): boolean => {
- return actionRuleMap.some((rule) => {
+ // Find all rules that apply to this environment/path
+ const applicableRules = actionRuleMap.filter((rule) => {
const ruleConditions = rule[action]?.conditions;
if (!ruleConditions) return false;
-
- // Check if any of the conditional fields are present
- const hasConditionalField = conditionalFields.some((field) => ruleConditions[field]);
- if (!hasConditionalField) return false;
-
- // Check if base conditions (environment and secretPath) apply
return doBaseConditionsApply(ruleConditions, environment, folderPath);
});
+
+ // If no rules apply, don't show conditional
+ if (applicableRules.length === 0) return false;
+
+ // Check if ALL applicable rules have conditional fields and if at least one rule applies without conditional fields, show full access
+ const allRulesHaveConditionalFields = applicableRules.every((rule) => {
+ const ruleConditions = rule[action]?.conditions;
+ if (!ruleConditions) return false;
+ return conditionalFields.some((field) => ruleConditions[field]);
+ });
+
+ return allRulesHaveConditionalFields;
};
const determineAccessLevel = (
From 38b0ba58574464c75294b2215a3a2123889d53cb Mon Sep 17 00:00:00 2001
From: Piyush Gupta
Date: Tue, 25 Nov 2025 03:17:39 +0530
Subject: [PATCH 2/3] fix: adds tooltip to env
---
.../OverviewPage/OverviewPage.tsx | 41 +++++++++++++++----
1 file changed, 33 insertions(+), 8 deletions(-)
diff --git a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx
index f3abbec97..6dcf14845 100644
--- a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx
+++ b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx
@@ -10,6 +10,8 @@ import {
faArrowRight,
faArrowRightToBracket,
faArrowUp,
+ faCheck,
+ faCopy,
faFilter,
faFingerprint,
faFolder,
@@ -79,6 +81,7 @@ import {
usePopUp,
useResetPageHelper,
useResizableHeaderHeight,
+ useTimedReset,
useToggle
} from "@app/hooks";
import {
@@ -194,6 +197,15 @@ export const OverviewPage = () => {
}
};
+ const [isCopied, , setIsCopied] = useTimedReset({
+ initialState: false
+ });
+
+ const copyToClipboard = (value: string) => {
+ navigator.clipboard.writeText(value);
+ setIsCopied(true);
+ };
+
const [filter, setFilter] = useState(DEFAULT_FILTER_STATE);
const [filterHistory, setFilterHistory] = useState<
Map
@@ -1324,18 +1336,31 @@ export const OverviewPage = () => {
>
{name}
- ) : (
- ""
- )
+
+ {collapseEnvironments ? (
+
{name}
+ ) : (
+ ""
+ )}
+
+
{slug}
+
copyToClipboard(slug)}
+ >
+
+
+
+
}
side="bottom"
- sideOffset={-1}
- align="end"
+ sideOffset={5}
+ align="center"
className="max-w-xl text-xs normal-case"
rootProps={{
- disableHoverableContent: true
+ disableHoverableContent: false
}}
>
Date: Tue, 25 Nov 2025 03:36:15 +0530
Subject: [PATCH 3/3] fix: review comment
---
.../secret-manager/OverviewPage/OverviewPage.tsx | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx
index 6dcf14845..ddc7e69ed 100644
--- a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx
+++ b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx
@@ -197,13 +197,13 @@ export const OverviewPage = () => {
}
};
- const [isCopied, , setIsCopied] = useTimedReset({
- initialState: false
+ const [copiedSlug, , setCopiedSlug] = useTimedReset({
+ initialState: ""
});
- const copyToClipboard = (value: string) => {
+ const copyToClipboard = (value: string, slug: string) => {
navigator.clipboard.writeText(value);
- setIsCopied(true);
+ setCopiedSlug(slug);
};
const [filter, setFilter] = useState(DEFAULT_FILTER_STATE);
@@ -1348,9 +1348,9 @@ export const OverviewPage = () => {
variant="plain"
colorSchema="secondary"
ariaLabel="Copy environment slug"
- onClick={() => copyToClipboard(slug)}
+ onClick={() => copyToClipboard(slug, slug)}
>
-
+
@@ -1362,6 +1362,7 @@ export const OverviewPage = () => {
rootProps={{
disableHoverableContent: false
}}
+ key={`tooltip-${name}-${index + 1}`}
>