@esfaenza/flow-builder 20.3.41 → 20.3.43
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 +68 -6
- package/fesm2022/esfaenza-flow-builder.mjs +666 -59
- package/fesm2022/esfaenza-flow-builder.mjs.map +1 -1
- package/index.d.ts +235 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -235,8 +235,9 @@ il trascinamento sul canvas vuoto disegna il rettangolo di selezione invece di s
|
|
|
235
235
|
un elemento, il canvas lo dice e dice **cosa farne**: «trascinane uno per spostarli tutti». Un
|
|
236
236
|
gesto che nessuno annuncia non esiste.
|
|
237
237
|
|
|
238
|
-
**Risorse.** Il pannello «Risorse» e' un **elenco**: nome, tipo
|
|
239
|
-
|
|
238
|
+
**Risorse.** Il pannello «Risorse» e' un **elenco**: nome, tipo — con la **classe** o l'entita'
|
|
239
|
+
accanto, perche' «Structure» da solo non dice quale, e su ventun variabili la classe si leggeva
|
|
240
|
+
solo aprendole una per una — quante volte e' usata, i rilievi della riga. Aggiungerne una o cliccarne il nome apre una **finestra** dedicata con il form dentro,
|
|
240
241
|
come per il dettaglio di un elemento — e per la stessa ragione: il form di un dynamic choice set
|
|
241
242
|
(sorgente, due campi, ordinamento, limite, filtri) dentro la colonna laterale spingeva l'elenco
|
|
242
243
|
fuori dallo schermo, cioe' faceva sparire il contesto per cui l'elenco esiste. La finestra si
|
|
@@ -249,6 +250,26 @@ Rimuovere una risorsa **usata** chiede conferma e dice quanti riferimenti rester
|
|
|
249
250
|
cancellare una variabile non fa sparire nessun arco dal canvas, e senza il numero il danno si
|
|
250
251
|
scopriva alla validazione successiva.
|
|
251
252
|
|
|
253
|
+
*Il filtro.* Sopra l'elenco c'e' una casella e due interruttori, e sono per la **scala**: un flow
|
|
254
|
+
di produzione ha ventun variabili e dodici dynamic choice set, e a quella misura il problema
|
|
255
|
+
dell'elenco non e' leggerlo ma trovarci dentro una riga. La casella cerca nel nome,
|
|
256
|
+
nell'etichetta, nel tipo (`objectType` compreso: «address» trova le tre variabili `AddressDTO`) e
|
|
257
|
+
nelle **parole dei flag** (`input`, `output`, `collection`) — cioe' in cio' che la riga mostra, ed
|
|
258
|
+
e' anche il motivo per cui la riga mostra la classe — e non dentro i valori e le formule: «chi cita `Totale`» e' un'altra
|
|
259
|
+
domanda, e la risponde il conteggio degli usi. I due interruttori sono invece le domande che un
|
|
260
|
+
nome non sa fare: **non usate** e **con rilievi**; a zero si disabilitano, perche' un filtro che
|
|
261
|
+
darebbe certamente un elenco vuoto non restringe l'elenco, lo nasconde.
|
|
262
|
+
|
|
263
|
+
Il filtro **non e' la ricerca del flow**: quella (la casella in cima all'editor) sa dov'e' un nome
|
|
264
|
+
che si conosce già, e arrivando su una risorsa **spegne** il filtro — altrimenti aprirebbe la
|
|
265
|
+
finestra su una riga che il filtro tiene fuori dall'elenco. Qui invece si restringe un elenco che
|
|
266
|
+
si sta guardando, e per questo il filtro **resta acceso cambiando scheda**: il numero accanto a
|
|
267
|
+
ogni tipo diventa quello delle **corrispondenze**, ed e' cio' che dice dove sta la risorsa cercata
|
|
268
|
+
— che il piu' delle volte e' in un'altra collection. Un elenco vuoto distingue i tre casi, perche'
|
|
269
|
+
i rimedi sono diversi: la collection e' vuota, il filtro non trova niente **qui** ma trova
|
|
270
|
+
altrove, il filtro non trova niente da nessuna parte. Aggiungere una risorsa spegne il filtro: si
|
|
271
|
+
chiama «variabile_1» e non corrisponderebbe a niente di cio' che si stava cercando.
|
|
272
|
+
|
|
252
273
|
**Copia, incolla, duplica.** `Ctrl`+`C` copia gli elementi selezionati — la selezione del canvas
|
|
253
274
|
puo' contenerne piu' d'uno (rettangolo, `Ctrl`+`A`) — `Ctrl`+`V` li incolla, `Ctrl`+`D` li duplica in
|
|
254
275
|
loco; gli stessi comandi stanno nella top bar («⧉» e «⎘») e sul node selezionato («⧉»). I tasti
|
|
@@ -316,9 +337,9 @@ orchestrazione ne resta fuori: la §7 non lo comprende.
|
|
|
316
337
|
Un tipo con un **discriminatore** compare come piu' voci, una per valore: il Collection
|
|
317
338
|
Processor e' «Ordina» e «Filtra», non «ordina o filtra». Sono due gesti diversi — un `Sort`
|
|
318
339
|
vuole `sortOptions`, un `Filter` vuole condizioni (§5.6) — e sceglierli dalla palette evita di
|
|
319
|
-
sceglierli dopo, dentro il form. L'elemento nasce con il discriminatore già scritto, con
|
|
320
|
-
|
|
321
|
-
|
|
340
|
+
sceglierli dopo, dentro il form. L'elemento nasce con il discriminatore già scritto, con il
|
|
341
|
+
glifo della variante — lo stesso che avra' sul canvas — e con un nome tecnico provvisorio preso
|
|
342
|
+
dalla variante. `core/element-variants.ts` tiene la mappa tipo → campo del
|
|
322
343
|
discriminatore; i valori restano nel dizionario del backend (`collectionProcessorTypes`), e
|
|
323
344
|
senza quel dizionario il tipo torna a essere una voce sola.
|
|
324
345
|
|
|
@@ -327,6 +348,17 @@ Decision, Loop, Collection Processor, Get / Create / Update / Delete / Rollback
|
|
|
327
348
|
Action, Script, Subflow, Wait, Custom Error, Transform, Orchestrated Stage. Più l'intestazione
|
|
328
349
|
comune con la rinomina, che **riscrive tutti i riferimenti** all'elemento.
|
|
329
350
|
|
|
351
|
+
*Nominare un elemento nuovo.* Un elemento appena creato nasce **senza etichetta**, e il suo form
|
|
352
|
+
si apre con il cursore lì: il nome tecnico parte **vuoto** e si costruisce dall'etichetta mentre
|
|
353
|
+
la si digita, con spazi e caratteri non ammessi sostituiti da `_` (§3.3). Nel documento un nome
|
|
354
|
+
provvisorio c'e' comunque, perché il nome e' la chiave con cui tutto raggiunge l'elemento — e' anche
|
|
355
|
+
cio' che il canvas mostra al posto del titolo finché l'etichetta manca — ma non e' quello che si
|
|
356
|
+
legge nel campo. Scrivere il nome a mano lo sgancia dall'etichetta; svuotare il campo lo rimette a
|
|
357
|
+
seguirla. Su un elemento che un'etichetta ce l'ha già il nome torna in sola lettura dietro il
|
|
358
|
+
comando «Rinomina»: da lì in poi cambiarlo riscrive i riferimenti di tutto il documento (§13.8) e
|
|
359
|
+
non e' un gesto da fare per sbaglio. Corollario: l'annulla riporta indietro etichetta e nome
|
|
360
|
+
**insieme**, in un passo solo, e la selezione dell'editor — che e' il nome — lo segue.
|
|
361
|
+
|
|
330
362
|
**Screen dinamico (§5.2).** È un **compositore**, non un form, e per questo la dialog e' larga il
|
|
331
363
|
doppio di com'era: **tre colonne**. A sinistra la palette (due schede — i componenti, e i campi di
|
|
332
364
|
un'entita' che portano tipo ed etichetta dallo schema), al centro **la schermata disegnata** (si
|
|
@@ -436,6 +468,26 @@ compreso il **tipo** di ciascuna: senza, il valore di un filtro su `NumericValue
|
|
|
436
468
|
casella di testo. `displayField` e `valueField` hanno un default (`Label` e `Name`) e il form li
|
|
437
469
|
mostra come tali, cosi' non finiscono nel documento senza motivo.
|
|
438
470
|
|
|
471
|
+
E la sorgente decide anche **quali campi esistono**: `limit`, `displayField` e `valueField`
|
|
472
|
+
valgono su tutt'e tre, ma `filters`, `filterLogic`, `sortField` e `sortOrder` valgono sulle sole
|
|
473
|
+
`object` — dove diventano la query — ed `enumType`, dove il runtime li valuta in memoria. Su una
|
|
474
|
+
`collectionReference` le opzioni sono gli elementi della collection **nell'ordine in cui ci
|
|
475
|
+
sono**: il form non offre quei controlli, e se il documento li porta lo dice con
|
|
476
|
+
`CHOICE_SET_FILTERS_IGNORED` — un **avviso**, perche' il flow gira e il campo funziona, solo
|
|
477
|
+
propone tutto; il difetto e' che chi l'ha scritto crede di aver selezionato qualcosa. La
|
|
478
|
+
ripulitura e' un comando («Togli»), non un effetto dell'apertura del form: cancellare i filtri di
|
|
479
|
+
un flow scritto altrove farebbe sparire l'unico indizio di cosa doveva selezionare. Il rilievo si
|
|
480
|
+
vede in **tutti e due** i posti, elenco e form, come gli altri controlli locali.
|
|
481
|
+
|
|
482
|
+
*La logica dei filtri.* `filterLogic` **esiste anche sui choice set**, con le stesse forme degli
|
|
483
|
+
elementi che interrogano il database: `AND` (o assente), `OR`, oppure l'espressione sugli indici
|
|
484
|
+
1-based dei filtri (`1 AND (2 OR 3)`), che l'editor verifica mentre si scrive e **riscrive** quando
|
|
485
|
+
si cancella un filtro — senza, l'espressione resterebbe valida puntando al filtro sbagliato, che
|
|
486
|
+
e' il peggiore dei due esiti. Il valore `Formula` invece **non e' supportato da nessun elemento**:
|
|
487
|
+
non lo scrive nessun gesto dell'editor — la modalita' «Formula» scrive `filterFormula`, che e' un
|
|
488
|
+
campo suo — e se arriva da un documento scritto altrove si vede un rilievo che dice cosa fare, non
|
|
489
|
+
una modalita' che sembra buona.
|
|
490
|
+
|
|
439
491
|
**Classi (`Structure`).** L'ottavo tipo di dato non e' un doppione di `Object` (§4.7): di
|
|
440
492
|
un'istanza di classe il flow legge e scrive i **membri**. Cambia quindi il form: la classe si
|
|
441
493
|
scoglie con `<fb-structure-picker>` e la sua assenza e' un **errore** — senza classe il runtime
|
|
@@ -664,6 +716,14 @@ leggendo. Ad aprire il form ci sono il bottone «✎» della riga e il doppio cl
|
|
|
664
716
|
coppia di gesti del canvas. Per la stessa
|
|
665
717
|
ragione il clic non si limita ad aprire l'elemento: **seleziona il campo** che il rilievo nomina.
|
|
666
718
|
|
|
719
|
+
**Il tipo di flow si sceglie alla creazione.** Su un flow nuovo — quello che l'editor apre senza
|
|
720
|
+
`flowName` — il `processType` e' una scelta nella barra in cima; da quando il flow e' salvato
|
|
721
|
+
diventa un'etichetta e non si tocca più. Non e' prudenza: il tipo decide quali globali esistono
|
|
722
|
+
(`$Record` non c'e' in uno screen flow, §4.1), quali elementi sono ammessi (§13.6) e come il motore
|
|
723
|
+
esegue il flow, e cambiarlo su un documento già scritto lo lascia pieno di riferimenti a cose che
|
|
724
|
+
da quel momento non esistono — senza che nessuna primitiva del backend rimedi. Un host che crea i
|
|
725
|
+
flow da sé (come la demo) il tipo lo chiede lì, e lo passa a `emptyFlowDefinition`.
|
|
726
|
+
|
|
667
727
|
**Versioni.** Elenco con stato, «Nuova versione» al posto di «Salva» sulle versioni chiuse,
|
|
668
728
|
attivazione bloccata finche' ci sono errori, eliminazione dietro una conferma esplicita che
|
|
669
729
|
spiega il rischio per le esecuzioni sospese.
|
|
@@ -886,7 +946,9 @@ distribuire e nessuna dipendenza da un font di icone dell'applicazione ospite.
|
|
|
886
946
|
| 21 | **Un campo nascosto viene azzerato all'invio** | L'inspector lo dice dove si scrive la `visibilityRule`: la regola si rivaluta sui valori appena inviati e il campo che sparisce **perde** il valore. È l'unica cosa che chi disegna il flow non puo' dedurre dal metadata, e per questo sta nel form e non solo in questa tabella |
|
|
887
947
|
|
|
888
948
|
Altre regole del contratto rispettate: liste vuote omesse invece di scritte come `[]` (§2),
|
|
889
|
-
`filterLogic` mostrato **solo** dove il modello lo prevede
|
|
949
|
+
`filterLogic` mostrato **solo** dove il modello lo prevede — Get Records, Create Records, Start,
|
|
950
|
+
eventi di un Wait e dynamic choice set, **non** Update e Delete (§4.4) — e mai col valore
|
|
951
|
+
`Formula`, che nessun elemento supporta, `fullName` / `status` mai
|
|
890
952
|
usati per rinominare o attivare (§2), un solo campo valorizzato in
|
|
891
953
|
`FlowElementReferenceOrValue` con segnalazione e normalizzazione dei documenti ambigui (§4.2),
|
|
892
954
|
`Transform.connector` e `start` trattati come array per fedelta' storica (§3.5), salvataggio
|