1- import { useState , Key } from "react"
2- import { Badge , Button , ButtonGroup , Text , Title } from "@dataesr/dsfr-plus"
3- import ExcelJS from "exceljs"
4- import { AiOutlineDelete } from "react-icons/ai"
5- import { toast } from "react-toastify"
6- import { useDataList } from "./data-list-context"
7- import "./styles.scss"
8- import { postHeaders } from "../../config/api"
9- import { ContributionData , ExcelExportButtonProps } from "../../types"
1+ import { useState , Key } from "react" ;
2+ import { Badge , Button , ButtonGroup , Text , Title } from "@dataesr/dsfr-plus" ;
3+ import ExcelJS from "exceljs" ;
4+ import { AiOutlineDelete } from "react-icons/ai" ;
5+ import { toast } from "react-toastify" ;
6+ import { useDataList } from "./data-list-context" ;
7+ import "./styles.scss" ;
8+ import { postHeaders } from "../../config/api" ;
9+ import { ContributionData , ExcelExportButtonProps } from "../../types" ;
1010
1111const ExcelExportButton : React . FC < ExcelExportButtonProps > = ( { refetch } ) => {
12- const { dataList, setDataList } = useDataList ( )
13- const [ isMinimized , setIsMinimized ] = useState ( false )
12+ const { dataList, setDataList } = useDataList ( ) ;
13+ const [ isMinimized , setIsMinimized ] = useState ( false ) ;
1414
1515 const markAsTreated = async ( contributionIds : string [ ] ) => {
1616 const basePath = window . location . pathname . includes ( "contributionpage" )
1717 ? "contribute"
1818 : window . location . pathname . includes ( "apioperations" )
19- ? "contribute_productions"
20- : "contacts"
19+ ? "contribute_productions"
20+ : "contacts" ;
2121
22- const urlBase = `/api/${ basePath } `
23- const body = { status : "treated" }
22+ const urlBase = `/api/${ basePath } ` ;
23+ const body = { status : "treated" } ;
2424
2525 try {
26- const uniqueContributionIds = [ ...new Set ( contributionIds ) ]
26+ const uniqueContributionIds = [ ...new Set ( contributionIds ) ] ;
2727 const uniqueContributionPromises = uniqueContributionIds . map ( ( id ) =>
2828 fetch ( `${ urlBase } /${ id } ` , {
2929 method : "PATCH" ,
3030 headers : postHeaders ,
3131 body : JSON . stringify ( body ) ,
3232 } )
33- )
33+ ) ;
3434
35- const responses = await Promise . all ( uniqueContributionPromises )
35+ const responses = await Promise . all ( uniqueContributionPromises ) ;
3636
3737 responses . forEach ( async ( response ) => {
3838 if ( ! response . ok ) {
39- console . error ( "Erreur de réponse" , response )
40- } else {
41- const responseData = await response . json ( )
39+ console . error ( "Erreur de réponse" , response ) ;
4240 }
43- } )
41+ } ) ;
4442
45- refetch ( )
43+ refetch ( ) ;
4644 } catch ( error ) {
47- console . error ( "Erreur lors de la soumission du formulaire" , error )
45+ console . error ( "Erreur lors de la soumission du formulaire" , error ) ;
4846 }
49- }
47+ } ;
5048
5149 const handleExportClick = async ( ) => {
5250 const dataToExport : ContributionData [ ] = dataList
@@ -59,57 +57,57 @@ const ExcelExportButton: React.FC<ExcelExportButtonProps> = ({ refetch }) => {
5957 first_name : item . first_name || "" ,
6058 last_name : item . last_name || "" ,
6159 export : false ,
62- } ) )
60+ } ) ) ;
6361
6462 if ( dataToExport . length === 0 ) {
65- toast . error ( "Aucune publication à exporter !" )
66- return
63+ toast . error ( "Aucune publication à exporter !" ) ;
64+ return ;
6765 }
6866
6967 const uniqueContributionIds = [
7068 ...new Set ( dataToExport . map ( ( item ) => item . contribution_id ) ) ,
71- ]
69+ ] ;
7270
73- await markAsTreated ( uniqueContributionIds )
71+ await markAsTreated ( uniqueContributionIds ) ;
7472
7573 // Créer un nouveau workbook avec ExcelJS
76- const workbook = new ExcelJS . Workbook ( )
77- const worksheet = workbook . addWorksheet ( "Sheet1" )
74+ const workbook = new ExcelJS . Workbook ( ) ;
75+ const worksheet = workbook . addWorksheet ( "Sheet1" ) ;
7876
7977 // Ajouter les en-têtes
8078 if ( dataToExport . length > 0 ) {
81- const headers = Object . keys ( dataToExport [ 0 ] )
82- worksheet . addRow ( headers )
79+ const headers = Object . keys ( dataToExport [ 0 ] ) ;
80+ worksheet . addRow ( headers ) ;
8381
8482 // Ajouter les données
8583 dataToExport . forEach ( ( row ) => {
86- worksheet . addRow ( Object . values ( row ) )
87- } )
84+ worksheet . addRow ( Object . values ( row ) ) ;
85+ } ) ;
8886 }
8987
9088 // Générer et télécharger le fichier
91- const buffer = await workbook . xlsx . writeBuffer ( )
89+ const buffer = await workbook . xlsx . writeBuffer ( ) ;
9290 const blob = new Blob ( [ buffer ] , {
9391 type : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ,
94- } )
95- const url = window . URL . createObjectURL ( blob )
96- const link = document . createElement ( "a" )
97- link . href = url
98- link . download = "export.xlsx"
99- document . body . appendChild ( link )
100- link . click ( )
101- document . body . removeChild ( link )
102- window . URL . revokeObjectURL ( url )
92+ } ) ;
93+ const url = window . URL . createObjectURL ( blob ) ;
94+ const link = document . createElement ( "a" ) ;
95+ link . href = url ;
96+ link . download = "export.xlsx" ;
97+ document . body . appendChild ( link ) ;
98+ link . click ( ) ;
99+ document . body . removeChild ( link ) ;
100+ window . URL . revokeObjectURL ( url ) ;
103101
104102 setDataList ( ( prevState ) =>
105103 prevState . map ( ( item ) => ( { ...item , export : false } ) )
106- )
104+ ) ;
107105 toast ( "Panier vidé après exportation !" , {
108106 style : {
109107 backgroundColor : "#c3fad5" ,
110108 } ,
111- } )
112- }
109+ } ) ;
110+ } ;
113111
114112 const handleCopyToClipboardClick = async ( ) => {
115113 const dataToCopy = dataList
@@ -121,75 +119,75 @@ const ExcelExportButton: React.FC<ExcelExportButtonProps> = ({ refetch }) => {
121119 full_name : item . fullName || "" ,
122120 first_name : item . first_name || "" ,
123121 last_name : item . last_name || "" ,
124- } ) )
122+ } ) ) ;
125123
126124 if ( dataToCopy . length === 0 ) {
127- toast . error ( "Aucune publication à copier !" )
128- return
125+ toast . error ( "Aucune publication à copier !" ) ;
126+ return ;
129127 }
130128
131129 const uniqueContributionIds = [
132130 ...new Set ( dataToCopy . map ( ( item ) => item . contribution_id ) ) ,
133- ]
131+ ] ;
134132
135133 const formattedData = dataToCopy
136134 . map (
137135 ( item ) =>
138136 `${ item . person_id } \t${ item . publi_id } \t${ item . full_name } \t${ item . first_name } \t${ item . last_name } `
139137 )
140- . join ( "\n" )
138+ . join ( "\n" ) ;
141139
142140 try {
143- await navigator . clipboard . writeText ( formattedData )
144- toast . success ( "Données copiées dans le presse-papiers !" )
141+ await navigator . clipboard . writeText ( formattedData ) ;
142+ toast . success ( "Données copiées dans le presse-papiers !" ) ;
145143 } catch ( err ) {
146- toast . error ( "Erreur lors de la copie des données !" )
144+ toast . error ( "Erreur lors de la copie des données !" ) ;
147145 }
148146
149- await markAsTreated ( uniqueContributionIds )
147+ await markAsTreated ( uniqueContributionIds ) ;
150148
151149 setDataList ( ( prevState ) =>
152150 prevState . map ( ( item ) => ( { ...item , export : false } ) )
153- )
151+ ) ;
154152 toast ( "Panier vidé après la copie !" , {
155153 style : {
156154 backgroundColor : "#c3fad5" ,
157155 } ,
158- } )
159- }
156+ } ) ;
157+ } ;
160158
161159 const handleRemoveClick = ( publiId : any ) => {
162160 setDataList ( ( prevState ) => {
163161 const newList = prevState . map ( ( item ) =>
164162 item . export === true && item . publi_id === publiId
165163 ? { ...item , export : false }
166164 : item
167- )
165+ ) ;
168166
169- const removedItem = newList . find ( ( item ) => item . publi_id === publiId )
167+ const removedItem = newList . find ( ( item ) => item . publi_id === publiId ) ;
170168 if ( removedItem ) {
171169 toast ( `Element retiré ! : ${ removedItem . fullName } ` , {
172170 style : {
173171 backgroundColor : "#d64d00" ,
174172 color : "#fff" ,
175173 } ,
176- } )
174+ } ) ;
177175 }
178176
179- return newList
180- } )
181- }
177+ return newList ;
178+ } ) ;
179+ } ;
182180
183181 const handleClearClick = ( ) => {
184182 setDataList ( ( prevState ) =>
185183 prevState . map ( ( item ) => ( { ...item , export : false } ) )
186- )
184+ ) ;
187185 toast ( "Panier vidé !" , {
188186 style : {
189187 backgroundColor : "#c3fad5" ,
190188 } ,
191- } )
192- }
189+ } ) ;
190+ } ;
193191
194192 const uniqueExportCount = dataList
195193 . filter ( ( item ) => item . export === true )
@@ -200,10 +198,10 @@ const ExcelExportButton: React.FC<ExcelExportButtonProps> = ({ refetch }) => {
200198 uniqueItem . publi_id === item . publi_id
201199 )
202200 ) {
203- unique . push ( item )
201+ unique . push ( item ) ;
204202 }
205- return unique
206- } , [ ] ) . length
203+ return unique ;
204+ } , [ ] ) . length ;
207205
208206 return (
209207 < div className = "basket" >
@@ -298,7 +296,7 @@ const ExcelExportButton: React.FC<ExcelExportButtonProps> = ({ refetch }) => {
298296 </ div >
299297 </ div >
300298 </ div >
301- )
302- }
299+ ) ;
300+ } ;
303301
304- export default ExcelExportButton
302+ export default ExcelExportButton ;
0 commit comments