Components

Export

ExportDialog, ExportFieldSelector, FormatOptions.

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

PropTipoDefaultDescrizione
visiblebooleanVisibilità dialog (v-model)
baseUrlstringURL base microservizi
risorsastringCodice risorsa da esportare
apiImportExportClientundefinedClient custom (interfaccia). Utile per testing, mock o backend alternativi. Vedi Client interfaces

Emits

EventoPayloadDescrizione
update:visiblebooleanApertura/chiusura
exportCompletedExport sincrono o asincrono terminato con stato === 'completato'
errorErrorErrore catturato dall'ErrorBoundary interno

Comportamento

  • All'apertura del dialog (visible: true) viene chiamato loadMetadata(risorsa) che carica campiDisponibili e templates.
  • Cambi di risorsa mentre il dialog è aperto triggerano un re-load.
  • Alla chiusura viene chiamato reset() di useExport (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 tramite usePolling. A completamento, il Blob viene scaricato automaticamente con downloadBlob.

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:

  • DisponibiliCampoMetadato[] non ancora selezionati, filtrabile via InputText
  • 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

PropTipoDescrizione
campiDisponibiliCampoMetadato[]Tutti i campi esportabili dalla risorsa
campiSelezionatistring[]Lista nomi campo selezionati (ordinata)

Emits

EventoPayloadDescrizione
togglecampo: stringSposta un campo da una lista all'altra
selectAllSposta tutto in "Selezionati"
deselectAllSposta tutto in "Disponibili"
movefrom: number, to: numberRiordina 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:

CampoControlloOpzioni
SeparatoreSelect,, ;, \t, |
Delimitatore testoInputTexttesto libero (di solito ")
EncodingSelectUTF-8, ISO-8859-1, Windows-1252
Riga inizialeInputText (numerico)numero 1-based

Props

PropTipoDescrizione
opzioniCsvOpzioniOpzioni correnti

Emits

EventoPayloadDescrizione
update:opzioniCsvOpzioniNuove 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'interfaccia CsvOpzioni ma non è esposto da FormatOptions (default true). Se serve esporlo, è necessario un wrapper custom.
  • Il valore Tab viene gestito come stringa '\t' (tab character).