diff --git a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx index f34c8695e..51c86d202 100644 --- a/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx +++ b/frontend/src/pages/secret-manager/OverviewPage/OverviewPage.tsx @@ -6,6 +6,9 @@ import { faCheckCircle } from "@fortawesome/free-regular-svg-icons"; import { faAngleDown, faArrowDown, + faArrowLeft, + faArrowRight, + faArrowRightToBracket, faArrowUp, faFileImport, faFingerprint, @@ -69,7 +72,7 @@ import { PreferenceKey, setUserTablePreference } from "@app/helpers/userTablePreferences"; -import { useDebounce, usePagination, usePopUp, useResetPageHelper } from "@app/hooks"; +import { useDebounce, usePagination, usePopUp, useResetPageHelper, useToggle } from "@app/hooks"; import { useCreateFolder, useCreateSecretV3, @@ -164,6 +167,18 @@ export const OverviewPage = () => { const [debouncedSearchFilter, setDebouncedSearchFilter] = useDebounce(searchFilter); const secretPath = (routerSearch?.secretPath as string) || "/"; const { subscription } = useSubscription(); + const [collapseEnvironments, setCollapseEnvironments] = useToggle( + Boolean(localStorage.getItem("overview-collapse-environments")) + ); + + const handleToggleNarrowHeader = () => { + setCollapseEnvironments.toggle(); + if (collapseEnvironments) { + localStorage.removeItem("overview-collapse-environments"); + } else { + localStorage.setItem("overview-collapse-environments", "true"); + } + }; const [filter, setFilter] = useState(DEFAULT_FILTER_STATE); const [filterHistory, setFilterHistory] = useState< @@ -1173,47 +1188,81 @@ export const OverviewPage = () => { className="thin-scrollbar rounded-b-none" > - - - + + {visibleEnvs?.map(({ name, slug }, index) => { @@ -1223,28 +1272,66 @@ export const OverviewPage = () => { return ( ); })} @@ -1409,16 +1496,40 @@ export const OverviewPage = () => { /> {visibleEnvs?.map(({ name, slug }) => ( - ))} diff --git a/frontend/src/pages/secret-manager/OverviewPage/components/SecretOverviewDynamicSecretRow/SecretOverviewDynamicSecretRow.tsx b/frontend/src/pages/secret-manager/OverviewPage/components/SecretOverviewDynamicSecretRow/SecretOverviewDynamicSecretRow.tsx index f814b336b..d5d4ace3e 100644 --- a/frontend/src/pages/secret-manager/OverviewPage/components/SecretOverviewDynamicSecretRow/SecretOverviewDynamicSecretRow.tsx +++ b/frontend/src/pages/secret-manager/OverviewPage/components/SecretOverviewDynamicSecretRow/SecretOverviewDynamicSecretRow.tsx @@ -36,7 +36,7 @@ export const SecretOverviewDynamicSecretRow = ({ isPresent ? "text-green-600" : "text-red-600" )} > -
+
-
+
-
+
-
+
{!isSecretEmpty && (
-
- 0 - ? `${ - !allRowsSelectedOnPage.isChecked ? "Select" : "Unselect" - } all folders and secrets on page` - : "" - } +
+
+
-
- 0 + ? `${ + !allRowsSelectedOnPage.isChecked ? "Select" : "Unselect" + } all folders and secrets on page` + : "" + } + > +
+ +
+ + Name + + setOrderDirection((prev) => + prev === OrderByDirection.ASC + ? OrderByDirection.DESC + : OrderByDirection.ASC + ) + } + > + -
- - Name - - setOrderDirection((prev) => - prev === OrderByDirection.ASC - ? OrderByDirection.DESC - : OrderByDirection.ASC - ) + +
+ - - + + + +
-
- - {missingKeyCount > 0 && ( - +
+

{name}

+ + {!collapseEnvironments && missingKeyCount > 0 && ( + +
+ {missingKeyCount} +
+
+ )} + +
-
- +
+
+ {collapseEnvironments ? ( + + handleExploreEnvClick(slug)} + > + + + + ) : ( + + )}