Export
ExportDialog
Dialog di esportazione completo: selezione modello, formato (XLSX/CSV/JSON), PickList per i campi da esportare, gestione progresso e download del Blob risultante.
Crea internamente l'istanza di ImportExportApi (o usa quella passata via prop api) e la fornisce ai sotto-componenti via provide(IMPORT_EXPORT_API_KEY). Tutta la logica è delegata a useExport.
Props
| Prop | Tipo | Default | Descrizione |
|---|---|---|---|
visible | boolean | — | Visibilità dialog (v-model) |
baseUrl | string | — | URL base microservizi |
risorsa | string | — | Codice risorsa da esportare |
api | ImportExportClient | undefined | Client custom (interfaccia). Utile per testing, mock o backend alternativi. Vedi Client interfaces |
Emits
| Evento | Payload | Descrizione |
|---|---|---|
update:visible | boolean | Apertura/chiusura |
exportCompleted | — | Export sincrono o asincrono terminato con stato === 'completato' |
error | Error | Errore catturato dall'ErrorBoundary interno |
Comportamento
- All'apertura del dialog (
visible: true) viene chiamatoloadMetadata(risorsa)che caricacampiDisponibilietemplates. - Cambi di
risorsamentre il dialog è aperto triggerano un re-load. - Alla chiusura viene chiamato
reset()diuseExport(azzera campi selezionati, formato, filtri, template selezionato, polling). - Il pulsante "Esporta" è disabilitato finché
campiSelezionati.length === 0. - Durante l'export viene mostrato il pulsante "Annulla" che invoca
cancelExport(chiama l'AbortController). - Se l'export è asincrono e il server risponde con
stato: 'in_corso', parte il polling tramiteusePolling. A completamento, il Blob viene scaricato automaticamente condownloadBlob.
Esempio
<script setup lang="ts">
import { ref } from 'vue'
import { ExportDialog } from '@pzeta/vue-importexport'
const showExport = ref(false)
const baseUrl = import.meta.env.VITE_IMPORTEXPORT_API_URL
</script>
<template>
<button @click="showExport = true">Esporta anagrafica</button>
<ExportDialog
v-model:visible="showExport"
:base-url="baseUrl"
risorsa="anagrafica"
@export-completed="() => console.log('Export completato')"
/>
</template>
ExportFieldSelector
PickList di @pzeta/vue-components per scegliere e ordinare i campi da esportare. Le due liste:
- Disponibili —
CampoMetadato[]non ancora selezionati, filtrabile viaInputText - Selezionati — campi che andranno nell'export, riordinabili (l'ordine determina l'ordine delle colonne nel file)
Il filtro testuale matcha contro nome, etichetta e gruppo (case-insensitive). Le righe della lista mostrano l'etichetta del campo e, se presente, il gruppo allineato a destra in font ridotto.
Props
| Prop | Tipo | Descrizione |
|---|---|---|
campiDisponibili | CampoMetadato[] | Tutti i campi esportabili dalla risorsa |
campiSelezionati | string[] | Lista nomi campo selezionati (ordinata) |
Emits
| Evento | Payload | Descrizione |
|---|---|---|
toggle | campo: string | Sposta un campo da una lista all'altra |
selectAll | — | Sposta tutto in "Selezionati" |
deselectAll | — | Sposta tutto in "Disponibili" |
move | from: number, to: number | Riordina i campi selezionati |
Esempio
<ExportFieldSelector
:campi-disponibili="campiDisponibili"
:campi-selezionati="campiSelezionati"
@toggle="toggleField"
@select-all="selectAllFields"
@deselect-all="deselectAllFields"
@move="moveField"
/>
FormatOptions
Form per le opzioni di parsing CSV. Mostrato solo nello step di upload quando il file selezionato è .csv. Contiene 4 controlli in grid 2×2:
| Campo | Controllo | Opzioni |
|---|---|---|
| Separatore | Select | ,, ;, \t, | |
| Delimitatore testo | InputText | testo libero (di solito ") |
| Encoding | Select | UTF-8, ISO-8859-1, Windows-1252 |
| Riga iniziale | InputText (numerico) | numero 1-based |
Props
| Prop | Tipo | Descrizione |
|---|---|---|
opzioni | CsvOpzioni | Opzioni correnti |
Emits
| Evento | Payload | Descrizione |
|---|---|---|
update:opzioni | CsvOpzioni | Nuove opzioni complete (la libreria ricostruisce l'oggetto sostituendo solo la chiave modificata) |
Esempio
<FormatOptions
:opzioni="opzioniCsv"
@update:opzioni="opzioniCsv = $event"
/>
Note
- Il campo
haIntestazioneè presente nell'interfacciaCsvOpzionima non è esposto daFormatOptions(defaulttrue). Se serve esporlo, è necessario un wrapper custom. - Il valore
Tabviene gestito come stringa'\t'(tab character).