Confirmation

Documentation de cbk-toolkit

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.

Démo en direct — Modal + Confirmation

Cliquez sur le bouton pour ouvrir une modale de confirmation de suppression. L'action simulée prend 1,5 seconde.

Code source complet — copier-coller

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>
  );
}
Explication du pattern

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

  1. L'utilisateur clique sur "Supprimer"
  2. La modale s'ouvre avec la confirmation
  3. Il clique "Oui" → onAction est appelé
  4. Succès → requestClose ferme la modale
  5. Erreur → affichée avec countdown, possibilité de ré-essayer
Props
PropTypeDéfautDescription
questionstringrequisTexte de la question à confirmer
messageYesstringrequisLabel du bouton d'action
messageNostringrequisLabel du bouton d'annulation
requestClose() => voidrequisFerme la modale parente
onAction() => Promise<void | boolean | { success: true }>requisCallback asynchrone de l'action
isProcessingbooleanrequisÉtat de chargement (désactive les boutons)
errorApiError | nullnullErreur à afficher avec countdown
resetRequest() => voidrequisRéinitialise l'état d'erreur
Comportement
  • Si questionest vide → ne rend rien
  • isProcessing dé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 resetRequest et requestClose réinitialisent aussi le countdown avant d'agir