'use client'; import React, { useState, useRef } from 'react'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import { Button } from 'primereact/button'; import { InputText } from 'primereact/inputtext'; import { Dropdown } from 'primereact/dropdown'; import { Card } from 'primereact/card'; import { Toast } from 'primereact/toast'; import { Tag } from 'primereact/tag'; import { FilterMatchMode } from 'primereact/api'; import { materielService } from '../../../../services/api'; import { Materiel, TypeMateriel, StatutMateriel } from '../../../../types/btp'; import { formatCurrency } from '../../../../utils/formatters'; const RechercheMaterielsPage = () => { const [materiels, setMateriels] = useState([]); const [loading, setLoading] = useState(false); const [searchParams, setSearchParams] = useState({ nom: '', type: '', marque: '', statut: '', localisation: '' }); const toast = useRef(null); const dt = useRef>(null); const typeOptions = [ { label: 'Tous les types', value: '' }, ...Object.values(TypeMateriel).map(type => ({ label: type.replace('_', ' '), value: type })) ]; const statutOptions = [ { label: 'Tous les statuts', value: '' }, ...Object.values(StatutMateriel).map(statut => ({ label: statut.replace('_', ' '), value: statut })) ]; const rechercher = async () => { try { setLoading(true); const data = await materielService.search(searchParams); setMateriels(data); toast.current?.show({ severity: 'success', summary: 'Recherche effectuée', detail: `${data.length} résultat(s) trouvé(s)`, life: 3000 }); } catch (error) { toast.current?.show({ severity: 'error', summary: 'Erreur', detail: 'Erreur lors de la recherche', life: 3000 }); } finally { setLoading(false); } }; const exportCSV = () => { dt.current?.exportCSV(); }; const onInputChange = (e: React.ChangeEvent, name: string) => { const val = (e.target && e.target.value) || ''; setSearchParams(prev => ({ ...prev, [name]: val })); }; const onDropdownChange = (e: any, name: string) => { setSearchParams(prev => ({ ...prev, [name]: e.value })); }; const typeBodyTemplate = (rowData: Materiel) => { return ( ); }; const statutBodyTemplate = (rowData: Materiel) => { return ( ); }; const valeurBodyTemplate = (rowData: Materiel) => { return formatCurrency(rowData.valeurActuelle || rowData.valeurAchat); }; const getTypeSeverity = (type?: TypeMateriel) => { switch (type) { case TypeMateriel.ENGIN_CHANTIER: return 'danger'; case TypeMateriel.OUTIL_ELECTRIQUE: return 'warning'; case TypeMateriel.EQUIPEMENT_SECURITE: return 'success'; case TypeMateriel.VEHICULE: return 'info'; default: return undefined; } }; const getStatutSeverity = (statut?: StatutMateriel) => { switch (statut) { case StatutMateriel.DISPONIBLE: return 'success'; case StatutMateriel.UTILISE: return 'warning'; case StatutMateriel.MAINTENANCE: return 'info'; case StatutMateriel.HORS_SERVICE: return 'danger'; default: return undefined; } }; return (

Recherche de Matériel

Critères de recherche
onInputChange(e, 'nom')} placeholder="Nom du matériel" />
onInputChange(e, 'marque')} placeholder="Marque" />
onInputChange(e, 'localisation')} placeholder="Localisation" />
onDropdownChange(e, 'type')} options={typeOptions} />
onDropdownChange(e, 'statut')} options={statutOptions} />
{materiels.length > 0 && (
Résultats ({materiels.length})
)}
); }; export default RechercheMaterielsPage;