Dokos a migré ses menus déroulants vers le système Espresso, améliorant l'accessibilité, la compatibilité mobile et la cohérence visuelle de l'interface. Cette évolution concerne tous les menus de la barre d'en-tête : le menu •••, le menu Actions, et les groupes de boutons personnalisés (comme "Créer ⌄" ou "Vue ⌄").
remove_custom_button) fonctionne correctement.// Dans un script client ou un fichier JS personnalisé
frappe.ui.page.add_menu_item("Mon Option", () => {
frappe.msgprint("Option sélectionnée !");
}, "mon-icone"); // Icône optionnelle (ex: "i-mdi-cog")
frappe.ui.page.add_actions_menu_item("Exporter en PDF", () => {
frappe.call({
method: "mon_app.api.export_pdf",
args: { docname: cur_frm.doc.name }
});
});
const group = frappe.ui.add_custom_button_group("Options avancées");
group.add_button("Valider", () => {
cur_frm.save();
});
group.add_button("Annuler", () => {
cur_frm.reload_doc();
});
add_menu_item, remove_custom_button, etc.) plutôt que de manipuler les éléments cachés..addClass("disabled") sur l'élément retourné par les méthodes d'ajout.Scénario : La société Maison Verte SARL souhaite ajouter un bouton "Envoyer par email" dans le menu Actions de la fiche Client.
Solution :
// Dans un script client lié au DocType Client
frappe.ui.form.on("Customer", {
refresh: function(frm) {
if (frm.doc.docstatus === 1) {
frappe.ui.page.add_actions_menu_item(
"Envoyer par email",
() => {
frappe.call({
method: "frappe.email.queue.queue_doc",
args: {
doctype: frm.doctype,
docname: frm.docname,
recipients: frm.doc.email_id
}
});
}
);
}
}
});
| Problème | Solution |
|---|---|
| Menu qui ne s'affiche pas | Vérifiez que le conteneur de page est chargé (frappe.ui.page existe). |
| Bouton personnalisé qui ne s'affiche pas | Utilisez add_custom_button au lieu de manipuler le DOM directement. |
| Raccourci clavier qui ne fonctionne pas | Assurez-vous que le callback est bien enregistré et que le focus est sur la page. |
| Menu coupé à l'écran | Le positionnement automatique d'Espresso devrait résoudre ce problème. Si persistant, vérifiez les styles CSS personnalisés. |