npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@eqproject/eqp-common

v21.0.0

Published

Eqp common libraries

Readme

eqp-common

Libreria di utilità condivise per l'ecosistema @eqproject. Contiene tutti i modelli, gli enum, i servizi statici e le direttive utilizzati dalle altre librerie (eqp-table, eqp-filters, eqp-form, eqp-lookup, ecc.). Non espone componenti visivi propri: è una dipendenza trasversale che normalizza la configurazione delle colonne, dei filtri e dei form attraverso un sistema di conversione basato su BaseFieldModel.


Installazione

npm install @eqproject/eqp-common --legacy-peer-deps

Nessun modulo Angular da importare: tutti i servizi esposti sono statici o injectable nel normale providers[] dell'applicazione.


Indice


EqpCommonService

Servizio con metodi esclusivamente statici (più un metodo d'istanza). Il caso d'uso principale è la conversione di un array di BaseFieldModel nel tipo concreto richiesto da eqp-table, eqp-filters o eqp-form, evitando la duplicazione delle configurazioni.

convertAs<T>(baseFields, ctor, keys?, additionalProps?)

Converte un array di BaseFieldModel[] in T[] dove T è TableColumnField, FilterField o FormField.

| Parametro | Tipo | Descrizione | |---|---|---| | baseFields | BaseFieldModel[] | Sorgente dati (oppure direttamente T[] già tipizzati) | | ctor | new (...args) => T | Costruttore del tipo target | | keys | string[] (opz.) | Sottoinsieme di chiavi da includere, nell'ordine indicato | | additionalProps | T[] (opz.) | Elementi extra o sovrascritture da unire per chiave |

Se baseFields è già un array del tipo target (rilevato tramite isBaseField), la conversione viene saltata e si applica solo il merge di additionalProps.

// Unica sorgente, tre usi
const baseFields: BaseFieldModel[] = [
  { key: 'nome', display: 'Nome', baseType: BaseType.Text },
  { key: 'eta',  display: 'Età',  baseType: BaseType.Number },
  { key: 'attivo', display: 'Attivo', baseType: BaseType.Boolean },
];

// Per eqp-table
const colonne = EqpCommonService.convertAs(baseFields, TableColumnField);

// Per eqp-filters (solo alcune colonne)
const filtri = EqpCommonService.convertAs(baseFields, FilterField, ['nome', 'attivo']);

// Per eqp-form con sovrascrittura
const campi = EqpCommonService.convertAs(baseFields, FormField, null, [
  Object.assign(new FormField(), { key: 'eta', required: true, minValue: 0 })
]);

isBaseField(fields)

Type guard statico che verifica se il primo elemento dell'array ha la proprietà baseType != null. Utilizzato internamente da convertAs per evitare doppie conversioni.

getFieldSizeClass(field)

Metodo d'istanza. Riceve un FilterField (o qualsiasi oggetto con fieldClass: FieldSizeClass) e restituisce la stringa della classe Bootstrap corrispondente.

| FieldSizeClass | Classe CSS restituita | |---|---| | SMALL (1) | col-12 col-md-3 | | MEDIUM (2) | col-12 col-md-6 | | LARGE (3) | col-12 col-md-12 | | CUSTOM (4) | col-12 col-md-{customClass} |

mergeAdditionalProps<T>(convertedData, additionalProps, comparisonKey)

Metodo statico interno. Per ogni elemento in additionalProps: se esiste già in convertedData (confronto su comparisonKey, default 'key'), sovrascrive le proprietà; altrimenti appende l'elemento in coda.


EqpDialogService

Servizio con metodi esclusivamente statici basati su SweetAlert2. Non richiede injection: i metodi si chiamano direttamente sulla classe.

EqpDialogService.Error(title, message?)

Mostra una dialog di errore (icona error). Restituisce Promise<SweetAlertResult>.

await EqpDialogService.Error('Operazione fallita', 'Impossibile salvare il record.');

EqpDialogService.Confirm(title, message?, isWarning?, customWidth?)

Mostra una dialog di conferma con pulsanti Conferma / Annulla.

| Parametro | Tipo | Default | Descrizione | |---|---|---|---| | title | string | — | Titolo della dialog | | message | string | '' | Testo del corpo | | isWarning | boolean | false | Se true, usa icona warning invece di question | | customWidth | string | undefined | Larghezza CSS personalizzata (es. '600px') |

Restituisce Promise<SweetAlertResult>. Il risultato va ispezionato tramite .isConfirmed.

const result = await EqpDialogService.Confirm('Eliminare il record?', 'L\'operazione è irreversibile.', true);
if (result.isConfirmed) {
  // procedi con l'eliminazione
}

EqpDialogService.Info(title, message?)

Mostra una dialog informativa (icona info). Restituisce Promise<SweetAlertResult>.

EqpDialogService.Warning(title, message?)

Mostra una dialog di avviso (icona warning). Restituisce Promise<SweetAlertResult>.


DynamicLoaderDirective

Direttiva strutturale [appDynamicLoader] che carica dinamicamente un componente all'interno del ViewContainerRef dell'host. Utilizzata principalmente da eqp-lookup per iniettare il componente di aggiunta/modifica all'interno del dialog di lookup.

<ng-template appDynamicLoader [dynamicData]="loaderData"></ng-template>

La configurazione avviene tramite DynamicLoaderDirectiveData:

| Proprietà | Tipo | Descrizione | |---|---|---| | component | Type<any> | Classe del componente da caricare | | data | any | Dati da passare al componente caricato | | closeCallback | Function | Callback invocata alla chiusura del componente |

this.loaderData = {
  component: MioFormComponent,
  data: { id: this.selectedId },
  closeCallback: (result) => {
    if (result) this.reloadData();
  }
};

Modelli base

BaseFieldModel

Classe base da cui ereditano TableColumnField, FilterField e FormField. Definisce le proprietà comuni a tutti i tipi di campo.

| Proprietà | Tipo | Descrizione | |---|---|---| | key | string | Chiave univoca del campo (corrisponde al nome della proprietà nell'oggetto dati) | | display | string | Etichetta visualizzata all'utente | | value | any | Valore corrente del campo | | format | string | Formato per la visualizzazione (es. formato data) | | numberPipe | NumberColumnPipe | Tipo di formattazione numerica da applicare | | currencyPipeCode | string | Codice valuta (es. 'EUR') quando numberPipe = CURRENCY | | enumModel | any[] | Array di oggetti { value, label } per la visualizzazione enum | | styles | Style | Stili CSS inline (flex, minWidth, maxWidth, color, cellAlignment) | | disabled | boolean | Se true, il campo è disabilitato | | multilanguagePrefixKey | string | Prefisso per la traduzione via ngx-translate | | tooltip | EqpMatTooltip | Configurazione del tooltip Material | | baseType | BaseType | Tipo base del campo (Text, Number, Date, Enum, Boolean) |

BaseType

Enum che descrive il tipo semantico del campo. Utilizzato da convertAs per la conversione automatica verso TypeColumn, InputType e FormFieldType.

| Valore | Costante | Conversione automatica | |---|---|---| | 1 | Text | TypeColumn.String / InputType.Text / FormFieldType.Text | | 2 | Number | TypeColumn.Number / InputType.Number / FormFieldType.Number | | 3 | Date | TypeColumn.Date / InputType.Date / FormFieldType.Date | | 4 | Enum | TypeColumn.Enum / InputType.Enum / FormFieldType.Enum | | 5 | Boolean | TypeColumn.Boolean / InputType.Boolean / FormFieldType.Boolean |

Style e CellAlignmentEnum

Style è un'interfaccia per la definizione degli stili delle celle:

| Proprietà | Tipo | Descrizione | |---|---|---| | flex | string | Valore CSS flex (es. '1 1 150px') | | minWidth | string | Larghezza minima (es. '100px') | | maxWidth | string | Larghezza massima (es. '300px') | | color | string | Colore del testo | | cellAlignment | CellAlignmentEnum | Allineamento del contenuto della cella |

CellAlignmentEnum:

| Valore | Costante | |---|---| | 1 | LEFT | | 2 | RIGHT | | 3 | CENTER |

EqpMatTooltip e TooltipPositionType

EqpMatTooltip configura il tooltip Angular Material applicato alle celle:

| Proprietà | Tipo | Descrizione | |---|---|---| | tooltipText | string | Testo del tooltip (oppure nome della proprietà nell'oggetto riga) | | tooltipPosition | TooltipPositionType | Posizione del tooltip rispetto all'elemento | | isDynamicProperty | boolean | Se true, tooltipText viene risolto come proprietà dell'oggetto riga |

TooltipPositionType:

| Valore | Costante | |---|---| | 1 | Below | | 2 | Above | | 3 | Left | | 4 | Right |


Modelli tabella

ConfigColumn e TypeColumn

ConfigColumn è il modello legacy per la configurazione delle colonne di eqp-table. È ancora supportato ma si raccomanda l'uso di TableColumnField (basato su BaseFieldModel) per i nuovi sviluppi.

Proprietà principali di ConfigColumn:

| Proprietà | Tipo | Descrizione | |---|---|---| | key | string | Nome della proprietà nell'oggetto dati | | title | string | Intestazione della colonna | | type | TypeColumn | Tipo di visualizzazione della colonna | | styles | Style | Stili della cella | | actions | ConfigAction[] | Azioni (pulsanti) nella colonna | | hyperlink | Hyperlink | Configurazione link | | navigate | Navigate | Configurazione navigazione router | | image | Image | Configurazione immagine | | icon | Icon | Configurazione icona | | visible | boolean | Visibilità della colonna (default: true) | | sortable | boolean | Se la colonna è ordinabile | | tooltip | EqpMatTooltip | Configurazione tooltip | | headerFilter | HeaderFilter | Filtro nell'intestazione | | sticky | boolean | Se true, la colonna è sticky a sinistra | | stickyEnd | boolean | Se true, la colonna è sticky a destra |

TypeColumn

Enum per il tipo di visualizzazione della colonna:

| Valore | Costante | Descrizione | |---|---|---| | 1 | Date | Data formattata | | 2 | Number | Numero formattato | | 3 | String | Testo semplice | | 4 | Action | Colonna con pulsanti azione | | 5 | Enum | Valore da lista enumerata | | 6 | Boolean | Valore booleano (icona spunta/croce) | | 7 | Image | Immagine | | 8 | Hyperlink | Link cliccabile | | 9 | Icon | Icona | | 10 | Currency | Importo con simbolo valuta | | 11 | CustomComponent | Componente custom iniettato nella cella | | 12 | Navigate | Navigazione con routerLink |

ConfigAction

Configura un pulsante azione all'interno di una colonna di tipo Action:

| Proprietà | Tipo | Descrizione | |---|---|---| | label | string | Testo del pulsante | | icon | string | Icona Material | | color | string | Colore del pulsante | | action | Function | Funzione da eseguire al click (riceve la riga) | | isVisible | Function \| boolean | Visibilità condizionale | | isDisabled | Function \| boolean | Disabilitazione condizionale | | tooltip | string | Testo del tooltip |

Navigate

Configura la navigazione tramite routerLink per colonne di tipo Navigate:

| Proprietà | Tipo | Descrizione | |---|---|---| | text | string | Testo visualizzato nel link | | routeUrl | string | URL base della rotta | | queryParams | object | Query parameters fissi | | paramKey | string | Nome della proprietà nell'oggetto riga da usare come parametro dinamico |

ExportEqpTable

Configura l'esportazione della tabella:

| Proprietà | Tipo | Descrizione | |---|---|---| | fileName | string | Nome del file esportato (senza estensione) | | exportType | CustomExportType | Formato di esportazione | | sheetName | string | Nome del foglio (per xlsx/xls) | | columnsToExclude | string[] | Chiavi delle colonne da escludere dall'export |

CustomExportType enum: XLSX = 'xlsx', XLS = 'xls', CSV = 'csv', PDF = 'pdf', JSON = 'json', TXT = 'txt'.

CustomButton

Configura i pulsanti custom nell'header di eqp-table:

| Proprietà | Tipo | Descrizione | |---|---|---| | label | string | Testo del pulsante | | action | Function | Funzione da eseguire al click | | icon | string | Icona Material | | color | string | Colore del pulsante | | isDisabled | Function \| boolean | Disabilitazione condizionale | | fontawesome | string | Classe FontAwesome alternativa all'icona Material | | containerStyle | string | Stile CSS inline del contenitore |

TableColumnField

Modello raccomandato per la configurazione delle colonne di eqp-table. Estende BaseFieldModel e aggiunge le proprietà specifiche della tabella.

| Proprietà | Tipo | Descrizione | |---|---|---| | actions | ConfigAction[] | Azioni nella colonna | | hyperlink | Hyperlink | Configurazione link | | navigate | Navigate | Configurazione navigazione | | image | Image | Configurazione immagine | | icon | Icon | Configurazione icona | | visible | boolean | Visibilità (default: true) | | sortable | boolean | Ordinabilità | | headerFilter | HeaderFilter | Filtro nell'intestazione | | sticky | boolean | Sticky a sinistra | | stickyEnd | boolean | Sticky a destra | | typeColumn | TypeColumn | Tipo visualizzazione (derivato automaticamente da baseType) |

Metodi statici di TableColumnField

TableColumnField.createTableColumnFields(keys, displays, types, styles?)

Factory helper per creare rapidamente un array di TableColumnField senza istanziare ogni oggetto manualmente.

const columns = TableColumnField.createTableColumnFields(
  ['id', 'nome', 'data'],
  ['ID', 'Nome', 'Data creazione'],
  [TypeColumn.Number, TypeColumn.String, TypeColumn.Date]
);

TableColumnField.createConfigColumns(keys, displays, types, styles?)

Equivalente legacy che produce ConfigColumn[].

BaseTypeConverterTable.convertToTypeColumn(baseType)

Converte un BaseType nel corrispondente TypeColumn. Utilizzato internamente da convertAs.


Modelli filtro

FilterField

Estende BaseFieldModel. Rappresenta la configurazione di un campo filtro da passare a eqp-filters (tramite l'input [filterFields]).

| Proprietà | Tipo | Descrizione | |---|---|---| | filterID | string | Identificativo univoco del filtro | | fieldClass | FieldSizeClass | Dimensione del campo nel layout a griglia | | label | string | Etichetta del campo filtro | | propertyName | string | Nome della proprietà su cui filtrare | | inputType | InputType | Tipo di controllo input | | placeholder | string | Testo placeholder | | required | boolean | Se il campo è obbligatorio | | defaultValue | any | Valore preimpostato | | enumList | any[] | Lista per i filtri di tipo Enum | | lookupConfig | LookupObject | Configurazione per filtri di tipo Lookup | | selectConfig | SelectObject | Configurazione per filtri di tipo Select |

Metodi statici di FilterField

FilterField.createStandardFilterConfig(key, label, inputType, fieldClass?, placeholder?)

Factory helper per la creazione rapida di un FilterField standard.

const filtri: FilterField[] = [
  FilterField.createStandardFilterConfig('nome', 'Nome', InputType.Text, FieldSizeClass.MEDIUM),
  FilterField.createStandardFilterConfig('data', 'Data', InputType.Date, FieldSizeClass.SMALL),
];

FilterField.createFilterFields(keys, labels, inputTypes, fieldClasses?)

Crea un array di FilterField dai parametri forniti come array paralleli.

FilterField.createFilterConfigs(filterFields)

Converte un array di FilterField in FilterConfig[] (formato interno di eqp-filters).

BaseTypeConverterFilter.convertToInputType(baseType)

Converte un BaseType nel corrispondente InputType.

FilterConfig e FilterCvlConfig

FilterConfig è la versione PascalCase di FilterField utilizzata internamente da eqp-filters. I campi sono equivalenti con naming diverso (PropertyName invece di propertyName, ecc.).

FilterCvlConfig estende la configurazione per i filtri a valori controllati (CVL — Controlled Vocabulary List):

| Proprietà | Tipo | Descrizione | |---|---|---| | FilterID | string | Identificativo del filtro | | CvlList | any[] | Lista dei valori selezionabili | | ValueProperty | string | Proprietà da usare come valore | | DisplayProperty | string | Proprietà da visualizzare | | MultiSelect | boolean | Se abilitare la selezione multipla |

FilterCvlConfig.CreateFilterCVLConfig(filterID, cvlList, valueProperty, displayProperty, multiSelect?)

Factory statica per la creazione di una FilterCvlConfig.

SavedFilterItem rappresenta un filtro salvato dall'utente:

| Proprietà | Tipo | Descrizione | |---|---|---| | FilterName | string | Nome assegnato dall'utente al filtro salvato | | FilterData | LinqPredicateDTO | Dati del filtro in formato LINQ |

InputType

Enum che definisce il tipo di controllo di input per i campi filtro e form:

| Valore | Costante | Descrizione | |---|---|---| | 1 | Text | Campo di testo libero | | 2 | Number | Campo numerico | | 3 | Date | Selettore data | | 4 | DateRange | Selettore intervallo date | | 5 | Enum | Lista a valori fissi (dropdown) | | 6 | Boolean | Toggle booleano | | 7 | Select | Dropdown con ng-select | | 8 | Lookup | Dialog di ricerca (eqp-lookup) | | 9 | Autocomplete | Autocomplete Material | | 10 | Currency | Campo importo con valuta | | 11 | Lookup | Alias lookup (vedi nota) |

WherePartType

Enum che definisce l'operatore di confronto da applicare in un predicato LINQ:

| Valore | Costante | Descrizione | |---|---|---| | 1 | Equal | Uguale a | | 2 | NotEqual | Diverso da | | 3 | GreaterThan | Maggiore di | | 4 | LessThan | Minore di | | 5 | GreaterThanOrEqual | Maggiore o uguale a | | 6 | LessThanOrEqual | Minore o uguale a | | 7 | Contains | Contiene (LIKE %value%) | | 8 | StartsWith | Inizia con | | 9 | EndsWith | Finisce con | | 10 | NotContainsElement | Non contiene l'elemento (per liste) |

FilterResultType e FilterMode

FilterResultType definisce la modalità con cui vengono restituiti i risultati del pannello filtri:

| Valore | Costante | Descrizione | |---|---|---| | 1 | BASIC | Filtro base: singolo LinqPredicateDTO | | 2 | ADVANCED | Filtro avanzato: ComplexLinqPredicateDTO con operatori AND/OR |

FilterMode definisce il layout del pannello filtri:

| Valore | Costante | Descrizione | |---|---|---| | 1 | WITH_CARD | Filtri racchiusi in una mat-card | | 2 | WITH_BUTTON | Filtri racchiusi in un pannello espandibile con pulsante |


Modelli form

FormField e FormFieldType

FormField estende BaseFieldModel. Rappresenta la configurazione di un campo del form dinamico di eqp-form.

| Proprietà | Tipo | Descrizione | |---|---|---| | formFieldType | FormFieldType | Tipo del campo form | | required | boolean | Campo obbligatorio | | placeholder | string | Testo placeholder | | defaultValue | any | Valore iniziale | | validators | ValidatorFn[] | Validatori Angular aggiuntivi | | fieldClass | FieldSizeClass | Dimensione nel layout griglia | | lookupObject | LookupObject | Configurazione lookup (quando formFieldType = Lookup) | | selectObject | SelectObject | Configurazione select (quando formFieldType = Select o Enum) | | minValue | number | Valore minimo (per campi numerici) | | maxValue | number | Valore massimo (per campi numerici) | | readonly | boolean | Campo in sola lettura | | hint | string | Testo di aiuto sotto il campo |

FormFieldType enum:

| Valore | Costante | |---|---| | 1 | Text | | 2 | Number | | 3 | Date | | 4 | Enum | | 5 | Boolean | | 6 | Select | | 7 | Lookup | | 8 | Textarea | | 9 | Currency | | 10 | DateRange |

BoolLabelPosition enum: BEFORE / AFTER — posizione dell'etichetta rispetto al toggle booleano.

BaseTypeConverter.convertToFormFieldType(baseType) — converte BaseType in FormFieldType.

LookupObject e SelectObject

LookupObject è la specifica di configurazione mirror di eqp-lookup per i campi di tipo Lookup nei form e nei filtri:

| Proprietà | Tipo | Descrizione | |---|---|---| | lookupUrl | string | URL endpoint HTTP | | lookupMethod | string | Metodo HTTP (GET/POST) | | displayProperties | string[] | Proprietà da visualizzare nel dropdown | | valueProperty | string | Proprietà usata come valore selezionato | | dataFilter | LinqPredicateDTO | Filtro statico applicato alla chiamata | | multiSelect | boolean | Selezione multipla | | addComponent | Type<any> | Componente per aggiunta record | | editComponent | Type<any> | Componente per modifica record |

SelectObject configura i dropdown basati su eqp-select:

| Proprietà | Tipo | Descrizione | |---|---|---| | selectList | any[] | Lista statica dei valori | | selectUrl | string | URL per lista dinamica | | valueProperty | string | Proprietà valore | | displayProperty | string | Proprietà visualizzata | | multiSelect | boolean | Selezione multipla | | enumType | any | Tipo enum (per liste generate da enum TypeScript) |


Modelli LINQ / server-side filtering

Questi modelli rappresentano il contratto di comunicazione tra il frontend e il backend per il filtraggio server-side. Vengono serializzati e inviati nelle richieste HTTP.

LinqPredicateDTO e LinqFilterDTO

LinqPredicateDTO incapsula un insieme di condizioni WHERE concatenate con lo stesso operatore logico:

| Proprietà | Tipo | Descrizione | |---|---|---| | Filters | LinqFilterDTO[] | Array delle singole condizioni | | Operator | 'AND' \| 'OR' | Operatore logico tra le condizioni |

LinqFilterDTO rappresenta una singola condizione:

| Proprietà | Tipo | Descrizione | |---|---|---| | PropertyName | string | Nome della proprietà su cui filtrare | | Value | any | Valore di confronto | | WherePart | WherePartType | Operatore di confronto | | FilterType | LinqFilterType | Tipo del dato filtrato |

LinqFilterDTO.createFilter(propertyName, value, wherePart, filterType?) — factory statica per la creazione di un filtro.

const predicato: LinqPredicateDTO = {
  Operator: 'AND',
  Filters: [
    LinqFilterDTO.createFilter('Nome', 'Mario', WherePartType.Contains),
    LinqFilterDTO.createFilter('Attivo', true, WherePartType.Equal),
  ]
};

LinqFilterType enum (valori da 1 a 10): String, Number, Date, Boolean, Guid, List, Enum, DateTime, DateRange, NullableNumber.

ComplexLinqPredicateDTO

Estende la logica di LinqPredicateDTO consentendo la composizione di più predicati con operatori diversi (es. (A AND B) OR (C AND D)):

| Proprietà | Tipo | Descrizione | |---|---|---| | Predicates | LinqPredicateDTO[] | Array di predicati semplici | | Operator | 'AND' \| 'OR' | Operatore tra i predicati |

ComplexLinqPredicateDTO.CreateComplexPredicate(predicates, operator?) — factory statica (default operator = 'OR').

const predicatoComplesso = ComplexLinqPredicateDTO.CreateComplexPredicate([
  { Operator: 'AND', Filters: [LinqFilterDTO.createFilter('TipoId', 1, WherePartType.Equal)] },
  { Operator: 'AND', Filters: [LinqFilterDTO.createFilter('TipoId', 2, WherePartType.Equal)] },
], 'OR');

LookupDTO e LookupCustomConfig

LookupDTO è il modello di risposta degli endpoint di lookup:

| Proprietà | Tipo | Descrizione | |---|---|---| | ID | any | Identificativo del record | | DisplayName | string | Testo visualizzato nel dropdown | | AdditionalData | any | Dati extra opzionali |

LookupCustomConfig configura il comportamento del lookup per richieste personalizzate:

| Proprietà | Tipo | Descrizione | |---|---|---| | lookupCustomUrl | string | URL alternativo per il lookup | | lookupCustomBody | any | Body della richiesta personalizzata | | lookupCustomMethod | string | Metodo HTTP personalizzato |


Enum di supporto

FieldSizeClass

Enum per la dimensione dei campi nei layout a griglia di eqp-filters e eqp-form:

| Valore | Costante | Classe Bootstrap | |---|---|---| | 1 | SMALL | col-12 col-md-3 | | 2 | MEDIUM | col-12 col-md-6 | | 3 | LARGE | col-12 col-md-12 | | 4 | CUSTOM | col-12 col-md-{n} (specificare customClass) |

NumberColumnPipe e BooleanValues

NumberColumnPipe definisce la formattazione per le colonne numeriche:

| Valore | Costante | Descrizione | |---|---|---| | 1 | DECIMAL | Numero decimale formattato | | 2 | PERCENT | Percentuale (multiplica per 100) | | 3 | CURRENCY | Importo con valuta (currencyPipeCode) |

BooleanValues è un'interfaccia per la localizzazione dei valori booleani nelle celle della tabella:

| Proprietà | Tipo | Descrizione | |---|---|---| | trueValue | string | Testo/icona per true (default: 'Sì') | | falseValue | string | Testo/icona per false (default: 'No') |


Pattern di utilizzo consigliato

Il caso d'uso più comune è definire una sorgente unica di configurazione tramite BaseFieldModel[] e derivarne automaticamente colonne, filtri e campi form.

// definizione unica
this.baseFields: BaseFieldModel[] = [
  { key: 'id',      display: 'ID',    baseType: BaseType.Number },
  { key: 'nome',    display: 'Nome',  baseType: BaseType.Text },
  { key: 'dataIns', display: 'Data',  baseType: BaseType.Date },
  { key: 'stato',   display: 'Stato', baseType: BaseType.Enum, enumModel: this.statiList },
];

// per eqp-table — tutte le colonne
this.tableColumns = EqpCommonService.convertAs(this.baseFields, TableColumnField);

// per eqp-filters — solo nome e data, con override della dimensione
this.filterFields = EqpCommonService.convertAs(
  this.baseFields,
  FilterField,
  ['nome', 'dataIns'],
  [
    Object.assign(new FilterField(), { key: 'nome', fieldClass: FieldSizeClass.MEDIUM }),
    Object.assign(new FilterField(), { key: 'dataIns', fieldClass: FieldSizeClass.SMALL }),
  ]
);

// per eqp-form — con campo aggiuntivo non presente nella sorgente base
this.formFields = EqpCommonService.convertAs(
  this.baseFields,
  FormField,
  ['nome', 'stato'],
  [
    Object.assign(new FormField(), { key: 'nome', required: true }),
    Object.assign(new FormField(), {
      key: 'note',
      display: 'Note',
      formFieldType: FormFieldType.Textarea,
      fieldClass: FieldSizeClass.LARGE
    }),
  ]
);