import { useMemo, useState } from 'react' import { Link, useParams } from 'react-router-dom' import { useGroups } from '../context/GroupsContext.jsx' function formatEUR(n) { return new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 2, }).format(Number(n) || 0) } function formatDate(iso) { try { return new Intl.DateTimeFormat('fr-FR', { dateStyle: 'short', timeStyle: 'short', }).format(new Date(iso)) } catch { return iso || '—' } } export default function GroupDetailPage() { const { groupId } = useParams() const { groups, addGroupOrder, getOrdersForGroup, groupTotalEuros, } = useGroups() const group = useMemo( () => groups.find((g) => g.id === String(groupId)), [groups, groupId], ) const lines = group ? getOrdersForGroup(group.id) : [] const total = group ? groupTotalEuros(group.id) : 0 const [contributor, setContributor] = useState('') const [amount, setAmount] = useState('') const [note, setNote] = useState('') const [err, setErr] = useState(null) const [ok, setOk] = useState(null) function handleSubmit(e) { e.preventDefault() setErr(null) setOk(null) if (!group) return try { addGroupOrder(group.id, { contributor, amount, note, }) setContributor('') setAmount('') setNote('') setOk('Contribution enregistrée (POST /api/groups/:id/orders en local).') } catch (ex) { setErr(ex?.message || 'Impossible d’enregistrer.') } } if (!group) { return (
Groupe introuvable.
← Liste des groupes
Pool actuel : {formatEUR(total)} · id{' '}
{group.id.slice(0, 8)}…
{err}
) : null} {ok ?{ok}
: null}Personne n’a encore participé.
) : ({o.contributor} · {formatDate(o.createdAt)} ·{' '} {formatEUR(o.amountEuros)}
{o.note ? ({o.note}
) : null}