1- ' use client'
1+ " use client" ;
22
3- import React , { useEffect , useState } from ' react'
4- import ProjectsFilter from ' ../ui/ProjectsFilter'
5- import SortDropdown from ' ../ui/SortDropdown'
6- import { Project } from ' @/lib/features/projects/types/projects' ;
7- import ProjectCard from ' ../ui/ProjectCard' ;
8- import ProjectsModal from ' ../ui/ProjectsModal' ;
9- import { GetProjects } from ' @/lib/features/projects/service/GetProjects.api' ;
10- import ServiceProjectsIdeaInMind from ' ../ui/ServiceProjectsIdeaInMind' ;
3+ import React , { useEffect , useState } from " react" ;
4+ import ProjectsFilter from " ../ui/ProjectsFilter" ;
5+ import SortDropdown from " ../ui/SortDropdown" ;
6+ import { Project } from " @/lib/features/projects/types/projects" ;
7+ import ProjectCard from " ../ui/ProjectCard" ;
8+ import ProjectsModal from " ../ui/ProjectsModal" ;
9+ import { GetProjects } from " @/lib/features/projects/service/GetProjects.api" ;
10+ import ServiceProjectsIdeaInMind from " ../ui/ServiceProjectsIdeaInMind" ;
1111
1212function ProjectsDisplaySection ( ) {
1313 const [ openedProjectId , setOpenedProjectId ] = useState < number | null > ( null ) ;
14- const [ selectedFilter , setSelectedFilter ] = useState < 'SAMAHAN' | 'Other' > ( 'SAMAHAN' ) ;
14+ const [ selectedFilter , setSelectedFilter ] = useState < "SAMAHAN" | "Other" > (
15+ "SAMAHAN"
16+ ) ;
1517 // Separate states for sorting
16- const [ sortByName , setSortByName ] = useState < 'asc' | 'desc' | null > ( null ) ;
17- const [ sortByYear , setSortByYear ] = useState < 'yearDesc' | 'yearAsc' | null > ( null ) ;
18+ const [ sortByName , setSortByName ] = useState < "asc" | "desc" | null > ( null ) ;
19+ const [ sortByYear , setSortByYear ] = useState < "yearDesc" | "yearAsc" | null > (
20+ null
21+ ) ;
1822
1923 const [ projectsData , setProjectsData ] = useState < Project [ ] > ( [ ] ) ;
2024
@@ -25,9 +29,29 @@ function ProjectsDisplaySection() {
2529 if ( sortByYear ) {
2630 res = await GetProjects ( undefined , undefined , sortByYear ) ;
2731 } else if ( sortByName ) {
28- // Map asc/desc to asc/desc for API
29- const apiSort = sortByName === 'asc' ? 'asc' : 'desc' ;
30- res = await GetProjects ( undefined , apiSort , undefined ) ;
32+ // For name sorting, fetch without sorting and sort on frontend
33+ console . log ( "Sorting by name:" , sortByName ) ;
34+ res = await GetProjects ( undefined , undefined , undefined ) ;
35+
36+ if ( Array . isArray ( res ) ) {
37+ const flattenedData = res . flat ( ) ;
38+ // Sort on the frontend
39+ const sorted = [ ...flattenedData ] . sort ( ( a , b ) => {
40+ const titleA = a . title . toLowerCase ( ) ;
41+ const titleB = b . title . toLowerCase ( ) ;
42+ if ( sortByName === "asc" ) {
43+ return titleA . localeCompare ( titleB ) ;
44+ } else {
45+ return titleB . localeCompare ( titleA ) ;
46+ }
47+ } ) ;
48+ setProjectsData ( sorted ) ;
49+ console . log (
50+ "Projects after frontend sorting:" ,
51+ sorted . map ( ( p ) => p . title )
52+ ) ;
53+ return ;
54+ }
3155 } else {
3256 res = await GetProjects ( ) ;
3357 }
@@ -41,23 +65,26 @@ function ProjectsDisplaySection() {
4165 // Disable body scroll when modal is open
4266 useEffect ( ( ) => {
4367 if ( openedProjectId ) {
44- document . body . style . overflow = ' hidden' ;
68+ document . body . style . overflow = " hidden" ;
4569 } else {
46- document . body . style . overflow = '' ;
70+ document . body . style . overflow = "" ;
4771 }
4872 return ( ) => {
49- document . body . style . overflow = '' ;
73+ document . body . style . overflow = "" ;
5074 } ;
5175 } , [ openedProjectId ] ) ;
5276
5377 return (
54- < div className = ' w-full flex flex-col items-center py-16' >
55- < div className = ' w-full max-w-4xl px-6 sm:px-10 lg:px-8' >
78+ < div className = " w-full flex flex-col items-center py-16" >
79+ < div className = " w-full max-w-4xl px-6 sm:px-10 lg:px-8" >
5680 < div className = "mb-2" >
57- < ProjectsFilter selectedFilter = { selectedFilter } setSelectedFilter = { setSelectedFilter } />
81+ < ProjectsFilter
82+ selectedFilter = { selectedFilter }
83+ setSelectedFilter = { setSelectedFilter }
84+ />
5885 </ div >
5986 < div className = "mb:3" >
60- < SortDropdown
87+ < SortDropdown
6188 sortByName = { sortByName }
6289 setSortByName = { setSortByName }
6390 sortByYear = { sortByYear }
@@ -66,9 +93,11 @@ function ProjectsDisplaySection() {
6693 </ div >
6794 < div className = "grid grid-cols-1 md:grid-cols-2 gap-x-5 gap-y-5" >
6895 { ( projectsData as Project [ ] )
69- . filter ( project =>
70- ( ( selectedFilter === 'SAMAHAN' && ( project . type == "internal" ) ) ||
71- ( selectedFilter === 'Other' && ( project . type == "external" || project . type == "cross_orgs" ) ) )
96+ . filter (
97+ ( project ) =>
98+ ( selectedFilter === "SAMAHAN" && project . type == "internal" ) ||
99+ ( selectedFilter === "Other" &&
100+ ( project . type == "external" || project . type == "cross_orgs" ) )
72101 )
73102 . map ( ( project , idx ) => (
74103 < ProjectCard
@@ -79,15 +108,15 @@ function ProjectsDisplaySection() {
79108 ) ) }
80109 </ div >
81110 </ div >
82- < ServiceProjectsIdeaInMind />
111+ < ServiceProjectsIdeaInMind />
83112 { openedProjectId && (
84113 < ProjectsModal
85114 openedProjectId = { openedProjectId }
86115 setOpenedProjectId = { setOpenedProjectId }
87116 />
88117 ) }
89118 </ div >
90- )
119+ ) ;
91120}
92121
93- export default ProjectsDisplaySection
122+ export default ProjectsDisplaySection ;
0 commit comments