Modales et boutons dans Dokos
Modales et boutons dans Dokos
Une modale de confirmation demande à l'utilisateur de valider une action avant son exécution. Dodock propose deux fonctions. Leur différence est la couleur du bouton principal.
| Fonction | Bouton principal | Usage |
|---|---|---|
frappe.confirm | Neutre (« Oui ») | Action réversible ou sans risque. |
frappe.warn | Rouge | Action destructive : suppression, annulation. |
Ce que voit l'utilisateur
Les actions destructives standard ouvrent une modale frappe.warn :
| Action | Titre | Message | Bouton rouge | Bouton secondaire |
|---|---|---|---|---|
| Supprimer un document | « Confirmation » | « Validez-vous la suppression du document {0} ? » | « Supprimer » | « Annuler » |
| Annuler un document validé | « Confirmation » | « Validez-vous l'annulation du document {0} ? » | « Oui » | « Non » |
Pour l'annulation, le bouton secondaire est « Non ». Un bouton « Annuler » serait ambigu quand l'action est elle-même une annulation.
La touche Entrée valide le bouton principal. Échap ou la croix ferme la modale sans exécuter l'action.
Demander une confirmation dans un script
frappe.confirm(
__("Recalculer les prix de toutes les lignes ?"),
() => frm.call("recalculer_prix"), // Oui
() => frappe.ui.toast({ message: __("Prix inchangés") }) // Non ou fermeture
);
Signature : frappe.confirm(message, confirm_action, reject_action, primary_label, secondary_label, opts). opts est passé à frappe.ui.Dialog.
Avertir avant une action destructive
frappe.warn(
__("Confirmation"),
__("Supprimer les {0} lignes sélectionnées ?", [selected.length]),
() => supprimer_lignes(selected),
__("Supprimer")
);
Signature : frappe.warn(title, message_html, proceed_action, primary_label, is_minimizable, secondary_label). Le bouton secondaire vaut « Annuler » par défaut. Les deux fonctions renvoient la modale (frappe.ui.Dialog).
Exemple fictif : recalculer_prix et supprimer_lignes sont des méthodes de votre application.
message_html est inséré comme HTML. Échappez toute valeur saisie par un utilisateur avec frappe.utils.escape_html avant de l'insérer.