Composables

useFieldMapping

Stato del mapping colonne sorgente → campi destinazione con auto-suggest.

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

ParametroTipoDescrizione
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àTipoDescrizione
mappingsRef<MappingColonna[]>Lista mapping corrente
colonneSorgenteRef<string[]>Headers letti dal file
campiObbligatoriMancantiComputedRef<CampoMetadato[]>Campi obbligatorio: true non mappati
isValidComputedRef<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))
}