@@ -16,30 +16,75 @@ export function ToolItemListView({
1616 const [ filteredItems , setFilteredItems ] = useState ( items ) ;
1717 const [ selectedProject , setSelectedProject ] = useState ( 'all' ) ;
1818 const [ selectedItem , setSelectedItem ] = useState ( 'all' ) ;
19+ const [ selectedToolStatus , setSelectedToolStatus ] = useState ( 'all' ) ;
20+ const [ selectedCondition , setSelectedCondition ] = useState ( 'all' ) ;
1921 const [ isError , setIsError ] = useState ( false ) ;
2022
23+ useEffect ( ( ) => {
24+ try {
25+ const sp = sessionStorage . getItem ( 'toolsSelectedProject' ) ;
26+ const si = sessionStorage . getItem ( 'toolsSelectedItem' ) ;
27+ const sts = sessionStorage . getItem ( 'toolsSelectedStatus' ) ;
28+ const sc = sessionStorage . getItem ( 'toolsSelectedCondition' ) ;
29+
30+ if ( sp ) setSelectedProject ( sp ) ;
31+ if ( si ) setSelectedItem ( si ) ;
32+ if ( sts ) setSelectedToolStatus ( sts ) ;
33+ if ( sc ) setSelectedCondition ( sc ) ;
34+ } catch ( e ) { }
35+ } , [ ] ) ;
36+
37+ // Save filters / sort whenever they change
38+ useEffect ( ( ) => {
39+ try {
40+ sessionStorage . setItem ( 'toolsSelectedProject' , selectedProject ) ;
41+ sessionStorage . setItem ( 'toolsSelectedItem' , selectedItem ) ;
42+ sessionStorage . setItem ( 'toolsSelectedStatus' , selectedToolStatus ) ;
43+ sessionStorage . setItem ( 'toolsSelectedCondition' , selectedCondition ) ;
44+ } catch ( e ) {
45+ // ignore
46+ }
47+ } , [ selectedProject , selectedItem , selectedToolStatus , selectedCondition ] ) ;
48+
2149 useEffect ( ( ) => {
2250 if ( items ) setFilteredItems ( [ ...items ] ) ;
2351 } , [ items ] ) ;
2452
2553 useEffect ( ( ) => {
26- let filterItems ;
2754 if ( ! items ) return ;
28- if ( selectedProject === 'all' && selectedItem === 'all' ) {
29- setFilteredItems ( [ ...items ] ) ;
30- } else if ( selectedProject !== 'all' && selectedItem === 'all' ) {
31- filterItems = items . filter ( item => item . project ?. name === selectedProject ) ;
32- setFilteredItems ( [ ...filterItems ] ) ;
33- } else if ( selectedProject === 'all' && selectedItem !== 'all' ) {
34- filterItems = items . filter ( item => item . itemType ?. name === selectedItem ) ;
35- setFilteredItems ( [ ...filterItems ] ) ;
36- } else {
37- filterItems = items . filter (
38- item => item . project ?. name === selectedProject && item . itemType ?. name === selectedItem ,
39- ) ;
40- setFilteredItems ( [ ...filterItems ] ) ;
55+
56+ let filterItems = [ ...items ] ;
57+
58+ if ( selectedProject !== 'all' ) {
59+ filterItems = filterItems . filter ( item => item . project ?. name === selectedProject ) ;
60+ }
61+
62+ if ( selectedItem !== 'all' ) {
63+ filterItems = filterItems . filter ( item => item . itemType ?. name === selectedItem ) ;
64+ }
65+
66+ if ( selectedToolStatus !== 'all' ) {
67+ filterItems = filterItems . filter ( item => {
68+ if ( selectedToolStatus === 'Using' ) {
69+ return item . itemType ?. using ?. includes ( item . _id ) ;
70+ } else if ( selectedToolStatus === 'Available' ) {
71+ return (
72+ item . itemType ?. available ?. includes ( item . _id ) &&
73+ item . condition !== 'Lost' &&
74+ item . condition !== 'Needs Replacing'
75+ ) ;
76+ } else if ( selectedToolStatus === 'Under Maintenance' ) {
77+ return item . condition === 'Worn' || item . condition === 'Damaged' ;
78+ }
79+ } ) ;
80+ }
81+
82+ if ( selectedCondition !== 'all' ) {
83+ filterItems = filterItems . filter ( item => item . condition === selectedCondition ) ;
4184 }
42- } , [ selectedProject , selectedItem , items ] ) ;
85+
86+ setFilteredItems ( filterItems ) ;
87+ } , [ items , selectedProject , selectedItem , selectedToolStatus , selectedCondition ] ) ;
4388
4489 useEffect ( ( ) => {
4590 setIsError ( Object . entries ( errors ) . length > 0 ) ;
@@ -64,21 +109,51 @@ export function ToolItemListView({
64109 items = { items }
65110 setSelectedProject = { setSelectedProject }
66111 setSelectedItem = { setSelectedItem }
112+ setSelectedCondition = { setSelectedCondition }
113+ setSelectedToolStatus = { setSelectedToolStatus }
67114 />
68115 < SelectItem
69116 items = { items }
70117 selectedProject = { selectedProject }
71118 selectedItem = { selectedItem }
72119 setSelectedItem = { setSelectedItem }
120+ selectedToolStatus = { selectedToolStatus }
121+ setSelectedToolStatus = { setSelectedToolStatus }
122+ selectedCondition = { selectedCondition }
123+ setSelectedCondition = { setSelectedCondition }
73124 label = "Tool"
74125 />
126+ < SelectItem
127+ items = { items }
128+ selectedProject = { selectedProject }
129+ selectedItem = { selectedItem }
130+ setSelectedItem = { setSelectedItem }
131+ selectedToolStatus = { selectedToolStatus }
132+ setSelectedToolStatus = { setSelectedToolStatus }
133+ selectedCondition = { selectedCondition }
134+ setSelectedCondition = { setSelectedCondition }
135+ label = "Tool Status"
136+ />
137+ < SelectItem
138+ items = { items }
139+ selectedProject = { selectedProject }
140+ selectedItem = { selectedItem }
141+ setSelectedItem = { setSelectedItem }
142+ selectedToolStatus = { selectedToolStatus }
143+ setSelectedToolStatus = { setSelectedToolStatus }
144+ selectedCondition = { selectedCondition }
145+ setSelectedCondition = { setSelectedCondition }
146+ label = "Condition"
147+ />
75148 </ >
76149 ) }
77150 </ span >
78151 { filteredItems && (
79152 < ToolItemsTable
80153 selectedProject = { selectedProject }
81154 selectedItem = { selectedItem }
155+ selectedToolStatus = { selectedToolStatus }
156+ selectedCondition = { selectedCondition }
82157 filteredItems = { filteredItems }
83158 UpdateItemModal = { UpdateItemModal }
84159 dynamicColumns = { dynamicColumns }
0 commit comments