Le module @framework/ui/experimental/List est une brique de prsentation nouvelle gnration, greffe sur la « molecule » frappe-ui/list. Il introduit une approche compose de trois lments : List, ListFooter et ListBulkBar, conus pour remplacer terme le module ListView actuel avec une exprience utilisateur plus fluide.
:::dokos Nouveaut exprimentale
Ce module est marqu comme exprimental. Son API peut voluer sans priode de dprciation jusqu' ce que la page de liste principale du Desk l'ait intgr. Le module ListView existant reste inchang et utilisable en parallle.
:::
Le composant List est purement prsentationnel : il ne rcupre ni ne stocke de donnes. Son rle est d'afficher des colonnes et des lignes partir de donnes fournies par l'hte.
Props principales
| Prop | Type | Rle |
|---|---|---|
columns | Column[] | Dfinition des colonnes, avec un align optionnel driv du Meta |
rows | Row[] | Donnes afficher |
rowKey | string | Cl unique pour identifier chaque ligne |
loading | boolean | Affiche des lignes squelettes pendant le chargement |
rowHeight | number | Hauteur fixe de chaque ligne |
rowLink | (row) => RouteLocation | Transforme chaque ligne en RouterLink (clic-milieu et Copier le lien fonctionnels) |
Modles (« v-model »)
| Modle | Rle |
|---|---|
selection | Gre la slection des lignes (cases cocher) |
sort | Active le tri sur les en-ttes. Un clic dfinit la colonne comme tri principal, un second clic inverse l'ordre |
Le tri respecte le mme format
Sort[]que celui manipul par le composantSortBy, garantissant une cohrence avec le reste de l'cosystme.
vnements mis (« emits »)
column-resize : dclench lors du redimensionnement d'une colonne.column-reset : dclench lors de la rinitialisation de la largeur d'une colonne.Slots
#cell : personnalisation du rendu d'une cellule.#empty : affich lorsqu'aucune ligne n'est disponible.Le composant ListFooter gre la navigation l'intrieur d'une liste pagine.
Fonctionnalits
v-model:pageSize synchronise la valeur, tandis que l'vnement page-size ne se dclenche que lors d'un clic, permettant l'hte de distinguer un choix utilisateur d'une valeur restaure.Le composant ListBulkBar est une barre flottante qui apparat au-dessus de la liste lorsqu'une ou plusieurs lignes sont slectionnes.
Fonctionnalits
Le composant doit tre positionn au-dessus d'un conteneur
position: relative.
Le module ListView existant et son sous-chemin ./ListView ne sont pas modifis. Le nouveau module List est plac ct, dans src/experimental/List/, permettant une migration progressive des pages de liste vers le nouveau composant.
Une note dans l'ADR (« Architecture Decision Record ») 0002 du paquet ui documente la coexistence des deux modules. Le fichier CONTEXT.md liste galement les deux modules pour guider les dveloppeurs.
Le module est livr avec des tests uniquement. Les « stories » (« dmonstrations interactives ») du composant reviendront ultrieurement, une fois rsolue la question de l'affichage des stories dans le paquet.
Deux limitations de la « molecule » frappe-ui sous-jacente ont t identifies et des contournements (« workarounds ») ont t mis en place dans cette implmentation :
selectable transforme un clic de ligne en bascule de slection, mais la ligne doit rester un lien fonctionnel. La colonne de cases cocher est donc dessine ici, avec « select-all » dans l'en-tte (frappe/frappe-ui#1131).<ListRows virtual> recherche son conteneur de dfilement une seule fois, avant qu'un viewport ScrollArea ne signale son dbordement. Une liste qui monte avec des lignes dj disponibles n'affiche donc rien. Le fentrage utilise ici useVirtualRows export par la molecule, avec le viewport fourni explicitement (frappe/frappe-ui#1132).Le composant List est conu pour recevoir les colonnes dans le format Column[] mis par le composant ColumnSettings. L'hte peut enrichir chaque colonne avec une proprit align drive des mtadonnes (« Meta ») du DocType.
Le modle sort utilise le mme format que le composant SortBy. Lier ce modle active automatiquement le tri sur les en-ttes :
La prop rowLink(row) doit retourner un objet RouteLocation valide. Cela garantit que le clic-milieu ouvre la fiche dans un nouvel onglet et que « Copier le lien » fonctionne.
Pour ListFooter, couter l'vnement page-size plutt que v-model:pageSize permet de dclencher une action uniquement lors d'un choix utilisateur, et non lors d'une restauration de valeur (par exemple au chargement initial de la page).
Voici un exemple de composition des trois composants sur une page de liste :
List via rows et columns.selection et sort List pour activer respectivement la slection et le tri.ListBulkBar ragit automatiquement selection pour afficher le compteur et les actions.ListFooter gre la pagination via v-model:pageSize et met load-more pour demander les lignes suivantes.