Import

import-grid.tsx
import { NuiGrid, type NuiGridColumn, type NuiGridHandle } from '@needless-ui/react/grid';

NuiGrid

Une grille de données sur un tableau natif.

NuiGrid: Propriétés
NomTypePar défautDescription
rowsPropreadonly 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[]) => voidAppelé avec les lignes après chaque modification validée.
columnsPropNuiGridColumn<T>[]Les colonnes, sous forme d’objets NuiGridColumn.
rowIdProp(row: T) => unknownrow.id ?? rowLa clé d’une ligne, pour la sélection et le suivi.
labelPropstringNom accessible de la grille.
selectionProp'none' | 'single' | 'multiple''none'Si les lignes sont sélectionnables, et combien.
selected
defaultSelected
onSelectedChangeÉtat
unknown[][]Les clés des lignes sélectionnées.
sort
defaultSort
onSortChangeÉtat
NuiGridSort[][]Le tri, sous forme d’objets { column, direction } ; le premier trie en premier.
filters
defaultFilters
onFiltersChangeÉtat
Record<string, NuiGridFilter>{}Un filtre par id de colonne : un opérateur et une valeur.
search
defaultSearch
onSearchChangeÉtat
string''Des mots qui doivent tous figurer dans une ligne.
pageSize
defaultPageSize
onPageSizeChangeÉtat
number0Lignes par page, ou 0 pour une seule liste défilante.
page
defaultPage
onPageChangeÉtat
number0La page affichée, à partir de 0.
pageSizesPropnumber[][10, 25, 50, 100]Les choix de la pagination.
virtualPropboolean | 'auto''auto'Ne rend que les lignes visibles : toujours, jamais, ou auto au-delà de 100 lignes sans pagination.
heightPropstringUne longueur CSS qui limite la grille ; elle défile à l’intérieur.
columnState
defaultColumnState
onColumnStateChangeÉ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.
totalPropnumberLe nombre de lignes sur le serveur.
loadingPropbooleanfalseAffiche une barre de progression, et des lignes provisoires tant qu’il n’y en a aucune.
localePropstring'en-US'Formate les nombres et les dates, et lit les nombres saisis.
labelsPropPartial<NuiGridLabels>Tous les textes que la grille affiche ou annonce, à traduire.
cornersPropNuiCornersLa forme de ses coins : round, squircle, bevel, scoop, notch ou square.
radiusPropNuiRadiusLa taille de ses coins : none, small, medium, large ou full.
densityPropNuiDensityLa place qu’il occupe : compact, regular ou roomy.
groupByPropstring[][]Les colonnes selon lesquelles regrouper les lignes, la plus externe d’abord.
collapsed
defaultCollapsed
onCollapsedChangeÉtat
string[][]Les clés des groupes fermés ; au départ, les groupes sont ouverts.
getChildrenProp(row: T) => T[] | undefinedLes enfants d’une ligne : la grille affiche des données arborescentes.
expanded
defaultExpanded
onExpandedChangeÉtat
unknown[][]Les clés des lignes ouvertes dans les données arborescentes ; au départ, elles sont fermées.
details
defaultDetails
onDetailsChangeÉtat
unknown[][]Les clés des lignes dont les détails sont ouverts.
totals, flashPropbooleanfalseUne 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.
toolbarPropboolean | 'auto''auto'Une barre qui trie, filtre et sélectionne toutes les lignes : toujours, jamais, ou auto avec les cartes.
renderEmptyRender prop(filtered: boolean) => ReactNodeCe qui s’affiche quand il n’y a aucune ligne ; on lui indique si des filtres les ont masquées.
renderDetailRender prop(row: T) => ReactNodeLes détails d’une ligne, affichés dessous quand elle est ouverte. La grille ajoute une colonne de boutons bascules.
onRowActivateCallback(row: T) => voidAppelé avec une ligne ouverte avec Entrée ou un double clic.
onCellEditCallback(edit: NuiGridEdit<T>) => voidAppelé avec chaque modification validée.
onQueryChangeCallback(query: NuiGridQuery) => voidAppelé avec le tri, les filtres, la recherche et la page à chaque changement, et une fois au départ.
refPropRef<NuiGridHandle>Ce qu’expose la ref de la grille : exports, impression et focus.
exportXlsx, printMéthode(options?) => Blob, () => voidLes lignes filtrées et triées sous forme de feuille de calcul ; imprime toutes les lignes.
exportCsvMéthode(options?) => stringLes lignes filtrées et triées des colonnes visibles, en CSV.
expandAllMéthode(open?: boolean) => voidOuvre chaque groupe et chaque ligne qui a des enfants, ou les ferme tous.
focusCellMéthode(row: number, col: number) => voidPlace le focus sur une cellule ; la ligne -1 est l’en-tête.
clearFiltersMéthode() => voidEfface tous les filtres et la recherche.
fitMéthode(id: string) => voidAjuste 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.

NuiGridColumn: Propriétés
NomTypePar défautDescription
renderCellRender prop({ row, value, text, column }) => ReactNodeDessinez vous-même les cellules de la colonne, à partir de la ligne, de sa valeur et de son texte.
renderHeaderRender prop(column) => ReactNodeDessinez vous-même l’en-tête de la colonne ; header continue de la nommer.