-
Notifications
You must be signed in to change notification settings - Fork 0
Component KvPicker
Quattro componenti picker per opzioni chiave-valore, in due varianti:
| Variante | Caricamento | Factory | Componente |
|---|---|---|---|
| URL single | GET /api/{ctx}/properties/{lookupName} |
kvSinglePicker(data, title?, opts?) |
KvSinglePickerComponent |
| URL multi | stessa chiamata, selezione multipla | kvMultiPicker(data, title?, opts?) |
KvMultiPickerComponent |
| Signal single |
Signal<KVOption[]> già in memoria |
kvSignalSinglePicker(data, title?, opts?) |
KvSignalSinglePickerComponent |
| Signal multi | stessa signal, selezione multipla | kvSignalMultiPicker(data, title?, opts?) |
KvSignalMultiPickerComponent |
Tutti includono un campo filtro testo che ricerca su value e label in modalità "contiene" (case-insensitive).
Le factory costruiscono il LookupDialogConfig completo con il tipo corretto su data — nessun satisfies necessario.
import {
kvSinglePicker, kvMultiPicker,
kvSignalSinglePicker, kvSignalMultiPicker,
} from '@gpa-gruppo-progetti-avanzati-srl/ng-core-ui';
// URL-based: TypeScript valida { lookupName, labelColumn, ... }
readonly tipoConfig = kvSinglePicker({ lookupName: 'tipo-contratto', labelColumn: 'Tipo' }, 'Seleziona tipo');
readonly categorieConfig = kvMultiPicker({ lookupName: 'categoria', confirmLabel: 'Applica' }, 'Categorie');
// Signal-based: TypeScript valida { options, labelColumn, ... }
readonly statiConfig = kvSignalSinglePicker({ options: this.stati }, 'Seleziona stato');
readonly coloriConfig = kvSignalMultiPicker({ options: signal(COLORI), valueColumn: 'Codice' }, 'Colori');Uso nel layout della form:
{
field: ft.tipo,
label: 'Tipo contratto',
component: LookupFieldComponent,
inputs: { dialogConfig: this.tipoConfig },
}readonly tipoConfig = kvSinglePicker(
{ lookupName: 'tipo-contratto' },
'Seleziona tipo',
{ width: '900px', maxWidth: '95vw' }, // opzionale
);| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
lookupName |
string |
✓ | Chiave del lookup → GET /api/{coreContext}/properties/{lookupName}
|
labelColumn |
string |
— | Header colonna descrizione (default: 'Descrizione') |
valueColumn |
string |
— | Header colonna codice/id, mostrata a sinistra. Se assente, non compare |
cancelLabel |
string |
— | Etichetta bottone Annulla (default: 'Annulla') |
KvSinglePickerConfig estende KvPickerBaseConfig senza campi aggiuntivi.
KvMultiPickerConfig aggiunge confirmLabel?: string (default: 'Conferma').
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
options |
Signal<KVOption[]> |
✓ | Signal con le opzioni da mostrare |
labelColumn |
string |
— | Header colonna descrizione (default: 'Descrizione') |
valueColumn |
string |
— | Header colonna codice/id, mostrata a sinistra. Se assente, non compare |
cancelLabel |
string |
— | Etichetta bottone Annulla (default: 'Annulla') |
KvSignalSinglePickerConfig estende KvSignalPickerBaseConfig senza campi aggiuntivi.
KvSignalMultiPickerConfig aggiunge confirmLabel?: string (default: 'Conferma').
// Selezione singola
{ id: 'CODICE_VALORE', label: 'Descrizione leggibile' }
// Selezione multipla
{ id: ['VAL1', 'VAL2'], label: 'Descrizione 1, Descrizione 2' }-
URL-based: URL costruita con
buildApiPath('/api', coreContext, 'properties', lookupName). UsacreateInMemoryLoader(cache in-memory, rispostaT[]o{ body: T[] }GPA). Il filtro richiamarefresh(true)al cambio testo. -
Ordinamento per
order: i picker URL-based ordinano i record per il campoKVProperty.order(ascending) in modo automatico. Il click su una colonna sovrascrive il default. -
Signal-based: nessuna HTTP call. Il filtro è un
computedreattivo — nessunrefresh()necessario. - Tutti iniettano
MAT_DIALOG_DATA(fornito daLookupPickerDialogComponent) eMatDialogRef.
- → FormShell — sistema di form con
LookupFieldComponent - → DataTable — datatable con selezione righe
- → Configurazione ambiente —
coreContextinenvironment.properties
Sviluppato e mantenuto da GPA — Gruppo Progetti Avanzati s.r.l. · gpa@gpagroup.it · +39 065913642 · P.IVA 05049391005 · ISO 9001 · ISO 27001
Sede legale: Via Ferdinando Galiani, 68 — 00191 Roma | Sedi operative: Piazzale Asia 21, Roma · Via Badoero 67, Roma · Viale Chiavellati 9, Foligno (PG)
npm · GitHub · Segnala un problema · Licenza MIT