From 34c6d254a0d3117b10ca59392b9414fc4c2e4bc0 Mon Sep 17 00:00:00 2001 From: Scott Wilson Date: Thu, 28 Aug 2025 10:00:56 -0700 Subject: [PATCH] improvement: update my/all project select UI on project overview --- .../ProjectsPage/ProjectsPage.tsx | 30 +++++++++--- .../components/AllProjectView.tsx | 14 ++++-- .../ProjectsPage/components/MyProjectView.tsx | 14 ++++-- .../components/ProjectListToggle.tsx | 49 ++++++++++--------- 4 files changed, 70 insertions(+), 37 deletions(-) diff --git a/frontend/src/pages/organization/ProjectsPage/ProjectsPage.tsx b/frontend/src/pages/organization/ProjectsPage/ProjectsPage.tsx index f1f667fa4..2e4b43cbe 100644 --- a/frontend/src/pages/organization/ProjectsPage/ProjectsPage.tsx +++ b/frontend/src/pages/organization/ProjectsPage/ProjectsPage.tsx @@ -11,7 +11,7 @@ import { usePopUp } from "@app/hooks/usePopUp"; import { AllProjectView } from "./components/AllProjectView"; import { MyProjectView } from "./components/MyProjectView"; -import { ProjectListToggle, ProjectListView } from "./components/ProjectListToggle"; +import { ProjectListView } from "./components/ProjectListToggle"; // const formatDescription = (type: ProjectType) => { // if (type === ProjectType.SecretManager) @@ -28,7 +28,23 @@ import { ProjectListToggle, ProjectListView } from "./components/ProjectListTogg export const ProjectsPage = () => { const { t } = useTranslation(); - const [projectListView, setProjectListView] = useState(ProjectListView.MyProjects); + const [projectListView, setProjectListView] = useState(() => { + const storedView = localStorage.getItem("projectListView"); + + if ( + storedView && + (storedView === ProjectListView.AllProjects || storedView === ProjectListView.MyProjects) + ) { + return storedView; + } + + return ProjectListView.MyProjects; + }); + + const handleSetProjectListView = (value: ProjectListView) => { + localStorage.setItem("projectListView", value); + setProjectListView(value); + }; const { popUp, handlePopUpOpen, handlePopUpToggle } = usePopUp([ "addNewWs", @@ -49,11 +65,7 @@ export const ProjectsPage = () => {
- -
- } + title="Projects" description="Your team's complete security toolkit - organized and ready when you need them." /> @@ -62,12 +74,16 @@ export const ProjectsPage = () => { onAddNewProject={() => handlePopUpOpen("addNewWs")} onUpgradePlan={() => handlePopUpOpen("upgradePlan")} isAddingProjectsAllowed={isAddingProjectsAllowed} + projectListView={projectListView} + onProjectListViewChange={handleSetProjectListView} /> ) : ( handlePopUpOpen("addNewWs")} onUpgradePlan={() => handlePopUpOpen("upgradePlan")} isAddingProjectsAllowed={isAddingProjectsAllowed} + projectListView={projectListView} + onProjectListViewChange={handleSetProjectListView} /> )} void; onUpgradePlan: () => void; isAddingProjectsAllowed: boolean; + projectListView: ProjectListView; + onProjectListViewChange: (value: ProjectListView) => void; }; type RequestAccessModalProps = { @@ -106,7 +112,9 @@ const RequestAccessModal = ({ projectId, onPopUpToggle }: RequestAccessModalProp export const AllProjectView = ({ onAddNewProject, onUpgradePlan, - isAddingProjectsAllowed + isAddingProjectsAllowed, + projectListView, + onProjectListViewChange }: Props) => { const navigate = useNavigate(); const [searchFilter, setSearchFilter] = useState(""); @@ -176,10 +184,10 @@ export const AllProjectView = ({ return (
-
+ setSearchFilter(e.target.value)} diff --git a/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx b/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx index ea0d1d2ff..6ad003c53 100644 --- a/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx +++ b/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx @@ -44,11 +44,17 @@ import { OrderByDirection } from "@app/hooks/api/generic/types"; import { useUpdateUserProjectFavorites } from "@app/hooks/api/users/mutation"; import { useGetUserProjectFavorites } from "@app/hooks/api/users/queries"; import { ProjectType, Workspace } from "@app/hooks/api/workspace/types"; +import { + ProjectListToggle, + ProjectListView +} from "@app/pages/organization/ProjectsPage/components/ProjectListToggle"; type Props = { onAddNewProject: () => void; onUpgradePlan: () => void; isAddingProjectsAllowed: boolean; + projectListView: ProjectListView; + onProjectListViewChange: (value: ProjectListView) => void; }; enum ProjectOrderBy { @@ -63,7 +69,9 @@ enum ProjectsViewMode { export const MyProjectView = ({ onAddNewProject, onUpgradePlan, - isAddingProjectsAllowed + isAddingProjectsAllowed, + projectListView, + onProjectListViewChange }: Props) => { const navigate = useNavigate(); const { currentOrg } = useOrganization(); @@ -371,10 +379,10 @@ export const MyProjectView = ({ return (
-
+ setSearchFilter(e.target.value)} diff --git a/frontend/src/pages/organization/ProjectsPage/components/ProjectListToggle.tsx b/frontend/src/pages/organization/ProjectsPage/components/ProjectListToggle.tsx index 55da8e0ba..ddf1141a6 100644 --- a/frontend/src/pages/organization/ProjectsPage/components/ProjectListToggle.tsx +++ b/frontend/src/pages/organization/ProjectsPage/components/ProjectListToggle.tsx @@ -1,7 +1,4 @@ -import { faChevronDown } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; - -import { Select, SelectItem } from "@app/components/v2"; +import { Button } from "@app/components/v2"; export enum ProjectListView { MyProjects = "my-projects", @@ -14,28 +11,32 @@ type Props = { }; export const ProjectListToggle = ({ value, onChange }: Props) => { - const getDisplayText = (listView: ProjectListView) => { - return listView === ProjectListView.MyProjects ? "My Projects" : "All Projects"; - }; - return ( -
-

- {getDisplayText(value)} -

- - + My Projects + +
); };