@esfaenza/flow-builder 20.3.22 → 20.3.24

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
@@ -163,7 +163,7 @@ throw new FlowApiError('VersionConflict', 'Ha salvato mrossi.', undefined, 'mros
163
163
  ```
164
164
 
165
165
  Un'implementazione completa e commentata sta in
166
- [`projects/demo/src/app/backend/in-memory-flow-builder-api.ts`](../demo/src/app/backend/in-memory-flow-builder-api.ts):
166
+ [`projects/flow-builder-example/src/app/backend/in-memory-flow-builder-api.ts`](../flow-builder-example/src/app/backend/in-memory-flow-builder-api.ts):
167
167
  copre tutte le primitive, il ciclo di vita, la concorrenza ottimistica e un esecutore finto,
168
168
  senza una sola richiesta di rete.
169
169
 
@@ -324,6 +324,19 @@ con la via d'uscita: scrivere quel risultato in una variabile.
324
324
  `Object` / `Enum` / `Structure`, `scale` solo sui numerici, costanti che non possono referenziare
325
325
  risorse, `stageOrder` distinti.
326
326
 
327
+ **Dynamic choice set.** Le sorgenti sono **tre e si escludono a vicenda** (§5.2): una collection
328
+ del flow, una query su un'entita', i valori di un **tipo enum**. Nel form sono tre pulsanti e non
329
+ tre campi da riempire a caso: sceglierne una cancella le altre — dichiararne due e'
330
+ `CHOICE_SET_SOURCE_AMBIGUOUS` — e cancella anche i campi citati, perche' `Label` non e' un campo
331
+ di un'entita' e `Ragione_Sociale` non e' una proprieta' di un valore di enum. Sulla sorgente enum
332
+ cambiano due cose: il tipo si sceglie da `listEnumTypes` e fuori catalogo e' un **errore**
333
+ (`ENUM_TYPE_UNKNOWN`, l'elenco qui e' autorevole quando non e' vuoto), e i campi citabili sono le
334
+ tre proprieta' di un valore — `Name`, `Label`, `NumericValue` — che arrivano dal dizionario
335
+ (`enumChoiceSetFields`) e non da un catalogo di campi. Le sa `core/enum-choice-set.util.ts`,
336
+ compreso il **tipo** di ciascuna: senza, il valore di un filtro su `NumericValue` sarebbe una
337
+ casella di testo. `displayField` e `valueField` hanno un default (`Label` e `Name`) e il form li
338
+ mostra come tali, cosi' non finiscono nel documento senza motivo.
339
+
327
340
  **Classi (`Structure`).** L'ottavo tipo di dato non e' un doppione di `Object` (§4.7): di
328
341
  un'istanza di classe il flow legge e scrive i **membri**. Cambia quindi il form: la classe si
329
342
  scoglie con `<fb-structure-picker>` e la sua assenza e' un **errore** — senza classe il runtime
@@ -525,7 +538,7 @@ questo pannello non ci sarebbe **nessun** posto in cui vedere cosa e' successo.
525
538
  dati personali compresi: l'avviso e' in chiaro. Il pannello non conduce niente: guarda, e basta.
526
539
 
527
540
  Come si implementa l'altra metà si vede nella demo
528
- (`projects/demo/src/app/runner`), e la scelta interessante e' **quando** aprire una finestra: un
541
+ (`projects/flow-builder-example/src/app/runner`), e la scelta interessante e' **quando** aprire una finestra: un
529
542
  flow che non ha niente da chiedere finisce da solo e l'esito torna subito all'editor, mentre uno
530
543
  interattivo apre il runner e restituisce l'ultimo risultato alla chiusura — così la traccia resta
531
544
  comunque lì dove si stava lavorando. Il runner guida l'interview con le primitive della §6.5,
@@ -655,7 +668,7 @@ distribuire e nessuna dipendenza da un font di icone dell'applicazione ospite.
655
668
  | 9 | `Step` ed `Experiment` non sono supportati; `OrchestratedStage` lo e' | I due non supportati sono filtrati dalla palette via `isSupported` e, se arrivano da un import, l'inspector li mostra in sola lettura spiegando perche'. Lo stage ha il suo form: step non presentati come sequenza, e la condizione che referenzia l'output di un altro step segnalata con la via d'uscita |
656
669
  | 10 | Un `Delete` senza filtri e' un **errore**, un `Update` senza filtri un **avviso** | `RecordWriteInspectorComponent`: severita' diverse, e l'update di massa chiede una conferma esplicita |
657
670
  | 11 | Non cablare enum e operatori | Ogni tendina legge da `getDictionaries()`; le mappe locali intervengono solo come fallback quando il dizionario non e' disponibile |
658
- | 12 | Il **token di continuazione e' opaco** | Non lo tocca nessuno nella libreria: l'editor non esegue, quindi il token nasce e muore nel runner dell'ospite. Quello della demo (`projects/demo/src/app/runner/interview-runner.component.ts`) lo rimanda tale e quale, non lo legge e non lo mette in nessun URL |
671
+ | 12 | Il **token di continuazione e' opaco** | Non lo tocca nessuno nella libreria: l'editor non esegue, quindi il token nasce e muore nel runner dell'ospite. Quello della demo (`projects/flow-builder-example/src/app/runner/interview-runner.component.ts`) lo rimanda tale e quale, non lo legge e non lo mette in nessun URL |
659
672
  | 13 | **Testo e numero non si confrontano** (`CONDITION_TYPE_MISMATCH`) | `ConditionEditorComponent` conosce il tipo del lato sinistro da `POST /flows/references`: filtra gli operatori applicabili, guida il campo del letterale del secondo operando e segnala la coppia vietata. La regola sta in `core/condition-types.util.ts`, che salta gli operatori con semantica propria (`Contains`, `In`, …). I numeri si scrivono in cultura invariante: `1234,50` viene tradotto in `1234.50`, non troncato |
660
673
  | 14 | **`None` non e' un operatore, e' un "da completare"** | Condizione evidenziata come incompleta, con il conteggio in testa alla sezione e la frase «la bozza si salva, l'attivazione no»; il validatore della demo lo emette come **errore** |
661
674
  | 15 | **Un valore data senza `Z` significa ora locale** | `ValueEditorComponent` ha un selettore «Ora locale / UTC (Z)», dice che cambiare fuso riscrive l'orario e non lo converte, e toglie il suffisso solo per il controllo `datetime-local`, che con il fuso resterebbe vuoto |