From 99b0ca4af51f7d3ecba0b530232cfe27d600abf9 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Wed, 8 Jan 2025 11:47:02 +0100 Subject: [PATCH] change(ui): projects revamp - project menu improvements --- .../Client/Projects/ProjectList.tsx | 119 +++++++++--------- .../components/Client/Projects/Projects.tsx | 6 +- frontend/app/initialize.tsx | 9 +- 3 files changed, 71 insertions(+), 63 deletions(-) diff --git a/frontend/app/components/Client/Projects/ProjectList.tsx b/frontend/app/components/Client/Projects/ProjectList.tsx index 37de225c8..75d059107 100644 --- a/frontend/app/components/Client/Projects/ProjectList.tsx +++ b/frontend/app/components/Client/Projects/ProjectList.tsx @@ -1,85 +1,92 @@ import React from 'react'; -import { Avatar, Input, Menu, Progress } from 'antd'; +import { Avatar, Input, Menu, MenuProps, Progress } from 'antd'; import { useStore } from '@/mstore'; import Project from '@/mstore/types/project'; import { observer } from 'mobx-react-lite'; import { AppWindowMac, Smartphone } from 'lucide-react'; -function ProjectList() { +type MenuItem = Required['items'][number]; + +const ProjectList: React.FC = () => { const { projectsStore } = useStore(); - const list = projectsStore.list; const [search, setSearch] = React.useState(''); - const config = projectsStore.config; - const onSearch = (value: string) => { - setSearch(value); + const filteredProjects = projectsStore.list.filter((project: Project) => + project.name.toLowerCase().includes(search.toLowerCase()) + ); + + const handleSearch = (value: string) => setSearch(value); + + const onClick: MenuProps['onClick'] = (e) => { + const pid = parseInt(e.key as string); + projectsStore.setConfigProject(pid); }; - const onProjectClick = (project: Project) => { - projectsStore.setConfigProject(project.projectId); - }; + const menuItems: MenuItem[] = filteredProjects.map((project) => ({ + key: project.id + '', + label: project.name, + icon: ( + + ) + })); return (
setSearch('')} + placeholder="Search projects" + onSearch={handleSearch} + onChange={(e) => setSearch(e.target.value)} allowClear />
item.name.toLowerCase().includes(search.toLowerCase())).map((project) => ({ - key: project.id, - label: project.name, - onClick: () => onProjectClick(project), - icon: - })) as any} - /> -
-
- ); -} - -export default observer(ProjectList); - - -const ProjectIconWithProgress: React.FC<{ - platform: string; progress: number -}> = ({ platform, progress }) => { - return ( -
- ''} - strokeWidth={4} - strokeColor="#23959a" - /> -
- - ) : ( - - ) - } + onClick={onClick} + selectedKeys={[String(projectsStore.config.pid)]} + className="w-full !bg-white !border-0" + inlineIndent={11} + items={menuItems} />
); }; + +export default observer(ProjectList); + +const ProjectIconWithProgress: React.FC<{ + platform: string; + progress: number; +}> = ({ platform, progress }) => ( +
+ ''} + strokeWidth={4} + strokeColor="#23959a" + /> +
+ + ) : ( + + ) + } + /> +
+
+); diff --git a/frontend/app/components/Client/Projects/Projects.tsx b/frontend/app/components/Client/Projects/Projects.tsx index 418963784..c091af680 100644 --- a/frontend/app/components/Client/Projects/Projects.tsx +++ b/frontend/app/components/Client/Projects/Projects.tsx @@ -47,10 +47,10 @@ function Projects() { Projects} extra={[