@@ -40,122 +40,119 @@ function ResourcesUsage() {
4040 } ,
4141 ] ;
4242
43- const [ isExporting , setIsExporting ] = useState ( false ) ;
44-
45- const exportColumns = [
46- { key : 'sNo' , label : 'S.No' } ,
47- { key : 'name' , label : 'Name' } ,
48- { key : 'materials' , label : 'Materials' } ,
49- { key : 'facilities' , label : 'Facilities' } ,
50- { key : 'status' , label : 'Status' } ,
51- { key : 'dueDate' , label : 'Due Date' } ,
52- ] ;
53-
54- const getExportData = ( ) =>
55- data . map ( row => ( {
56- ...row ,
57- status : row . status . text ,
58- } ) ) ;
59-
60- const exportCSV = ( ) => {
61- setIsExporting ( true ) ;
62-
63- const rows = getExportData ( ) ;
64- const header = exportColumns . map ( col => col . label ) . join ( ',' ) ;
65- const body = rows
66- . map ( row => exportColumns . map ( col => `"${ row [ col . key ] ?? '' } "` ) . join ( ',' ) )
67- . join ( '\n' ) ;
68-
69- const blob = new Blob ( [ `${ header } \n${ body } ` ] , {
70- type : 'text/csv;charset=utf-8;' ,
71- } ) ;
72-
73- const url = URL . createObjectURL ( blob ) ;
74- const link = document . createElement ( 'a' ) ;
75- link . href = url ;
76- link . download = `resource-usage_${ new Date ( ) . toISOString ( ) . slice ( 0 , 10 ) } .csv` ;
77- link . click ( ) ;
78- URL . revokeObjectURL ( url ) ;
79-
80- setIsExporting ( false ) ;
81- } ;
82-
83- const exportXLSX = ( ) => {
84- setIsExporting ( true ) ;
85-
86- const rows = getExportData ( ) . map ( row => {
87- const formatted = { } ;
88- exportColumns . forEach ( col => {
89- formatted [ col . label ] = row [ col . key ] ;
90- } ) ;
91- return formatted ;
92- } ) ;
43+ const [ isExporting , setIsExporting ] = useState ( false ) ;
44+
45+ const exportColumns = [
46+ { key : 'sNo' , label : 'S.No' } ,
47+ { key : 'name' , label : 'Name' } ,
48+ { key : 'materials' , label : 'Materials' } ,
49+ { key : 'facilities' , label : 'Facilities' } ,
50+ { key : 'status' , label : 'Status' } ,
51+ { key : 'dueDate' , label : 'Due Date' } ,
52+ ] ;
9353
94- const worksheet = XLSX . utils . json_to_sheet ( rows ) ;
95- const workbook = XLSX . utils . book_new ( ) ;
96- XLSX . utils . book_append_sheet ( workbook , worksheet , 'Resource Usage' ) ;
54+ const getExportData = ( ) =>
55+ data . map ( row => ( {
56+ ...row ,
57+ status : row . status . text ,
58+ } ) ) ;
9759
98- XLSX . writeFile (
99- workbook ,
100- `resource-usage_${ new Date ( ) . toISOString ( ) . slice ( 0 , 10 ) } .xlsx`
101- ) ;
60+ const exportCSV = ( ) => {
61+ setIsExporting ( true ) ;
10262
103- setIsExporting ( false ) ;
104- } ;
105-
106- return (
107- < div className = { `${ darkMode ? styles . darkMode : '' } ` } >
108- < div className = { `${ styles . resourcesUsage } ` } >
109- < h2 className = { `${ styles . resourceTitle } ` } > Resource Usage Monitoring</ h2 >
110-
111- { /* ✅ Export Buttons (your feature, integrated cleanly) */ }
112- < div className = { styles . exportButtons } >
113- < button
114- type = "button"
115- className = { styles . exportButton }
116- onClick = { exportCSV }
117- disabled = { isExporting }
118- >
119- { isExporting ? 'Exporting…' : 'Export CSV' }
120- </ button >
121-
122- < button
123- type = "button"
124- className = { styles . exportButton }
125- onClick = { exportXLSX }
126- disabled = { isExporting }
127- >
128- { isExporting ? 'Exporting…' : 'Export Excel' }
129- </ button >
130- </ div >
63+ const rows = getExportData ( ) ;
64+ const header = exportColumns . map ( col => col . label ) . join ( ',' ) ;
65+ const body = rows
66+ . map ( row => exportColumns . map ( col => `"${ row [ col . key ] ?? '' } "` ) . join ( ',' ) )
67+ . join ( '\n' ) ;
13168
132- < div className = { `${ styles . resourceRow } ` } >
133- < div className = { `${ styles . column } ` } > S.No</ div >
134- < div className = { `${ styles . column } ` } > Name</ div >
135- < div className = { `${ styles . column } ` } > Materials</ div >
136- < div className = { `${ styles . column } ` } > Facilities</ div >
137- < div className = { `${ styles . column } ` } > Status</ div >
138- < div className = { `${ styles . column } ` } > Due Date</ div >
139- < div className = { `${ styles . column } ` } > Actions</ div >
140- </ div >
69+ const blob = new Blob ( [ `${ header } \n${ body } ` ] , {
70+ type : 'text/csv;charset=utf-8;' ,
71+ } ) ;
14172
142- { data . map ( row => (
143- < div key = { row . sNo } className = { `${ styles . resourceRow } ` } >
144- < div className = { `${ styles . column } ` } > { row . sNo } </ div >
145- < div className = { `${ styles . column } ` } > { row . name } </ div >
146- < div className = { `${ styles . column } ` } > { row . materials } </ div >
147- < div className = { `${ styles . column } ` } > { row . facilities } </ div >
148- < div className = { `${ styles . column } ${ styles [ `status${ row . status . color } ` ] } ` } >
149- { row . status . text }
150- </ div >
151- < div className = { `${ styles . column } ` } > { row . dueDate } </ div >
152- < div className = { `${ styles . column } ${ styles . actionColumn } ` } >
153- < button type = "button" className = { `${ styles . viewDetailsButton } ` } >
154- View Details
155- </ button >
156- </ div >
73+ const url = URL . createObjectURL ( blob ) ;
74+ const link = document . createElement ( 'a' ) ;
75+ link . href = url ;
76+ link . download = `resource-usage_${ new Date ( ) . toISOString ( ) . slice ( 0 , 10 ) } .csv` ;
77+ link . click ( ) ;
78+ URL . revokeObjectURL ( url ) ;
79+
80+ setIsExporting ( false ) ;
81+ } ;
82+
83+ const exportXLSX = ( ) => {
84+ setIsExporting ( true ) ;
85+
86+ const rows = getExportData ( ) . map ( row => {
87+ const formatted = { } ;
88+ exportColumns . forEach ( col => {
89+ formatted [ col . label ] = row [ col . key ] ;
90+ } ) ;
91+ return formatted ;
92+ } ) ;
93+
94+ const worksheet = XLSX . utils . json_to_sheet ( rows ) ;
95+ const workbook = XLSX . utils . book_new ( ) ;
96+ XLSX . utils . book_append_sheet ( workbook , worksheet , 'Resource Usage' ) ;
97+
98+ XLSX . writeFile ( workbook , `resource-usage_${ new Date ( ) . toISOString ( ) . slice ( 0 , 10 ) } .xlsx` ) ;
99+
100+ setIsExporting ( false ) ;
101+ } ;
102+
103+ return (
104+ < div className = { `${ darkMode ? styles . darkMode : '' } ` } >
105+ < div className = { `${ styles . resourcesUsage } ` } >
106+ < h2 className = { `${ styles . resourceTitle } ` } > Resource Usage Monitoring</ h2 >
107+
108+ { /* ✅ Export Buttons (your feature, integrated cleanly) */ }
109+ < div className = { styles . exportButtons } >
110+ < button
111+ type = "button"
112+ className = { styles . exportButton }
113+ onClick = { exportCSV }
114+ disabled = { isExporting }
115+ >
116+ { isExporting ? 'Exporting…' : 'Export CSV' }
117+ </ button >
118+
119+ < button
120+ type = "button"
121+ className = { styles . exportButton }
122+ onClick = { exportXLSX }
123+ disabled = { isExporting }
124+ >
125+ { isExporting ? 'Exporting…' : 'Export Excel' }
126+ </ button >
157127 </ div >
158- ) ) }
128+
129+ < div className = { `${ styles . resourceRow } ` } >
130+ < div className = { `${ styles . column } ` } > S.No</ div >
131+ < div className = { `${ styles . column } ` } > Name</ div >
132+ < div className = { `${ styles . column } ` } > Materials</ div >
133+ < div className = { `${ styles . column } ` } > Facilities</ div >
134+ < div className = { `${ styles . column } ` } > Status</ div >
135+ < div className = { `${ styles . column } ` } > Due Date</ div >
136+ < div className = { `${ styles . column } ` } > Actions</ div >
137+ </ div >
138+
139+ { data . map ( row => (
140+ < div key = { row . sNo } className = { `${ styles . resourceRow } ` } >
141+ < div className = { `${ styles . column } ` } > { row . sNo } </ div >
142+ < div className = { `${ styles . column } ` } > { row . name } </ div >
143+ < div className = { `${ styles . column } ` } > { row . materials } </ div >
144+ < div className = { `${ styles . column } ` } > { row . facilities } </ div >
145+ < div className = { `${ styles . column } ${ styles [ `status${ row . status . color } ` ] } ` } >
146+ { row . status . text }
147+ </ div >
148+ < div className = { `${ styles . column } ` } > { row . dueDate } </ div >
149+ < div className = { `${ styles . column } ${ styles . actionColumn } ` } >
150+ < button type = "button" className = { `${ styles . viewDetailsButton } ` } >
151+ View Details
152+ </ button >
153+ </ div >
154+ </ div >
155+ ) ) }
159156 < div className = { `${ styles . tickBox } ` } >
160157 < label className = { `${ styles . tickLabel } ` } >
161158 < input type = "checkbox" id = "tickAll" /> Tick off All Selected Items
0 commit comments