@@ -32,6 +32,13 @@ export default function ItemsTable({
3232 sortOrder : 'default' ,
3333 } ) ;
3434
35+ const [ boughtCol , setBoughtCol ] = useState ( { iconsToDisplay : faSort , sortOrder : 'default' } ) ;
36+ const [ usedCol , setUsedCol ] = useState ( { iconsToDisplay : faSort , sortOrder : 'default' } ) ;
37+ const [ availableCol , setAvailableCol ] = useState ( {
38+ iconsToDisplay : faSort ,
39+ } ) ;
40+ const [ wastedCol , setWastedCol ] = useState ( { iconsToDisplay : faSort , sortOrder : 'default' } ) ;
41+
3542 useEffect ( ( ) => {
3643 setData ( filteredItems ) ;
3744 } , [ filteredItems ] ) ;
@@ -98,14 +105,67 @@ export default function ItemsTable({
98105 }
99106 setProjectNameCol ( { iconsToDisplay : faSort , sortOrder : 'default' } ) ;
100107 }
108+ // Sorting for Bought
109+ if ( columnName === 'Bought' ) {
110+ if ( boughtCol . sortOrder === 'default' || boughtCol . sortOrder === 'desc' ) {
111+ newSortedData . sort ( ( a , b ) => ( a . stockBought || 0 ) - ( b . stockBought || 0 ) ) ;
112+ setBoughtCol ( { iconsToDisplay : faSortUp , sortOrder : 'asc' } ) ;
113+ } else {
114+ newSortedData . sort ( ( a , b ) => ( b . stockBought || 0 ) - ( a . stockBought || 0 ) ) ;
115+ setBoughtCol ( { iconsToDisplay : faSortDown , sortOrder : 'desc' } ) ;
116+ }
117+ resetOtherDynamicColumns ( 'Bought' ) ;
118+ }
119+
120+ // Sorting for Used
121+ if ( columnName === 'Used' ) {
122+ if ( usedCol . sortOrder === 'default' || usedCol . sortOrder === 'desc' ) {
123+ newSortedData . sort ( ( a , b ) => ( a . stockUsed || 0 ) - ( b . stockUsed || 0 ) ) ;
124+ setUsedCol ( { iconsToDisplay : faSortUp , sortOrder : 'asc' } ) ;
125+ } else {
126+ newSortedData . sort ( ( a , b ) => ( b . stockUsed || 0 ) - ( a . stockUsed || 0 ) ) ;
127+ setUsedCol ( { iconsToDisplay : faSortDown , sortOrder : 'desc' } ) ;
128+ }
129+ resetOtherDynamicColumns ( 'Used' ) ;
130+ }
131+
132+ // Sorting for Available
133+ if ( columnName === 'Available' ) {
134+ if ( availableCol . sortOrder === 'default' || availableCol . sortOrder === 'desc' ) {
135+ newSortedData . sort ( ( a , b ) => ( a . stockAvailable || 0 ) - ( b . stockAvailable || 0 ) ) ;
136+ setAvailableCol ( { iconsToDisplay : faSortUp , sortOrder : 'asc' } ) ;
137+ } else {
138+ newSortedData . sort ( ( a , b ) => ( b . stockAvailable || 0 ) - ( a . stockAvailable || 0 ) ) ;
139+ setAvailableCol ( { iconsToDisplay : faSortDown , sortOrder : 'desc' } ) ;
140+ }
141+ resetOtherDynamicColumns ( 'Available' ) ;
142+ }
101143
144+ // Sorting for Wasted
145+ if ( columnName === 'Wasted' ) {
146+ if ( wastedCol . sortOrder === 'default' || wastedCol . sortOrder === 'desc' ) {
147+ newSortedData . sort ( ( a , b ) => ( a . stockWasted || 0 ) - ( b . stockWasted || 0 ) ) ;
148+ setWastedCol ( { iconsToDisplay : faSortUp , sortOrder : 'asc' } ) ;
149+ } else {
150+ newSortedData . sort ( ( a , b ) => ( b . stockWasted || 0 ) - ( a . stockWasted || 0 ) ) ;
151+ setWastedCol ( { iconsToDisplay : faSortDown , sortOrder : 'desc' } ) ;
152+ }
153+ resetOtherDynamicColumns ( 'Wasted' ) ;
154+ }
102155 setData ( newSortedData ) ;
103156 } ;
104157
105158 const getNestedValue = ( obj , path ) => {
106159 return path . split ( '.' ) . reduce ( ( acc , part ) => ( acc ? acc [ part ] : null ) , obj ) ;
107160 } ;
108161
162+ const resetOtherDynamicColumns = active => {
163+ if ( active !== 'Bought' ) setBoughtCol ( { iconsToDisplay : faSort , sortOrder : 'default' } ) ;
164+ if ( active !== 'Used' ) setUsedCol ( { iconsToDisplay : faSort , sortOrder : 'default' } ) ;
165+ if ( active !== 'Available' ) setAvailableCol ( { iconsToDisplay : faSort , sortOrder : 'default' } ) ;
166+ if ( active !== 'Wasted' ) setWastedCol ( { iconsToDisplay : faSort , sortOrder : 'default' } ) ;
167+ } ;
168+
109169 return (
110170 < >
111171 { /* Regular Records Modal for Update and Purchase records */ }
@@ -141,9 +201,21 @@ export default function ItemsTable({
141201 ) : (
142202 < th > Name</ th >
143203 ) }
144- { dynamicColumns . map ( ( { label } ) => (
145- < th key = { label } > { label } </ th >
146- ) ) }
204+ { dynamicColumns . map ( ( { label } ) => {
205+ const stateMap = {
206+ Bought : boughtCol ,
207+ Used : usedCol ,
208+ Available : availableCol ,
209+ Wasted : wastedCol ,
210+ } ;
211+
212+ return (
213+ < th key = { label } onClick = { ( ) => sortData ( label ) } >
214+ { label } { ' ' }
215+ < FontAwesomeIcon icon = { stateMap [ label ] ?. iconsToDisplay || faSort } size = "lg" />
216+ </ th >
217+ ) ;
218+ } ) }
147219 < th > Usage Record</ th >
148220 < th > Updates</ th >
149221 < th > Purchases</ th >
0 commit comments