Data

DataView

Componente per visualizzare collezioni di dati in layout lista o griglia, con paginazione e ordinamento integrati. I template list e grid sono completamente personalizzabili tramite slot.

Import

import { DataView } from '@pzeta/vue-components'
import type {
  DataViewProps,
  DataViewEmits,
  DataViewLayout,
  DataViewPageEvent,
  DataViewSortOrder,
} from '@pzeta/vue-components'

Esempio Base

Props

PropTipoDefaultDescrizione
valueunknown[][]Array di dati da visualizzare
layout'list' | 'grid''list'Layout di visualizzazione
dataKeystring'id'Campo per identificare univocamente ogni record
rowsnumber10Numero di righe per pagina
firstnumber0Indice del primo record (v-model:first)
totalRecordsnumber—Totale record per lazy mode
paginatorbooleanfalseAbilita la paginazione
rowsPerPageOptionsnumber[][10, 25, 50]Opzioni per il dropdown righe per pagina
currentPageReportTemplatestring'Showing {first} to {last} of {totalRecords}'Template report pagina corrente
pageLinkSizenumber5Numero di link pagina da mostrare
alwaysShowPaginatorbooleantrueMostra paginatore anche con una sola pagina
sortFieldstring—Campo per ordinamento
sortOrder1 | -1 | nullnullDirezione ordinamento (1=asc, -1=desc)
lazybooleanfalseAbilita lazy mode (paginazione server-side)
loadingbooleanfalseMostra indicatore di caricamento
classstring—Classe CSS aggiuntiva per il contenitore

Emits

EventoPayloadDescrizione
pageDataViewPageEventCambio pagina
sort{ sortField: string; sortOrder: DataViewSortOrder }Cambio ordinamento
update:layoutDataViewLayoutCambio layout
update:firstnumberCambio indice prima riga
update:rowsnumberCambio righe per pagina
update:sortFieldstringCambio campo ordinamento
update:sortOrderDataViewSortOrderCambio direzione ordinamento

DataViewPageEvent

interface DataViewPageEvent {
  first: number       // Indice del primo record
  rows: number        // Righe per pagina
  page: number        // Pagina corrente (0-based)
  pageCount: number   // Numero totale di pagine
}

Slot

SlotScopeDescrizione
list{ items: unknown[] }Template per layout lista (riceve gli items della pagina corrente)
grid{ items: unknown[] }Template per layout griglia (riceve gli items della pagina corrente)
header—Contenuto nella zona header sopra la lista/griglia
footer—Contenuto nella zona footer sotto il paginatore
empty—Template per stato vuoto
loading—Template per stato di caricamento
paginatorstart—Contenuto a sinistra del paginatore
paginatorend—Contenuto a destra del paginatore

Esempi

Layout griglia

Con paginazione

Layout switcher (lista/griglia)

Lazy loading (server-side)

Stato vuoto personalizzato

Metodi esposti (defineExpose)

Metodo/PropDescrizione
processedDataDati dopo l'ordinamento (ref)
paginatedDataDati della pagina corrente (ref)
totalRecordsNumero totale record (ref)
setLayout(layout)Cambia programmaticamente il layout

Accessibilità

Il componente usa un contenitore div semantico. Per migliorare l'accessibilità degli elementi della lista/griglia, aggiungere attributi aria-label nei template personalizzati.

TypeScript

import type {
  DataViewProps,
  DataViewEmits,
  DataViewLayout,
  DataViewSortOrder,
  DataViewPageEvent,
  DataViewListSlotProps,
  DataViewGridSlotProps,
} from '@pzeta/vue-components'