Components

Step del wizard

ImportStepUpload, ImportStepMapping, ImportStepPreview, ImportStepExecute.

I quattro componenti ImportStep* rappresentano gli step interni di ImportWizard. Sono esportati pubblicamente per consentire la composizione di wizard custom (es. con risorsa selezionabile, header brandizzato, layout diverso). Ogni step è "puro" — riceve stato e callback via props/emits e non chiama l'API direttamente.

ImportStepUpload

Gestisce drag & drop, file picker, validazione lato client (estensione, MIME, size 50 MB) e visualizzazione delle opzioni CSV. Mostra spinner di caricamento e link "Scarica un modello d'esempio".

Props

PropTipoDescrizione
fileFile | nullFile correntemente selezionato
formatoFileFormatoFormato derivato dall'estensione
risorsastringCodice risorsa target
opzioniCsvCsvOpzioniOpzioni di parsing CSV
loadingbooleanUpload in corso
errorestring | nullMessaggio di errore da mostrare

Emits

EventoPayloadDescrizione
selectFileFileFile selezionato (validato lato client)
update:opzioniCsvCsvOpzioniModifica opzioni CSV
cancelUploadAnnulla upload in corso (chiama AbortController)
downloadTemplaterisorsa: string, formato: stringRichiesta download template d'esempio

Esempio

<ImportStepUpload
  :file="file"
  :formato="formato"
  :risorsa="risorsa"
  :opzioni-csv="opzioniCsv"
  :loading="loading"
  :errore="errore"
  @select-file="setFile($event); upload()"
  @update:opzioni-csv="Object.assign(opzioniCsv, $event)"
  @cancel-upload="cancelUpload"
  @download-template="downloadTemplate"
/>

ImportStepMapping

Wrapper attorno a FieldMapper che mostra anche un Message di warning quando ci sono campi obbligatori non ancora mappati.

Props

PropTipoDescrizione
mappingsMappingColonna[]Lista corrente di mapping
campiDestinazioneCampoMetadato[]Campi target disponibili
campiObbligatoriMancantiCampoMetadato[]Campi obbligatori non ancora mappati
isValidbooleanSe il mapping può essere submittato
anteprimaRigheRecord<string, unknown>[]Prime righe del file (per mostrare un campione di valore sotto il nome colonna)

Emits

EventoPayloadDescrizione
updateMappingindex: number, campo: stringCambia il campoDestinazione di una colonna
updateTransformindex: number, trasformazione: stringImposta una trasformazione
updateDefaultindex: number, valore: stringImposta valore di default
resetReset mapping (azzera campoDestinazione, trasformazione, valoreDefault)

Esempio

<ImportStepMapping
  :mappings="fieldMapping.mappings.value"
  :campi-destinazione="campiDestinazione"
  :campi-obbligatori-mancanti="fieldMapping.campiObbligatoriMancanti.value"
  :is-valid="fieldMapping.isValid.value"
  :anteprima-righe="anteprimaRigheFile"
  @update-mapping="fieldMapping.updateMapping"
  @reset="fieldMapping.resetMappings"
/>

ImportStepPreview

Esegue il dry-run e mostra il risultato della validazione tramite ImportPreview. Aggiunge:

  • Pulsante "Esegui test importazione"
  • Lista dei primi 5 warning (con contatore residuo)
  • Message di esito (success se 0 errori, warn se errori presenti)

Props

PropTipoDescrizione
testResultTestImportResult | nullRisultato del dry-run
loadingbooleanTest in corso
errorestring | nullMessaggio errore

Emits

EventoPayloadDescrizione
testRichiesta esecuzione test (POST /api/import/test)

Esempio

<ImportStepPreview
  :test-result="testResult"
  :loading="loading"
  :errore="errore"
  @test="testImport"
/>

ImportStepExecute

Lo step finale: pulsante "Avvia importazione", ProgressBar durante import sincrono, ImportStatusTracker durante import asincrono, e card riepilogativa con conteggio importate/scartate/tempo a fine elaborazione.

Props

PropTipoDescrizione
importResultImportResult | nullRisultato sincrono
progressoImportProgresso | nullStato corrente del polling (per import async)
isAsyncbooleantrue se l'import è asincrono (≥ 500 righe per default)
isPollingbooleanPolling attivo
loadingbooleanEsecuzione in corso
errorestring | nullErrore esecuzione
errorePollingstring | nullErrore durante il polling

Emits

EventoPayloadDescrizione
executeAvvia l'esecuzione effettiva (POST /api/import/execute)

Layout esito

A esecuzione completata viene mostrato un grid 3 colonne:

ColonnaValore
ImportaterisultatoFinale.righeImportate (verde)
ScartaterisultatoFinale.righeScartate (rosso)
TempotempoEsecuzione / 1000 in secondi

Se ci sono errori, viene mostrato un elenco dei primi 20.

Esempio

<ImportStepExecute
  :import-result="importResult"
  :progresso="importStatus.progresso.value"
  :is-async="isAsync"
  :is-polling="importStatus.isPolling.value"
  :loading="loading"
  :errore="errore"
  :errore-polling="importStatus.errore.value"
  @execute="executeImport"
/>