@wemake4u/form-controls 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -51,6 +51,31 @@ opzione, o si azzera da codice. Con `clearable` il pulsante viene mostrato e svu
51
51
  ```
52
52
 
53
53
 
54
+ ## Valore nullo: `nullable` e `nullOptionLabel`
55
+
56
+ Di default i controlli si comportano come sempre. Con `nullable` textbox, number, date, time, datetime e select
57
+ singola mostrano dentro il campo il pulsante "X" del kit (`sirio-btn-reset`), che porta il valore a `null`.
58
+ Il pulsante compare solo quando il campo ha un valore e non è obbligatorio, in sola lettura o disabilitato; dopo
59
+ il clic il focus torna al campo. Il nome per i lettori di schermo è `nullLabel` seguito dalla label
60
+ ("Nessun valore per Codice fiscale"). Nella textbox con `nullable` anche il testo cancellato arriva come `null`.
61
+
62
+ Il radio group con `nullable` aggiunge un'ultima opzione con valore `null` (in corsivo, testo `nullOptionLabel`,
63
+ default "Nessuna scelta"), non mostrata se il campo è obbligatorio.
64
+
65
+ La checkbox con `nullable` diventa un gruppo di radio Sì / No / Nessuna scelta (valori `true`, `false`, `null`),
66
+ con la label come nome del gruppo; i testi si cambiano con `trueLabel`, `falseLabel` e `nullOptionLabel`, e
67
+ l'opzione nulla non compare se il campo è obbligatorio.
68
+
69
+ ```html
70
+ <wm-sirio-textbox label="Codice fiscale" nullable formControlName="cf" />
71
+ <wm-sirio-checkbox label="Ricevere la newsletter" nullable formControlName="newsletter" />
72
+ <wm-sirio-radio-group label="Tipo" [options]="tipi" nullable formControlName="tipo" />
73
+ ```
74
+
75
+ In `wm-sirio-schema-form` i campi il cui tipo ammette `null` (es. `"type": ["string", "null"]`) sono `nullable`: la
76
+ "X" del campo scrive `null` nel JSON, mentre la gomma accanto alla label toglie la proprietà (non passata). I booleani
77
+ che ammettono `null` mostrano Sì / No / null, gli altri solo Sì / No.
78
+
54
79
  ## Select: opzioni in caricamento
55
80
 
56
81
  Con `loading` la select mostra che le opzioni stanno arrivando (es. da un servizio): il campo chiuso mostra
@@ -155,6 +180,21 @@ Import unico: `imports: [SIRIO_DATA_GRID]`.
155
180
  - **Errori**: oltre a `(loadError)`, la tabella mostra `loadErrorText` ("Non è stato possibile caricare i dati.") con
156
181
  il pulsante "Riprova" (`retryLabel`), che richiama il data source; la paginazione resta per tornare indietro. Con
157
182
  `<ng-template wmSirioGridError let-error let-retry="retry">` il contenuto è personalizzato.
183
+ - **Server OData** (`sirioRemoteGridSource`): trasforma la query della tabella in opzioni di query lato server
184
+ (`$top`, `$skip`, `$count`, `$orderby` e filtri nel modello di ag-grid), il formato di `@wemake4u/remoting`:
185
+ ```ts
186
+ readonly source = sirioRemoteGridSource(options => this.service.getItems(options), {
187
+ filterTypes: { version: 'number', created: 'date', state: 'select' },
188
+ extraFilter: () => ({ state: sirioAnyOf(this.states()) })
189
+ });
190
+ ```
191
+ La libreria non dipende da remoting: `SirioRemoteQueryOptions` ha la stessa forma di `QueryOptions`, quindi una
192
+ funzione di caricamento tipizzata con `QueryOptions` si passa così com'è. Il totale è quello che il caricamento
193
+ scrive in `options.totalCount` (remoting vi copia il `$count` della risposta). `filterTypes` indica il tipo dei
194
+ filtri non di testo (il `filter` delle colonne); `extraFilter`, letto a ogni query, aggiunge filtri che non sono
195
+ colonne (es. stati scelti con i chip). Le chiavi sono `field` / `sortKey` / `filterKey` delle colonne con i punti
196
+ (`properties.name`), che remoting trasforma nel path OData; le date dei filtri coprono l'intero giorno.
197
+ `sirioToQueryOptions` e `sirioToFilterModel` fanno la sola conversione.
158
198
  - **Filtri per colonna** (`filter` sulla colonna): pulsante nell'intestazione che apre il popover del kit con i
159
199
  controlli della libreria. Tipi: `text` (contiene, senza distinzione di maiuscole e accenti), `number` e `date`
160
200
  (intervallo Da / A), `select` (con `filterOptions`, anche `filterMultiple`; **senza `filterOptions` la scelta è tra i