@esfaenza/flow-builder 20.3.46 → 20.3.48

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
@@ -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 style="height: 100vh">`, oppure un
107
- contenitore flex. Gli store sono provider **del componente**, quindi due builder sulla stessa
108
- pagina editano due flow indipendenti.
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