useFieldMapping
Panoramica
useFieldMapping gestisce la lista dei MappingColonna, l'auto-suggest basato su normalizzazione case/separatori e la validazione dei campi obbligatori. È usato internamente da useImport ma può essere utilizzato anche standalone in flussi custom.
Inizializzazione
import { useFieldMapping } from '@pzeta/vue-importexport'
import type { CampoMetadato } from '@pzeta/vue-importexport'
const campiDest: CampoMetadato[] = await api.getImportFieldMetadata('anagrafica')
const {
mappings, colonneSorgente,
campiObbligatoriMancanti, isValid,
initFromColumns, autoSuggest,
updateMapping, updateTransform, updateDefault,
resetMappings, getActiveMappings,
} = useFieldMapping(() => campiDest)
Parametri
| Parametro | Tipo | Descrizione |
|---|---|---|
campiDestinazione | () => CampoMetadato[] | Funzione getter (non un Ref) — viene chiamata ogni volta che serve l'elenco aggiornato |
Il getter consente di aggiornare i campi destinazione a runtime senza dover ri-inizializzare il composable.
Stato reattivo
| Proprietà | Tipo | Descrizione |
|---|---|---|
mappings | Ref<MappingColonna[]> | Lista mapping corrente |
colonneSorgente | Ref<string[]> | Headers letti dal file |
campiObbligatoriMancanti | ComputedRef<CampoMetadato[]> | Campi obbligatorio: true non mappati |
isValid | ComputedRef<boolean> | campiObbligatoriMancanti.length === 0 |
Metodi
initFromColumns(columns)
Inizializza la lista mappings partendo dalle colonne sorgente. Imposta campoDestinazione: '' per tutte e poi chiama autoSuggest.
initFromColumns(['Nome', 'Cognome', 'Email', 'Codice Fiscale'])
// mappings popolato + auto-match applicato
autoSuggest()
Per ogni mapping ancora vuoto, cerca un campo destinazione il cui nome o etichetta (normalizzati lowercase + rimozione spazi/_/-) coincide esattamente con la colonna sorgente normalizzata.
// Match: 'Codice Fiscale' → 'codicefiscale'
// 'codice_fiscale' → 'codicefiscale'
// 'codiceFiscale' → 'codicefiscale'
I campi già mappati manualmente non vengono toccati.
updateMapping(index, campoDestinazione)
Aggiorna il campoDestinazione di una mapping. Stringa vuota = "non mappare".
updateTransform(index, trasformazione)
Imposta una stringa di trasformazione (passata dal microservizio import). Stringa vuota → undefined.
updateDefault(index, valoreDefault)
Imposta il valore di default per celle vuote. Stringa vuota → undefined.
resetMappings()
Azzera campoDestinazione, trasformazione, valoreDefault di tutte le mapping (mantiene la lista delle colonne).
getActiveMappings()
Restituisce solo le mapping con campoDestinazione !== ''. Usato prima di chiamare testImport ed executeImport.
const active = getActiveMappings()
await api.testImport(sessionId, active)
Esempio standalone
import { ref } from 'vue'
import { useFieldMapping } from '@pzeta/vue-importexport'
const campiDest = ref<CampoMetadato[]>([])
const fieldMapping = useFieldMapping(() => campiDest.value)
// Carica campi dest e file in parallelo
campiDest.value = await api.getImportFieldMetadata('anagrafica')
fieldMapping.initFromColumns(['Nome', 'Email', 'Telefono'])
if (fieldMapping.isValid.value) {
console.log('OK, possiamo procedere')
} else {
console.warn('Mancano:', fieldMapping.campiObbligatoriMancanti.value.map(c => c.etichetta))
}