@esfaenza/flow-builder 20.3.34 → 20.3.36

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
@@ -341,6 +341,26 @@ Tre cose che il modello non mostra e il form dice:
341
341
  Il riordino e l'annidamento si fanno trascinando (`@angular/cdk/drag-drop`, senza drop list: il
342
342
  bersaglio si calcola dal DOM) oppure con i comandi «su / giu' / porta fuori».
343
343
 
344
+ **Transform (§5.13).** Anche questo e' un compositore e non un form: **tre colonne** — le sorgenti,
345
+ la destinazione, il dettaglio della riga scelta. Si mappa **trascinando** una sorgente su una
346
+ destinazione, oppure selezionando la destinazione e cliccando la sorgente; il bersaglio del rilascio
347
+ si calcola dal DOM, come nello screen dinamico.
348
+
349
+ Le due cose che il modello non mostra e la colonna centrale dice:
350
+
351
+ - **le righe sono le destinazioni, non le azioni.** Vengono dal catalogo del risultato — i membri
352
+ della classe (§4.7.1) o i campi dell'entita' (§4.4) — quindi si vede anche cio' che **non e'**
353
+ ancora mappato, che nell'elenco delle `transformValueActions` non compariva. Una riga esiste prima
354
+ dell'azione: la prima modifica la crea. Un membro calcolato non c'e' affatto, perche' assegnarlo e'
355
+ `TARGET_NOT_WRITABLE`. Dove il catalogo non e' autorevole — una classe che non dichiara i membri, un
356
+ risultato scalare — le righe tornano a essere le azioni e il nome si **digita**, senza che nessuno
357
+ venga accusato di non esistere;
358
+ - **le sorgenti si navigano.** Sono i riferimenti di `POST /flows/references`, e dentro un record o
359
+ una classe si entra per proporne campi e membri, con la regola del reference picker: gli output
360
+ automatici si **propongono** e non si giudicano (§4.5). `aggregationField` di un `Sum` resta il
361
+ **nome** di un campo (`stringValue`), ma dove il tipo della collection aggregata e' noto lo si
362
+ sceglie da un elenco invece di ricordarlo.
363
+
344
364
  **Screen action (§5.2).** Un campo che l'utente compila puo' **innescare un'action** i cui risultati
345
365
  finiscono negli altri campi della stessa schermata: e' il caso «scrivi il codice fiscale e nome e
346
366
  cognome compaiono da soli», e senza di essa lo si farebbe spezzando lo screen in due con un elemento
@@ -553,6 +573,14 @@ spariva dalla vista — e il conteggio dei campi accusava `VALUE_AMBIGUOUS`. La
553
573
  valore e quello delle condizioni: `null` e `undefined` significano la stessa cosa, mentre
554
574
  `booleanValue: false`, `numberValue: 0` e `stringValue: ''` restano valori.
555
575
 
576
+ **Un `Boolean` ha tre stati.** Assente, `false`, `true`: una casella di spunta ne rappresenta due, e
577
+ quella non spuntata diceva «falso» su un valore che nel documento non c'era — chi non la toccava
578
+ leggeva una scelta che nessuno aveva fatto e che al backend non arrivava mai. Il letterale booleano e'
579
+ quindi un tri-stato, «non impostato» compreso, come nel form di «Esegui». Attenzione a non
580
+ generalizzare: sui **flag di un elemento** (`isCollection`, `allowBack`, `storeOutputAutomatically`)
581
+ la spunta resta giusta, perche' lì la §2 dice che il campo omesso vale il suo default — non spuntato
582
+ **e'** `false`.
583
+
556
584
  Perche' l'editor conosca il tipo della destinazione serve saperlo, e i percorsi non fanno eccezione:
557
585
  `POST /flows/references` elenca le **radici** e non i percorsi, quindi su `Richiesta.Stato` la
558
586
  corrispondenza esatta del nome non trova niente. Il tipo si ricava allora navigando la catena —
@@ -655,9 +683,19 @@ non ne cambia il comportamento. Quattro conseguenze, tutte visibili nell'editor:
655
683
  che nomina un elemento cancellato e' cio' che resta dopo la cancellazione: l'editor offre di
656
684
  ripulirlo con un comando e non lo fa di soppiatto mentre si trascina qualcos'altro.
657
685
 
658
- Chiuso, il riquadro resta la sola barra del titolo e **gli elementi restano visibili**: nasconderli
659
- vorrebbe dire connettori con `display: none`, cioe' geometria 0×0 e archi attaccati nel punto
660
- sbagliato.
686
+ **Chiuso, il riquadro nasconde cio' che contiene.** Al posto dei suoi elementi compare una
687
+ **pastiglia** col titolo, quanti elementi sta nascondendo e i loro rilievi sommati chiudere un
688
+ riquadro non zittisce un errore. Gli archi interni non si disegnano, quelli che entrano nel riquadro
689
+ o ne escono si riattaccano alla pastiglia e portano nell'etichetta il nome dell'elemento nascosto,
690
+ che e' l'unica informazione che chiudere ha portato via. Si sposta come la cornice (i membri vengono
691
+ dietro), si apre con il suo triangolo o con un doppio clic, e si elimina senza toccare gli elementi.
692
+
693
+ Due limiti che sono scelte: gli archi con un capo sulla pastiglia **non si riassegnano e non si
694
+ innestano** — dietro un solo connettore stanno elementi diversi, e non c'e' modo di sapere quale si
695
+ intendeva, quindi per collegare o innestare si apre il riquadro; e trascinare un elemento sopra una
696
+ pastiglia **non lo aggiunge** al riquadro chiuso, perche' sarebbe un elemento che sparisce.
697
+ Cercarne uno che sta dentro un riquadro chiuso lo **apre**: la ricerca promette l'elemento, non la
698
+ sua scatola.
661
699
 
662
700
  **Import/export.** Export JSON indentato; import via `POST /flows/parse`, che normalizza il
663
701
  documento o lo rifiuta con `InvalidDefinition`.