Composants → bpm.masterDetail

bpm.masterDetail

Vue maître/détail responsive : liste à gauche, panneau de détail à droite, avec recherche optionnelle. Sur mobile, le détail s'ouvre en plein cadre avec un bouton retour. Idéal pour parcourir une collection (clients, tickets, commandes) tout en gardant le détail de l'élément sélectionné sous les yeux.

StableMise en page⏱ 2 min

Atelier Garnier

Lyon

Segment
PME — Industrie
Contact
Claire Garnier
E-mail
contact@atelier-garnier.fr
CA annuel
184 000 €
Client depuis
2021
Python
columns = [{"key": "name", "label": "Client"}, {"key": "city", "label": "Ville"}]
bpm.master_detail(items=clients, columns=columns, render_detail=render_client, on_select=on_select, searchable=True, empty_detail_message="Sélectionnez un client dans la liste.")
PropTypeDéfautRequisDescription
itemsT[]OuiDonnées de la liste maître (objets indexés par idKey).
columns{ key, label, render? }[]OuiColonnes affichées dans la liste de gauche (la première est en gras) ; render personnalise le rendu d'une cellule.
renderDetail(item: T) => ReactElementOuiRendu du panneau de détail pour l'élément sélectionné.
onSelect(item: T) => voidOuiCallback à la sélection d'un élément de la liste.
selectedIdstringNonId de l'élément sélectionné (mode contrôlé).
idKeystring"id"NonClé d'identité des items.
searchablebooleanfalseNonAffiche une barre de recherche filtrant la liste sur le texte des colonnes.
emptyDetailMessagestring"Sélectionnez un élément dans la liste."NonMessage affiché dans le panneau quand rien n'est sélectionné.
splitRationumber40NonLargeur de la liste en pourcentage du conteneur (le détail occupe le reste).
classNamestring""NonClasses CSS additionnelles sur le conteneur .bpm-master-detail.

Exemples

columns = [{"key": "name", "label": "Client"}, {"key": "city", "label": "Ville"}]
bpm.master_detail(items=clients, columns=columns, render_detail=render_client, on_select=on_select)
# Liste de tickets filtrable, liste plus étroite
bpm.master_detail(
    items=tickets,
    columns=[{"key": "ref", "label": "Ticket"}, {"key": "status", "label": "Statut"}],
    render_detail=render_ticket,
    on_select=on_select,
    searchable=True,
    split_ratio=30,
)
# Clé d'identité personnalisée + message d'état vide
bpm.master_detail(items=commandes, columns=columns, render_detail=render_commande, on_select=on_select, id_key="ref", empty_detail_message="Choisissez une commande.")