@esfaenza/flow-builder 20.3.37 → 20.3.39
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 +36 -12
- package/fesm2022/esfaenza-flow-builder.mjs +501 -294
- package/fesm2022/esfaenza-flow-builder.mjs.map +1 -1
- package/index.d.ts +238 -147
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -79,8 +79,11 @@ l'attributo di scope di Angular, quindi un CSS incapsulato non li raggiunge.
|
|
|
79
79
|
[flowName]="'ApprovazioneOrdine'"
|
|
80
80
|
[version]="null"
|
|
81
81
|
[author]="utenteCorrente"
|
|
82
|
+
[runOutcome]="esitoUltimaEsecuzione()"
|
|
83
|
+
[isRunning]="esecuzioneInCorso()"
|
|
82
84
|
(saved)="onSaved($event)"
|
|
83
85
|
(activated)="onActivated($event)"
|
|
86
|
+
(runRequested)="esegui($event)"
|
|
84
87
|
/>
|
|
85
88
|
```
|
|
86
89
|
|
|
@@ -91,11 +94,14 @@ l'attributo di scope di Angular, quindi un CSS incapsulato non li raggiunge.
|
|
|
91
94
|
| `author` | registrato sulla versione e mostrato nell'elenco |
|
|
92
95
|
| `defaultProcessType` | `processType` iniziale di un flow nuovo |
|
|
93
96
|
| `inspectorMode` | `'dialog'` (predefinito) apre il dettaglio dell'elemento in una finestra sopra il canvas; `'panel'` lo tiene nel pannello laterale |
|
|
97
|
+
| `runOutcome` | l'esito che l'host vuole far vedere nel pannello «Debug» dopo un `runRequested` (`FlowRunOutcome`); `null` → il pannello dice che non c'e' niente. Facoltativo: chi mostra l'esecuzione in una sua interfaccia non passa niente |
|
|
98
|
+
| `isRunning` | l'esecuzione annunciata e' ancora in corso. Solo l'host lo sa: accende il puntino sul tab «Debug» e tiene spento il bottone della finestra degli ingressi |
|
|
94
99
|
|
|
95
100
|
| Output | Quando |
|
|
96
101
|
|---|---|
|
|
97
102
|
| `saved` | dopo un salvataggio riuscito, con `FlowSaveResult`. Lo emette anche «Duplica», e in quel caso `flowName` e' quello della **copia**: la sessione si e' spostata su di essa, quindi l'host che tiene il nome da parte deve adottarlo |
|
|
98
103
|
| `activated` | dopo un'attivazione riuscita |
|
|
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 |
|
|
99
105
|
|
|
100
106
|
Il componente vuole un'altezza: `<fb-flow-builder style="height: 100vh">`, oppure un
|
|
101
107
|
contenitore flex. Gli store sono provider **del componente**, quindi due builder sulla stessa
|
|
@@ -150,8 +156,7 @@ sono opzionali e rifiutano con `MissingService` se non sovrascritti.
|
|
|
150
156
|
|
|
151
157
|
| Esecuzione dall'editor | |
|
|
152
158
|
|---|---|
|
|
153
|
-
| `
|
|
154
|
-
| `startInterview`, `respondToScreen`, `resumeInterview`, `inspectInterview`, `abandonInterview` | opzionali — le primitive §6.5 dell'interview. **L'editor non le usa**: servono a chi implementa `runFlow`/`debugFlow` con un runner proprio (la demo lo fa) |
|
|
159
|
+
| `startInterview`, `respondToScreen`, `resumeInterview`, `inspectInterview`, `abandonInterview` | opzionali — le primitive §6.5 dell'interview. **L'editor non le usa**: servono a chi risponde a `runRequested` con un runner proprio (la demo lo fa) |
|
|
155
160
|
| `completeStageStep(request)` | opzionale — conclude uno step di orchestrazione (§5.14) |
|
|
156
161
|
|
|
157
162
|
**Errori.** Ogni metodo, in caso di rifiuto, deve fallire con un `FlowApiError`
|
|
@@ -230,6 +235,14 @@ il trascinamento sul canvas vuoto disegna il rettangolo di selezione invece di s
|
|
|
230
235
|
un elemento, il canvas lo dice e dice **cosa farne**: «trascinane uno per spostarli tutti». Un
|
|
231
236
|
gesto che nessuno annuncia non esiste.
|
|
232
237
|
|
|
238
|
+
**Risorse.** Il pannello «Risorse» e' un **elenco**: nome, tipo, quante volte e' usata, i rilievi
|
|
239
|
+
della riga. Aggiungerne una o cliccarne il nome apre una **finestra** dedicata con il form dentro,
|
|
240
|
+
come per il dettaglio di un elemento — e per la stessa ragione: il form di un dynamic choice set
|
|
241
|
+
(sorgente, due campi, ordinamento, limite, filtri) dentro la colonna laterale spingeva l'elenco
|
|
242
|
+
fuori dallo schermo, cioe' faceva sparire il contesto per cui l'elenco esiste. La finestra si
|
|
243
|
+
sposta prendendola per l'intestazione, non ha «Annulla» — le modifiche sono già nel documento, e
|
|
244
|
+
a tornare indietro e' l'annulla dell'editor — e si chiude da se' se la risorsa viene rimossa.
|
|
245
|
+
|
|
233
246
|
*Quante volte e' usata.* Ogni risorsa porta il numero dei suoi usi, formule comprese; a zero
|
|
234
247
|
occorrenze lo dice, ed e' l'unico modo di sapere quali delle venti variabili sono morte.
|
|
235
248
|
Rimuovere una risorsa **usata** chiede conferma e dice quanti riferimenti resterebbero orfani:
|
|
@@ -639,24 +652,31 @@ ripiego dove `cloneFlow` non c'e' (e' opzionale). Un nome già usato lo rifiuta
|
|
|
639
652
|
generato dalle variabili `isInput` del documento — tipo dichiarato rispettato anche in scrittura,
|
|
640
653
|
istanze di classe compilate un membro alla volta (§4.7), enum per **nome** da `listEnumValues`
|
|
641
654
|
(§4.6). Un campo lasciato vuoto non viene mandato: non valorizzato e stringa vuota sono cose
|
|
642
|
-
diverse. Poi l'editor **passa la mano
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
**
|
|
655
|
+
diverse. Poi l'editor **passa la mano**, e non con una chiamata: emette `runRequested` con tutto
|
|
656
|
+
cio' che sa del momento — `debug`, `flowName`, `version`, `inputs`, `processType`, `isDirty`, la
|
|
657
|
+
`definition` in mano — e non esegue niente per conto suo. Cosa significhi eseguire lo decide
|
|
658
|
+
l'host: una navigazione, una chiamata alle sue API, una dialog con l'interview dentro, o niente.
|
|
659
|
+
Nessuna primitiva di `FlowBuilderApi` viene toccata, quindi non c'e' nessun `MissingService` da
|
|
660
|
+
mostrare: un host che non ascolta l'output fa sì che il comando non faccia niente. Si esegue la
|
|
661
|
+
versione **salvata**, quindi i comandi sono spenti su un flow mai scritto e la finestra avverte
|
|
662
|
+
quando ci sono modifiche non salvate — con `isDirty` nel payload, se l'host preferisce provare la
|
|
663
|
+
bozza che ha in `definition`.
|
|
664
|
+
|
|
665
|
+
**Il pannello «Debug».** Cosa l'ospite ha voluto ridare all'editor dell'ultima esecuzione,
|
|
666
|
+
passandolo all'input `runOutcome`: stato, output,
|
|
649
667
|
traccia degli elementi eseguiti — ogni riga porta all'elemento sul canvas — e risorse. Esiste per
|
|
650
668
|
un caso che altrimenti non ha risposta: un flow **senza schermate** (`AutoLaunched`, o
|
|
651
669
|
un'orchestrazione tutta in background) non apre nessuna interfaccia del runtime, quindi senza
|
|
652
|
-
questo pannello non ci sarebbe **nessun** posto in cui vedere cosa e' successo.
|
|
670
|
+
questo pannello non ci sarebbe **nessun** posto in cui vedere cosa e' successo. Passarlo e'
|
|
671
|
+
facoltativo — chi mostra tutto in casa sua non passa niente, e il pannello lo dice invece di
|
|
672
|
+
sembrare rotto. `trace` e
|
|
653
673
|
`resources` arrivano solo con `debug: true` (§6.5), e riportano i valori di tutte le risorse —
|
|
654
674
|
dati personali compresi: l'avviso e' in chiaro. Il pannello non conduce niente: guarda, e basta.
|
|
655
675
|
|
|
656
676
|
Come si implementa l'altra metà si vede nella demo
|
|
657
677
|
(`projects/flow-builder-example/src/app/runner`), e la scelta interessante e' **quando** aprire una finestra: un
|
|
658
|
-
flow che non ha niente da chiedere finisce da solo e l'esito
|
|
659
|
-
interattivo apre il runner e
|
|
678
|
+
flow che non ha niente da chiedere finisce da solo e l'esito va subito in `runOutcome`, mentre uno
|
|
679
|
+
interattivo apre il runner e ci mette l'ultimo risultato alla chiusura — così la traccia resta
|
|
660
680
|
comunque lì dove si stava lavorando. Il runner guida l'interview con le primitive della §6.5,
|
|
661
681
|
distingue le due attese di `Suspended` (`isWaitingForEvent` / `isWaitingForStageStep`), conclude
|
|
662
682
|
uno step al posto dell'assegnatario — rifiuto compreso, con la `interviewKey` nuova che sostituisce
|
|
@@ -788,6 +808,10 @@ due misure sono token: `--fb-dialog-width` (1400px) e `--fb-dialog-height` (860p
|
|
|
788
808
|
limitate allo spazio disponibile. La larghezza e' quella che serve al compositore dello screen
|
|
789
809
|
dinamico, che e' a due pannelli.
|
|
790
810
|
|
|
811
|
+
La finestra di una **risorsa** ha una misura sua — `--fb-resource-dialog-width` (760px) e
|
|
812
|
+
`--fb-resource-dialog-height` (720px) — perche' dentro c'e' una colonna sola di campi: la misura
|
|
813
|
+
del compositore lascerebbe due terzi di bianco.
|
|
814
|
+
|
|
791
815
|
Nota sugli archi: il colore si imposta valorizzando le custom properties del tema di
|
|
792
816
|
@foblex/flow (`--ff-connection-color`, `--ff-marker-color`) invece di sovrascrivere le sue
|
|
793
817
|
regole, perche' i selettori hanno la stessa specificita' e chi vince dipenderebbe dall'ordine
|