Dokos permet désormais de personnaliser dynamiquement les onglets dans les formulaires grâce à deux nouveaux mécanismes : les overrides d'onglets et la résolution de l'onglet actif. Ces fonctionnalités sont particulièrement utiles pour adapter l'interface en fonction des données ou des permissions de l'utilisateur.
L'override d'onglet permet de modifier dynamiquement la visibilité (hidden) ou le libellé (label) d'un onglet pour un rendu spécifique, sans altérer la structure originale du formulaire.
Supposons que vous souhaitez masquer l'onglet "Historique des paiements" pour les clients dont le solde est à jour.
frappe.ui.form.on('Client', {
refresh(frm) {
// Vérifie si le solde est à jour
if (frm.doc.outstanding_amount === 0) {
// Applique un override pour masquer l'onglet
frm.set_df_property('historique_paiements', 'hidden', 1, 'tab_override');
}
}
});
::: info
L'override est appliqué après la résolution des dépendances (depends_on), ce qui permet de lever dynamiquement un onglet masqué par une règle conditionnelle.
:::
update:activeTab)Lorsque l'onglet demandé par l'utilisateur est masqué (via depends_on ou un override), Dokos sélectionne automatiquement le premier onglet visible. Le nouvel événement update:activeTab permet de suivre quel onglet est réellement affiché, ce qui est utile pour synchroniser d'autres éléments de l'interface.
Dans un formulaire Fournisseur, si l'onglet "Contrats" est masqué (car aucun contrat n'est enregistré), Dokos bascule automatiquement vers l'onglet "Informations générales". Voici comment suivre ce changement :
// Dans un script client
frm.on('active_tab_change', (activeTab) => {
frappe.show_alert({
message: `Onglet actif : ${activeTab}`,
indicator: 'blue'
});
});
depends_on) pour masquer des onglets, sauf si vous avez besoin d'un contrôle fin par rendu.label, son identité (utilisée dans les scripts) reste inchangée.depends_on.Dokos expose désormais deux fonctions pour travailler avec les onglets :
tabStripLabel(tab) : Retourne le libellé affiché dans l'interface (ex : "Détails" pour un onglet sans libellé).resolveActiveTab(tabs, desiredTab) : Calcule l'onglet actif en tenant compte des masquages.const { tabStripLabel, resolveActiveTab } = frappe.ui.form;
// Affiche le libellé de l'onglet
console.log(tabStripLabel(frm.doc.__onload.tabs[0]));
// Résout l'onglet actif
const activeTab = resolveActiveTab(frm.doc.__onload.tabs, 'contrats');
::: dokos Cette fonctionnalité est réservée aux développeurs et administrateurs système. Pour l'utiliser, ajoutez du code JavaScript dans les Scripts clients ou les Scripts serveurs des formulaires concernés. :::