@esfaenza/flow-builder 20.3.46 → 20.3.47
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 -3
- package/fesm2022/esfaenza-flow-builder.mjs +316 -30
- package/fesm2022/esfaenza-flow-builder.mjs.map +1 -1
- package/index.d.ts +266 -10
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -103,9 +103,21 @@ l'attributo di scope di Angular, quindi un CSS incapsulato non li raggiunge.
|
|
|
103
103
|
| `activated` | dopo un'attivazione riuscita |
|
|
104
104
|
| `runRequested` | l'utente ha premuto **Esegui** o **Debug**, con `FlowRunRequest`: `debug`, `flowName`, `version`, `inputs` già convertiti, `processType`, `isDirty` e la `definition` in mano all'editor. **L'editor non esegue e non chiama niente**: cosa significhi eseguire — una navigazione, delle API dell'host, una dialog con l'interview dentro — lo decide l'host. Un host che non ascolta questo output fa sì che i due comandi non facciano niente: non c'e' nessuna primitiva che possa mancare, quindi nessun errore da mostrare |
|
|
105
105
|
|
|
106
|
-
Il componente vuole un'altezza: `<fb-flow-builder
|
|
107
|
-
|
|
108
|
-
|
|
106
|
+
**Il componente vuole un'altezza**, e non e' un dettaglio di stile: `<fb-flow-builder
|
|
107
|
+
style="height: 100vh">`, oppure un contenitore flex che gliene dia una. L'editor e' un guscio
|
|
108
|
+
d'applicazione, e ogni suo pannello — l'elenco delle risorse, i problemi, l'inspector, la traccia —
|
|
109
|
+
**scorre per conto proprio** dentro l'altezza che riceve.
|
|
110
|
+
|
|
111
|
+
Se non la riceve, `height: 100%` si risolve su `auto` e la catena si rovescia: ogni regione diventa
|
|
112
|
+
alta quanto il suo contenuto, nessuna scorre piu', e la pagina cresce all'infinito. È un difetto che
|
|
113
|
+
non si vede finche' il flow e' piccolo — con dieci risorse la differenza non si nota, con quaranta la
|
|
114
|
+
pagina non finisce piu'. Da lì `max-height: 100vh` su `.fb-builder`, che e' un **freno** e non il
|
|
115
|
+
modo in cui l'editor prende la sua altezza: rimette in piedi lo scorrimento dove l'altezza manca, e
|
|
116
|
+
dove c'e' non morde. Il freno non sostituisce l'altezza: sotto un'intestazione di pagina il
|
|
117
|
+
viewport intero e' comunque troppo, e a fare la cosa giusta e' l'ospite.
|
|
118
|
+
|
|
119
|
+
Gli store sono provider **del componente**, quindi due builder sulla stessa pagina editano due flow
|
|
120
|
+
indipendenti.
|
|
109
121
|
|
|
110
122
|
---
|
|
111
123
|
|
|
@@ -366,6 +378,37 @@ comando «Rinomina»: da lì in poi cambiarlo riscrive i riferimenti di tutto il
|
|
|
366
378
|
non e' un gesto da fare per sbaglio. Corollario: l'annulla riporta indietro etichetta e nome
|
|
367
379
|
**insieme**, in un passo solo, e la selezione dell'editor — che e' il nome — lo segue.
|
|
368
380
|
|
|
381
|
+
**Il tipo di flow (§3.4).** È la prima scelta, e nel documento **non e' un campo**: il tipo e' la
|
|
382
|
+
coppia `processType` + `start.triggerType`, e i tipi sono sei — con schermate, su richiesta,
|
|
383
|
+
innescato da un record, pianificato, innescato da un evento, orchestrazione innescata da un record.
|
|
384
|
+
La tabella con i flag arriva nei dizionari come `flowTypes` e non si ricopia: `allowsScreens`,
|
|
385
|
+
`requiresObject`, `requiresSchedule`, `requiresEvent`, `requiresRegistration` sono gli stessi che
|
|
386
|
+
applica il backend.
|
|
387
|
+
|
|
388
|
+
Tre conseguenze nell'editor:
|
|
389
|
+
|
|
390
|
+
- **si sceglie alla creazione** e poi resta un'etichetta, come prima; cio' che cambia e' che la
|
|
391
|
+
tendina elenca i sei tipi e scrive **due** campi in una sola mutazione. Il contratto ammette il
|
|
392
|
+
cambio di tipo (riscrivere la coppia); l'editor non lo offre, per la ragione di sempre — un
|
|
393
|
+
documento già scritto si riempirebbe di riferimenti a globali che da quel momento non esistono;
|
|
394
|
+
- **la coppia si legge in un posto solo**, `FlowDictionaryStore.flowTypeOf`. Tre dei sei tipi sono
|
|
395
|
+
`AutoLaunched`, quindi ogni domanda posta al solo `processType` da qui in avanti risponde male: e'
|
|
396
|
+
il motivo per cui la palette decide di offrire gli screen da `allowsScreens` e non piu' dal
|
|
397
|
+
`processType`, e per cui lo Start propone i soli `triggerTypes` del tipo scelto;
|
|
398
|
+
- `flowType` compare **derivato** nell'elenco dei flow, nelle versioni e nell'outline, e vale `null`
|
|
399
|
+
per cio' che non e' uno dei sei (un `Evaluation`, un'orchestrazione senza trigger): lì si mostra il
|
|
400
|
+
`processType`, e non e' un difetto da correggere.
|
|
401
|
+
|
|
402
|
+
**L'attivazione, e la sua seconda meta' (§8).** I tre tipi che non partono da soli vanno **presi in
|
|
403
|
+
carico** dall'infrastruttura dell'ospite — uno scheduler, un bus, un intercettore delle scritture — e
|
|
404
|
+
il backend li registra prima di attivare. Da lì due esiti che il pannello dei problemi non spiega,
|
|
405
|
+
perche' non parlano della definizione: `MissingService` (su questa installazione nessuno prende in
|
|
406
|
+
carico quel tipo di flow: la definizione e' valida, «riprova» non ha senso) e `RegistrationFailed`
|
|
407
|
+
(l'host ha rifiutato: «riprova» ce l'ha). In **entrambi** i casi la versione non e' attiva, e la
|
|
408
|
+
sessione ricarica l'elenco versioni invece di lasciar credere all'esito; su un salvataggio con
|
|
409
|
+
`activate: true` la bozza **resta salvata** e non attivata. Le due frasi le compone
|
|
410
|
+
`describeActivationError`, in un posto solo perche' ad attivare sono in due.
|
|
411
|
+
|
|
369
412
|
**Screen dinamico (§5.2).** È un **compositore**, non un form, e per questo la dialog e' larga il
|
|
370
413
|
doppio di com'era: **tre colonne**. A sinistra la palette (due schede — i componenti, e i campi di
|
|
371
414
|
un'entita' che portano tipo ed etichetta dallo schema), al centro **la schermata disegnata** (si
|
|
@@ -453,6 +496,28 @@ Le due cose che il modello non mostra e la colonna centrale dice:
|
|
|
453
496
|
**nome** di un campo (`stringValue`), ma dove il tipo della collection aggregata e' noto lo si
|
|
454
497
|
sceglie da un elenco invece di ricordarlo.
|
|
455
498
|
|
|
499
|
+
**Le regole della schermata (§5.2).** `validationRules` sono le verifiche che **non appartengono a
|
|
500
|
+
nessun campo**: «almeno un punto fra le due sezioni», «la somma delle percentuali fa cento». Si
|
|
501
|
+
modellano nelle proprieta' della schermata, accanto alle action, e a runtime arrivano come
|
|
502
|
+
`SCREEN_RULE` — l'unico codice di validazione che puo' presentarsi **senza `fieldName`**.
|
|
503
|
+
|
|
504
|
+
Perche' esistono: la `validationRule` di un campo giudica **un** valore, e su una sezione ripetibile
|
|
505
|
+
e' addirittura inerte (una sezione non raccoglie un valore proprio). L'alternativa storica era un
|
|
506
|
+
node a valle dello screen, che pero' non blocca la schermata — l'interview avanza e poi torna
|
|
507
|
+
indietro — e mette una validazione dentro il disegno del flow.
|
|
508
|
+
|
|
509
|
+
Tre cose che il form mette a posto:
|
|
510
|
+
|
|
511
|
+
- `errorMessage` e' **obbligatorio** (`SCREEN_RULE_INVALID`): senza, la schermata si rifiuta di
|
|
512
|
+
avanzare senza dire perche', e un messaggio non si puo' costruire — non c'e' un campo da nominare;
|
|
513
|
+
- **si scrivono con le condizioni, non con la formula**, ed e' il consiglio che il pannello ripete:
|
|
514
|
+
`IsEmpty` su una collection e' un operatore che il runtime valuta, mentre la stessa domanda in una
|
|
515
|
+
formula chiede al motore una funzione che potrebbe non avere. `Formula` resta un `conditionLogic`
|
|
516
|
+
ammesso — qui sì, a differenza di un `filterLogic` — quindi l'editor la offre lo stesso;
|
|
517
|
+
- il `fieldName` facoltativo pesca dai campi della schermata **senza quelli dentro una riga**: lo
|
|
518
|
+
stesso elenco degli inneschi, e per la stessa ragione — un campo che esiste in una copia per
|
|
519
|
+
elemento non individua un controllo a cui agganciare il messaggio.
|
|
520
|
+
|
|
456
521
|
**Screen action (§5.2).** Un campo che l'utente compila puo' **innescare un'action** i cui risultati
|
|
457
522
|
finiscono negli altri campi della stessa schermata: e' il caso «scrivi il codice fiscale e nome e
|
|
458
523
|
cognome compaiono da soli», e senza di essa lo si farebbe spezzando lo screen in due con un elemento
|