@esfaenza/flow-builder 20.3.16 → 20.3.18
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 +60 -9
- package/fesm2022/esfaenza-flow-builder.mjs +1132 -176
- package/fesm2022/esfaenza-flow-builder.mjs.map +1 -1
- package/index.d.ts +497 -90
- package/package.json +1 -1
- package/styles/flow-builder.css +1 -1
package/index.d.ts
CHANGED
|
@@ -256,6 +256,54 @@ interface FlowScreenField {
|
|
|
256
256
|
/** Come una regola di Decision: rivalutata sui valori appena inviati (§5.2). */
|
|
257
257
|
visibilityRule?: FlowConditionHolder;
|
|
258
258
|
}
|
|
259
|
+
/**
|
|
260
|
+
* §5.2 — una **screen action**: un'action del flow i cui risultati finiscono negli **altri campi
|
|
261
|
+
* della stessa schermata**. E' il caso «inserisci il codice fiscale e, se la persona e' già a
|
|
262
|
+
* sistema, nome e cognome compaiono da soli», e senza di essa lo si farebbe spezzando lo screen in
|
|
263
|
+
* due con un elemento Action in mezzo.
|
|
264
|
+
*
|
|
265
|
+
* Identificazione e parametri sono **gli stessi** di un elemento Action (§5.9), codici di
|
|
266
|
+
* validazione compresi. Cambia una cosa sola, e riguarda l'editor: l'`assignToReference` di un
|
|
267
|
+
* `outputParameters` accetta anche i **campi di questa schermata**, che ovunque altrove sono di sola
|
|
268
|
+
* lettura.
|
|
269
|
+
*/
|
|
270
|
+
interface FlowScreenAction {
|
|
271
|
+
/**
|
|
272
|
+
* Il nome con cui la citano i `triggers`, e la radice di `Cerca.nome` con l'output automatico. Vive
|
|
273
|
+
* nello spazio dei nomi **comune** (§3.3): un'action omonima di una variabile o di un node e'
|
|
274
|
+
* `NAME_DUPLICATED`, ed e' l'unica cosa che tiene quel riferimento non ambiguo.
|
|
275
|
+
*/
|
|
276
|
+
name?: string;
|
|
277
|
+
actionType?: string;
|
|
278
|
+
/** Obbligatorio: senza, `ACTION_NAME_MISSING`; fuori catalogo, `ACTION_UNKNOWN`. */
|
|
279
|
+
actionName?: string;
|
|
280
|
+
inputParameters?: FlowInputParameter[];
|
|
281
|
+
outputParameters?: FlowOutputParameter[];
|
|
282
|
+
/**
|
|
283
|
+
* Rende gli output leggibili come `<NomeAction>.<NomeOutput>`. **Non scrive in nessun campo**: e'
|
|
284
|
+
* la forma da proporre quando il risultato serve a una condizione, non a precompilare (§5.2).
|
|
285
|
+
*/
|
|
286
|
+
storeOutputAutomatically?: boolean;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* §5.2 — cosa fa scattare una screen action all'arrivo sulla schermata. L'unico valore ammesso e'
|
|
290
|
+
* `runOnLoad`: il `runOnRevisit` della specifica Salesforce e'
|
|
291
|
+
* `SCREEN_TRIGGER_INIT_BEHAVIOR_UNKNOWN`.
|
|
292
|
+
*/
|
|
293
|
+
type FlowScreenTriggerInitBehavior = 'runOnLoad' | string;
|
|
294
|
+
/**
|
|
295
|
+
* §5.2 — chi invoca una screen action, e quando. Sta separato dalle `actions` perche' **piu' trigger
|
|
296
|
+
* possono invocare la stessa action**.
|
|
297
|
+
*
|
|
298
|
+
* Senza ne' `triggerFieldName` ne' `initBehavior` non scatterebbe mai: `SCREEN_TRIGGER_WITHOUT_CAUSE`.
|
|
299
|
+
*/
|
|
300
|
+
interface FlowScreenTrigger extends FlowConditionHolder {
|
|
301
|
+
/** Una delle `actions` **dello stesso screen**: altrimenti `SCREEN_ACTION_UNKNOWN`. */
|
|
302
|
+
screenActionName?: string;
|
|
303
|
+
/** Un campo **di questo screen**: altrimenti `SCREEN_TRIGGER_FIELD_UNKNOWN`. */
|
|
304
|
+
triggerFieldName?: string;
|
|
305
|
+
initBehavior?: FlowScreenTriggerInitBehavior;
|
|
306
|
+
}
|
|
259
307
|
/**
|
|
260
308
|
* §5.2 — lo screen dinamico: **descrive i propri campi**, invece di referenziare un form.
|
|
261
309
|
*
|
|
@@ -276,6 +324,10 @@ interface FlowDynamicScreen extends FlowNodeBase {
|
|
|
276
324
|
/** Nome di uno stage dichiarato: alimenta l'indicatore di avanzamento. */
|
|
277
325
|
stageReference?: string;
|
|
278
326
|
fields?: FlowScreenField[];
|
|
327
|
+
/** Le action invocabili dai campi di questa schermata (§5.2). */
|
|
328
|
+
actions?: FlowScreenAction[];
|
|
329
|
+
/** Chi le invoca, e quando: due pezzi perche' piu' trigger possono chiamare la stessa action. */
|
|
330
|
+
triggers?: FlowScreenTrigger[];
|
|
279
331
|
connector?: FlowConnector;
|
|
280
332
|
}
|
|
281
333
|
type FlowAssignmentOperator = 'Assign' | 'Add' | 'Subtract' | 'AddAtStart' | 'AssignCount' | 'RemoveFirst' | 'RemoveAll' | 'RemovePosition' | 'RemoveAfterFirst' | 'RemoveBeforeFirst' | 'RemoveUncommon' | string;
|
|
@@ -284,12 +336,12 @@ interface FlowAssignmentItem {
|
|
|
284
336
|
operator?: FlowAssignmentOperator;
|
|
285
337
|
value?: FlowValue;
|
|
286
338
|
}
|
|
287
|
-
/** §5.
|
|
339
|
+
/** §5.3 — le operazioni sono eseguite nell'ordine dichiarato. */
|
|
288
340
|
interface FlowAssignment extends FlowNodeBase {
|
|
289
341
|
assignmentItems?: FlowAssignmentItem[];
|
|
290
342
|
connector?: FlowConnector;
|
|
291
343
|
}
|
|
292
|
-
/** §5.
|
|
344
|
+
/** §5.4 — una regola per ramo; l'ordine e' semantico. */
|
|
293
345
|
interface FlowDecisionRule extends FlowConditionHolder {
|
|
294
346
|
name?: string;
|
|
295
347
|
label?: string;
|
|
@@ -301,7 +353,7 @@ interface FlowDecision extends FlowNodeBase {
|
|
|
301
353
|
defaultConnector?: FlowConnector;
|
|
302
354
|
defaultConnectorLabel?: string;
|
|
303
355
|
}
|
|
304
|
-
/** §5.
|
|
356
|
+
/** §5.5 */
|
|
305
357
|
interface FlowLoop extends FlowNodeBase {
|
|
306
358
|
collectionReference?: string;
|
|
307
359
|
assignNextValueToReference?: string;
|
|
@@ -314,7 +366,7 @@ interface FlowSortOption {
|
|
|
314
366
|
sortOrder?: FlowSortOrder;
|
|
315
367
|
doesPutEmptyStringAndNullFirst?: boolean;
|
|
316
368
|
}
|
|
317
|
-
/** §5.
|
|
369
|
+
/** §5.6 — `assignNextValueToReference` e' l'elemento in esame, non la destinazione. */
|
|
318
370
|
interface FlowCollectionProcessor extends FlowNodeBase, FlowConditionHolder {
|
|
319
371
|
collectionProcessorType?: FlowCollectionProcessorType;
|
|
320
372
|
collectionReference?: string;
|
|
@@ -323,7 +375,7 @@ interface FlowCollectionProcessor extends FlowNodeBase, FlowConditionHolder {
|
|
|
323
375
|
sortOptions?: FlowSortOption[];
|
|
324
376
|
connector?: FlowConnector;
|
|
325
377
|
}
|
|
326
|
-
/** §5.
|
|
378
|
+
/** §5.7 */
|
|
327
379
|
interface FlowRecordLookup extends FlowNodeBase {
|
|
328
380
|
object?: string;
|
|
329
381
|
filterLogic?: FlowConditionLogic;
|
|
@@ -338,12 +390,12 @@ interface FlowRecordLookup extends FlowNodeBase {
|
|
|
338
390
|
storeOutputAutomatically?: boolean;
|
|
339
391
|
outputReference?: string;
|
|
340
392
|
outputAssignments?: FlowOutputFieldAssignment[];
|
|
341
|
-
/** Modellato ma non tradotto in query (§5.
|
|
393
|
+
/** Modellato ma non tradotto in query (§5.7). */
|
|
342
394
|
relatedRecords?: unknown[];
|
|
343
395
|
connector?: FlowConnector;
|
|
344
396
|
faultConnector?: FlowConnector;
|
|
345
397
|
}
|
|
346
|
-
/** §5.
|
|
398
|
+
/** §5.8 */
|
|
347
399
|
interface FlowRecordCreate extends FlowNodeBase {
|
|
348
400
|
object?: string;
|
|
349
401
|
inputReference?: string;
|
|
@@ -371,7 +423,7 @@ interface FlowRecordUpdate extends FlowNodeBase {
|
|
|
371
423
|
interface FlowRecordDelete extends FlowNodeBase {
|
|
372
424
|
object?: string;
|
|
373
425
|
inputReference?: string;
|
|
374
|
-
/** Senza filtri e' un **errore**, non un avviso (§5.
|
|
426
|
+
/** Senza filtri e' un **errore**, non un avviso (§5.8). */
|
|
375
427
|
filters?: FlowRecordFilter[];
|
|
376
428
|
connector?: FlowConnector;
|
|
377
429
|
faultConnector?: FlowConnector;
|
|
@@ -379,7 +431,7 @@ interface FlowRecordDelete extends FlowNodeBase {
|
|
|
379
431
|
interface FlowRecordRollback extends FlowNodeBase {
|
|
380
432
|
connector?: FlowConnector;
|
|
381
433
|
}
|
|
382
|
-
/** §5.
|
|
434
|
+
/** §5.9 */
|
|
383
435
|
interface FlowActionCall extends FlowNodeBase {
|
|
384
436
|
actionType?: string;
|
|
385
437
|
actionName?: string;
|
|
@@ -404,7 +456,7 @@ interface FlowScriptPluginCall extends FlowNodeBase {
|
|
|
404
456
|
connector?: FlowConnector;
|
|
405
457
|
faultConnector?: FlowConnector;
|
|
406
458
|
}
|
|
407
|
-
/** §5.
|
|
459
|
+
/** §5.10 — i `name` sono le variabili isInput/isOutput del flow **invocato**. */
|
|
408
460
|
interface FlowSubflowInputAssignment {
|
|
409
461
|
name?: string;
|
|
410
462
|
value?: FlowValue;
|
|
@@ -420,7 +472,7 @@ interface FlowSubflow extends FlowNodeBase {
|
|
|
420
472
|
storeOutputAutomatically?: boolean;
|
|
421
473
|
connector?: FlowConnector;
|
|
422
474
|
}
|
|
423
|
-
/** §5.
|
|
475
|
+
/** §5.11 */
|
|
424
476
|
interface FlowWaitEvent extends FlowConditionHolder {
|
|
425
477
|
name?: string;
|
|
426
478
|
label?: string;
|
|
@@ -438,7 +490,7 @@ interface FlowWait extends FlowNodeBase {
|
|
|
438
490
|
defaultConnectorLabel?: string;
|
|
439
491
|
faultConnector?: FlowConnector;
|
|
440
492
|
}
|
|
441
|
-
/** §5.
|
|
493
|
+
/** §5.12 */
|
|
442
494
|
interface FlowCustomErrorMessage {
|
|
443
495
|
errorMessage?: string;
|
|
444
496
|
isFieldError?: boolean;
|
|
@@ -447,12 +499,12 @@ interface FlowCustomErrorMessage {
|
|
|
447
499
|
interface FlowCustomError extends FlowNodeBase {
|
|
448
500
|
customErrorMessages?: FlowCustomErrorMessage[];
|
|
449
501
|
}
|
|
450
|
-
/** §5.
|
|
502
|
+
/** §5.13 */
|
|
451
503
|
interface FlowTransformValueAction {
|
|
452
504
|
transformType?: FlowTransformType;
|
|
453
505
|
/**
|
|
454
506
|
* Il campo di destinazione, oppure — se il target e' una `Structure` — il nome del
|
|
455
|
-
* **membro** della classe (§5.
|
|
507
|
+
* **membro** della classe (§5.13, §4.7).
|
|
456
508
|
*/
|
|
457
509
|
outputFieldApiName?: string;
|
|
458
510
|
value?: FlowValue;
|
|
@@ -475,7 +527,7 @@ interface FlowUnsupportedNode extends FlowNodeBase {
|
|
|
475
527
|
[key: string]: unknown;
|
|
476
528
|
}
|
|
477
529
|
/**
|
|
478
|
-
* §5.
|
|
530
|
+
* §5.14 — i tre tipi di step. `stepMuleSoft` non esiste in questo sistema
|
|
479
531
|
* (`ELEMENT_NOT_SUPPORTED`); l'elenco autoritativo e' il dizionario `stageStepTypes`.
|
|
480
532
|
*/
|
|
481
533
|
type FlowStageStepActionType = 'stepBackground' | 'stepInteractive' | 'stepApproval' | string;
|
|
@@ -487,7 +539,7 @@ interface FlowStageStepAssignee {
|
|
|
487
539
|
/** Il nome di un *evaluation flow* che decide una condizione di ingresso o di uscita. */
|
|
488
540
|
type FlowStageStepConditionActionType = 'EvaluationFlow' | string;
|
|
489
541
|
/**
|
|
490
|
-
* §5.
|
|
542
|
+
* §5.14 — uno step di uno stage.
|
|
491
543
|
*
|
|
492
544
|
* Due cose che non si vedono dal tipo:
|
|
493
545
|
* - gli step **non hanno un ordine di esecuzione**: parte quello le cui `entryConditions`
|
|
@@ -510,9 +562,9 @@ interface FlowStageStep {
|
|
|
510
562
|
assignees?: FlowStageStepAssignee[];
|
|
511
563
|
/** `"0"` o `"1"`: il modello lo porta come stringa. */
|
|
512
564
|
requiresMultiMemberApproval?: string;
|
|
513
|
-
/** *Se* lo step si applica: se non si avverano, viene saltato (§5.
|
|
565
|
+
/** *Se* lo step si applica: se non si avverano, viene saltato (§5.14). */
|
|
514
566
|
entryConditions?: FlowCondition[];
|
|
515
|
-
/** *Quando* lo step libera lo stage: se restano false, lo stage va in stallo (§5.
|
|
567
|
+
/** *Quando* lo step libera lo stage: se restano false, lo stage va in stallo (§5.14). */
|
|
516
568
|
exitConditions?: FlowCondition[];
|
|
517
569
|
/** Evaluation flow che decide l'ingresso: deve restituire `isOrchestrationConditionMet`. */
|
|
518
570
|
entryActionName?: string;
|
|
@@ -520,7 +572,7 @@ interface FlowStageStep {
|
|
|
520
572
|
exitActionName?: string;
|
|
521
573
|
exitActionType?: FlowStageStepConditionActionType;
|
|
522
574
|
inputParameters?: FlowInputParameter[];
|
|
523
|
-
/** `assignToReference` e' facoltativo: l'output e' già referenziabile (§5.
|
|
575
|
+
/** `assignToReference` e' facoltativo: l'output e' già referenziabile (§5.14). */
|
|
524
576
|
outputParameters?: FlowOutputParameter[];
|
|
525
577
|
/** `true` → usa `outputConfigParams` come output finti, senza eseguire lo step. */
|
|
526
578
|
debugSimulateStep?: boolean;
|
|
@@ -531,7 +583,7 @@ interface FlowOrchestratedStage extends FlowNodeBase {
|
|
|
531
583
|
connector?: FlowConnector;
|
|
532
584
|
/**
|
|
533
585
|
* **Non** e' un ramo di guasto: e' il ramo percorso quando uno step viene rifiutato.
|
|
534
|
-
* Senza, un rifiuto fa fallire l'interview (§5.
|
|
586
|
+
* Senza, un rifiuto fa fallire l'interview (§5.14).
|
|
535
587
|
*/
|
|
536
588
|
faultConnector?: FlowConnector;
|
|
537
589
|
}
|
|
@@ -684,7 +736,7 @@ interface FlowComparisonOperatorEntry extends FlowDictionaryEntry {
|
|
|
684
736
|
/** Tipi a cui l'operatore si applica; vuoto o assente = qualunque tipo. */
|
|
685
737
|
appliesTo?: FlowDataType[] | null;
|
|
686
738
|
}
|
|
687
|
-
/** §5.
|
|
739
|
+
/** §5.3 — operatore di assegnazione. */
|
|
688
740
|
interface FlowAssignmentOperatorEntry extends FlowDictionaryEntry {
|
|
689
741
|
/** Ha senso solo su destinazioni collection; altrove e' un avviso. */
|
|
690
742
|
expectsCollection?: boolean;
|
|
@@ -707,7 +759,7 @@ interface FlowGlobalVariableEntry extends FlowDictionaryEntry {
|
|
|
707
759
|
requiresRecordTrigger?: boolean;
|
|
708
760
|
}
|
|
709
761
|
/**
|
|
710
|
-
* §5.
|
|
762
|
+
* §5.14 — i tipi di step di uno stage di orchestrazione (`stageStepTypes`).
|
|
711
763
|
* Le colonne dicono cosa il tipo pretende: senza, l'editor dovrebbe cablare i tre nomi.
|
|
712
764
|
*/
|
|
713
765
|
interface FlowStageStepTypeEntry extends FlowDictionaryEntry {
|
|
@@ -804,14 +856,14 @@ interface FlowFieldDescription {
|
|
|
804
856
|
/**
|
|
805
857
|
* `false` → non si puo' filtrare su questo campo. Non e' un dettaglio: la chiave di
|
|
806
858
|
* un'entita' con chiave composta puo' essere **non filtrabile** (porta la forma canonica
|
|
807
|
-
* della chiave), e il filtro «per identificativo» va scritto una colonna alla volta (§5.
|
|
859
|
+
* della chiave), e il filtro «per identificativo» va scritto una colonna alla volta (§5.8).
|
|
808
860
|
*/
|
|
809
861
|
isFilterable?: boolean;
|
|
810
862
|
isSortable?: boolean;
|
|
811
|
-
/** Aggiornabile da un Update: altrimenti `FIELD_NOT_UPDATEABLE` (§5.
|
|
863
|
+
/** Aggiornabile da un Update: altrimenti `FIELD_NOT_UPDATEABLE` (§5.8). */
|
|
812
864
|
isUpdateable?: boolean;
|
|
813
865
|
/**
|
|
814
|
-
* Valorizzabile da un Create: altrimenti `FIELD_NOT_CREATEABLE` (§5.
|
|
866
|
+
* Valorizzabile da un Create: altrimenti `FIELD_NOT_CREATEABLE` (§5.8). **Non** e' lo stesso
|
|
815
867
|
* insieme di `isUpdateable` — la colonna di una chiave naturale la scrive chi crea il record
|
|
816
868
|
* e non si cambia dopo, un identificativo generato dal database e' l'opposto.
|
|
817
869
|
*/
|
|
@@ -880,15 +932,31 @@ interface FlowStructureDescription {
|
|
|
880
932
|
*/
|
|
881
933
|
members?: FlowStructureMember[];
|
|
882
934
|
}
|
|
935
|
+
/**
|
|
936
|
+
* In quale dei due ruoli un artefatto del frontend e' utilizzabile (§5.1, §5.2, §6.4).
|
|
937
|
+
*
|
|
938
|
+
* `Form` e' una **schermata intera** (`formName` di uno Screen), `Component` un **componente**
|
|
939
|
+
* montabile dentro uno screen dinamico (`extensionName` di un `ComponentInstance`). `Any` — che
|
|
940
|
+
* e' anche cio' che significa il campo assente — dice «va bene in entrambi i posti»: un catalogo
|
|
941
|
+
* che il ruolo non lo dichiara non deve diventare un catalogo che vieta tutto.
|
|
942
|
+
*/
|
|
943
|
+
type FlowFormKind = 'Form' | 'Component' | 'Any' | string;
|
|
883
944
|
/** Voce di catalogo per action, script, form, eventi, tipi di enum, classi. */
|
|
884
945
|
interface FlowCatalogEntry {
|
|
885
946
|
name: string;
|
|
886
947
|
label?: string | null;
|
|
887
948
|
description?: string | null;
|
|
949
|
+
/**
|
|
950
|
+
* Solo per il catalogo dei form. Assente = `Any`: proponibile sia come schermata sia come
|
|
951
|
+
* componente. Una voce usata nel ruolo sbagliato e' `FORM_KIND_MISMATCH`, che e' un errore
|
|
952
|
+
* **diverso** da «il nome non esiste» — il nome esiste, e dirlo sconosciuto manderebbe a
|
|
953
|
+
* cercare un artefatto che c'e' (§5.1, §7).
|
|
954
|
+
*/
|
|
955
|
+
formKind?: FlowFormKind | null;
|
|
888
956
|
}
|
|
889
957
|
/**
|
|
890
958
|
* Parametro dichiarato da un'action, uno script o un form.
|
|
891
|
-
* Con il catalogo popolato un parametro inesistente e' un **errore** (§5.
|
|
959
|
+
* Con il catalogo popolato un parametro inesistente e' un **errore** (§5.9).
|
|
892
960
|
*/
|
|
893
961
|
interface FlowCatalogParameter {
|
|
894
962
|
name: string;
|
|
@@ -1147,11 +1215,11 @@ interface FlowPendingScreen {
|
|
|
1147
1215
|
canPause?: boolean;
|
|
1148
1216
|
}
|
|
1149
1217
|
/**
|
|
1150
|
-
* §5.
|
|
1218
|
+
* §5.14 — lo stato che un assegnatario comunica concludendo uno step.
|
|
1151
1219
|
* `Pending` non e' accettato in scrittura: e' `INVALID_REQUEST`.
|
|
1152
1220
|
*/
|
|
1153
1221
|
type FlowStageStepStatus = 'Completed' | 'Rejected' | 'Cancelled' | 'Pending' | string;
|
|
1154
|
-
/** Lo stato di uno step, come lo riporta l'ispezione di una sospesa (§5.
|
|
1222
|
+
/** Lo stato di uno step, come lo riporta l'ispezione di una sospesa (§5.14, §6.5). */
|
|
1155
1223
|
interface FlowStageStepState {
|
|
1156
1224
|
stepName?: string;
|
|
1157
1225
|
label?: string | null;
|
|
@@ -1191,7 +1259,7 @@ interface FlowInterviewResult {
|
|
|
1191
1259
|
*/
|
|
1192
1260
|
isWaitingForEvent?: boolean;
|
|
1193
1261
|
isWaitingForStageStep?: boolean;
|
|
1194
|
-
/** Con `isWaitingForStageStep`: lo stato di ogni step dello stage corrente (§5.
|
|
1262
|
+
/** Con `isWaitingForStageStep`: lo stato di ogni step dello stage corrente (§5.14). */
|
|
1195
1263
|
stageSteps?: FlowStageStepState[];
|
|
1196
1264
|
isSuccess?: boolean;
|
|
1197
1265
|
}
|
|
@@ -1213,7 +1281,7 @@ interface FlowResumeRequest {
|
|
|
1213
1281
|
debug?: boolean;
|
|
1214
1282
|
}
|
|
1215
1283
|
/**
|
|
1216
|
-
* §5.
|
|
1284
|
+
* §5.14 — `POST /interviews/{key}/stage-step`: un assegnatario conclude uno step.
|
|
1217
1285
|
* Se lo stage si sospende di nuovo, la risposta porta una `interviewKey` **nuova** e la
|
|
1218
1286
|
* vecchia non e' piu' valida.
|
|
1219
1287
|
*/
|
|
@@ -1391,7 +1459,7 @@ declare abstract class FlowBuilderApi {
|
|
|
1391
1459
|
* `POST /flows/references/writable` — le variabili **piu' le globali assegnabili**, per i
|
|
1392
1460
|
* campi di destinazione. Le globali assegnabili sono **due**, `$Flow.CurrentStage` e
|
|
1393
1461
|
* `$Flow.ActiveStages`: quelle dell'host sono sempre di sola lettura e il catalogo non ha un
|
|
1394
|
-
* flag per dichiararne una scrivibile (§5.
|
|
1462
|
+
* flag per dichiararne una scrivibile (§5.3). La primitiva le comprende già, l'editor non le
|
|
1395
1463
|
* aggiunge. Restano fuori i campi di `$Record`, che dipendono dallo schema: quelli arrivano da
|
|
1396
1464
|
* `listFields(object, 'updateable')` (§6.4).
|
|
1397
1465
|
*
|
|
@@ -1424,8 +1492,18 @@ declare abstract class FlowBuilderApi {
|
|
|
1424
1492
|
abstract listScripts(): Promise<FlowCatalogEntry[]>;
|
|
1425
1493
|
/** `GET /catalog/scripts/{name}/parameters` */
|
|
1426
1494
|
abstract listScriptParameters(scriptName: string): Promise<FlowCatalogParameter[]>;
|
|
1427
|
-
/**
|
|
1428
|
-
|
|
1495
|
+
/**
|
|
1496
|
+
* `GET /catalog/forms?kind=` — gli artefatti realizzati a mano nel frontend applicativo (§5.1,
|
|
1497
|
+
* §5.2). Un solo catalogo per due ruoli: le **schermate intere** che uno Screen mostra
|
|
1498
|
+
* (`formName`) e i **componenti** che uno screen dinamico monta (`extensionName`) sono la
|
|
1499
|
+
* stessa domanda al frontend — cosa sa rendere, e con quali parametri.
|
|
1500
|
+
*
|
|
1501
|
+
* `kind` filtra: `Form`, `Component`, o assente per tutto. Chiederlo non e' un dettaglio —
|
|
1502
|
+
* proporre una schermata intera dove va un componente porta a `FORM_KIND_MISMATCH`, che e' un
|
|
1503
|
+
* errore e blocca l'attivazione. Una voce senza `formKind` vale `Any` e resta proponibile in
|
|
1504
|
+
* entrambi i posti: un catalogo che il ruolo non lo dichiara non deve vietare tutto (§6.4).
|
|
1505
|
+
*/
|
|
1506
|
+
abstract listForms(kind?: FlowFormKind): Promise<FlowCatalogEntry[]>;
|
|
1429
1507
|
/** `GET /catalog/forms/{name}/parameters` */
|
|
1430
1508
|
abstract listFormParameters(formName: string): Promise<FlowCatalogParameter[]>;
|
|
1431
1509
|
/** `GET /catalog/enum-types` — per `objectType` delle risorse `Enum`. */
|
|
@@ -1483,7 +1561,7 @@ declare abstract class FlowBuilderApi {
|
|
|
1483
1561
|
abstract listEvents(): Promise<FlowCatalogEntry[]>;
|
|
1484
1562
|
/**
|
|
1485
1563
|
* `GET /flows/subflow-candidates?excluding=` — solo i flow con una versione attiva,
|
|
1486
|
-
* escluso quello corrente (§5.
|
|
1564
|
+
* escluso quello corrente (§5.10).
|
|
1487
1565
|
*/
|
|
1488
1566
|
abstract listSubflowCandidates(excluding?: string): Promise<FlowSummary[]>;
|
|
1489
1567
|
/**
|
|
@@ -1497,14 +1575,14 @@ declare abstract class FlowBuilderApi {
|
|
|
1497
1575
|
/** `POST /interviews/resume` — riprende un'esecuzione in pausa. */
|
|
1498
1576
|
resumeInterview(request: FlowResumeRequest): Promise<FlowInterviewResult>;
|
|
1499
1577
|
/**
|
|
1500
|
-
* `POST /interviews/{key}/stage-step` — un assegnatario conclude uno step (§5.
|
|
1578
|
+
* `POST /interviews/{key}/stage-step` — un assegnatario conclude uno step (§5.14).
|
|
1501
1579
|
* Se lo stage si sospende di nuovo, la risposta porta una `interviewKey` **nuova**: la
|
|
1502
1580
|
* vecchia non e' piu' valida e va sostituita, non conservata.
|
|
1503
1581
|
*/
|
|
1504
1582
|
completeStageStep(request: FlowStageStepRequest): Promise<FlowInterviewResult>;
|
|
1505
1583
|
/**
|
|
1506
1584
|
* `GET /interviews/{key}` — ispeziona una sospesa senza consumarla.
|
|
1507
|
-
* Con `isWaitingForStageStep` porta `stageSteps` con lo stato di ognuno (§5.
|
|
1585
|
+
* Con `isWaitingForStageStep` porta `stageSteps` con lo stato di ognuno (§5.14).
|
|
1508
1586
|
*/
|
|
1509
1587
|
inspectInterview(interviewKey: string): Promise<FlowInterviewResult>;
|
|
1510
1588
|
/** `DELETE /interviews/{key}` — abbandona. */
|
|
@@ -1589,7 +1667,7 @@ declare class HttpFlowBuilderApi extends FlowBuilderApi {
|
|
|
1589
1667
|
listActionParameters(actionType: string, actionName: string): Promise<FlowCatalogParameter[]>;
|
|
1590
1668
|
listScripts(): Promise<FlowCatalogEntry[]>;
|
|
1591
1669
|
listScriptParameters(scriptName: string): Promise<FlowCatalogParameter[]>;
|
|
1592
|
-
listForms(): Promise<FlowCatalogEntry[]>;
|
|
1670
|
+
listForms(kind?: FlowFormKind): Promise<FlowCatalogEntry[]>;
|
|
1593
1671
|
listFormParameters(formName: string): Promise<FlowCatalogParameter[]>;
|
|
1594
1672
|
listEnumTypes(): Promise<FlowCatalogEntry[]>;
|
|
1595
1673
|
/** §4.6 — i valori di un tipo: `enumType` e' l'`objectType`, e va nel path come segmento. */
|
|
@@ -1658,7 +1736,7 @@ interface FlowOutlet {
|
|
|
1658
1736
|
*
|
|
1659
1737
|
* Vale sui soli elementi che possono fallire (Record*, ActionCall, ScriptCall, Wait):
|
|
1660
1738
|
* il `faultConnector` di un `OrchestratedStage` porta `kind: 'Fault'` ma e' il ramo
|
|
1661
|
-
* dello **step rifiutato** (§5.
|
|
1739
|
+
* dello **step rifiutato** (§5.14), non un ramo di guasto, e la §7 non lo comprende.
|
|
1662
1740
|
*/
|
|
1663
1741
|
isFaultRecovery?: boolean;
|
|
1664
1742
|
read(node: FlowAnyNode): FlowConnector | undefined;
|
|
@@ -1695,7 +1773,7 @@ declare const TYPES_WITH_AUTOMATIC_OUTPUT: ReadonlySet<string>;
|
|
|
1695
1773
|
*/
|
|
1696
1774
|
declare const FLOW_ELEMENT_ICONS: Record<string, string>;
|
|
1697
1775
|
/**
|
|
1698
|
-
* Il glifo delle varianti (§5.
|
|
1776
|
+
* Il glifo delle varianti (§5.6): due voci di palette dello stesso tipo con lo stesso simbolo
|
|
1699
1777
|
* si distinguerebbero solo dall'etichetta, e sulla palette il simbolo e' la prima cosa che si
|
|
1700
1778
|
* guarda. La chiave e' `tipo:variante`.
|
|
1701
1779
|
*/
|
|
@@ -1708,7 +1786,7 @@ declare const FLOW_ELEMENT_VARIANT_ICONS: Record<string, string>;
|
|
|
1708
1786
|
declare function elementIcon(type: string, label?: string, variant?: string): string;
|
|
1709
1787
|
|
|
1710
1788
|
/**
|
|
1711
|
-
* I tipi che sulla palette valgono per **piu' di una voce** — FRONTEND.md §5.
|
|
1789
|
+
* I tipi che sulla palette valgono per **piu' di una voce** — FRONTEND.md §5.6.
|
|
1712
1790
|
*
|
|
1713
1791
|
* Il Collection Processor e' un solo tipo di node con un discriminatore
|
|
1714
1792
|
* (`collectionProcessorType`: `Sort` o `Filter`), e i campi rilevanti cambiano con esso: un
|
|
@@ -1893,7 +1971,7 @@ declare function valuedFieldsOf(value: FlowValue | undefined | null): (keyof Flo
|
|
|
1893
1971
|
declare function valuedFieldOf(value: FlowValue | undefined | null): keyof FlowValue | undefined;
|
|
1894
1972
|
|
|
1895
1973
|
/**
|
|
1896
|
-
* Gli step di uno stage di orchestrazione — FRONTEND.md §5.
|
|
1974
|
+
* Gli step di uno stage di orchestrazione — FRONTEND.md §5.14.
|
|
1897
1975
|
*
|
|
1898
1976
|
* Tre regole del contratto che non si vedono guardando il tipo, e che qui stanno in un posto
|
|
1899
1977
|
* solo perche' le usano l'inspector, lo spazio dei nomi del documento e la validazione locale:
|
|
@@ -1913,14 +1991,14 @@ declare function stepsOf(stage: FlowOrchestratedStage | undefined): FlowStageSte
|
|
|
1913
1991
|
/**
|
|
1914
1992
|
* Il nome dello step il cui output un riferimento sta leggendo, se e' uno degli step passati.
|
|
1915
1993
|
* `undefined` quando il riferimento e' legittimo. Serve a impedire nell'editor la condizione
|
|
1916
|
-
* che referenzia l'output di un altro step (§5.
|
|
1994
|
+
* che referenzia l'output di un altro step (§5.14, punto 4): la strada corretta e' scrivere
|
|
1917
1995
|
* quel risultato in una variabile con `outputParameters.assignToReference` e condizionare
|
|
1918
1996
|
* su quella.
|
|
1919
1997
|
*/
|
|
1920
1998
|
declare function stageStepOutputReferenced(reference: string | undefined, steps: FlowStageStep[]): string | undefined;
|
|
1921
1999
|
/**
|
|
1922
2000
|
* L'unico output che il runtime legge da un evaluation flow di condizione. Dichiararne altri
|
|
1923
|
-
* e' `STAGE_ACTION_INVALID` (§5.
|
|
2001
|
+
* e' `STAGE_ACTION_INVALID` (§5.14, punto 7).
|
|
1924
2002
|
*/
|
|
1925
2003
|
declare const ORCHESTRATION_CONDITION_OUTPUT = "isOrchestrationConditionMet";
|
|
1926
2004
|
|
|
@@ -1967,6 +2045,18 @@ declare function allFieldsOf(screen: FlowDynamicScreen | undefined): FlowScreenF
|
|
|
1967
2045
|
* Chi vuole i **soli** riferimenti proponibili usa `isFieldResource`.
|
|
1968
2046
|
*/
|
|
1969
2047
|
declare function screenFieldNames(definition: FlowDefinition | undefined): string[];
|
|
2048
|
+
/**
|
|
2049
|
+
* §3.3, §5.2 — i nomi delle **screen action** di tutti gli screen dinamici del documento.
|
|
2050
|
+
*
|
|
2051
|
+
* Stanno nello spazio dei nomi comune per la stessa ragione dei campi e degli step: con
|
|
2052
|
+
* `storeOutputAutomatically` il nome dell'action e' la **radice** di un riferimento (`Cerca.nome`), e
|
|
2053
|
+
* un'omonimia con una variabile — o con una `Structure` chiamata `Cerca` — renderebbe quel riferimento
|
|
2054
|
+
* ambiguo. Quindi entrano in `usedNames` e un omonimo e' `NAME_DUPLICATED`.
|
|
2055
|
+
*
|
|
2056
|
+
* Ci entrano **tutte**, anche senza output automatico: il nome e' unico o non lo e', e farlo dipendere
|
|
2057
|
+
* da un flag significherebbe che accendere quel flag fa comparire un errore altrove.
|
|
2058
|
+
*/
|
|
2059
|
+
declare function screenActionNames(definition: FlowDefinition | undefined): string[];
|
|
1970
2060
|
/**
|
|
1971
2061
|
* §5.2 — il campo e' una risorsa del flow (`kind: "ScreenField"`), quindi referenziabile
|
|
1972
2062
|
* per nome ovunque e **di sola lettura**.
|
|
@@ -2101,7 +2191,7 @@ declare class FlowDictionaryStore {
|
|
|
2101
2191
|
readonly paletteCategories: _angular_core.Signal<string[]>;
|
|
2102
2192
|
elementType(value: string): FlowElementTypeEntry | undefined;
|
|
2103
2193
|
/**
|
|
2104
|
-
* Le varianti di un tipo, cioe' i valori del suo discriminatore (§5.
|
|
2194
|
+
* Le varianti di un tipo, cioe' i valori del suo discriminatore (§5.6). L'unico oggi e' il
|
|
2105
2195
|
* Collection Processor. Elenco vuoto = tipo senza varianti, **oppure** dizionario non
|
|
2106
2196
|
* disponibile: in entrambi i casi la palette mostra una voce sola, che e' l'unica cosa
|
|
2107
2197
|
* onesta da fare quando non si sa quali varianti esistano.
|
|
@@ -2141,11 +2231,11 @@ declare class FlowDictionaryStore {
|
|
|
2141
2231
|
isGlobalScopeVerifiable(scope: string | undefined | null): boolean;
|
|
2142
2232
|
/** I percorsi noti di uno scope, già prefissati: `$User.Email`. */
|
|
2143
2233
|
globalPathsOf(scope: string | undefined | null): string[];
|
|
2144
|
-
/** §5.
|
|
2234
|
+
/** §5.14 — la voce di `stageStepTypes` di un `actionType`. */
|
|
2145
2235
|
stageStepType(value: string | undefined | null): FlowStageStepTypeEntry | undefined;
|
|
2146
2236
|
/** `stepBackground` vuole `actionName`; il fallback serve se il dizionario non lo dichiara. */
|
|
2147
2237
|
stageStepRequiresActionName(actionType: string | undefined | null): boolean;
|
|
2148
|
-
/** `stepInteractive` e `stepApproval` vogliono gli assegnatari (§5.
|
|
2238
|
+
/** `stepInteractive` e `stepApproval` vogliono gli assegnatari (§5.14). */
|
|
2149
2239
|
stageStepRequiresAssignees(actionType: string | undefined | null): boolean;
|
|
2150
2240
|
dataType(value: string | undefined | null): FlowDataTypeEntry | undefined;
|
|
2151
2241
|
/** §4.6, §4.7 — `Object`, `Enum` e `Structure` richiedono `objectType`. */
|
|
@@ -2215,7 +2305,12 @@ declare class FlowCatalogStore {
|
|
|
2215
2305
|
listActionParameters(actionType: string, actionName: string): Promise<FlowCatalogParameter[]>;
|
|
2216
2306
|
listScripts(): Promise<FlowCatalogEntry[]>;
|
|
2217
2307
|
listScriptParameters(scriptName: string): Promise<FlowCatalogParameter[]>;
|
|
2218
|
-
|
|
2308
|
+
/**
|
|
2309
|
+
* La cache e' **per ruolo**: `Form` e `Component` sono due risposte diverse dello stesso
|
|
2310
|
+
* catalogo, e una chiave sola le farebbe sovrascrivere a vicenda — il primo inspector aperto
|
|
2311
|
+
* deciderebbe cosa vede il secondo (§6.4).
|
|
2312
|
+
*/
|
|
2313
|
+
listForms(kind?: FlowFormKind): Promise<FlowCatalogEntry[]>;
|
|
2219
2314
|
listFormParameters(formName: string): Promise<FlowCatalogParameter[]>;
|
|
2220
2315
|
listEnumTypes(): Promise<FlowCatalogEntry[]>;
|
|
2221
2316
|
/**
|
|
@@ -2251,7 +2346,7 @@ declare class FlowCatalogStore {
|
|
|
2251
2346
|
}
|
|
2252
2347
|
|
|
2253
2348
|
/**
|
|
2254
|
-
* Navigazione dei percorsi puntati — FRONTEND.md §4.4, §4.7, §4.7.1, §5.2, §5.
|
|
2349
|
+
* Navigazione dei percorsi puntati — FRONTEND.md §4.4, §4.7, §4.7.1, §5.2, §5.8.
|
|
2255
2350
|
*
|
|
2256
2351
|
* La specifica e' cambiata su questo punto: i percorsi con il punto **si verificano**. Un percorso
|
|
2257
2352
|
* di relazione (`Cliente.Citta`) si naviga un segmento alla volta e l'ultimo si verifica come un
|
|
@@ -2274,7 +2369,7 @@ declare class FlowCatalogStore {
|
|
|
2274
2369
|
* - **scrivibile** non vuol dire la stessa cosa nei due mondi: un membro porta il proprio
|
|
2275
2370
|
* `isWritable`, un campo no — fuori da un Create o da un Update il contesto non c'e', quindi
|
|
2276
2371
|
* basta che sia `isCreateable` **oppure** `isUpdateable`, e un campo che non e' ne' l'uno ne'
|
|
2277
|
-
* l'altro e' `TARGET_NOT_WRITABLE` in qualunque contesto (§5.
|
|
2372
|
+
* l'altro e' `TARGET_NOT_WRITABLE` in qualunque contesto (§5.8).
|
|
2278
2373
|
*/
|
|
2279
2374
|
|
|
2280
2375
|
/** Una tappa navigabile: un'entita' dello schema, oppure una classe (§4.7). */
|
|
@@ -2503,12 +2598,15 @@ declare class FlowDocumentStore {
|
|
|
2503
2598
|
readonly nodeByName: _angular_core.Signal<Map<string, FlowNodeRef>>;
|
|
2504
2599
|
readonly resources: _angular_core.Signal<FlowResourceRef[]>;
|
|
2505
2600
|
/**
|
|
2506
|
-
* §3.3 — l'insieme dei nomi già usati
|
|
2507
|
-
*
|
|
2508
|
-
*
|
|
2509
|
-
*
|
|
2510
|
-
*
|
|
2511
|
-
*
|
|
2601
|
+
* §3.3 — l'insieme dei nomi già usati, che e' **uno solo**: node, risorse e le **tre** cose che non
|
|
2602
|
+
* sono ne' l'uno ne' l'altro ma il cui nome e' la radice di un riferimento — step di orchestrazione,
|
|
2603
|
+
* campi di screen dinamico e screen action.
|
|
2604
|
+
*
|
|
2605
|
+
* Il controllo di unicita' che guarda solo le variabili lascia passare una variabile omonima di un
|
|
2606
|
+
* node (§13.5); quello che dimentica gli step lascia passare uno step omonimo di una variabile;
|
|
2607
|
+
* quello che dimentica i campi o le action lascia passare un omonimo che e' `NAME_DUPLICATED` come
|
|
2608
|
+
* gli altri — e lì il danno e' peggiore, perche' quel nome **e' un riferimento**: un campo si legge
|
|
2609
|
+
* per nome, e il nome di un'action e' la radice dei suoi output automatici (`Cerca.nome`, §5.2).
|
|
2512
2610
|
*/
|
|
2513
2611
|
readonly usedNames: _angular_core.Signal<string[]>;
|
|
2514
2612
|
/** Gli archi derivati dal documento, Start incluso. */
|
|
@@ -2587,7 +2685,7 @@ declare class FlowDocumentStore {
|
|
|
2587
2685
|
x: number;
|
|
2588
2686
|
y: number;
|
|
2589
2687
|
}): void;
|
|
2590
|
-
/** Scrive la destinazione di un'uscita. `target` assente → il ramo
|
|
2688
|
+
/** Scrive la destinazione di un'uscita. `target` assente → il ramo si stacca del tutto. */
|
|
2591
2689
|
setConnector(fromName: string, outletKey: string, target: string | undefined, isGoTo?: boolean): void;
|
|
2592
2690
|
/** Rimuove un arco: il percorso finisce lì, che e' legittimo (§3.5). */
|
|
2593
2691
|
removeConnector(fromName: string, outletKey: string): void;
|
|
@@ -2752,7 +2850,15 @@ declare class FlowEditorSession {
|
|
|
2752
2850
|
readonly lastSaveResult: _angular_core.Signal<FlowSaveResult | null>;
|
|
2753
2851
|
readonly conflict: _angular_core.Signal<FlowConflictState | null>;
|
|
2754
2852
|
readonly expectedUpdatedAt: _angular_core.Signal<string | undefined>;
|
|
2755
|
-
/**
|
|
2853
|
+
/**
|
|
2854
|
+
* `true` finche' il flow non e' mai stato salvato: il comando e' "Crea", non "Salva".
|
|
2855
|
+
*
|
|
2856
|
+
* Il confronto e' `== null` e non `=== null` di proposito: il segnale e' tipato
|
|
2857
|
+
* `number | null`, ma cio' che ci arriva viene da una risposta del backend, e una risposta
|
|
2858
|
+
* senza `version` porta `undefined`. Con `=== null` un `undefined` sarebbe «versione nota»:
|
|
2859
|
+
* lo stato diventa «Nuovo» con il chip «v», il comando primario «Nuova versione» e l'editor
|
|
2860
|
+
* in sola lettura, tutti insieme, senza nessun errore che lo spieghi.
|
|
2861
|
+
*/
|
|
2756
2862
|
readonly isNew: _angular_core.Signal<boolean>;
|
|
2757
2863
|
readonly currentVersionSummary: _angular_core.Signal<FlowVersionSummary | undefined>;
|
|
2758
2864
|
/**
|
|
@@ -2775,8 +2881,18 @@ declare class FlowEditorSession {
|
|
|
2775
2881
|
open(flowName: string, version?: number): Promise<void>;
|
|
2776
2882
|
/** Senza `version` il backend restituisce la versione attiva, altrimenti l'ultima (§6.1). */
|
|
2777
2883
|
private static pickVersion;
|
|
2778
|
-
/**
|
|
2779
|
-
|
|
2884
|
+
/**
|
|
2885
|
+
* Ricarica l'elenco versioni: dopo un'attivazione la precedente e' `Obsolete` (§8.4).
|
|
2886
|
+
*
|
|
2887
|
+
* `adoptVersion` serve dopo una scrittura la cui risposta non porta il numero di versione
|
|
2888
|
+
* (§6.2): l'elenco e' l'altra fonte che quel numero lo sa, e senza il ripiego un flow appena
|
|
2889
|
+
* creato resterebbe «Nuovo» — cioe' il salvataggio successivo tenterebbe una *creazione* su un
|
|
2890
|
+
* nome che esiste già. Sta dietro un flag perche' altrove una versione assente e' un flow
|
|
2891
|
+
* davvero nuovo, e adottarla lo farebbe passare per salvato.
|
|
2892
|
+
*/
|
|
2893
|
+
refreshVersions(options?: {
|
|
2894
|
+
adoptVersion?: boolean;
|
|
2895
|
+
}): Promise<void>;
|
|
2780
2896
|
/**
|
|
2781
2897
|
* Crea o salva, a seconda dello stato. Non lancia su definizione invalida: il
|
|
2782
2898
|
* salvataggio riesce anche con errori e il chiamante legge `validation` (§8.2).
|
|
@@ -2788,7 +2904,44 @@ declare class FlowEditorSession {
|
|
|
2788
2904
|
activate?: boolean;
|
|
2789
2905
|
flowName?: string;
|
|
2790
2906
|
}): Promise<FlowSaveResult>;
|
|
2907
|
+
/**
|
|
2908
|
+
* Il risultato di una scrittura riportato alla forma su cui l'editor puo' contare.
|
|
2909
|
+
*
|
|
2910
|
+
* La §6.2 dice che `flowName` e `version` ci sono sempre, ma se mancano — risposta vuota,
|
|
2911
|
+
* `204`, o piu' spesso un host che serializza in PascalCase, dove `Version` non e' `version` —
|
|
2912
|
+
* il difetto non e' un errore: e' `undefined` che entra nello stato della sessione e ricompare
|
|
2913
|
+
* ovunque. Il chip della versione diventa «v», il banner dice «Versione undefined attivata», e
|
|
2914
|
+
* al salvataggio successivo si manda `flowName: undefined`. Nessuna eccezione, nessun rilievo.
|
|
2915
|
+
*
|
|
2916
|
+
* Cio' che sappiamo lo sappiamo già: il nome del flow e la versione sono quelli che abbiamo
|
|
2917
|
+
* appena chiesto di scrivere. Si tengono, e la discrepanza si dice **una volta** in console —
|
|
2918
|
+
* a chi integra, perche' e' la sua risposta a non avere la forma del contratto.
|
|
2919
|
+
*/
|
|
2920
|
+
private normalizeResult;
|
|
2921
|
+
private static readonly warned;
|
|
2922
|
+
private static warnOnce;
|
|
2791
2923
|
private applySaveResult;
|
|
2924
|
+
/**
|
|
2925
|
+
* Duplica: scrive il flow **sotto un altro nome** e sposta la sessione sulla copia
|
|
2926
|
+
* (§6.2, «Duplica»).
|
|
2927
|
+
*
|
|
2928
|
+
* Due strade, e la differenza non e' un dettaglio di implementazione: `cloneFlow` copia cio'
|
|
2929
|
+
* che il backend ha **salvato**, quindi su un documento con modifiche in corso la copia
|
|
2930
|
+
* nascerebbe senza quelle modifiche — senza nessun errore, e chi duplica per mettere al
|
|
2931
|
+
* sicuro cio' che ha appena scritto si ritroverebbe la versione vecchia. Per questo la
|
|
2932
|
+
* primitiva si usa solo su un documento pulito; altrimenti la copia si crea con `createFlow`
|
|
2933
|
+
* mandando il documento in mano. La stessa strada e' il ripiego quando `cloneFlow` non c'e':
|
|
2934
|
+
* e' opzionale, e `createFlow` no (§10).
|
|
2935
|
+
*
|
|
2936
|
+
* La sessione si sposta sulla copia perche' e' cio' che «salva con nome» significa: restare
|
|
2937
|
+
* sull'originale farebbe finire il salvataggio successivo nel flow sbagliato. Chi monta il
|
|
2938
|
+
* builder lo scopre dall'output `saved`, il cui `flowName` e' quello nuovo.
|
|
2939
|
+
*/
|
|
2940
|
+
saveAs(targetFlowName: string, options?: {
|
|
2941
|
+
label?: string;
|
|
2942
|
+
}): Promise<FlowSaveResult>;
|
|
2943
|
+
/** La copia creata dal documento in lavorazione, modifiche non salvate comprese. */
|
|
2944
|
+
private createCopy;
|
|
2792
2945
|
/** Copia la versione corrente in una nuova bozza (§8.1): il comando delle versioni chiuse. */
|
|
2793
2946
|
createNewVersion(): Promise<FlowSaveResult>;
|
|
2794
2947
|
/**
|
|
@@ -2949,7 +3102,7 @@ declare class FlowCanvasComponent {
|
|
|
2949
3102
|
/** Rilascio di un elemento dalla palette: tipo + punto nel sistema del canvas. */
|
|
2950
3103
|
readonly elementDropped: _angular_core.OutputEmitterRef<{
|
|
2951
3104
|
type: FlowElementType;
|
|
2952
|
-
/** La variante scelta sulla palette, dove il tipo ne ha (§5.
|
|
3105
|
+
/** La variante scelta sulla palette, dove il tipo ne ha (§5.6). */
|
|
2953
3106
|
variant?: string;
|
|
2954
3107
|
x: number;
|
|
2955
3108
|
y: number;
|
|
@@ -2987,9 +3140,10 @@ declare class FlowCanvasComponent {
|
|
|
2987
3140
|
/** Sullo Start conta il trigger: e' cio' che decide quando il flow parte (§3.4). */
|
|
2988
3141
|
private startSubtitle;
|
|
2989
3142
|
/**
|
|
2990
|
-
* Creazione di un arco. `targetId` assente significa rilascio nel vuoto:
|
|
2991
|
-
*
|
|
2992
|
-
*
|
|
3143
|
+
* Creazione di un arco. `targetId` assente significa rilascio nel vuoto: il ramo resta
|
|
3144
|
+
* **staccato**, cioe' omesso dal documento (`CONNECTOR_MISSING`, «il percorso finisce
|
|
3145
|
+
* qui»), non dichiarato-senza-destinazione — che sarebbe `CONNECTOR_TARGET_MISSING`, un
|
|
3146
|
+
* avviso su un ramo che l'utente non ha mai voluto collegare.
|
|
2993
3147
|
*/
|
|
2994
3148
|
onCreateConnection(event: {
|
|
2995
3149
|
sourceId: string;
|
|
@@ -3059,7 +3213,7 @@ declare class FlowCanvasComponent {
|
|
|
3059
3213
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlowCanvasComponent, "fb-flow-canvas", never, { "selectedName": { "alias": "selectedName"; "required": false; "isSignal": true; }; "outline": { "alias": "outline"; "required": false; "isSignal": true; }; "isEditable": { "alias": "isEditable"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "nodeOpened": "nodeOpened"; "nodeRemoveRequested": "nodeRemoveRequested"; "nodeDuplicateRequested": "nodeDuplicateRequested"; "elementDropped": "elementDropped"; }, never, never, true, never>;
|
|
3060
3214
|
}
|
|
3061
3215
|
|
|
3062
|
-
/** Il gesto scelto sulla palette: un tipo e, dove esiste, la sua variante (§5.
|
|
3216
|
+
/** Il gesto scelto sulla palette: un tipo e, dove esiste, la sua variante (§5.6). */
|
|
3063
3217
|
interface FlowPalettePick {
|
|
3064
3218
|
type: FlowElementType;
|
|
3065
3219
|
variant?: string;
|
|
@@ -3113,7 +3267,7 @@ declare class ElementPaletteComponent {
|
|
|
3113
3267
|
/**
|
|
3114
3268
|
* L'etichetta del ramo di fault, presa dalla mappa delle uscite invece di scrivere «ramo di
|
|
3115
3269
|
* errore» per tutti: su uno stage di orchestrazione quel ramo **non** e' un guasto, e' lo step
|
|
3116
|
-
* rifiutato (§5.
|
|
3270
|
+
* rifiutato (§5.14). Un tipo nuovo eredita l'etichetta giusta senza toccare la palette.
|
|
3117
3271
|
*/
|
|
3118
3272
|
faultLabel(item: PaletteItem): string | null;
|
|
3119
3273
|
categoryClass(category: string): string;
|
|
@@ -3144,6 +3298,18 @@ declare class ReferencePickerComponent {
|
|
|
3144
3298
|
* `WasVisited` e `HasError` (§4.3).
|
|
3145
3299
|
*/
|
|
3146
3300
|
readonly elementsOnly: _angular_core.InputSignal<boolean>;
|
|
3301
|
+
/**
|
|
3302
|
+
* Destinazioni in piu' rispetto a cio' che la primitiva restituisce, e oggi ce n'e' **un solo**
|
|
3303
|
+
* chiamante: l'`assignToReference` di una **screen action**, che accetta i campi della schermata
|
|
3304
|
+
* che si sta modificando (§5.2). Altrove quei campi sono di sola lettura, e
|
|
3305
|
+
* `POST /flows/references/writable` continua a escluderli — giustamente: un Assignment che ci
|
|
3306
|
+
* scrive resta `TARGET_NOT_WRITABLE`. Non e' quindi una scorciatoia per aggiungere riferimenti che
|
|
3307
|
+
* il backend non conosce: e' l'unico punto in cui la regola del contratto e' diversa.
|
|
3308
|
+
*
|
|
3309
|
+
* Entrano **sia** fra le proposte **sia** fra le radici: senza le radici un nome scritto a mano
|
|
3310
|
+
* verrebbe accusato di non esistere.
|
|
3311
|
+
*/
|
|
3312
|
+
readonly extraReferences: _angular_core.InputSignal<FlowReference[]>;
|
|
3147
3313
|
readonly valueChange: _angular_core.OutputEmitterRef<string | undefined>;
|
|
3148
3314
|
/**
|
|
3149
3315
|
* L'elenco come arriva dalla primitiva, **senza** il filtro di tipo.
|
|
@@ -3185,7 +3351,20 @@ declare class ReferencePickerComponent {
|
|
|
3185
3351
|
* `String` sta solo nell'elenco non filtrato.
|
|
3186
3352
|
*/
|
|
3187
3353
|
private readonly declaredPrefix;
|
|
3354
|
+
/**
|
|
3355
|
+
* La radice **verificabile**: e' quella su cui si giudica il valore scritto (`valueState`), e
|
|
3356
|
+
* tiene fuori gli output automatici perche' la validazione non guarda i loro percorsi (§4.5, §7).
|
|
3357
|
+
*/
|
|
3188
3358
|
private readonly navigableRoot;
|
|
3359
|
+
/**
|
|
3360
|
+
* La radice da cui si **propone**, che comprende anche gli output automatici. Sono due computed e
|
|
3361
|
+
* non uno perche' le due domande sono diverse: proporre i campi di `Leggi_Ordine` aiuta a scrivere
|
|
3362
|
+
* `Leggi_Ordine.Numero` — un riferimento valido — mentre giudicarne i segmenti significherebbe
|
|
3363
|
+
* accusare cio' che il backend non verifica. Con una radice sola una delle due cose sarebbe
|
|
3364
|
+
* sbagliata: o la riga sparisce dai campi tipizzati, o un campo scritto a mano diventa
|
|
3365
|
+
* `FIELD_UNKNOWN` senza che nessuna primitiva lo dica.
|
|
3366
|
+
*/
|
|
3367
|
+
private readonly proposalRoot;
|
|
3189
3368
|
/** Il percorso dopo la radice: `Cliente.Email` di `Richiesta.Cliente.Email`. */
|
|
3190
3369
|
private readonly navigatedPath;
|
|
3191
3370
|
private readonly navigation;
|
|
@@ -3195,16 +3374,22 @@ declare class ReferencePickerComponent {
|
|
|
3195
3374
|
/**
|
|
3196
3375
|
* I segmenti come riferimenti navigati: `Richiesta.Cliente.Email`, col tipo del segmento. Un
|
|
3197
3376
|
* segmento di sola lettura non si propone in un campo di destinazione, a meno che da lì il
|
|
3198
|
-
* percorso continui: `Richiesta.Cliente` non si assegna, ma `Richiesta.Cliente.Email` sì (§5.
|
|
3377
|
+
* percorso continui: `Richiesta.Cliente` non si assegna, ma `Richiesta.Cliente.Email` sì (§5.8).
|
|
3199
3378
|
*/
|
|
3200
3379
|
/**
|
|
3201
|
-
* §5.
|
|
3380
|
+
* §5.3 — dentro una globale dell'host **niente** e' scrivibile, per quanto il membro si dichiari
|
|
3202
3381
|
* tale: le globali le risolve un componente che non ha modo di scriverle, e proporle come
|
|
3203
3382
|
* destinazione farebbe attivare un flow che poi fallisce davanti all'utente. L'eccezione sono i
|
|
3204
3383
|
* campi del record che innesca, che si assegnano (§4.1).
|
|
3205
3384
|
*/
|
|
3206
3385
|
private readonly isReadOnlyPath;
|
|
3207
3386
|
private readonly pathReferences;
|
|
3387
|
+
/**
|
|
3388
|
+
* Cosa dire di un segmento proposto. Sotto un output automatico «sola lettura» sarebbe vero ma
|
|
3389
|
+
* fuorviante — in un campo che vuole un valore nessuno stava cercando una destinazione: cio' che
|
|
3390
|
+
* cambia il comportamento e' che il percorso non lo verifica nessuno (§4.5).
|
|
3391
|
+
*/
|
|
3392
|
+
private segmentDescription;
|
|
3208
3393
|
/**
|
|
3209
3394
|
* Lo stesso filtro delle radici (§6.4), applicato ai segmenti di un percorso: in un parametro
|
|
3210
3395
|
* `String` non si propone un membro `Date`. Un segmento da cui si scende resta comunque proposto
|
|
@@ -3268,14 +3453,24 @@ declare class ReferencePickerComponent {
|
|
|
3268
3453
|
* essere il riferimento che si vuole **oppure** la tappa da cui continuare.
|
|
3269
3454
|
*/
|
|
3270
3455
|
descend(reference: FlowReference): void;
|
|
3271
|
-
/**
|
|
3456
|
+
/**
|
|
3457
|
+
* `true` se da questo riferimento il percorso continua, cioe' se si conosce la forma di cio' che
|
|
3458
|
+
* designa. Comprende gli **output automatici** di un elemento: `Leggi_Ordine` dichiara la propria
|
|
3459
|
+
* entita', quindi i suoi campi si possono proporre — che il backend non verifichi i segmenti dopo
|
|
3460
|
+
* il punto (§4.5) cambia cosa si **dice** del valore scritto, non cosa si puo' proporre. Prima
|
|
3461
|
+
* l'esclusione era qui, e l'effetto era che in un campo tipizzato la riga spariva del tutto: il
|
|
3462
|
+
* filtro di tipo scarta il record, e senza `›` non restava nessuna strada verso `Leggi_Ordine.Numero`.
|
|
3463
|
+
*
|
|
3464
|
+
* Una collection resta esclusa: il riferimento designa l'insieme, e un campo di un insieme non
|
|
3465
|
+
* esiste — per scorrerlo c'e' il Loop.
|
|
3466
|
+
*/
|
|
3272
3467
|
canDescend(reference: FlowReference): boolean;
|
|
3273
3468
|
/** Scrittura libera: indispensabile per gli scope dell'host e per i percorsi non enumerabili. */
|
|
3274
3469
|
onManualInput(value: string): void;
|
|
3275
3470
|
clear(): void;
|
|
3276
3471
|
describe(reference: FlowReference): string;
|
|
3277
3472
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ReferencePickerComponent, never>;
|
|
3278
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ReferencePickerComponent, "fb-reference-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dataType": { "alias": "dataType"; "required": false; "isSignal": true; }; "isCollection": { "alias": "isCollection"; "required": false; "isSignal": true; }; "objectType": { "alias": "objectType"; "required": false; "isSignal": true; }; "writableOnly": { "alias": "writableOnly"; "required": false; "isSignal": true; }; "elementsOnly": { "alias": "elementsOnly"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
3473
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ReferencePickerComponent, "fb-reference-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dataType": { "alias": "dataType"; "required": false; "isSignal": true; }; "isCollection": { "alias": "isCollection"; "required": false; "isSignal": true; }; "objectType": { "alias": "objectType"; "required": false; "isSignal": true; }; "writableOnly": { "alias": "writableOnly"; "required": false; "isSignal": true; }; "elementsOnly": { "alias": "elementsOnly"; "required": false; "isSignal": true; }; "extraReferences": { "alias": "extraReferences"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
3279
3474
|
}
|
|
3280
3475
|
|
|
3281
3476
|
declare class ObjectPickerComponent {
|
|
@@ -3400,6 +3595,15 @@ declare class NamePickerComponent {
|
|
|
3400
3595
|
* senza versione attiva e' un avviso. Mostrarli con lo stesso colore direbbe il falso.
|
|
3401
3596
|
*/
|
|
3402
3597
|
readonly unknownSeverity: _angular_core.InputSignal<"error" | "warn">;
|
|
3598
|
+
/**
|
|
3599
|
+
* Nomi che **esistono** ma non sono utilizzabili qui. Il caso vero e' il catalogo dei form,
|
|
3600
|
+
* dove una schermata intera e un componente vivono nello stesso elenco e si distinguono per
|
|
3601
|
+
* `formKind`: usare l'uno al posto dell'altro e' `FORM_KIND_MISMATCH`, non `FORM_UNKNOWN`
|
|
3602
|
+
* (§5.1, §5.2). Senza questo secondo elenco il picker direbbe «non esiste» di un nome che c'e',
|
|
3603
|
+
* e manderebbe a cercare un artefatto già scritto.
|
|
3604
|
+
*/
|
|
3605
|
+
readonly unusableOptions: _angular_core.InputSignal<NamePickerOption[]>;
|
|
3606
|
+
readonly unusableMessage: _angular_core.InputSignal<string>;
|
|
3403
3607
|
/** Cosa dire quando l'elenco e' vuoto: e' il caso "non lo so", non un errore. */
|
|
3404
3608
|
readonly emptyMessage: _angular_core.InputSignal<string>;
|
|
3405
3609
|
/** Testo monospazio: i nomi tecnici si leggono meglio, ed e' come li mostra il resto del form. */
|
|
@@ -3411,6 +3615,8 @@ declare class NamePickerComponent {
|
|
|
3411
3615
|
readonly text: _angular_core.Signal<string>;
|
|
3412
3616
|
readonly visibleOptions: _angular_core.Signal<NamePickerOption[]>;
|
|
3413
3617
|
readonly hasOptions: _angular_core.Signal<boolean>;
|
|
3618
|
+
/** Il nome c'e' nel catalogo, ma in un ruolo che qui non va: e' un errore a se' (§7). */
|
|
3619
|
+
readonly isUnusable: _angular_core.Signal<boolean>;
|
|
3414
3620
|
readonly isUnknown: _angular_core.Signal<boolean>;
|
|
3415
3621
|
readonly labelOfValue: _angular_core.Signal<string | null>;
|
|
3416
3622
|
open(): void;
|
|
@@ -3421,7 +3627,7 @@ declare class NamePickerComponent {
|
|
|
3421
3627
|
clear(): void;
|
|
3422
3628
|
describe(option: NamePickerOption): string;
|
|
3423
3629
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NamePickerComponent, never>;
|
|
3424
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NamePickerComponent, "fb-name-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "unknownMessage": { "alias": "unknownMessage"; "required": false; "isSignal": true; }; "unknownSeverity": { "alias": "unknownSeverity"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "isMono": { "alias": "isMono"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
3630
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NamePickerComponent, "fb-name-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "unknownMessage": { "alias": "unknownMessage"; "required": false; "isSignal": true; }; "unknownSeverity": { "alias": "unknownSeverity"; "required": false; "isSignal": true; }; "unusableOptions": { "alias": "unusableOptions"; "required": false; "isSignal": true; }; "unusableMessage": { "alias": "unusableMessage"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "isMono": { "alias": "isMono"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
3425
3631
|
}
|
|
3426
3632
|
|
|
3427
3633
|
declare class StructurePickerComponent {
|
|
@@ -3501,7 +3707,7 @@ declare class StructureMemberPickerComponent {
|
|
|
3501
3707
|
/**
|
|
3502
3708
|
* Un segmento che esiste ma non e' scrivibile, scelto dove serve una destinazione: capita su un
|
|
3503
3709
|
* documento scritto altrove, e va detto qui invece di lasciarlo scoprire dall'attivazione. Su un
|
|
3504
|
-
* campo di record "scrivibile" vuol dire `createable` **oppure** `updateable` (§5.
|
|
3710
|
+
* campo di record "scrivibile" vuol dire `createable` **oppure** `updateable` (§5.8).
|
|
3505
3711
|
*/
|
|
3506
3712
|
readonly isNotWritable: _angular_core.Signal<boolean>;
|
|
3507
3713
|
readonly notWritableMessage: _angular_core.Signal<"Questo campo non si scrive ne’ creando ne’ aggiornando un record: assegnarlo e’ TARGET_NOT_WRITABLE." | "Questo membro e’ calcolato: si legge, ma assegnarlo e’ TARGET_NOT_WRITABLE.">;
|
|
@@ -3742,7 +3948,7 @@ declare class ConditionEditorComponent {
|
|
|
3742
3948
|
readonly allowFormula: _angular_core.InputSignal<boolean>;
|
|
3743
3949
|
/**
|
|
3744
3950
|
* `false` dove il modello porta **solo** la lista di condizioni, senza un campo per la
|
|
3745
|
-
* logica: gli `entryConditions` / `exitConditions` di uno step di orchestrazione (§5.
|
|
3951
|
+
* logica: gli `entryConditions` / `exitConditions` di uno step di orchestrazione (§5.14).
|
|
3746
3952
|
* Mostrare i pulsanti della logica lì scriverebbe un campo che il contratto non prevede.
|
|
3747
3953
|
*/
|
|
3748
3954
|
readonly allowLogic: _angular_core.InputSignal<boolean>;
|
|
@@ -3783,7 +3989,7 @@ declare class ConditionEditorComponent {
|
|
|
3783
3989
|
*/
|
|
3784
3990
|
hasTypeMismatch(condition: FlowCondition): boolean;
|
|
3785
3991
|
typeMismatchMessage(condition: FlowCondition): string;
|
|
3786
|
-
readonly logicMode: _angular_core.Signal<"and" | "or" | "
|
|
3992
|
+
readonly logicMode: _angular_core.Signal<"and" | "or" | "custom" | "formula">;
|
|
3787
3993
|
readonly customLogic: _angular_core.Signal<string>;
|
|
3788
3994
|
/** Feedback immediato sull'espressione: la verita' resta della validazione backend. */
|
|
3789
3995
|
readonly customLogicError: _angular_core.Signal<string | null>;
|
|
@@ -3848,12 +4054,12 @@ declare class RecordFilterEditorComponent {
|
|
|
3848
4054
|
/**
|
|
3849
4055
|
* Avviso da mostrare quando la lista e' vuota. Un Delete senza filtri e' un **errore**,
|
|
3850
4056
|
* un Update senza filtri e' solo un avviso — ma aggiorna tutti i record dell'entita'
|
|
3851
|
-
* (§5.
|
|
4057
|
+
* (§5.8, §13.10).
|
|
3852
4058
|
*/
|
|
3853
4059
|
readonly emptyWarning: _angular_core.InputSignal<string | null>;
|
|
3854
4060
|
readonly emptyWarningSeverity: _angular_core.InputSignal<"error" | "warn">;
|
|
3855
4061
|
readonly changed: _angular_core.OutputEmitterRef<(holder: FilterHolder) => void>;
|
|
3856
|
-
/** Tutti i campi, filtrabili o no: serve solo a riconoscere le chiavi composte (§5.
|
|
4062
|
+
/** Tutti i campi, filtrabili o no: serve solo a riconoscere le chiavi composte (§5.8). */
|
|
3857
4063
|
private readonly allFields;
|
|
3858
4064
|
readonly filters: _angular_core.Signal<FlowRecordFilter[]>;
|
|
3859
4065
|
readonly operators: _angular_core.Signal<_esfaenza_flow_builder.FlowDictionaryEntry[]>;
|
|
@@ -3869,12 +4075,12 @@ declare class RecordFilterEditorComponent {
|
|
|
3869
4075
|
private readonly types;
|
|
3870
4076
|
constructor();
|
|
3871
4077
|
/**
|
|
3872
|
-
* §5.
|
|
4078
|
+
* §5.8 — l'identificativo esiste ma **non e' filtrabile**: e' il caso di una chiave composta,
|
|
3873
4079
|
* dove `Id` porta la forma canonica della chiave e le colonne filtrabili sono altre. Dirlo
|
|
3874
4080
|
* evita la ricerca di un campo che nell'elenco non c'e' e non ci sara'.
|
|
3875
4081
|
*/
|
|
3876
4082
|
readonly identifierNotFilterable: _angular_core.Signal<boolean>;
|
|
3877
|
-
readonly logicMode: _angular_core.Signal<"and" | "or" | "
|
|
4083
|
+
readonly logicMode: _angular_core.Signal<"and" | "or" | "custom" | "formula">;
|
|
3878
4084
|
readonly customLogic: _angular_core.Signal<string>;
|
|
3879
4085
|
readonly showEmptyWarning: _angular_core.Signal<boolean>;
|
|
3880
4086
|
addFilter(): void;
|
|
@@ -3917,6 +4123,12 @@ declare class ParameterEditorComponent {
|
|
|
3917
4123
|
readonly showOutputs: _angular_core.InputSignal<boolean>;
|
|
3918
4124
|
/** `true` → gli output vanno all'output automatico, e i parametri sono ignorati. */
|
|
3919
4125
|
readonly outputsDisabledReason: _angular_core.InputSignal<string | null>;
|
|
4126
|
+
/**
|
|
4127
|
+
* Destinazioni in piu' per `assignToReference`, oltre a quelle scrivibili. Serve alle **screen
|
|
4128
|
+
* action**, dove un output si assegna a un campo della schermata (§5.2): e' l'unico posto in cui
|
|
4129
|
+
* quei campi sono una destinazione, e per questo non e' un default ma un parametro del chiamante.
|
|
4130
|
+
*/
|
|
4131
|
+
readonly extraTargets: _angular_core.InputSignal<FlowReference[]>;
|
|
3920
4132
|
readonly changed: _angular_core.OutputEmitterRef<(holder: ParameterHolder) => void>;
|
|
3921
4133
|
readonly inputs: _angular_core.Signal<FlowInputParameter[]>;
|
|
3922
4134
|
readonly outputs: _angular_core.Signal<FlowOutputParameter[]>;
|
|
@@ -3945,7 +4157,7 @@ declare class ParameterEditorComponent {
|
|
|
3945
4157
|
setOutputName(index: number, name: string): void;
|
|
3946
4158
|
setOutputTarget(index: number, reference: string | undefined): void;
|
|
3947
4159
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ParameterEditorComponent, never>;
|
|
3948
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ParameterEditorComponent, "fb-parameter-editor", never, { "holder": { "alias": "holder"; "required": true; "isSignal": true; }; "catalogParameters": { "alias": "catalogParameters"; "required": false; "isSignal": true; }; "inputTitle": { "alias": "inputTitle"; "required": false; "isSignal": true; }; "outputTitle": { "alias": "outputTitle"; "required": false; "isSignal": true; }; "showInputs": { "alias": "showInputs"; "required": false; "isSignal": true; }; "showOutputs": { "alias": "showOutputs"; "required": false; "isSignal": true; }; "outputsDisabledReason": { "alias": "outputsDisabledReason"; "required": false; "isSignal": true; }; }, { "changed": "changed"; }, never, never, true, never>;
|
|
4160
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ParameterEditorComponent, "fb-parameter-editor", never, { "holder": { "alias": "holder"; "required": true; "isSignal": true; }; "catalogParameters": { "alias": "catalogParameters"; "required": false; "isSignal": true; }; "inputTitle": { "alias": "inputTitle"; "required": false; "isSignal": true; }; "outputTitle": { "alias": "outputTitle"; "required": false; "isSignal": true; }; "showInputs": { "alias": "showInputs"; "required": false; "isSignal": true; }; "showOutputs": { "alias": "showOutputs"; "required": false; "isSignal": true; }; "outputsDisabledReason": { "alias": "outputsDisabledReason"; "required": false; "isSignal": true; }; "extraTargets": { "alias": "extraTargets"; "required": false; "isSignal": true; }; }, { "changed": "changed"; }, never, never, true, never>;
|
|
3949
4161
|
}
|
|
3950
4162
|
|
|
3951
4163
|
interface FieldAssignmentHolder {
|
|
@@ -3955,7 +4167,7 @@ declare class FieldAssignmentEditorComponent {
|
|
|
3955
4167
|
private readonly catalog;
|
|
3956
4168
|
readonly holder: _angular_core.InputSignal<FieldAssignmentHolder>;
|
|
3957
4169
|
readonly object: _angular_core.InputSignal<string | undefined>;
|
|
3958
|
-
/** `createable` su un Create, `updateable` su un Update: lo decide il chiamante (§5.
|
|
4170
|
+
/** `createable` su un Create, `updateable` su un Update: lo decide il chiamante (§5.8). */
|
|
3959
4171
|
readonly usage: _angular_core.InputSignal<FlowFieldUsage>;
|
|
3960
4172
|
readonly title: _angular_core.InputSignal<string>;
|
|
3961
4173
|
readonly disabledReason: _angular_core.InputSignal<string | null>;
|
|
@@ -4055,6 +4267,13 @@ declare class ElementInspectorComponent {
|
|
|
4055
4267
|
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
4056
4268
|
readonly removeRequested: _angular_core.OutputEmitterRef<string>;
|
|
4057
4269
|
readonly duplicateRequested: _angular_core.OutputEmitterRef<string>;
|
|
4270
|
+
/**
|
|
4271
|
+
* Il nuovo nome, dopo la rinomina. La selezione dell'editor e' **il nome**: se non la
|
|
4272
|
+
* riportiamo sul nome nuovo, `selectedName` punta a un elemento che non esiste piu' e il
|
|
4273
|
+
* form del tipo — che sta dietro `@if (node())` — spariva, lasciando la dialog mezza vuota
|
|
4274
|
+
* finche' non la si chiudeva e riapriva.
|
|
4275
|
+
*/
|
|
4276
|
+
readonly renamed: _angular_core.OutputEmitterRef<string>;
|
|
4058
4277
|
readonly isStart: _angular_core.Signal<boolean>;
|
|
4059
4278
|
readonly reference: _angular_core.Signal<_esfaenza_flow_builder.FlowNodeRef | undefined>;
|
|
4060
4279
|
readonly node: _angular_core.Signal<FlowAnyNode | undefined>;
|
|
@@ -4090,7 +4309,7 @@ declare class ElementInspectorComponent {
|
|
|
4090
4309
|
y: number;
|
|
4091
4310
|
}>;
|
|
4092
4311
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElementInspectorComponent, never>;
|
|
4093
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementInspectorComponent, "fb-element-inspector", never, { "selectedName": { "alias": "selectedName"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "removeRequested": "removeRequested"; "duplicateRequested": "duplicateRequested"; }, never, never, true, never>;
|
|
4312
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementInspectorComponent, "fb-element-inspector", never, { "selectedName": { "alias": "selectedName"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "removeRequested": "removeRequested"; "duplicateRequested": "duplicateRequested"; "renamed": "renamed"; }, never, never, true, never>;
|
|
4094
4313
|
}
|
|
4095
4314
|
|
|
4096
4315
|
declare class ElementDialogComponent {
|
|
@@ -4101,6 +4320,8 @@ declare class ElementDialogComponent {
|
|
|
4101
4320
|
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
4102
4321
|
readonly removeRequested: _angular_core.OutputEmitterRef<string>;
|
|
4103
4322
|
readonly duplicateRequested: _angular_core.OutputEmitterRef<string>;
|
|
4323
|
+
/** Il nuovo nome dopo una rinomina: la selezione dell'editor deve seguirlo. */
|
|
4324
|
+
readonly renamed: _angular_core.OutputEmitterRef<string>;
|
|
4104
4325
|
private readonly panel;
|
|
4105
4326
|
readonly isStart: _angular_core.Signal<boolean>;
|
|
4106
4327
|
private readonly reference;
|
|
@@ -4110,8 +4331,9 @@ declare class ElementDialogComponent {
|
|
|
4110
4331
|
close(): void;
|
|
4111
4332
|
onRemoveRequested(name: string): void;
|
|
4112
4333
|
onDuplicateRequested(name: string): void;
|
|
4334
|
+
onRenamed(name: string): void;
|
|
4113
4335
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ElementDialogComponent, never>;
|
|
4114
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementDialogComponent, "fb-element-dialog", never, { "selectedName": { "alias": "selectedName"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "removeRequested": "removeRequested"; "duplicateRequested": "duplicateRequested"; }, never, never, true, never>;
|
|
4336
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ElementDialogComponent, "fb-element-dialog", never, { "selectedName": { "alias": "selectedName"; "required": false; "isSignal": true; }; }, { "closed": "closed"; "removeRequested": "removeRequested"; "duplicateRequested": "duplicateRequested"; "renamed": "renamed"; }, never, never, true, never>;
|
|
4115
4337
|
}
|
|
4116
4338
|
|
|
4117
4339
|
declare class StartInspectorComponent {
|
|
@@ -4174,7 +4396,7 @@ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
|
|
|
4174
4396
|
readonly conditionOutputName = "isOrchestrationConditionMet";
|
|
4175
4397
|
/**
|
|
4176
4398
|
* I flow proponibili come step in background o come evaluation flow. Una lista vuota
|
|
4177
|
-
* significa "non lo so": in quel caso il campo resta scrivibile a mano (§5.
|
|
4399
|
+
* significa "non lo so": in quel caso il campo resta scrivibile a mano (§5.10, §7).
|
|
4178
4400
|
*/
|
|
4179
4401
|
private readonly flowCandidates;
|
|
4180
4402
|
constructor();
|
|
@@ -4200,14 +4422,14 @@ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
|
|
|
4200
4422
|
stepNameError(step: FlowStageStep): string | null;
|
|
4201
4423
|
/**
|
|
4202
4424
|
* Il nome dello step il cui output una condizione sta leggendo: e' irrisolvibile finche'
|
|
4203
|
-
* quello step non ha girato (§5.
|
|
4425
|
+
* quello step non ha girato (§5.14, punto 4). `undefined` quando va tutto bene.
|
|
4204
4426
|
*/
|
|
4205
4427
|
stepOutputInConditions(step: FlowStageStep): string | undefined;
|
|
4206
4428
|
/** Lo step tiene un output senza destinazione: e' lecito, ma vale la pena dirlo. */
|
|
4207
4429
|
hasSimulatedOutputs(step: FlowStageStep): boolean;
|
|
4208
4430
|
addStep(): void;
|
|
4209
4431
|
removeStep(index: number): void;
|
|
4210
|
-
/** Sposta lo step nell'ordine d'**esame**: non e' un ordine di esecuzione (§5.
|
|
4432
|
+
/** Sposta lo step nell'ordine d'**esame**: non e' un ordine di esecuzione (§5.14). */
|
|
4211
4433
|
moveStep(index: number, direction: -1 | 1): void;
|
|
4212
4434
|
private patchStep;
|
|
4213
4435
|
setStepLabel(index: number, label: string): void;
|
|
@@ -4240,7 +4462,7 @@ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
|
|
|
4240
4462
|
setEntryActionName(index: number, actionName: string): void;
|
|
4241
4463
|
setExitActionName(index: number, actionName: string): void;
|
|
4242
4464
|
onParametersChanged(index: number, mutate: (holder: ParameterHolder) => void): void;
|
|
4243
|
-
/** Il ramo del rifiuto e' disegnato: senza, un rifiuto fa fallire l'interview (§5.
|
|
4465
|
+
/** Il ramo del rifiuto e' disegnato: senza, un rifiuto fa fallire l'interview (§5.14). */
|
|
4244
4466
|
readonly hasRejectionBranch: _angular_core.Signal<boolean>;
|
|
4245
4467
|
/** C'e' almeno uno step il cui rifiuto e' un esito previsto. */
|
|
4246
4468
|
readonly hasApprovalStep: _angular_core.Signal<boolean>;
|
|
@@ -4252,6 +4474,20 @@ declare class OrchestratedStageInspectorComponent extends NodeInspectorBase {
|
|
|
4252
4474
|
interface DropTarget {
|
|
4253
4475
|
parent: FlowScreenFieldPath;
|
|
4254
4476
|
index: number;
|
|
4477
|
+
/**
|
|
4478
|
+
* Dove disegnare la barra di inserimento, in coordinate del frame dell'anteprima. La calcola
|
|
4479
|
+
* {@link DynamicScreenInspectorComponent.hitTest} perche' e' lì che si conoscono i rettangoli
|
|
4480
|
+
* dei fratelli, e la barra e' un **velo**: non sta nel flusso (vedi `dropMarker`). Assente per
|
|
4481
|
+
* il bersaglio dei comandi a clic, che non nasce da un puntatore e non disegna niente.
|
|
4482
|
+
*/
|
|
4483
|
+
marker?: DropMarker;
|
|
4484
|
+
}
|
|
4485
|
+
/** La barra di inserimento, in pixel relativi al frame dell'anteprima. */
|
|
4486
|
+
interface DropMarker {
|
|
4487
|
+
left: number;
|
|
4488
|
+
top: number;
|
|
4489
|
+
width: number;
|
|
4490
|
+
height: number;
|
|
4255
4491
|
}
|
|
4256
4492
|
declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
|
|
4257
4493
|
private readonly catalog;
|
|
@@ -4281,12 +4517,27 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
|
|
|
4281
4517
|
setPaletteTab(tab: 'components' | 'fields'): void;
|
|
4282
4518
|
setFieldsObject(object: string | undefined): void;
|
|
4283
4519
|
/** Componenti e form sono la stessa domanda al frontend, e lo stesso catalogo (§5.2). */
|
|
4520
|
+
/** I soli **componenti**: `GET /catalog/forms?kind=Component` (§5.2, §6.4). */
|
|
4284
4521
|
private readonly components;
|
|
4522
|
+
/**
|
|
4523
|
+
* Le schermate intere, che qui non vanno. Serve a dire la cosa giusta su un nome che esiste:
|
|
4524
|
+
* `FORM_KIND_MISMATCH` e non `SCREEN_COMPONENT_UNKNOWN` (§5.2).
|
|
4525
|
+
*/
|
|
4526
|
+
private readonly forms;
|
|
4285
4527
|
private readonly componentParameters;
|
|
4286
4528
|
/** I tipi di enumerazione: dizionario chiuso, quindi `<select>` e non combo (§4.6). */
|
|
4287
4529
|
private readonly enumTypes;
|
|
4288
4530
|
constructor();
|
|
4531
|
+
/** Scarta la risposta di un tipo che non e' piu' quello scelto: la corsa e' fra risposte, non fra tipi. */
|
|
4532
|
+
private applyActions;
|
|
4533
|
+
/** Stessa regola per i parametri, che dipendono da tipo **e** nome dell'action. */
|
|
4534
|
+
private applyActionParameters;
|
|
4289
4535
|
readonly componentOptions: _angular_core.Signal<NamePickerOption[]>;
|
|
4536
|
+
/**
|
|
4537
|
+
* Le schermate che **non** sono anche componenti: una voce senza `formKind` vale `Any` e
|
|
4538
|
+
* compare in entrambe le risposte, quindi qui non va accusata (§6.4).
|
|
4539
|
+
*/
|
|
4540
|
+
readonly unusableComponents: _angular_core.Signal<NamePickerOption[]>;
|
|
4290
4541
|
readonly enumOptions: _angular_core.Signal<FlowCatalogEntry[]>;
|
|
4291
4542
|
readonly componentParameterList: _angular_core.Signal<FlowCatalogParameter[]>;
|
|
4292
4543
|
/**
|
|
@@ -4326,8 +4577,22 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
|
|
|
4326
4577
|
/** Il punto di inserimento corrente, disegnato come una barra fra i campi. */
|
|
4327
4578
|
readonly dropTarget: _angular_core.WritableSignal<DropTarget | null>;
|
|
4328
4579
|
isDragging(path: FlowScreenFieldPath): boolean;
|
|
4329
|
-
/**
|
|
4330
|
-
|
|
4580
|
+
/**
|
|
4581
|
+
* La barra di inserimento, disegnata **sopra** l'anteprima e non dentro il contenitore.
|
|
4582
|
+
*
|
|
4583
|
+
* Un tempo era un figlio del contenitore di rilascio, e in una griglia a 12 tracce questo la
|
|
4584
|
+
* rendeva ingovernabile: una barra orizzontale prende `1 / -1`, cioe' una **riga intera piu' il
|
|
4585
|
+
* gap**, e spinge in basso tutto cio' che la segue — compresa la sezione che si stava puntando,
|
|
4586
|
+
* che si sposta di sotto il puntatore. Il gesto successivo rimisurava allora una geometria che
|
|
4587
|
+
* la barra stessa aveva cambiato, il bersaglio cambiava, la barra spariva, la sezione risaliva:
|
|
4588
|
+
* un'oscillazione a ogni movimento, e nessun modo di rilasciare dentro la sezione. Fuori dal
|
|
4589
|
+
* flusso la barra non muove niente, e `hitTest` misura sempre la stessa anteprima.
|
|
4590
|
+
*
|
|
4591
|
+
* Il secondo difetto che questo risolve: fra due colonne che riempivano tutte e 12 le tracce la
|
|
4592
|
+
* barra verticale finiva mandata a capo su una riga di altezza zero, cioe' **invisibile** —
|
|
4593
|
+
* proprio dove serviva di piu'.
|
|
4594
|
+
*/
|
|
4595
|
+
readonly dropMarker: _angular_core.Signal<DropMarker | null>;
|
|
4331
4596
|
onFieldDragStarted(path: FlowScreenFieldPath): void;
|
|
4332
4597
|
onFieldDragMoved(event: CdkDragMove): void;
|
|
4333
4598
|
onFieldDragEnded(event: CdkDragEnd, path: FlowScreenFieldPath): void;
|
|
@@ -4352,8 +4617,32 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
|
|
|
4352
4617
|
*
|
|
4353
4618
|
* L'indice viene dal confronto con la mezzeria dei fratelli, sull'asse del contenitore: le
|
|
4354
4619
|
* colonne di una sezione stanno in riga, tutto il resto in colonna.
|
|
4620
|
+
*
|
|
4621
|
+
* La misura e' **sempre** su un'anteprima senza barra di inserimento: la barra e' un velo
|
|
4622
|
+
* assoluto (vedi `dropMarker`), quindi non c'e' il ciclo per cui disegnarla spostava cio' che
|
|
4623
|
+
* si stava puntando.
|
|
4355
4624
|
*/
|
|
4356
4625
|
private hitTest;
|
|
4626
|
+
/** Barra verticale a sinistra di un campo, alta quanto lui. */
|
|
4627
|
+
private barBefore;
|
|
4628
|
+
/** Barra verticale a destra di un campo. */
|
|
4629
|
+
private barAfter;
|
|
4630
|
+
/** Barra orizzontale sopra un campo, larga quanto le tracce del contenitore. */
|
|
4631
|
+
private barAbove;
|
|
4632
|
+
/** Barra orizzontale sotto un campo. */
|
|
4633
|
+
private barBelow;
|
|
4634
|
+
/** Barra orizzontale in mezzo a un contenitore vuoto, dov'e' il segnaposto. */
|
|
4635
|
+
private barInside;
|
|
4636
|
+
/** La banda occupata dalle tracce della griglia: il rettangolo del contenitore meno il padding. */
|
|
4637
|
+
private contentBand;
|
|
4638
|
+
/** `true` se il campo occupa tutte le tracce, cioe' se la sua riga e' sua e basta. */
|
|
4639
|
+
private fillsRow;
|
|
4640
|
+
/**
|
|
4641
|
+
* Da coordinate del viewport a coordinate del frame dell'anteprima, che e' il contenitore
|
|
4642
|
+
* posizionato in cui vive il velo. Senza la conversione la barra sarebbe fuori posto appena la
|
|
4643
|
+
* dialog e' scorsa.
|
|
4644
|
+
*/
|
|
4645
|
+
private toFrame;
|
|
4357
4646
|
/** `"0.2"` → `[0, 2]`; la radice e' la stringa vuota. */
|
|
4358
4647
|
private static parsePath;
|
|
4359
4648
|
/** Il valore dell'attributo che marca un contenitore di rilascio. */
|
|
@@ -4460,6 +4749,88 @@ declare class DynamicScreenInspectorComponent extends NodeInspectorBase {
|
|
|
4460
4749
|
/** `ObjectProvided`: oggetto e campo si scrivono in un unico `<Oggetto>.<Campo>` (§5.2). */
|
|
4461
4750
|
setProvidedObject(value: string | undefined): void;
|
|
4462
4751
|
setProvidedField(value: string | undefined): void;
|
|
4752
|
+
readonly screenActions: _angular_core.Signal<FlowScreenAction[]>;
|
|
4753
|
+
readonly screenTriggers: _angular_core.Signal<FlowScreenTrigger[]>;
|
|
4754
|
+
/** Quale action e' aperta nel dettaglio; `null` = solo l'elenco. */
|
|
4755
|
+
private readonly actionSelection;
|
|
4756
|
+
readonly selectedActionIndex: _angular_core.Signal<number | null>;
|
|
4757
|
+
readonly selectedAction: _angular_core.Signal<FlowScreenAction | undefined>;
|
|
4758
|
+
private readonly actionTypes;
|
|
4759
|
+
private readonly actionsOfType;
|
|
4760
|
+
private readonly actionParameters;
|
|
4761
|
+
readonly actionTypeOptions: _angular_core.Signal<NamePickerOption[]>;
|
|
4762
|
+
readonly actionOptions: _angular_core.Signal<NamePickerOption[]>;
|
|
4763
|
+
readonly actionParameterCatalog: _angular_core.Signal<FlowCatalogParameter[]>;
|
|
4764
|
+
selectAction(index: number | null): void;
|
|
4765
|
+
/**
|
|
4766
|
+
* Le destinazioni **in piu'** per gli output di una screen action: i campi di **questa**
|
|
4767
|
+
* schermata. È l'unico posto in cui un campo di screen e' scrivibile (§5.2) —
|
|
4768
|
+
* `POST /flows/references/writable` continua a escluderlo, e giustamente: un Assignment che ci
|
|
4769
|
+
* scrive resta `TARGET_NOT_WRITABLE`. Quindi l'allargamento e' qui, non nel picker.
|
|
4770
|
+
*/
|
|
4771
|
+
readonly screenFieldTargets: _angular_core.Signal<FlowReference[]>;
|
|
4772
|
+
/** I campi che raccolgono un valore: gli unici che un'action possa riempire, e gli unici che innescano. */
|
|
4773
|
+
private valueFieldsOfScreen;
|
|
4774
|
+
/**
|
|
4775
|
+
* I campi proponibili come innesco. Sono **i campi di questa schermata**, non i riferimenti in
|
|
4776
|
+
* generale: un trigger che nomina altro e' `SCREEN_TRIGGER_FIELD_UNKNOWN` (§5.2).
|
|
4777
|
+
*/
|
|
4778
|
+
readonly triggerFieldOptions: _angular_core.Signal<NamePickerOption[]>;
|
|
4779
|
+
/** Le action **di questo screen**: un `screenActionName` fuori da qui e' `SCREEN_ACTION_UNKNOWN`. */
|
|
4780
|
+
readonly screenActionOptions: _angular_core.Signal<NamePickerOption[]>;
|
|
4781
|
+
/**
|
|
4782
|
+
* §5.2 — un'action senza `outputParameters` e senza `storeOutputAutomatically` viene invocata e
|
|
4783
|
+
* il suo risultato si perde: `SCREEN_ACTION_WITHOUT_OUTPUTS`, avviso.
|
|
4784
|
+
*/
|
|
4785
|
+
actionLosesResult(action: FlowScreenAction): boolean;
|
|
4786
|
+
/** §5.2 — nessuno la invoca: l'action e' scritta ma nessun trigger la cita. */
|
|
4787
|
+
actionHasNoTrigger(action: FlowScreenAction): boolean;
|
|
4788
|
+
/** §5.2 — senza campo e senza `initBehavior` il trigger non scattera' mai: `SCREEN_TRIGGER_WITHOUT_CAUSE`. */
|
|
4789
|
+
triggerHasNoCause(trigger: FlowScreenTrigger): boolean;
|
|
4790
|
+
/**
|
|
4791
|
+
* §5.2 — l'unico valore ammesso e' `runOnLoad`. Il `runOnRevisit` della specifica Salesforce e'
|
|
4792
|
+
* `SCREEN_TRIGGER_INIT_BEHAVIOR_UNKNOWN`, e vale la pena dirlo qui: chi arriva da quella
|
|
4793
|
+
* specifica lo scrive per abitudine.
|
|
4794
|
+
*/
|
|
4795
|
+
triggerInitIsUnknown(trigger: FlowScreenTrigger): boolean;
|
|
4796
|
+
/**
|
|
4797
|
+
* §3.3 — il nome dell'action, con lo **stesso** controllo del nome di uno step: la regexp e le
|
|
4798
|
+
* occorrenze in `usedNames`, che le action le comprende già. Una sola occorrenza e' questa action,
|
|
4799
|
+
* due sono un omonimo — e qui l'omonimia non e' formale, perche' con l'output automatico quel nome
|
|
4800
|
+
* e' la radice di `Cerca.nome`.
|
|
4801
|
+
*/
|
|
4802
|
+
actionNameError(action: FlowScreenAction): string | null;
|
|
4803
|
+
/** Il blocco condizioni di un trigger: mai `undefined`, altrimenti l'editor non si apre. */
|
|
4804
|
+
triggerConditions(trigger: FlowScreenTrigger): FlowConditionHolder;
|
|
4805
|
+
/**
|
|
4806
|
+
* Un'action nuova. Il nome sta nello spazio dei nomi **comune** (§3.3): con l'output automatico la
|
|
4807
|
+
* si legge come `<NomeAction>.<NomeOutput>`, e un omonimo di una variabile — o di una `Structure`
|
|
4808
|
+
* chiamata come lei — renderebbe ambiguo quel riferimento. `usedNames` le comprende già, quindi qui
|
|
4809
|
+
* non c'e' niente da aggiungere all'elenco.
|
|
4810
|
+
*/
|
|
4811
|
+
addScreenAction(): void;
|
|
4812
|
+
removeScreenAction(index: number): void;
|
|
4813
|
+
private patchAction;
|
|
4814
|
+
/**
|
|
4815
|
+
* Rinominare un'action riscrive i trigger che la citano: sono l'unico posto che la nomina, e
|
|
4816
|
+
* lasciarli indietro trasformerebbe una rinomina in `SCREEN_ACTION_UNKNOWN`.
|
|
4817
|
+
*/
|
|
4818
|
+
setActionName(index: number, value: string): void;
|
|
4819
|
+
/** Cambiare tipo cambia l'insieme delle action e dei loro parametri: com'e' su un elemento Action. */
|
|
4820
|
+
setActionType(index: number, value: string): void;
|
|
4821
|
+
setActionTarget(index: number, value: string): void;
|
|
4822
|
+
setActionStoreOutput(index: number, value: boolean): void;
|
|
4823
|
+
onActionParametersChanged(index: number, mutate: (holder: ParameterHolder) => void): void;
|
|
4824
|
+
/** Un trigger nuovo. Se un'action e' aperta, nasce già collegata a quella. */
|
|
4825
|
+
addScreenTrigger(): void;
|
|
4826
|
+
removeScreenTrigger(index: number): void;
|
|
4827
|
+
private patchTrigger;
|
|
4828
|
+
setTriggerProperty(index: number, property: 'screenActionName' | 'triggerFieldName' | 'initBehavior', value: string): void;
|
|
4829
|
+
/**
|
|
4830
|
+
* Le condizioni di un trigger sono una regola come quella di una Decision (§5.2). Assenti,
|
|
4831
|
+
* l'action gira a ogni cambio del campo: un blocco vuoto si omette invece di scriverlo (§2).
|
|
4832
|
+
*/
|
|
4833
|
+
onTriggerConditionsChanged(index: number, mutate: (holder: FlowConditionHolder) => void): void;
|
|
4463
4834
|
setScreenText(property: string, value: string): void;
|
|
4464
4835
|
/** I flag con default `true` si scrivono solo quando si nega, per non sporcare il diff. */
|
|
4465
4836
|
setScreenFlag(flag: 'allowBack' | 'allowFinish' | 'allowPause' | 'showHeader' | 'showFooter', value: boolean): void;
|
|
@@ -4634,7 +5005,7 @@ declare class DebugPanelComponent {
|
|
|
4634
5005
|
readonly status: _angular_core.Signal<string | null>;
|
|
4635
5006
|
readonly pendingScreen: _angular_core.Signal<_esfaenza_flow_builder.FlowPendingScreen | null>;
|
|
4636
5007
|
readonly isWaitingForScreen: _angular_core.Signal<boolean>;
|
|
4637
|
-
/** §5.
|
|
5008
|
+
/** §5.14 — l'attesa e' su uno step assegnato a una persona, non su un evento. */
|
|
4638
5009
|
readonly isWaitingForStageStep: _angular_core.Signal<boolean>;
|
|
4639
5010
|
readonly stageSteps: _angular_core.Signal<FlowStageStepState[]>;
|
|
4640
5011
|
/** Lo step su cui c'e' un work item aperto: e' quello che si puo' concludere. */
|
|
@@ -4706,6 +5077,8 @@ interface Notice {
|
|
|
4706
5077
|
declare class FlowBuilderComponent {
|
|
4707
5078
|
private readonly api;
|
|
4708
5079
|
private readonly destroyRef;
|
|
5080
|
+
/** Serve a `afterNextRender` chiamato fuori dal costruttore. */
|
|
5081
|
+
private readonly injector;
|
|
4709
5082
|
protected readonly store: FlowDocumentStore;
|
|
4710
5083
|
protected readonly dictionaries: FlowDictionaryStore;
|
|
4711
5084
|
protected readonly session: FlowEditorSession;
|
|
@@ -4824,12 +5197,46 @@ declare class FlowBuilderComponent {
|
|
|
4824
5197
|
onElementPicked(pick: FlowPalettePick): void;
|
|
4825
5198
|
private createElement;
|
|
4826
5199
|
onRemoveNode(name: string): void;
|
|
5200
|
+
/**
|
|
5201
|
+
* La selezione dell'editor e' il **nome** dell'elemento: dopo una rinomina il nome vecchio
|
|
5202
|
+
* non esiste piu' e va sostituito, altrimenti inspector e dialog restano puntati sul vuoto.
|
|
5203
|
+
*/
|
|
5204
|
+
onNodeRenamed(newName: string): void;
|
|
4827
5205
|
onDuplicateNode(name: string): void;
|
|
4828
5206
|
/** Riordina il grafo e **scrive** le coordinate nel documento (§3.5). */
|
|
4829
5207
|
autoLayout(): void;
|
|
4830
5208
|
undo(): void;
|
|
4831
5209
|
redo(): void;
|
|
4832
5210
|
save(): Promise<void>;
|
|
5211
|
+
/** Il modulo del duplicato e' aperto. */
|
|
5212
|
+
readonly isCopyOpen: _angular_core.WritableSignal<boolean>;
|
|
5213
|
+
readonly copyName: _angular_core.WritableSignal<string>;
|
|
5214
|
+
readonly copyLabel: _angular_core.WritableSignal<string>;
|
|
5215
|
+
private readonly copyNameInput;
|
|
5216
|
+
/**
|
|
5217
|
+
* Si duplica un flow che esiste: su uno mai salvato il comando e' «Crea», e il nome lo si
|
|
5218
|
+
* scrive nell'intestazione.
|
|
5219
|
+
*/
|
|
5220
|
+
readonly canDuplicate: _angular_core.Signal<boolean>;
|
|
5221
|
+
/**
|
|
5222
|
+
* Il nome della copia non e' verificabile lato client — i nomi dei flow stanno nel catalogo
|
|
5223
|
+
* del backend, ed e' lui a rifiutare un doppione con `AlreadyExists` (§6.2). Qui si fermano
|
|
5224
|
+
* le due cose che si sanno senza chiedere: la forma del nome tecnico e l'uguaglianza con
|
|
5225
|
+
* l'originale, che duplicare non e'.
|
|
5226
|
+
*/
|
|
5227
|
+
readonly copyNameProblem: _angular_core.Signal<string | null>;
|
|
5228
|
+
/**
|
|
5229
|
+
* Cosa verra' copiato. Con modifiche non salvate la copia le comprende, perche' nasce dal
|
|
5230
|
+
* documento in mano e non dalla versione salvata: dirlo evita la domanda «devo salvare
|
|
5231
|
+
* prima?», che ha risposte opposte nei due casi.
|
|
5232
|
+
*/
|
|
5233
|
+
readonly copyHint: _angular_core.Signal<"La copia comprende le modifiche non salvate; l’originale resta come e’ ora." | "La copia nasce come versione 1 di un flow nuovo.">;
|
|
5234
|
+
startCopy(): void;
|
|
5235
|
+
cancelCopy(): void;
|
|
5236
|
+
setCopyName(value: string): void;
|
|
5237
|
+
setCopyLabel(value: string): void;
|
|
5238
|
+
/** Scrive la copia e continua a lavorare su di essa (§6.2). */
|
|
5239
|
+
confirmCopy(): Promise<void>;
|
|
4833
5240
|
createNewVersion(): Promise<void>;
|
|
4834
5241
|
activate(): Promise<void>;
|
|
4835
5242
|
/** §9.3 — prima opzione davanti a un conflitto. */
|
|
@@ -4865,5 +5272,5 @@ declare class SelectValueDirective implements AfterViewChecked {
|
|
|
4865
5272
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SelectValueDirective, "select[fbValue]", never, { "fbValue": { "alias": "fbValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4866
5273
|
}
|
|
4867
5274
|
|
|
4868
|
-
export { ConditionEditorComponent, ConnectorEditorComponent, DebugPanelComponent, DynamicScreenInspectorComponent, ElementDialogComponent, ElementInspectorComponent, ElementPaletteComponent, EnumValuePickerComponent, FALLBACK_COLLECTION_BY_TYPE, FALLBACK_TYPE_LABEL, FLOW_BUILDER_HTTP_CONFIG, FLOW_ELEMENT_ICONS, FLOW_ELEMENT_VARIANT_FIELDS, FLOW_ELEMENT_VARIANT_ICONS, FLOW_ERROR_FALLBACK_MESSAGE, FLOW_ERROR_HTTP_STATUS, FLOW_NAME_PATTERN, FLOW_NODE_COLLECTIONS, FLOW_NODE_HEIGHT, FLOW_NODE_WIDTH, FLOW_RESOURCE_COLLECTIONS, FLOW_VALUE_FIELDS, FLOW_VALUE_LITERAL_FIELDS, FieldAssignmentEditorComponent, FieldPickerComponent, FlowApiError, FlowBuilderApi, FlowBuilderComponent, FlowCanvasComponent, FlowCatalogStore, FlowDictionaryStore, FlowDocumentStore, FlowEditorSession, FlowLayoutService, FlowValidationStore, FormulaEditorComponent, FormulaValidationService, HttpFlowBuilderApi, NamePickerComponent, NodeInspectorBase, ORCHESTRATION_CONDITION_OUTPUT, ObjectPickerComponent, OrchestratedStageInspectorComponent, ParameterEditorComponent, ProblemsPanelComponent, RecordFilterEditorComponent, ReferencePickerComponent, ResourcePanelComponent, SEVERITY_BUCKETS, SEVERITY_ICON, SEVERITY_LABEL, START_NODE_NAME, SelectValueDirective, StartInspectorComponent, StructureMemberPickerComponent, StructurePickerComponent, TYPES_WITH_AUTOMATIC_OUTPUT, TYPE_BY_COLLECTION, UNSUPPORTED_TYPES, ValueEditorComponent, VersionPanelComponent, allFieldsOf, areTypesComparable, canvasNodeId, checkConditionLogic, checkFlowName, describePathEntry, duplicateField, elementIcon, emptyFlowDefinition, fieldAt, filterReferences, flattenFields, flowNodeWidth, flowNodeWidthClass, insertField, isCustomConditionLogic, isEmptyReferenceFilter, isFieldResource, isGlobalReference, isNumericType, isPathInside, isTypeCheckedOperator, isValidFlowName, isValued, loadPathLevel, matchesReferenceFilter, moveCondition, moveField, navigatePath, outletByKey, outletsOf, parseCanvasNodeId, parseInvariantNumber, parseSourceConnectorId, parseTargetConnectorId, pathAvailableNames, pathContainerLabel, pathKey, pathNotVerifiableMessage, referenceRoot, remapConditionLogic, removeCondition, removeField, resolvePath, samePath, screenFieldNames, severityBucket, slugifyFlowName, sourceConnectorId, stageStepNames, stageStepOutputReferenced, stepsOf, targetConnectorId, uniqueFlowName, valuedFieldOf, valuedFieldsOf, variantFieldOf, variantOf, variantPresetOf };
|
|
4869
|
-
export type { FieldAssignmentHolder, FilterHolder, FlowActionCall, FlowAnyNode, FlowAssignment, FlowAssignmentItem, FlowAssignmentOperator, FlowAssignmentOperatorEntry, FlowBuilderHttpConfig, FlowCanvasEdge, FlowCanvasNode, FlowCatalogEntry, FlowCatalogParameter, FlowChoice, FlowCloneRequest, FlowCollectionProcessor, FlowCollectionProcessorType, FlowComparisonOperator, FlowComparisonOperatorEntry, FlowCondition, FlowConditionHolder, FlowConditionLogic, FlowConflictState, FlowConnectionKind, FlowConnector, FlowConnectorTarget, FlowConstant, FlowCreateRequest, FlowCustomError, FlowCustomErrorMessage, FlowCustomProperty, FlowDataType, FlowDataTypeEntry, FlowDecision, FlowDecisionRule, FlowDefinition, FlowDictionaries, FlowDictionaryEntry, FlowDynamicChoiceSet, FlowDynamicScreen, FlowEdge, FlowElementType, FlowElementTypeEntry, FlowEnumValue, FlowErrorCategory, FlowExportQuery, FlowFieldDescription, FlowFieldUsage, FlowFieldValue, FlowFormula, FlowFormulaIssue, FlowFormulaUsage, FlowFormulaValidationRequest, FlowFormulaValidationResult, FlowGlobalVariableEntry, FlowInputFieldAssignment, FlowInputParameter, FlowInterviewResult, FlowInterviewStatus, FlowIssueSeverity, FlowLayoutDirection, FlowLayoutNodeInput, FlowLayoutOptions, FlowLayoutResult, FlowListQuery, FlowLoop, FlowNameCheck, FlowNameProblem, FlowNewVersionRequest, FlowNodeBase, FlowNodeCollection, FlowNodeRef, FlowObjectDescription, FlowObjectSummary, FlowOffsetUnit, FlowOrchestratedStage, FlowOutlet, FlowOutline, FlowOutlineConnection, FlowOutlineNode, FlowOutputFieldAssignment, FlowOutputParameter, FlowPalettePick, FlowPendingScreen, FlowProcessType, FlowRecordCreate, FlowRecordDelete, FlowRecordFilter, FlowRecordFilterOperator, FlowRecordLookup, FlowRecordRollback, FlowRecordTriggerType, FlowRecordUpdate, FlowRecordValue, FlowReference, FlowReferenceFilter, FlowReferenceKind, FlowRegionContainerType, FlowResourceCollection, FlowResourceKindEntry, FlowResourceRef, FlowResumeRequest, FlowSaveRequest, FlowSaveResult, FlowSchedule, FlowScheduledPath, FlowScreen, FlowScreenField, FlowScreenFieldInputsRevisited, FlowScreenFieldNode, FlowScreenFieldPath, FlowScreenFieldType, FlowScreenFieldTypeEntry, FlowScreenNavigation, FlowScreenResponseRequest, FlowScreenValidationRule, FlowScriptPluginCall, FlowSeverityBucket, FlowSortOption, FlowSortOrder, FlowStage, FlowStageStep, FlowStageStepActionType, FlowStageStepAssignee, FlowStageStepConditionActionType, FlowStageStepRequest, FlowStageStepState, FlowStageStepStatus, FlowStageStepTypeEntry, FlowStart, FlowStartInterviewRequest, FlowStructureDescribed, FlowStructureDescription, FlowStructureInstance, FlowStructureMember, FlowSubflow, FlowSubflowInputAssignment, FlowSubflowOutputAssignment, FlowSummary, FlowTextTemplate, FlowTraceEntry, FlowTransactionModel, FlowTransform, FlowTransformType, FlowTransformValue, FlowTransformValueAction, FlowTriggerType, FlowTypedEntry, FlowTypedValue, FlowUnsupportedNode, FlowValidationIssue, FlowValidationResult, FlowValue, FlowVariable, FlowVersionStatus, FlowVersionSummary, FlowWait, FlowWaitEvent, NamePickerOption, PaletteGroup, PaletteItem, ParameterHolder, PathCatalog, PathContainer, PathContainerKind, PathEntry, PathLevel, PathLevelStatus, PathNavigation, PathNavigationRequest, PathResolution, PathStopReason, StructureMemberUsage, ValueMode };
|
|
5275
|
+
export { ConditionEditorComponent, ConnectorEditorComponent, DebugPanelComponent, DynamicScreenInspectorComponent, ElementDialogComponent, ElementInspectorComponent, ElementPaletteComponent, EnumValuePickerComponent, FALLBACK_COLLECTION_BY_TYPE, FALLBACK_TYPE_LABEL, FLOW_BUILDER_HTTP_CONFIG, FLOW_ELEMENT_ICONS, FLOW_ELEMENT_VARIANT_FIELDS, FLOW_ELEMENT_VARIANT_ICONS, FLOW_ERROR_FALLBACK_MESSAGE, FLOW_ERROR_HTTP_STATUS, FLOW_NAME_PATTERN, FLOW_NODE_COLLECTIONS, FLOW_NODE_HEIGHT, FLOW_NODE_WIDTH, FLOW_RESOURCE_COLLECTIONS, FLOW_VALUE_FIELDS, FLOW_VALUE_LITERAL_FIELDS, FieldAssignmentEditorComponent, FieldPickerComponent, FlowApiError, FlowBuilderApi, FlowBuilderComponent, FlowCanvasComponent, FlowCatalogStore, FlowDictionaryStore, FlowDocumentStore, FlowEditorSession, FlowLayoutService, FlowValidationStore, FormulaEditorComponent, FormulaValidationService, HttpFlowBuilderApi, NamePickerComponent, NodeInspectorBase, ORCHESTRATION_CONDITION_OUTPUT, ObjectPickerComponent, OrchestratedStageInspectorComponent, ParameterEditorComponent, ProblemsPanelComponent, RecordFilterEditorComponent, ReferencePickerComponent, ResourcePanelComponent, SEVERITY_BUCKETS, SEVERITY_ICON, SEVERITY_LABEL, START_NODE_NAME, SelectValueDirective, StartInspectorComponent, StructureMemberPickerComponent, StructurePickerComponent, TYPES_WITH_AUTOMATIC_OUTPUT, TYPE_BY_COLLECTION, UNSUPPORTED_TYPES, ValueEditorComponent, VersionPanelComponent, allFieldsOf, areTypesComparable, canvasNodeId, checkConditionLogic, checkFlowName, describePathEntry, duplicateField, elementIcon, emptyFlowDefinition, fieldAt, filterReferences, flattenFields, flowNodeWidth, flowNodeWidthClass, insertField, isCustomConditionLogic, isEmptyReferenceFilter, isFieldResource, isGlobalReference, isNumericType, isPathInside, isTypeCheckedOperator, isValidFlowName, isValued, loadPathLevel, matchesReferenceFilter, moveCondition, moveField, navigatePath, outletByKey, outletsOf, parseCanvasNodeId, parseInvariantNumber, parseSourceConnectorId, parseTargetConnectorId, pathAvailableNames, pathContainerLabel, pathKey, pathNotVerifiableMessage, referenceRoot, remapConditionLogic, removeCondition, removeField, resolvePath, samePath, screenActionNames, screenFieldNames, severityBucket, slugifyFlowName, sourceConnectorId, stageStepNames, stageStepOutputReferenced, stepsOf, targetConnectorId, uniqueFlowName, valuedFieldOf, valuedFieldsOf, variantFieldOf, variantOf, variantPresetOf };
|
|
5276
|
+
export type { FieldAssignmentHolder, FilterHolder, FlowActionCall, FlowAnyNode, FlowAssignment, FlowAssignmentItem, FlowAssignmentOperator, FlowAssignmentOperatorEntry, FlowBuilderHttpConfig, FlowCanvasEdge, FlowCanvasNode, FlowCatalogEntry, FlowCatalogParameter, FlowChoice, FlowCloneRequest, FlowCollectionProcessor, FlowCollectionProcessorType, FlowComparisonOperator, FlowComparisonOperatorEntry, FlowCondition, FlowConditionHolder, FlowConditionLogic, FlowConflictState, FlowConnectionKind, FlowConnector, FlowConnectorTarget, FlowConstant, FlowCreateRequest, FlowCustomError, FlowCustomErrorMessage, FlowCustomProperty, FlowDataType, FlowDataTypeEntry, FlowDecision, FlowDecisionRule, FlowDefinition, FlowDictionaries, FlowDictionaryEntry, FlowDynamicChoiceSet, FlowDynamicScreen, FlowEdge, FlowElementType, FlowElementTypeEntry, FlowEnumValue, FlowErrorCategory, FlowExportQuery, FlowFieldDescription, FlowFieldUsage, FlowFieldValue, FlowFormKind, FlowFormula, FlowFormulaIssue, FlowFormulaUsage, FlowFormulaValidationRequest, FlowFormulaValidationResult, FlowGlobalVariableEntry, FlowInputFieldAssignment, FlowInputParameter, FlowInterviewResult, FlowInterviewStatus, FlowIssueSeverity, FlowLayoutDirection, FlowLayoutNodeInput, FlowLayoutOptions, FlowLayoutResult, FlowListQuery, FlowLoop, FlowNameCheck, FlowNameProblem, FlowNewVersionRequest, FlowNodeBase, FlowNodeCollection, FlowNodeRef, FlowObjectDescription, FlowObjectSummary, FlowOffsetUnit, FlowOrchestratedStage, FlowOutlet, FlowOutline, FlowOutlineConnection, FlowOutlineNode, FlowOutputFieldAssignment, FlowOutputParameter, FlowPalettePick, FlowPendingScreen, FlowProcessType, FlowRecordCreate, FlowRecordDelete, FlowRecordFilter, FlowRecordFilterOperator, FlowRecordLookup, FlowRecordRollback, FlowRecordTriggerType, FlowRecordUpdate, FlowRecordValue, FlowReference, FlowReferenceFilter, FlowReferenceKind, FlowRegionContainerType, FlowResourceCollection, FlowResourceKindEntry, FlowResourceRef, FlowResumeRequest, FlowSaveRequest, FlowSaveResult, FlowSchedule, FlowScheduledPath, FlowScreen, FlowScreenAction, FlowScreenField, FlowScreenFieldInputsRevisited, FlowScreenFieldNode, FlowScreenFieldPath, FlowScreenFieldType, FlowScreenFieldTypeEntry, FlowScreenNavigation, FlowScreenResponseRequest, FlowScreenTrigger, FlowScreenTriggerInitBehavior, FlowScreenValidationRule, FlowScriptPluginCall, FlowSeverityBucket, FlowSortOption, FlowSortOrder, FlowStage, FlowStageStep, FlowStageStepActionType, FlowStageStepAssignee, FlowStageStepConditionActionType, FlowStageStepRequest, FlowStageStepState, FlowStageStepStatus, FlowStageStepTypeEntry, FlowStart, FlowStartInterviewRequest, FlowStructureDescribed, FlowStructureDescription, FlowStructureInstance, FlowStructureMember, FlowSubflow, FlowSubflowInputAssignment, FlowSubflowOutputAssignment, FlowSummary, FlowTextTemplate, FlowTraceEntry, FlowTransactionModel, FlowTransform, FlowTransformType, FlowTransformValue, FlowTransformValueAction, FlowTriggerType, FlowTypedEntry, FlowTypedValue, FlowUnsupportedNode, FlowValidationIssue, FlowValidationResult, FlowValue, FlowVariable, FlowVersionStatus, FlowVersionSummary, FlowWait, FlowWaitEvent, NamePickerOption, PaletteGroup, PaletteItem, ParameterHolder, PathCatalog, PathContainer, PathContainerKind, PathEntry, PathLevel, PathLevelStatus, PathNavigation, PathNavigationRequest, PathResolution, PathStopReason, StructureMemberUsage, ValueMode };
|