Sorgente dati endpoint
Panoramica
Tutti i componenti remote caricano le opzioni tramite fetchFn. Da @pzeta/vue-form 2.6 esiste una seconda strada: dichiarare la risorsa con endpoint e lasciare che sia il componente a comporre la chiamata PostgREST, riusando filter e filterFields.
// Con fetchFn — pieno controllo, nessuna dipendenza aggiuntiva
props: {
fetchFn: fetchClienti,
optionLabel: 'ragionesociale',
optionValue: 'idcliente'
}
// Con endpoint — la chiamata la compone il componente
props: {
endpoint: 'anagrafica.clienti',
select: 'idcliente,ragionesociale,idprovincia',
order: 'ragionesociale.asc',
optionLabel: 'ragionesociale',
optionValue: 'idcliente'
}
fetchFn ha sempre la precedenza. Se sono presenti entrambe, endpoint viene ignorato e in console compare un warning. I form esistenti non cambiano comportamento in alcun modo.Forma dell'endpoint
L'endpoint si scrive come [schema.]risorsa:
| Valore | Significato |
|---|---|
'clienti' | Risorsa clienti sullo schema di default del gateway |
'anagrafica.clienti' | Risorsa clienti sullo schema anagrafica, instradata con header Accept-Profile |
Lo schema è opzionale e il punto non è mai ambiguo: le tabelle PZeta sono minuscole e senza separatori.
Props
| Prop | Tipo | Default | Descrizione |
|---|---|---|---|
endpoint | string | — | Risorsa PostgREST, nella forma [schema.]risorsa |
select | string | — | Colonne da selezionare, es. 'idcliente,ragionesociale' |
order | string | — | Ordinamento PostgREST, es. 'ragionesociale.asc' |
limit | number | — | Numero massimo di righe restituite |
baseUrl | string | '' | Prefisso del gateway PostgREST, usato solo se l'endpoint dichiara uno schema |
keyName | string | 'id' | Chiave primaria della risorsa, usata solo dal client PostgREST standalone |
Il client http della shell è già same-origin, quindi baseUrl serve solo dove il gateway sta sotto un prefisso (es. /apiV1).
Filtri
filter è il filtro statico applicato a ogni richiesta, filterFields elenca i campi del form da osservare: quando il loro valore cambia, i dati vengono ricaricati.
Forma breve ed estesa
Nella forma breve il nome del campo coincide con la colonna e il confronto è eq. La forma estesa serve quando il campo del form ha un nome diverso dalla colonna, o quando il confronto non è un'uguaglianza:
props: {
endpoint: 'anagrafica.clienti',
filter: { attivo: true },
filterFields: [
'idprovincia',
{ field: 'ricerca', column: 'ragionesociale', operator: 'ilike' }
]
}
Con formData = { idprovincia: 12, ricerca: 'rossi' } la richiesta diventa:
GET /clienti?attivo=eq.true&idprovincia=eq.12&ragionesociale=ilike.*rossi*
Come vengono tradotti i valori
| Valore nel filtro | Espressione PostgREST |
|---|---|
12, 'attivo', true | eq.12, eq.attivo, eq.true |
{ operator: 'gte', value: 100 } | gte.100 |
{ operator: 'ilike', value: 'rossi' } | ilike.*rossi* |
[1, 2, 3] | in.(1,2,3) |
null | is.null |
'eq.true' (già in sintassi PostgREST) | eq.true, invariato |
'', undefined, [] | omesso dalla query |
Un valore di ricerca senza wildcard viene cercato come "contiene". I valori che contengono caratteri strutturali vengono racchiusi tra apici: 'Rossi, Bianchi' diventa eq."Rossi, Bianchi".
1.5 o Rossi S.p.A. resta un valore e non viene scambiato per un'espressione.Operatori ammessi: eq, neq, gt, gte, lt, lte, like, ilike, match, imatch, in, is, isdistinct, fts, plfts, phfts, wfts, cs, cd, ov, sl, sr, nxr, nxl, adj.
Da dove arriva il trasporto
Il componente non richiede configurazione: al montaggio cerca un trasporto nell'ordine seguente.
- Contesto MFE della shell, fornito con la chiave di
@pzeta/mfe-contracts— copre gli MFE montati dal portale, che ereditano auth, refresh 401 eX-Tab-Iddel client http della shell. - Contesto MFE con chiave stringa
'mfeContext', per gli MFE che lo espongono anche in quella forma. - Client fornito esplicitamente con
provide('postgrestClient', client). - Singleton configurato con
initPostgRESTClient(), per le app standalone.
Se nessuno risponde, il componente mostra il proprio stato d'errore e il messaggio spiega quale delle quattro strade manca.
Peer dependencies
I moduli PostgREST sono caricati con import() alla prima richiesta: chi usa solo fetchFn non ne paga né il peso né la risoluzione, e non deve installare nulla. Chi usa endpoint ha bisogno delle due peer opzionali:
npm install @pzeta/postgrest @pzeta/mfe-contracts
Limiti
- La richiesta non viene annullata. Il
signalnon è propagato, perché néPostgrestMfeServicené il repository del client lo accettano. Le risposte superate da una richiesta più recente vengono comunque scartate, quindi non si vedono dati stantii: semplicemente la richiesta abbandonata arriva a compimento sulla rete. - Nessuna paginazione. Per elenchi grandi imposta
limit, oppure usafetchFncon la paginazione del servizio. - Nessuna ricerca server-side nel dropdown.
showFilterfiltra le opzioni già caricate; per cercare sul server usafilterFieldscon operatoreilikelegato a un campo del form.
Componenti che la supportano
SelectRemote · ListboxRemote · RadioGroupRemoteInput · TreeRemote · InplaceSelectRemote · OrderListRemote · PickListRemote
Wrapper Fields
Riferimento compatto dei campi che sono semplici wrapper di componenti @pzeta/vue-components — Basic, Selection, Toggle, Advanced, Special.
Schema builders
Helper fluenti field, row, section, form per costruire FormSchema. Alternativa opzionale all'oggetto literal — che resta la forma raccomandata.