@framework/uiDodock v5 intègre désormais la bibliothèque de composants UI @framework/ui, backportée depuis la branche develop de Frappe. Cette bibliothèque offre aux développeurs et administrateurs un ensemble de composants Vue.js réutilisables pour personnaliser et enrichir l'interface utilisateur de Dokos.
La bibliothèque @framework/ui inclut les composants suivants, conçus pour être utilisés dans des applications personnalisées ou des extensions de l'interface :
FormLayoutUn rendu de formulaire piloté par schéma, supportant les grilles, les téléversements de fichiers et les éditeurs de code.
Cas d'usage :
Exemple d'utilisation :
import { FormLayout } from '@framework/ui';
// Définir un schéma de formulaire
const schema = {
fields: [
{
fieldtype: 'Data',
fieldname: 'customer_name',
label: 'Nom du client',
reqd: 1
},
{
fieldtype: 'Attach',
fieldname: 'attachment',
label: 'Pièce jointe'
}
]
};
// Rendre le formulaire dans un dialogue
const dialog = new frappe.ui.Dialog({
title: 'Nouveau client',
size: 'large'
});
dialog.body.appendChild(FormLayout.render(schema));
dialog.show();
PhoneInputUn champ de saisie pour les numéros de téléphone avec validation automatique des indicatifs internationaux.
Cas d'usage :
Exemple d'utilisation :
import { PhoneInput } from '@framework/ui';
// Ajouter un champ PhoneInput à un formulaire
const phoneField = PhoneInput.create({
label: 'Téléphone',
fieldname: 'phone',
country: 'FR' // Indicatif par défaut
});
frm.add_custom_field(phoneField);
NotificationsUn panneau de notifications extensible, permettant de filtrer les notifications par application et par type.
Cas d'usage :
Configuration : Les notifications sont gérées via les doctypes Notification Type et Notification Type Preference, permettant de définir des types de notifications personnalisés et de configurer les préférences d'envoi (email, popup, etc.).
Pour les développeurs :
ActivityTimelineUn composant affichant une timeline des activités liées à un document (emails, commentaires, modifications).
Cas d'usage :
Exemple d'utilisation :
import { ActivityTimeline } from '@framework/ui';
// Récupérer les activités pour un document
frappe.call({
method: 'frappe.desk.form.activity.get_activity_timeline',
args: {
doctype: 'Customer',
docname: 'Maison Verte SARL'
},
callback: function(r) {
if (r.message) {
// Afficher la timeline dans un conteneur
const timeline = ActivityTimeline.create(r.message);
$('.timeline-container').append(timeline);
}
}
});
ListViewControlsUn ensemble de contrôles pour personnaliser les vues liste (filtres, colonnes, paramètres).
Cas d'usage :
Exemple d'utilisation :
import { ListViewControls } from '@framework/ui';
// Ajouter une colonne synthétique à une vue liste
frappe.listview_settings['Sales Invoice'] = {
onload: function(listview) {
const controls = ListViewControls.create(listview);
controls.addSyntheticColumn({
label: 'Montant dû',
fieldname: 'outstanding_amount',
fieldtype: 'Currency'
});
}
};
ComposerUn composant pour rédiger des emails ou des commentaires avec une interface riche.
Cas d'usage :
Exemple d'utilisation :
import { Composer } from '@framework/ui';
// Ouvrir un compositeur d'email
const composer = Composer.create({
doctype: 'Customer',
docname: 'Maison Verte SARL',
type: 'email',
subject: 'Suivi de votre commande'
});
composer.show();
La bibliothèque @framework/ui introduit des doctypes pour gérer les types de notifications et leurs préférences :
Notification TypeCe doctype permet de définir des types de notifications personnalisés, avec les champs suivants :
| Champ | Description |
|---|---|
| Nom | Identifiant unique du type de notification. |
| Module | Module associé (ex. : Dokos, CRM). |
| Application | Application source (ex. : dokos, frappe). |
| Titre | Titre affiché dans le panneau de notifications. |
| Description | Description détaillée de la notification. |
| Document Type | Type de document associé (ex. : Sales Invoice). |
| Chemin | Chemin vers le document ou l'action à effectuer. |
Notification Type PreferenceCe doctype permet de configurer les préférences d'envoi pour chaque type de notification :
| Champ | Description |
|---|---|
| Utilisateur | Utilisateur concerné par les préférences. |
| Type de notification | Type de notification associé. |
| Préférence d'email | Activer/désactiver l'envoi d'emails pour ce type. |
| Préférence de popup | Activer/désactiver les notifications popup. |
Notification LogCe doctype stocke les notifications envoyées aux utilisateurs, avec les champs suivants :
| Champ | Description |
|---|---|
| Utilisateur | Destinataire de la notification. |
| Type de notification | Type de notification (lien vers Notification Type). |
| Titre | Titre de la notification. |
| Description | Description détaillée. |
| Application | Application source (ex. : dokos). |
| Document Type | Type de document associé. |
| Document Name | Nom du document associé. |
| Lu | Statut de lecture de la notification. |
@framework/uiimport { FormLayout } from '@framework/ui';
const schema = {
fields: [
{
fieldtype: 'Data',
fieldname: 'customer_name',
label: 'Nom du client'
}
]
};
const form = FormLayout.render(schema);
$('.form-container').append(form);
import { ListViewControls } from '@framework/ui';
frappe.listview_settings['Sales Invoice'] = {
onload: function(listview) {
const controls = ListViewControls.create(listview);
controls.addSyntheticColumn({
label: 'Montant dû',
fieldname: 'outstanding_amount',
fieldtype: 'Currency'
});
}
};
@framework/ui sont conçus pour être réutilisés dans plusieurs applications. Évitez de dupliquer du code en les intégrant dans vos personnalisations.Objectif : Afficher une timeline des activités (emails, commentaires) sur la fiche client.
Customer :// customer.js
frappe.ui.form.on('Customer', {
refresh: function(frm) {
// Importer le composant ActivityTimeline
import('@framework/ui').then(({ ActivityTimeline }) => {
// Récupérer les activités
frappe.call({
method: 'frappe.desk.form.activity.get_activity_timeline',
args: {
doctype: 'Customer',
docname: frm.doc.name
},
callback: function(r) {
if (r.message) {
// Créer et afficher la timeline
const timeline = ActivityTimeline.create(r.message);
frm.add_custom_section('activity_timeline', 'Timeline des activités');
frm.fields_dict['activity_timeline'].$wrapper.append(timeline);
}
}
});
});
}
});
Pour les administrateurs :
@framework/ui sont disponibles pour tous les types de formulaires personnalisés.@framework/ui sont conçus pour Dodock v5 et versions ultérieures. Ils ne sont pas compatibles avec les versions antérieures..md dans le dossier ui/ pour des détails supplémentaires.