@esfaenza/flow-builder 20.3.41 → 20.3.43
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 -6
- package/fesm2022/esfaenza-flow-builder.mjs +666 -59
- package/fesm2022/esfaenza-flow-builder.mjs.map +1 -1
- package/index.d.ts +235 -6
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -74,7 +74,15 @@ interface FlowRecordFilter {
|
|
|
74
74
|
value?: FlowValue;
|
|
75
75
|
}
|
|
76
76
|
type FlowRecordFilterOperator = 'EqualTo' | 'NotEqualTo' | 'GreaterThan' | 'GreaterThanOrEqualTo' | 'LessThan' | 'LessThanOrEqualTo' | 'StartsWith' | 'EndsWith' | 'Contains' | 'IsNull' | string;
|
|
77
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* §4.3 — `and` | `or` | espressione sugli indici 1-based | `Formula`.
|
|
79
|
+
*
|
|
80
|
+
* Il tipo e' uno, ma i due campi che lo usano non ammettono le stesse forme: `Formula` vale per
|
|
81
|
+
* il `conditionLogic` di una condizione (l'esito lo determina il campo `formula`), e **non** vale
|
|
82
|
+
* per nessun `filterLogic` — su un dynamic choice set e' un errore di validazione, altrove passa
|
|
83
|
+
* la validazione e fa fallire l'esecuzione (§4.4). La formula di un filtro e' un campo suo,
|
|
84
|
+
* `filterFormula`, e non passa da qui.
|
|
85
|
+
*/
|
|
78
86
|
type FlowConditionLogic = 'and' | 'or' | 'Formula' | string;
|
|
79
87
|
/** Blocco condizioni riusato da Decision rule, Wait event, Collection Processor, Start. */
|
|
80
88
|
interface FlowConditionHolder {
|
|
@@ -176,11 +184,22 @@ interface FlowDynamicChoiceSet {
|
|
|
176
184
|
displayField?: string;
|
|
177
185
|
/** Assente: il valore memorizzato e' `Name` su un enum, e va dichiarato altrove. */
|
|
178
186
|
valueField?: string;
|
|
187
|
+
/**
|
|
188
|
+
* Valgono sulle sole sorgenti `object` — dove diventano la query — ed `enumType`, dove sono
|
|
189
|
+
* valutati in memoria. Su una `collectionReference` le opzioni sono gli elementi della
|
|
190
|
+
* collection nell'ordine in cui ci sono: dichiararli lì e' `CHOICE_SET_FILTERS_IGNORED` (§5.2).
|
|
191
|
+
*/
|
|
179
192
|
sortField?: string;
|
|
180
193
|
sortOrder?: FlowSortOrder;
|
|
194
|
+
/** `limit` invece vale su tutt'e tre le sorgenti; default e massimo 200 (§5.2). */
|
|
181
195
|
limit?: number;
|
|
182
|
-
/** Sempre in AND: nessun `filterLogic` qui (§4.4). Su un enum sono valutati in memoria. */
|
|
183
196
|
filters?: FlowRecordFilter[];
|
|
197
|
+
/**
|
|
198
|
+
* §4.4 — c'e' anche qui: `AND` (o assente), `OR`, oppure la logica personalizzata sugli indici
|
|
199
|
+
* 1-based. Il valore `Formula` **non** e' supportato, e su un choice set e' un errore di
|
|
200
|
+
* validazione esplicito.
|
|
201
|
+
*/
|
|
202
|
+
filterLogic?: FlowConditionLogic;
|
|
184
203
|
}
|
|
185
204
|
interface FlowStage {
|
|
186
205
|
name?: string;
|
|
@@ -2122,8 +2141,14 @@ declare function moveCondition(holder: FlowConditionHolder, from: number, to: nu
|
|
|
2122
2141
|
* Verifica che un'espressione custom sia sintatticamente accettabile e che ogni indice
|
|
2123
2142
|
* esista. Serve al feedback immediato nel form: la verita' resta della validazione
|
|
2124
2143
|
* del backend (`CONDITION_LOGIC_INVALID`).
|
|
2144
|
+
*
|
|
2145
|
+
* Il `term` esiste perche' la stessa regola vale su **due strutture diverse**: le condizioni
|
|
2146
|
+
* (§4.3) e i filtri sui record (§4.4), che dalla revisione del contratto hanno la logica
|
|
2147
|
+
* personalizzata anche sui dynamic choice set. Il progetto tiene distinte le due cose in ogni
|
|
2148
|
+
* altro punto, e un messaggio che dice «condizione» dentro un elenco di filtri manda a cercare
|
|
2149
|
+
* qualcosa che in quel form non c'e'.
|
|
2125
2150
|
*/
|
|
2126
|
-
declare function checkConditionLogic(logic: string, conditionCount: number): string | null;
|
|
2151
|
+
declare function checkConditionLogic(logic: string, conditionCount: number, term?: 'condizione' | 'filtro'): string | null;
|
|
2127
2152
|
|
|
2128
2153
|
/**
|
|
2129
2154
|
* Testo e numero non si confrontano — FRONTEND.md §4.3, §13.13.
|
|
@@ -3187,6 +3212,21 @@ declare class FlowDocumentStore {
|
|
|
3187
3212
|
* riferimenti a output automatico (`Vecchio.Campo` → `Nuovo.Campo`).
|
|
3188
3213
|
*/
|
|
3189
3214
|
renameNode(oldName: string, newName: string): void;
|
|
3215
|
+
/**
|
|
3216
|
+
* Etichetta **e** nome tecnico in una sola mutazione.
|
|
3217
|
+
*
|
|
3218
|
+
* Serve al nome che segue l'etichetta di un elemento appena creato (§3.3): farlo con due
|
|
3219
|
+
* `update` scriverebbe due passi di storico per ogni battuta, e l'annulla riporterebbe
|
|
3220
|
+
* indietro il nome lasciando l'etichetta nuova — uno stato che non e' mai esistito. Con
|
|
3221
|
+
* `newName` assente e' un semplice cambio di etichetta.
|
|
3222
|
+
*/
|
|
3223
|
+
relabelNode(name: string, label: string, newName?: string | null): void;
|
|
3224
|
+
/**
|
|
3225
|
+
* Il corpo della rinomina, sul draft: nome del node, riferimenti, appartenenza ai riquadri.
|
|
3226
|
+
* `reference` va risolto **prima** dell'`update`, perche' l'indice viene dal documento
|
|
3227
|
+
* corrente e dentro il mutatore i signal derivati sono ancora quelli di prima.
|
|
3228
|
+
*/
|
|
3229
|
+
private static applyRename;
|
|
3190
3230
|
/**
|
|
3191
3231
|
* §5.2 — rinomina un campo di screen dinamico riscrivendo i riferimenti che lo usano.
|
|
3192
3232
|
*
|
|
@@ -4777,7 +4817,7 @@ declare class NamePickerComponent {
|
|
|
4777
4817
|
* **errori** che bloccano l'attivazione (`ACTION_UNKNOWN`, `FORM_UNKNOWN`), mentre un flow
|
|
4778
4818
|
* senza versione attiva e' un avviso. Mostrarli con lo stesso colore direbbe il falso.
|
|
4779
4819
|
*/
|
|
4780
|
-
readonly unknownSeverity: _angular_core.InputSignal<"
|
|
4820
|
+
readonly unknownSeverity: _angular_core.InputSignal<"warn" | "error">;
|
|
4781
4821
|
/**
|
|
4782
4822
|
* Nomi che **esistono** ma non sono utilizzabili qui. Il caso vero e' il catalogo dei form,
|
|
4783
4823
|
* dove una schermata intera e un componente vivono nello stesso elenco e si distinguono per
|
|
@@ -5346,7 +5386,7 @@ declare class RecordFilterEditorComponent {
|
|
|
5346
5386
|
* (§5.8, §13.10).
|
|
5347
5387
|
*/
|
|
5348
5388
|
readonly emptyWarning: _angular_core.InputSignal<string | null>;
|
|
5349
|
-
readonly emptyWarningSeverity: _angular_core.InputSignal<"
|
|
5389
|
+
readonly emptyWarningSeverity: _angular_core.InputSignal<"warn" | "error">;
|
|
5350
5390
|
readonly changed: _angular_core.OutputEmitterRef<(holder: FilterHolder) => void>;
|
|
5351
5391
|
/** Tutti i campi, filtrabili o no: serve solo a riconoscere le chiavi composte (§5.8). */
|
|
5352
5392
|
private readonly allFields;
|
|
@@ -5369,8 +5409,28 @@ declare class RecordFilterEditorComponent {
|
|
|
5369
5409
|
* evita la ricerca di un campo che nell'elenco non c'e' e non ci sara'.
|
|
5370
5410
|
*/
|
|
5371
5411
|
readonly identifierNotFilterable: _angular_core.Signal<boolean>;
|
|
5412
|
+
/**
|
|
5413
|
+
* La modalita' attiva. La **formula si riconosce dal suo campo** e non da `filterLogic`: il
|
|
5414
|
+
* valore `Formula` non e' supportato da nessun elemento (§4.4), quindi non puo' essere cio' che
|
|
5415
|
+
* accende la modalita' — altrimenti l'editor riscriverebbe nel documento un valore che fa
|
|
5416
|
+
* fallire l'esecuzione.
|
|
5417
|
+
*/
|
|
5372
5418
|
readonly logicMode: _angular_core.Signal<"and" | "or" | "formula" | "custom">;
|
|
5419
|
+
/**
|
|
5420
|
+
* `filterLogic: "Formula"` letto dal documento. Non lo scrive nessun gesto di questo editor:
|
|
5421
|
+
* arriva da un flow scritto altrove, e va detto invece di essere corretto di soppiatto —
|
|
5422
|
+
* cancellarlo sarebbe una modifica che l'utente non ha chiesto, su un campo che potrebbe
|
|
5423
|
+
* essere l'unico indizio di cosa quel flow voleva fare.
|
|
5424
|
+
*/
|
|
5425
|
+
readonly unsupportedFormulaLogic: _angular_core.Signal<boolean>;
|
|
5373
5426
|
readonly customLogic: _angular_core.Signal<string>;
|
|
5427
|
+
/**
|
|
5428
|
+
* Il riscontro locale sull'espressione: indici che non esistono, parentesi sbilanciate, termini
|
|
5429
|
+
* rimasti orfani (`?`) dopo la cancellazione di un filtro. La verita' resta della validazione
|
|
5430
|
+
* del backend (`CONDITION_LOGIC_INVALID`, che e' un **errore** e blocca l'attivazione), ma
|
|
5431
|
+
* scoprirlo lì significa scoprirlo dopo.
|
|
5432
|
+
*/
|
|
5433
|
+
readonly customLogicError: _angular_core.Signal<string | null>;
|
|
5374
5434
|
readonly showEmptyWarning: _angular_core.Signal<boolean>;
|
|
5375
5435
|
addFilter(): void;
|
|
5376
5436
|
removeFilter(index: number): void;
|
|
@@ -5668,6 +5728,9 @@ declare class ElementInspectorComponent {
|
|
|
5668
5728
|
private readonly store;
|
|
5669
5729
|
private readonly dictionaries;
|
|
5670
5730
|
private readonly validation;
|
|
5731
|
+
private readonly injector;
|
|
5732
|
+
/** L'etichetta: e' il primo campo di un elemento nuovo, e prende il focus da se'. */
|
|
5733
|
+
private readonly labelInput;
|
|
5671
5734
|
/** Il nome dell'elemento selezionato; `$start` per lo Start. */
|
|
5672
5735
|
readonly selectedName: _angular_core.InputSignal<string | null>;
|
|
5673
5736
|
/**
|
|
@@ -5712,6 +5775,43 @@ declare class ElementInspectorComponent {
|
|
|
5712
5775
|
readonly hiddenIssueCount: _angular_core.Signal<number>;
|
|
5713
5776
|
toggleIssues(): void;
|
|
5714
5777
|
readonly pendingName: _angular_core.WritableSignal<string | null>;
|
|
5778
|
+
/**
|
|
5779
|
+
* L'elemento il cui nome si sta ancora componendo, e cosa c'e' scritto nel campo.
|
|
5780
|
+
*
|
|
5781
|
+
* `draft: null` e' «segue l'etichetta», che e' lo stato iniziale e quello in cui si torna
|
|
5782
|
+
* svuotando il campo. `element` segue le rinomine: senza, la prima battuta sull'etichetta —
|
|
5783
|
+
* che rinomina — farebbe ripartire lo stato da capo e il campo tornerebbe a seguire una
|
|
5784
|
+
* scelta che l'utente aveva già disfatto.
|
|
5785
|
+
*/
|
|
5786
|
+
private readonly composing;
|
|
5787
|
+
/** Il nome si compone qui invece di stare dietro il comando di rinomina. */
|
|
5788
|
+
readonly isComposingName: _angular_core.Signal<boolean>;
|
|
5789
|
+
/** Cio' che si vede nel campo: vuoto finche' non c'e' un'etichetta da cui costruirlo. */
|
|
5790
|
+
readonly composedName: _angular_core.Signal<string>;
|
|
5791
|
+
readonly composedNameError: _angular_core.Signal<string | null>;
|
|
5792
|
+
constructor();
|
|
5793
|
+
/**
|
|
5794
|
+
* Un elemento **senza etichetta** e' un elemento che nessuno ha ancora nominato: il campo del
|
|
5795
|
+
* nome parte vuoto e segue l'etichetta. Uno che ce l'ha e' un elemento vero, e il suo nome si
|
|
5796
|
+
* cambia solo col comando di rinomina, che dice prima quanti riferimenti riscrivera'.
|
|
5797
|
+
*/
|
|
5798
|
+
private seedComposing;
|
|
5799
|
+
/**
|
|
5800
|
+
* Il nome scritto a mano: smette di seguire l'etichetta e, appena e' valido, diventa il nome
|
|
5801
|
+
* dell'elemento. Un nome intermedio non valido resta nel campo senza toccare il documento —
|
|
5802
|
+
* ricopiarci sopra il nome corrente impedirebbe di digitare.
|
|
5803
|
+
*/
|
|
5804
|
+
onComposedNameInput(value: string): void;
|
|
5805
|
+
/**
|
|
5806
|
+
* Il nome costruito dall'etichetta (§3.3): spazi e caratteri non ammessi diventano `_`, i
|
|
5807
|
+
* diacritici cadono e un nome già preso prende un suffisso.
|
|
5808
|
+
*
|
|
5809
|
+
* Etichetta vuota → `null`, cioe' resta il nome provvisorio con cui l'elemento e' nato: il
|
|
5810
|
+
* documento non puo' stare senza, perche' il nome e' la chiave di tutto (§3.3).
|
|
5811
|
+
*/
|
|
5812
|
+
private deriveName;
|
|
5813
|
+
/** Rimette il nome a seguire l'etichetta, dopo che il campo e' stato svuotato. */
|
|
5814
|
+
private applyDerivedName;
|
|
5715
5815
|
readonly nameError: _angular_core.Signal<string | null>;
|
|
5716
5816
|
/**
|
|
5717
5817
|
* Quanti riferimenti verrebbero riscritti dalla rinomina. Serve a rendere visibile che
|
|
@@ -5786,6 +5886,15 @@ declare class ElementDialogComponent {
|
|
|
5786
5886
|
private readonly reference;
|
|
5787
5887
|
readonly typeLabel: _angular_core.Signal<string>;
|
|
5788
5888
|
readonly title: _angular_core.Signal<string>;
|
|
5889
|
+
/**
|
|
5890
|
+
* L'ultimo nome adottato da una rinomina.
|
|
5891
|
+
*
|
|
5892
|
+
* La selezione dell'editor **e' il nome**, quindi una rinomina cambia `selectedName` senza
|
|
5893
|
+
* che l'elemento sia cambiato. Senza distinguere i due casi il nome che si costruisce
|
|
5894
|
+
* dall'etichetta mentre la si digita riportava il focus sul pannello a ogni battuta, e
|
|
5895
|
+
* l'etichetta si scriveva una lettera alla volta.
|
|
5896
|
+
*/
|
|
5897
|
+
private renamedTo?;
|
|
5789
5898
|
constructor();
|
|
5790
5899
|
/** Il vincolo: dentro il builder resta la maniglia, non la finestra intera. */
|
|
5791
5900
|
readonly constrainPosition: DialogConstrainPosition;
|
|
@@ -6368,6 +6477,26 @@ declare class ResourceDialogComponent {
|
|
|
6368
6477
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ResourceDialogComponent, "fb-resource-dialog", never, { "edit": { "alias": "edit"; "required": true; "isSignal": true; }; }, { "closed": "closed"; }, never, never, true, never>;
|
|
6369
6478
|
}
|
|
6370
6479
|
|
|
6480
|
+
/**
|
|
6481
|
+
* Il filtro dell'elenco delle risorse.
|
|
6482
|
+
*
|
|
6483
|
+
* Esiste per la **scala**: un flow di produzione ha ventun variabili e dodici dynamic choice
|
|
6484
|
+
* set, e a quella misura il problema dell'elenco non e' leggerlo ma trovarci dentro una riga.
|
|
6485
|
+
* Non e' la ricerca del flow (`core/flow-search.ts`), che sa dov'e' un nome che si conosce
|
|
6486
|
+
* **già**: qui si restringe un elenco che si sta guardando, e le due domande che si fanno
|
|
6487
|
+
* davvero — «quali non sono usate» e «quali hanno qualcosa che non va» — non sono nomi.
|
|
6488
|
+
*
|
|
6489
|
+
* Cio' che il testo guarda e' cio' che l'elenco **mostra**, piu' il nome e l'etichetta: e' la
|
|
6490
|
+
* stessa scelta di `flow-search`, dove il contenuto dei valori resta fuori perche' «chi cita
|
|
6491
|
+
* `Totale`» e' un'altra domanda — quella la risponde il conteggio degli usi. Quindi
|
|
6492
|
+
* l'espressione di una formula e il valore di una costante **non** si cercano: chi digita
|
|
6493
|
+
* «IVA» e vede comparire una formula che non si chiama così crede di aver trovato una risorsa
|
|
6494
|
+
* che non c'e'.
|
|
6495
|
+
*/
|
|
6496
|
+
|
|
6497
|
+
/** Lo stato su cui si restringe l'elenco, oltre al testo. */
|
|
6498
|
+
type ResourceStateFilter = 'all' | 'unused' | 'issues';
|
|
6499
|
+
|
|
6371
6500
|
/**
|
|
6372
6501
|
* Le sette collection di risorse (§4.6).
|
|
6373
6502
|
*
|
|
@@ -6414,11 +6543,58 @@ declare class ResourcePanelComponent {
|
|
|
6414
6543
|
* ricalcolo del documento.
|
|
6415
6544
|
*/
|
|
6416
6545
|
readonly pendingRemoval: _angular_core.WritableSignal<string | null>;
|
|
6546
|
+
/** Il testo del filtro. Non si azzera cambiando scheda: vedi `select`. */
|
|
6547
|
+
readonly query: _angular_core.WritableSignal<string>;
|
|
6548
|
+
/** Lo stato su cui si restringe: sono le due domande che un nome non sa fare. */
|
|
6549
|
+
readonly stateFilter: _angular_core.WritableSignal<ResourceStateFilter>;
|
|
6550
|
+
readonly hasFilter: _angular_core.Signal<boolean>;
|
|
6417
6551
|
constructor();
|
|
6418
6552
|
readonly activeKind: _angular_core.Signal<ResourceKindDescriptor>;
|
|
6553
|
+
/** Tutte le risorse della collection aperta, **prima** del filtro. */
|
|
6554
|
+
readonly collectionItems: _angular_core.Signal<FlowResourceRef[]>;
|
|
6555
|
+
/** Le righe che l'elenco disegna: la collection aperta, filtrata. */
|
|
6419
6556
|
readonly items: _angular_core.Signal<FlowResourceRef[]>;
|
|
6420
|
-
countOf(collection: FlowResourceCollection): number;
|
|
6421
6557
|
select(collection: FlowResourceCollection): void;
|
|
6558
|
+
private readonly needle;
|
|
6559
|
+
/** `true` se la risorsa passa testo **e** stato. */
|
|
6560
|
+
private matches;
|
|
6561
|
+
/**
|
|
6562
|
+
* Quante risorse di ogni collection passano il filtro, e quante ce ne sono in tutto.
|
|
6563
|
+
*
|
|
6564
|
+
* Il numero sulla scheda diventa quello delle **corrispondenze** appena un filtro e' attivo,
|
|
6565
|
+
* ed e' il solo modo di rispondere alla domanda vera di chi digita: la risorsa che cerca sta
|
|
6566
|
+
* spesso in un'altra collection, e senza questo numero bisognerebbe aprire le sette schede
|
|
6567
|
+
* una per una per scoprire che non c'e' da nessuna parte. Il conteggio e' **uno** per tutte
|
|
6568
|
+
* le schede e non una `filter` per scheda nel template: quello lo rifaceva a ogni giro di
|
|
6569
|
+
* change detection, e con il filtro «non usate» dentro sarebbero cinquanta walk del
|
|
6570
|
+
* documento per volta.
|
|
6571
|
+
*/
|
|
6572
|
+
readonly tabCounts: _angular_core.Signal<Record<string, {
|
|
6573
|
+
total: number;
|
|
6574
|
+
matching: number;
|
|
6575
|
+
}>>;
|
|
6576
|
+
countOf(collection: FlowResourceCollection): number;
|
|
6577
|
+
totalOf(collection: FlowResourceCollection): number;
|
|
6578
|
+
/**
|
|
6579
|
+
* Quante risorse ha ogni stato nella scheda aperta, contate **dopo** il testo: i due chip
|
|
6580
|
+
* dicono quanto resterebbe, non quanto ce n'e' in assoluto. A zero si disabilitano, perche'
|
|
6581
|
+
* un filtro che da' certamente un elenco vuoto non e' un filtro ma un modo di nascondere
|
|
6582
|
+
* l'elenco.
|
|
6583
|
+
*/
|
|
6584
|
+
readonly stateCounts: _angular_core.Signal<{
|
|
6585
|
+
unused: number;
|
|
6586
|
+
issues: number;
|
|
6587
|
+
}>;
|
|
6588
|
+
/**
|
|
6589
|
+
* Le corrispondenze nelle **altre** schede: e' cio' che si dice quando qui non c'e' niente.
|
|
6590
|
+
* «Nessuna corrispondenza» su un elenco vuoto e' vero e inutile — il rimedio e' cambiare
|
|
6591
|
+
* scheda, e bisogna sapere se ce n'e' una da cambiare.
|
|
6592
|
+
*/
|
|
6593
|
+
readonly matchesElsewhere: _angular_core.Signal<number>;
|
|
6594
|
+
onQuery(value: string): void;
|
|
6595
|
+
/** Il secondo clic sullo stesso stato lo spegne, come nel pannello dei problemi. */
|
|
6596
|
+
setStateFilter(filter: ResourceStateFilter): void;
|
|
6597
|
+
resetFilter(): void;
|
|
6422
6598
|
isEditing(reference: FlowResourceRef): boolean;
|
|
6423
6599
|
/** Il click sul nome: apre la finestra, o la chiude se e' già quella risorsa. */
|
|
6424
6600
|
edit(reference: FlowResourceRef): void;
|
|
@@ -6426,6 +6602,12 @@ declare class ResourcePanelComponent {
|
|
|
6426
6602
|
nameError(reference: FlowResourceRef): string | null;
|
|
6427
6603
|
constantReferencesResource(reference: FlowResourceRef): boolean;
|
|
6428
6604
|
duplicateStageOrder(reference: FlowResourceRef): boolean;
|
|
6605
|
+
/**
|
|
6606
|
+
* §5.2 — cio' che su una sorgente collection il runtime ignora. Sta anche qui e non solo nel
|
|
6607
|
+
* form per la ragione di sempre: il filtro «con rilievi» porta la riga a galla, e una riga che
|
|
6608
|
+
* non dice **cosa** non va costringe ad aprirla per scoprirlo.
|
|
6609
|
+
*/
|
|
6610
|
+
ignoredChoiceSetFilters(reference: FlowResourceRef): string | null;
|
|
6429
6611
|
add(): void;
|
|
6430
6612
|
/**
|
|
6431
6613
|
* Quante volte la risorsa e' **usata** nel documento.
|
|
@@ -6439,6 +6621,19 @@ declare class ResourcePanelComponent {
|
|
|
6439
6621
|
* senza, tre formule che leggono una variabile la direbbero «non usata».
|
|
6440
6622
|
*/
|
|
6441
6623
|
usesOf(reference: FlowResourceRef): number;
|
|
6624
|
+
/**
|
|
6625
|
+
* Il conteggio di **tutte** le risorse, calcolato una volta per documento.
|
|
6626
|
+
*
|
|
6627
|
+
* `countNameUses` cammina il documento intero a ogni chiamata, e da quando il filtro lo
|
|
6628
|
+
* chiede per ogni risorsa di ogni collection — i numeri delle schede, il chip «non usate» —
|
|
6629
|
+
* chiamarlo dal template significherebbe cinquanta walk per giro di change detection.
|
|
6630
|
+
*
|
|
6631
|
+
* La chiave e' il nome **esatto** e non quello minuscolo: `countNameUses` confronta le
|
|
6632
|
+
* stringhe come sono, quindi due nomi che differiscono solo per il case — che sono un
|
|
6633
|
+
* `NAME_DUPLICATED`, non un caso da normalizzare qui — hanno due conteggi diversi, ed e'
|
|
6634
|
+
* quello che il pannello mostrava anche prima della memoizzazione.
|
|
6635
|
+
*/
|
|
6636
|
+
private readonly useCounts;
|
|
6442
6637
|
private keyOf;
|
|
6443
6638
|
isPendingRemoval(reference: FlowResourceRef): boolean;
|
|
6444
6639
|
/**
|
|
@@ -6505,6 +6700,14 @@ declare class ResourceFormComponent {
|
|
|
6505
6700
|
* tre `FIELD_UNKNOWN` che l'utente non ha scritto.
|
|
6506
6701
|
*/
|
|
6507
6702
|
setChoiceSetSource(source: ChoiceSetSource): void;
|
|
6703
|
+
/**
|
|
6704
|
+
* §5.2 — cio' che su una sorgente collection il runtime ignora, se il documento lo dichiara.
|
|
6705
|
+
* Il controllo sta in `resource-checks.ts` perche' serve anche all'**elenco**: senza, la riga
|
|
6706
|
+
* sarebbe verde e il rilievo si vedrebbe solo aprendo il form.
|
|
6707
|
+
*/
|
|
6708
|
+
ignoredChoiceSetFilters(): string | null;
|
|
6709
|
+
/** La ripulitura e' un comando, non un effetto dell'apertura del form. */
|
|
6710
|
+
clearIgnoredChoiceSetFilters(): void;
|
|
6508
6711
|
/** Su un choice set da enum il tipo e' `enumType`: il campo generico sarebbe un doppione. */
|
|
6509
6712
|
hidesObjectType(): boolean;
|
|
6510
6713
|
isChoiceSetSource(source: ChoiceSetSource): boolean;
|
|
@@ -6964,8 +7167,23 @@ declare class FlowBuilderComponent {
|
|
|
6964
7167
|
setFullName(value: string): void;
|
|
6965
7168
|
setDescription(value: string): void;
|
|
6966
7169
|
setInterviewLabel(value: string): void;
|
|
7170
|
+
/**
|
|
7171
|
+
* Il tipo di flow si sceglie **alla creazione**, e su un flow salvato non si tocca.
|
|
7172
|
+
*
|
|
7173
|
+
* Non e' una preferenza: decide quali globali esistono (`$Record` non c'e' in uno screen
|
|
7174
|
+
* flow, §4.1), quali elementi sono ammessi (§13.6) e come il motore lo esegue. Cambiarlo su
|
|
7175
|
+
* un documento già scritto lo lascia pieno di riferimenti a cose che da quel momento non
|
|
7176
|
+
* esistono — e nessuna primitiva del backend rimedia. Il comando non c'e' nemmeno
|
|
7177
|
+
* nell'interfaccia; il controllo qui e' perché la chiamata resta pubblica.
|
|
7178
|
+
*/
|
|
6967
7179
|
setProcessType(value: string): void;
|
|
6968
7180
|
readonly processTypes: _angular_core.Signal<_esfaenza_flow_builder.FlowDictionaryEntry[]>;
|
|
7181
|
+
/**
|
|
7182
|
+
* Il tipo scritto per esteso, per il flow salvato dove non e' più una scelta. Fuori catalogo
|
|
7183
|
+
* si mostra il valore grezzo: e' del backend, non nostro da correggere (vedi
|
|
7184
|
+
* {@link isProcessTypeOutOfCatalog}).
|
|
7185
|
+
*/
|
|
7186
|
+
readonly processTypeLabel: _angular_core.Signal<string>;
|
|
6969
7187
|
/**
|
|
6970
7188
|
* Il `processType` del documento non e' fra quelli del dizionario. Non e' un caso di scuola:
|
|
6971
7189
|
* basta che il dizionario arrivi senza `processTypes`, o che il backend salvi una scrittura
|
|
@@ -7143,6 +7361,17 @@ declare class FlowBuilderComponent {
|
|
|
7143
7361
|
autoLayout(): void;
|
|
7144
7362
|
undo(): void;
|
|
7145
7363
|
redo(): void;
|
|
7364
|
+
/**
|
|
7365
|
+
* Un passo di storico, con la selezione che lo segue.
|
|
7366
|
+
*
|
|
7367
|
+
* La selezione dell'editor **e' il nome** (§3.3), e un annulla può riportare indietro una
|
|
7368
|
+
* rinomina — succede a ogni battuta sull'etichetta di un elemento appena creato, dove il nome
|
|
7369
|
+
* la segue. Il nome selezionato allora non esiste più: l'inspector resta puntato sul vuoto, il
|
|
7370
|
+
* form del tipo sparisce e l'intestazione mostra un nome che nel documento non c'è. L'annulla
|
|
7371
|
+
* però non sposta gli elementi nella loro collection, quindi **dove** stavano — collection e
|
|
7372
|
+
* indice — e' la traccia che sopravvive: dopo il passo si adotta il nome che si trova lì.
|
|
7373
|
+
*/
|
|
7374
|
+
private stepHistory;
|
|
7146
7375
|
save(): Promise<void>;
|
|
7147
7376
|
/** Il modulo del duplicato e' aperto. */
|
|
7148
7377
|
readonly isCopyOpen: _angular_core.WritableSignal<boolean>;
|