@@ -38,17 +38,34 @@ export default function ProjectList({ openCategories, onNavigateToProjects, refr
3838 setLoading ( true ) ;
3939 setError ( "" ) ;
4040 try {
41- // If a user is logged in, fetch projects for that user; otherwise fall back to all projects
42- let data : Project [ ] = [ ] ;
41+ let allProjects : Project [ ] = [ ] ;
42+
4343 if ( currentUser ?. id ) {
44- data = await projectsApi . getProjectsByUser ( currentUser . id ) ;
44+ // Fetch projects created by the user
45+ const createdProjects = await projectsApi . getProjectsByUser ( currentUser . id ) ;
46+ if ( Array . isArray ( createdProjects ) ) {
47+ allProjects = allProjects . concat ( createdProjects ) ;
48+ } else if ( createdProjects ) {
49+ allProjects . push ( createdProjects as Project ) ;
50+ }
51+
52+ // Fetch projects where the user is a team member
53+ const memberProjects = await projectsApi . getProjectsAsMember ( ) ;
54+ if ( Array . isArray ( memberProjects ) ) {
55+ allProjects = allProjects . concat ( memberProjects ) ;
56+ } else if ( memberProjects ) {
57+ allProjects . push ( memberProjects as Project ) ;
58+ }
59+
60+ // Remove duplicates by ID
61+ const uniqueProjects = Array . from (
62+ new Map ( allProjects . map ( ( p ) => [ p . id , p ] ) ) . values ( )
63+ ) ;
64+ setProjects ( uniqueProjects ) ;
4565 } else {
46- data = await projectsApi . getAllProjects ( ) ;
66+ const data = await projectsApi . getAllProjects ( ) ;
67+ setProjects ( Array . isArray ( data ) ? data : data ? [ data as Project ] : [ ] ) ;
4768 }
48- if ( ! active ) return ;
49- // backend may return a single project for certain ids; normalize to array
50- if ( ! data ) setProjects ( [ ] ) ;
51- else setProjects ( Array . isArray ( data ) ? data : [ data as Project ] ) ;
5269 } catch ( err ) {
5370 if ( ! active ) return ;
5471 setError ( err instanceof Error ? err . message : "Unable to load projects" ) ;
@@ -89,7 +106,7 @@ export default function ProjectList({ openCategories, onNavigateToProjects, refr
89106 < NavSectionHeader >
90107 < div style = { { display : 'flex' , alignItems : 'center' , justifyContent : 'space-between' , width : '100%' } } >
91108 < span > Projects</ span >
92- < Button aria-label = "Create project" appearance = "subtle" onClick = { ( e ) => { e . stopPropagation ( ) ; navigate ( '/home/project/ create' ) ; } } >
109+ < Button aria-label = "Create project" appearance = "subtle" onClick = { ( e ) => { e . stopPropagation ( ) ; navigate ( '/home/create' ) ; } } >
93110 < AddCircle24Regular />
94111 </ Button >
95112 </ div >
0 commit comments