feat: ajouter le litige par un clic et isoler les sauvegardes du build
Some checks failed
Validation applicative / TypeScript, tests et build (push) Failing after 1m51s

This commit is contained in:
Manus
2026-11-03 14:51:56 +00:00
parent a6d90a90c3
commit 478b069fcd
3 changed files with 51 additions and 1 deletions

View File

@@ -66,6 +66,21 @@ export default function InvoiceDetail() {
const upsertLearningMutation = trpc.learnings.upsert.useMutation();
// Le premier clic ajoute le litige, puis ouvre la saisie du commentaire.
const markDisputeMutation = trpc.invoices.setDispute.useMutation({
onSuccess: async () => {
utils.invoices.getById.setData({ id: invoiceId }, current => current ? { ...current, isDisputed: 1 } : current);
setDisputeDialogOpen(true);
toast.success("Facture ajoutée aux litiges");
await Promise.all([
utils.invoices.getById.invalidate({ id: invoiceId }),
utils.invoices.list.invalidate(),
utils.invoices.listDisputes.invalidate(),
]);
},
onError: error => toast.error(error.message || "Impossible d’ajouter cette facture aux litiges"),
});
const updateMutation = trpc.invoices.update.useMutation({
onSuccess: () => {
toast.success("Facture mise à jour avec succès");
@@ -198,7 +213,10 @@ export default function InvoiceDetail() {
</div>
</div>
<div className="flex flex-wrap gap-2">
<Button variant="outline" onClick={() => setDisputeDialogOpen(true)} className="border-amber-200 bg-amber-50 text-amber-800 hover:bg-amber-100">
<Button variant="outline" disabled={markDisputeMutation.isPending} onClick={() => {
if (canEdit && invoice.isDisputed !== 1) markDisputeMutation.mutate({ id: invoiceId, isDisputed: true });
else setDisputeDialogOpen(true);
}} className="border-amber-200 bg-amber-50 text-amber-800 hover:bg-amber-100">
<Flag className="w-4 h-4 mr-2" aria-hidden="true" />
Litige
{invoice.isDisputed === 1 ? <Badge className="ml-2 bg-amber-100 text-amber-800 hover:bg-amber-100">En cours</Badge> : null}