import { useState } from 'react' import { searchTicketApi, deliverClaimApi } from '../services/employee' import { useHandleAuthError } from '../hooks/useHandleAuthError' function formatDate(dateStr) { return new Date(dateStr).toLocaleDateString('fr-FR', { day: '2-digit', month: 'long', year: 'numeric', hour: '2-digit', minute: '2-digit', }) } const STATUS_CONFIG = { PENDING: { label: 'À remettre', classes: 'bg-yellow-100 text-yellow-800' }, DELIVERED: { label: 'Déjà remis', classes: 'bg-green-100 text-green-800' }, CANCELLED: { label: 'Expiré', classes: 'bg-gray-100 text-gray-500' }, } export default function Employe() { const handleAuthError = useHandleAuthError() const [code, setCode] = useState('') const [result, setResult] = useState(null) const [searching, setSearching] = useState(false) const [delivering, setDelivering] = useState(false) const [searchError, setSearchError] = useState('') const [deliverError, setDeliverError] = useState('') const [success, setSuccess] = useState(false) const handleSearch = async (e) => { e.preventDefault() setResult(null) setSuccess(false) setDeliverError('') setSearchError('') setSearching(true) try { const data = await searchTicketApi(code.trim()) setResult(data) } catch (err) { if (!handleAuthError(err)) setSearchError(err.message) } finally { setSearching(false) } } const handleDeliver = async () => { if (!result?.claim?.id) return setDeliverError('') setDelivering(true) try { await deliverClaimApi(result.claim.id) setResult((prev) => ({ ...prev, claim: { ...prev.claim, status: 'DELIVERED', claimedAt: new Date().toISOString() }, })) setSuccess(true) } catch (err) { if (!handleAuthError(err)) setDeliverError(err.message) } finally { setDelivering(false) } } const handleReset = () => { setCode('') setResult(null) setSuccess(false) setSearchError('') setDeliverError('') } const statusCfg = result ? (STATUS_CONFIG[result.claim?.status] ?? STATUS_CONFIG.PENDING) : null return (
Recherchez un code ticket pour remettre le lot au client.
Lot remis avec succès — espace client mis à jour.
{result.lot.name}
{result.lot.description}
{result.lot.value && (Valeur : {result.lot.value} €
)}Client
{result.client.firstname} {result.client.lastname}
{result.client.email}
Ticket
Code :{' '} {result.ticket.code}
Utilisé le : {formatDate(result.ticket.usedAt)}
{result.claim.claimedAt && (Remis le : {formatDate(result.claim.claimedAt)}
)}