From b25fd5da495e7971775a6cc2b12f5715e992b849 Mon Sep 17 00:00:00 2001 From: billisdead Date: Tue, 23 Jun 2026 16:34:35 +0200 Subject: [PATCH] Show API error message to user instead of generic fallback - Export ApiError from api-client-react package - home.tsx onError: extract error.data.message from ApiError and display it (cooldown, rate limit, consent_required, validation messages are now visible) - Differentiate alert title: "Contribution non retenue" for AI rejection (has a reason), "Envoi impossible" for technical errors Co-Authored-By: Claude Sonnet 4.6 --- artifacts/voix-du-peuple/src/pages/home.tsx | 17 ++++++++++++++--- lib/api-client-react/src/index.ts | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/artifacts/voix-du-peuple/src/pages/home.tsx b/artifacts/voix-du-peuple/src/pages/home.tsx index 5c707ec..d80f50f 100644 --- a/artifacts/voix-du-peuple/src/pages/home.tsx +++ b/artifacts/voix-du-peuple/src/pages/home.tsx @@ -18,6 +18,7 @@ import { addExtraHeader, removeExtraHeader, getVisitorId, + ApiError, } from "@workspace/api-client-react"; import { ConsentDialog } from "@/components/consent-dialog"; import { Button } from "@/components/ui/button"; @@ -154,8 +155,14 @@ export default function Home() { queryClient.invalidateQueries({ queryKey: getListIdeasQueryKey() }); queryClient.invalidateQueries({ queryKey: getGetIdeaStatsQueryKey() }); }, - onError: () => { - setSubmitResult({ success: false, message: "Une erreur est survenue lors de l'envoi. Veuillez réessayer." }); + onError: (error) => { + const apiMessage = error instanceof ApiError + ? (error.data as { message?: string } | null)?.message + : undefined; + setSubmitResult({ + success: false, + message: apiMessage ?? "Une erreur est survenue lors de l'envoi. Veuillez réessayer.", + }); }, onSettled: () => { removeExtraHeader("x-hcaptcha-token"); @@ -411,7 +418,11 @@ export default function Home() { : } - {submitResult.success ? "Contribution enregistrée" : "Contribution non retenue"} + {submitResult.success + ? "Contribution enregistrée" + : submitResult.reason + ? "Contribution non retenue" + : "Envoi impossible"} {submitResult.message} diff --git a/lib/api-client-react/src/index.ts b/lib/api-client-react/src/index.ts index 7f25ba3..d4ff605 100644 --- a/lib/api-client-react/src/index.ts +++ b/lib/api-client-react/src/index.ts @@ -7,5 +7,6 @@ export { getVisitorId, addExtraHeader, removeExtraHeader, + ApiError, } from "./custom-fetch"; export type { AuthTokenGetter } from "./custom-fetch";