Confirmation
Boîte de confirmation avec deux boutons (Oui/Non), gestion d'erreur avec countdown automatique, état de chargement. Conçue pour être utilisée à l'intérieur d'un Modal.
Cliquez sur le bouton pour ouvrir une modale de confirmation de suppression. L'action simulée prend 1,5 seconde.
Exemple complet avec Modal + Confirmation. Copiez-collez dans votre projet et remplacez fakeDelete par votre vraie action.
"use client";
import { useState } from "react";
import { Modal, Confirmation, ApiError } from "@ramses1er/cbk-toolkit/client";
export default function MaPage() {
const [open, setOpen] = useState(false);
const [pending, setPending] = useState(false);
const [error, setError] = useState<ApiError | null>(null);
const handleDelete = async () => {
setPending(true);
setError(null);
try {
await deleteUser(id); // votre appel API
setOpen(false);
} catch {
setError(new ApiError({ message: "Erreur lors de la suppression", status: 500 }));
} finally {
setPending(false);
}
};
return (
<div>
<button onClick={() => setOpen(true)}>
Supprimer l'utilisateur
</button>
<Modal
title="Confirmation de suppression"
isOpen={open}
onClose={() => { if (!pending) setOpen(false); }}
>
{(requestClose) => (
<Confirmation
question="Voulez-vous vraiment supprimer cet utilisateur ?"
requestClose={requestClose}
messageNo="Non"
messageYes="Oui je veux supprimer"
onAction={handleDelete}
isProcessing={pending}
error={error}
resetRequest={() => setError(null)}
/>
)}
</Modal>
</div>
);
}Confirmation est fait pour Modal
Le Confirmation est toujours utilisé à l'intérieur d'un Modal. La prop requestCloselui est passée via le render prop du Modal pour fermer les deux à la confirmation réussie.
Gestion d'erreur
Si onActionlance une erreur, le message d'erreur apparaît dans la Confirmation avec un compte à rebours de 10 secondes. Passé ce délai,resetRequestest automatiquement appelé pour effacer l'erreur.
Cycle de vie
- L'utilisateur clique sur "Supprimer"
- La modale s'ouvre avec la confirmation
- Il clique "Oui" →
onActionest appelé - Succès →
requestCloseferme la modale - Erreur → affichée avec countdown, possibilité de ré-essayer
| Prop | Type | Défaut | Description |
|---|---|---|---|
| question | string | requis | Texte de la question à confirmer |
| messageYes | string | requis | Label du bouton d'action |
| messageNo | string | requis | Label du bouton d'annulation |
| requestClose | () => void | requis | Ferme la modale parente |
| onAction | () => Promise<void | boolean | { success: true }> | requis | Callback asynchrone de l'action |
| isProcessing | boolean | requis | État de chargement (désactive les boutons) |
| error | ApiError | null | null | Erreur à afficher avec countdown |
| resetRequest | () => void | requis | Réinitialise l'état d'erreur |
- Si
questionest vide → ne rend rien isProcessingdésactive les deux boutons et affiche «operation en cours»- Si
errorest présent → un message d'erreur apparaît avec un compteur de 10s - Le compteur déclenche automatiquement
resetRequestà zéro - Les boutons
resetRequestetrequestCloseréinitialisent aussi le countdown avant d'agir