Import
import { NuiGrid, type NuiGridColumn, type NuiGridHandle } from '@needless-ui/react/grid';NuiGrid
Une grille de données sur un tableau natif.
| Nom | Type | Par défaut | Description |
|---|---|---|---|
rowsProp | readonly T[] | Les données. Une modification remplace sa ligne et appelle onRowsChange ; les prochaines rows que vous passez remplacent les modifications. | |
onRowsChangeCallback | (rows: readonly T[]) => void | Appelé avec les lignes après chaque modification validée. | |
columnsProp | NuiGridColumn<T>[] | Les colonnes, sous forme d’objets NuiGridColumn. | |
rowIdProp | (row: T) => unknown | row.id ?? row | La clé d’une ligne, pour la sélection et le suivi. |
labelProp | string | Nom accessible de la grille. | |
selectionProp | 'none' | 'single' | 'multiple' | 'none' | Si les lignes sont sélectionnables, et combien. |
selecteddefaultSelectedonSelectedChangeÉtat | unknown[] | [] | Les clés des lignes sélectionnées. |
sortdefaultSortonSortChangeÉtat | NuiGridSort[] | [] | Le tri, sous forme d’objets { column, direction } ; le premier trie en premier. |
filtersdefaultFiltersonFiltersChangeÉtat | Record<string, NuiGridFilter> | {} | Un filtre par id de colonne : un opérateur et une valeur. |
searchdefaultSearchonSearchChangeÉtat | string | '' | Des mots qui doivent tous figurer dans une ligne. |
pageSizedefaultPageSizeonPageSizeChangeÉtat | number | 0 | Lignes par page, ou 0 pour une seule liste défilante. |
pagedefaultPageonPageChangeÉtat | number | 0 | La page affichée, à partir de 0. |
pageSizesProp | number[] | [10, 25, 50, 100] | Les choix de la pagination. |
virtualProp | boolean | 'auto' | 'auto' | Ne rend que les lignes visibles : toujours, jamais, ou auto au-delà de 100 lignes sans pagination. |
heightProp | string | Une longueur CSS qui limite la grille ; elle défile à l’intérieur. | |
columnStatedefaultColumnStateonColumnStateChangeÉtat | NuiGridColumnState[] | [] | La largeur, l’ordre, l’épinglage et la visibilité de chaque colonne, à enregistrer et restaurer. |
modeProp | 'client' | 'server' | 'client' | server affiche les lignes telles qu’elles arrivent et vous laisse le tri, le filtrage et la pagination. |
totalProp | number | Le nombre de lignes sur le serveur. | |
loadingProp | boolean | false | Affiche une barre de progression, et des lignes provisoires tant qu’il n’y en a aucune. |
localeProp | string | 'en-US' | Formate les nombres et les dates, et lit les nombres saisis. |
labelsProp | Partial<NuiGridLabels> | Tous les textes que la grille affiche ou annonce, à traduire. | |
cornersProp | NuiCorners | La forme de ses coins : round, squircle, bevel, scoop, notch ou square. | |
radiusProp | NuiRadius | La taille de ses coins : none, small, medium, large ou full. | |
densityProp | NuiDensity | La place qu’il occupe : compact, regular ou roomy. | |
groupByProp | string[] | [] | Les colonnes selon lesquelles regrouper les lignes, la plus externe d’abord. |
collapseddefaultCollapsedonCollapsedChangeÉtat | string[] | [] | Les clés des groupes fermés ; au départ, les groupes sont ouverts. |
getChildrenProp | (row: T) => T[] | undefined | Les enfants d’une ligne : la grille affiche des données arborescentes. | |
expandeddefaultExpandedonExpandedChangeÉtat | unknown[] | [] | Les clés des lignes ouvertes dans les données arborescentes ; au départ, elles sont fermées. |
detailsdefaultDetailsonDetailsChangeÉtat | unknown[] | [] | Les clés des lignes dont les détails sont ouverts. |
totals, flashProp | boolean | false | Une ligne d’agrégats sur toutes les lignes filtrées ; des cellules qui clignotent quand leur texte change, dans les lignes dotées d’un rowId stable. |
layoutProp | 'table' | 'list' | 'auto' | 'table' | list affiche les lignes sous forme de cartes, et auto le fait sur les écrans étroits. |
toolbarProp | boolean | 'auto' | 'auto' | Une barre qui trie, filtre et sélectionne toutes les lignes : toujours, jamais, ou auto avec les cartes. |
renderEmptyRender prop | (filtered: boolean) => ReactNode | Ce qui s’affiche quand il n’y a aucune ligne ; on lui indique si des filtres les ont masquées. | |
renderDetailRender prop | (row: T) => ReactNode | Les détails d’une ligne, affichés dessous quand elle est ouverte. La grille ajoute une colonne de boutons bascules. | |
onRowActivateCallback | (row: T) => void | Appelé avec une ligne ouverte avec Entrée ou un double clic. | |
onCellEditCallback | (edit: NuiGridEdit<T>) => void | Appelé avec chaque modification validée. | |
onQueryChangeCallback | (query: NuiGridQuery) => void | Appelé avec le tri, les filtres, la recherche et la page à chaque changement, et une fois au départ. | |
refProp | Ref<NuiGridHandle> | Ce qu’expose la ref de la grille : exports, impression et focus. | |
exportXlsx, printMéthode | (options?) => Blob, () => void | Les lignes filtrées et triées sous forme de feuille de calcul ; imprime toutes les lignes. | |
exportCsvMéthode | (options?) => string | Les lignes filtrées et triées des colonnes visibles, en CSV. | |
expandAllMéthode | (open?: boolean) => void | Ouvre chaque groupe et chaque ligne qui a des enfants, ou les ferme tous. | |
focusCellMéthode | (row: number, col: number) => void | Place le focus sur une cellule ; la ligne -1 est l’en-tête. | |
clearFiltersMéthode | () => void | Efface tous les filtres et la recherche. | |
fitMéthode | (id: string) => void | Ajuste une colonne à la plus large de ses cellules rendues. |
L’état fonctionne comme pour les champs de formulaire de React : passez une valeur et mettez-la à jour depuis son callback on…Change, ou passez une valeur default… et laissez le composant la garder.
Les props de personnalisation que vous ne définissez pas suivent l’attribut data-nui-* le plus proche. Consultez le guide de personnalisation.
NuiGridColumn
Une colonne. Elle accepte toutes les propriétés de la colonne Angular (seuls id et header sont obligatoires), ainsi que ces deux-ci, qui la dessinent.
| Nom | Type | Par défaut | Description |
|---|---|---|---|
renderCellRender prop | ({ row, value, text, column }) => ReactNode | Dessinez vous-même les cellules de la colonne, à partir de la ligne, de sa valeur et de son texte. | |
renderHeaderRender prop | (column) => ReactNode | Dessinez vous-même l’en-tête de la colonne ; header continue de la nommer. |