1- import { useState } from 'react' ;
1+ import { useState , useEffect } from 'react' ;
22import { useSelector } from 'react-redux' ;
33import styles from './ResourceManagement.module.css' ;
44import { formatDateTimeLocal } from '../../utils/formatDate' ;
55
6- function SearchBar ( ) {
6+ function SearchBar ( { searchTerm , onSearchChange , onClear } ) {
77 return (
88 < div className = { styles . searchBarContainer } >
99 < div className = { styles . searchBarContainerLeft } >
@@ -12,10 +12,18 @@ function SearchBar() {
1212 < span className = { styles . iconToggle } > ⇅</ span >
1313 </ div >
1414 < div className = { styles . searchBarContainerRight } >
15- < input type = "text" className = { styles . searchInput } placeholder = "Search" />
16- < button type = "button" className = { styles . searchButton } >
17- Search
18- </ button >
15+ < input
16+ type = "text"
17+ className = { styles . searchInput }
18+ placeholder = "Search by User"
19+ value = { searchTerm }
20+ onChange = { onSearchChange }
21+ />
22+ { searchTerm && (
23+ < button type = "button" className = { styles . clearButton } onClick = { onClear } >
24+ ✕
25+ </ button >
26+ ) }
1927 </ div >
2028 </ div >
2129 ) ;
@@ -37,38 +45,52 @@ function ResourceManagement() {
3745 } ,
3846 {
3947 id : 2 ,
40- user : 'First Last' ,
48+ user : 'Test Last' ,
4149 timeDuration : '02:20:00' ,
4250 facilities : 'CRM Admin pages' ,
4351 materials : 'Larry San Francisco' ,
4452 date : '2026-01-30T17:59:00.000Z' ,
4553 } ,
4654 {
4755 id : 3 ,
48- user : 'First Last ' ,
56+ user : 'Lorem ipsum ' ,
4957 timeDuration : '03:00:00' ,
5058 facilities : 'Client Project' ,
5159 materials : 'Bagwell Avenue Ocala' ,
5260 date : '2026-01-30T17:00:00.000Z' ,
5361 } ,
5462 {
5563 id : 4 ,
56- user : 'First Last ' ,
64+ user : 'Dolor Sit ' ,
5765 timeDuration : '02:45:00' ,
5866 facilities : 'Admin Dashboard' ,
5967 materials : 'Washburn Baton Rouge' ,
6068 date : '2026-01-29T17:00:00.000Z' ,
6169 } ,
6270 {
6371 id : 5 ,
64- user : 'First Last ' ,
72+ user : 'Elit Quisque ' ,
6573 timeDuration : '03:30:00' ,
6674 facilities : 'App Landing page' ,
6775 materials : 'Nest Lane Olivette' ,
6876 date : '2025-02-02T17:00:00.000Z' ,
6977 } ,
7078 ] ) ;
7179
80+ const [ searchTerm , setSearchTerm ] = useState ( ( ) => localStorage . getItem ( 'resourceSearch' ) || '' ) ;
81+
82+ useEffect ( ( ) => {
83+ localStorage . setItem ( 'resourceSearch' , searchTerm ) ;
84+ } , [ searchTerm ] ) ;
85+
86+ const handleSearchChange = e => {
87+ setSearchTerm ( e . target . value ) ;
88+ } ;
89+
90+ const filteredResources = resources . filter ( resource =>
91+ resource . user . toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) ,
92+ ) ;
93+
7294 return (
7395 < div
7496 className = { `${ styles . resourceManagementPage } ${
@@ -82,7 +104,11 @@ function ResourceManagement() {
82104 </ button >
83105 </ div >
84106
85- < SearchBar />
107+ < SearchBar
108+ searchTerm = { searchTerm }
109+ onSearchChange = { handleSearchChange }
110+ onClear = { ( ) => setSearchTerm ( '' ) }
111+ />
86112
87113 < div className = { styles . resourceList } >
88114 < div className = { styles . resourceHeading } >
@@ -97,23 +123,28 @@ function ResourceManagement() {
97123 </ div >
98124 < hr className = { styles . lineSperator } />
99125
100- { resources . map ( resource => (
101- < div key = { resource . id } >
102- < div className = { styles . resourceItem } >
103- < div className = { styles . checkboxContainer } >
104- < input type = "checkbox" />
105- </ div >
106- < div className = { styles . resourceItemDetail } > { resource . user } </ div >
107- < div className = { styles . resourceItemDetail } > { resource . timeDuration } </ div >
108- < div className = { styles . resourceItemDetail } > { resource . facilities } </ div >
109- < div className = { styles . resourceItemDetail } > { resource . materials } </ div >
110- < div className = { styles . resourceItemDetail } >
111- < span className = { styles . calendarIcon } > 📅</ span > { formatDateTimeLocal ( resource . date ) }
126+ { filteredResources . length === 0 ? (
127+ < div className = { styles . noResultsMessage } > No user found</ div >
128+ ) : (
129+ filteredResources . map ( resource => (
130+ < div key = { resource . id } >
131+ < div className = { styles . resourceItem } >
132+ < div className = { styles . checkboxContainer } >
133+ < input type = "checkbox" />
134+ </ div >
135+ < div className = { styles . resourceItemDetail } > { resource . user } </ div >
136+ < div className = { styles . resourceItemDetail } > { resource . timeDuration } </ div >
137+ < div className = { styles . resourceItemDetail } > { resource . facilities } </ div >
138+ < div className = { styles . resourceItemDetail } > { resource . materials } </ div >
139+ < div className = { styles . resourceItemDetail } >
140+ < span className = { styles . calendarIcon } > 📅</ span > { ' ' }
141+ { formatDateTimeLocal ( resource . date ) }
142+ </ div >
112143 </ div >
144+ < hr className = { styles . lineSperator } />
113145 </ div >
114- < hr className = { styles . lineSperator } />
115- </ div >
116- ) ) }
146+ ) )
147+ ) }
117148 </ div >
118149
119150 < div className = { styles . pagination } >
0 commit comments