Concetti
Dati Extra
Campi dinamici per schede tramite dati_extra JSONB.
Panoramica
dati_extra è una colonna JSONB su fasi.scheda che permette di estendere le schede con campi personalizzati per board senza migrazioni dello schema. La configurazione dei campi è in fasi.boardcampo.
Configurazione campi
// Aggiunge un campo "budget" numerico alla board 42
const nuovoCampo = await fasiService.creaBoardCampo({
idboard: 42,
nomecampo: 'budget', // chiave in dati_extra
etichetta: 'Budget (€)', // label nel form
tipocampo: 'number',
obbligatorio: false,
ordine: 1,
attivo: true,
})
Tramite UI: BoardCampoCrudTable gestisce la configurazione visuale dei campi.
TipoCampo
| Tipo | Valore in dati_extra | Form input |
|---|---|---|
text | string | InputText |
textarea | string | Textarea |
number | number | InputNumber |
date | string (ISO 8601) | DatePicker |
boolean | boolean | Checkbox |
select | string (valore opzione) | Select |
Opzioni per select
Le opzioni possono essere statiche o dinamiche:
// Statiche — array in DB
{
tipocampo: 'select',
opzioni: [
{ label: 'Alta', value: 'alta' },
{ label: 'Media', value: 'media' },
{ label: 'Bassa', value: 'bassa' },
]
}
// Dinamiche — endpoint REST
{
tipocampo: 'select',
opzioni_url: '/api/categorie',
opzioni_label: 'nome',
opzioni_value: 'id',
}
Scrittura dati_extra
SchedaFormDialog costruisce automaticamente l'oggetto dati_extra dai campi compilati:
// Payload inviato a POST /scheda
{
titolo: 'Nuovo cliente',
idfase: 5,
dati_extra: {
budget: 15000,
categoria: 'enterprise',
urgente: true,
}
}
Lettura in ElementCard
ElementCard mostra i campi extra con valore non nullo nell'ordine configurato:
Budget (€): 15.000
Categoria: Enterprise
Urgente: Sì
Il rendering usa formatExtraValue che adatta la formattazione al tipo di campo.
Accesso programmatico
const scheda = fasiService.schede.value.find(s => s.idscheda === id)
const budget = scheda?.dati_extra?.budget as number | null
Note
nomecampodeve essere univoco per board — usare nomi descrittivi senza spazi (es.data_firma,valore_contratto).- Campi disattivati (
attivo: false) non vengono mostrati nel form né nella card, ma i valori rimangono indati_extra. - Non esiste schema enforcement a DB — la validazione è gestita lato form da
SchedaFormDialog.