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}`} >