ballerina-core 1.0.251 → 1.0.253
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/package.json
CHANGED
package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/readOnly/template.tsx
CHANGED
|
@@ -12,6 +12,10 @@ import {
|
|
|
12
12
|
BasicUpdater,
|
|
13
13
|
DispatchDelta,
|
|
14
14
|
NestedRenderer,
|
|
15
|
+
BaseFlags,
|
|
16
|
+
replaceWith,
|
|
17
|
+
ValueReadOnly,
|
|
18
|
+
Updater,
|
|
15
19
|
} from "../../../../../../../../main";
|
|
16
20
|
import { Template } from "../../../../../../../template/state";
|
|
17
21
|
import {
|
|
@@ -27,7 +31,7 @@ import {
|
|
|
27
31
|
export const ReadOnlyAbstractRenderer = <
|
|
28
32
|
T extends DispatchParsedType<T>,
|
|
29
33
|
CustomPresentationContext = Unit,
|
|
30
|
-
Flags =
|
|
34
|
+
Flags extends BaseFlags = BaseFlags,
|
|
31
35
|
ExtraContext = Unit,
|
|
32
36
|
>(
|
|
33
37
|
GetDefaultChildState: () => CommonAbstractRendererState,
|
|
@@ -88,15 +92,37 @@ export const ReadOnlyAbstractRenderer = <
|
|
|
88
92
|
.mapForeignMutationsFromProps<{
|
|
89
93
|
onChange: DispatchOnChange<PredicateValue, Flags>;
|
|
90
94
|
}>(
|
|
91
|
-
(
|
|
95
|
+
(
|
|
96
|
+
props,
|
|
97
|
+
): {
|
|
92
98
|
onChange: DispatchOnChange<PredicateValue, Flags>;
|
|
93
99
|
} => ({
|
|
94
100
|
onChange: (
|
|
95
101
|
elementUpdater: Option<BasicUpdater<PredicateValue>>,
|
|
96
102
|
nestedDelta: DispatchDelta<Flags>,
|
|
97
103
|
) => {
|
|
98
|
-
|
|
99
|
-
|
|
104
|
+
const flags = { kind: "localOnly" };
|
|
105
|
+
const delta: DispatchDelta<Flags> = {
|
|
106
|
+
kind: "UnitReplace",
|
|
107
|
+
replace: PredicateValue.Default.unit(),
|
|
108
|
+
state: {},
|
|
109
|
+
type: DispatchParsedType.Default.primitive("unit"),
|
|
110
|
+
flags: flags as Flags,
|
|
111
|
+
sourceAncestorLookupTypeNames:
|
|
112
|
+
nestedDelta.sourceAncestorLookupTypeNames,
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
props.foreignMutations.onChange(
|
|
116
|
+
elementUpdater.kind == "l"
|
|
117
|
+
? Option.Default.none()
|
|
118
|
+
: Option.Default.some(
|
|
119
|
+
Updater<PredicateValue>((value) =>
|
|
120
|
+
ValueReadOnly.Updaters.ReadOnly(elementUpdater.value)(
|
|
121
|
+
value as ValueReadOnly,
|
|
122
|
+
),
|
|
123
|
+
),
|
|
124
|
+
),
|
|
125
|
+
delta,
|
|
100
126
|
);
|
|
101
127
|
},
|
|
102
128
|
}),
|
|
@@ -567,7 +567,6 @@ export const RendererTraversal = {
|
|
|
567
567
|
);
|
|
568
568
|
});
|
|
569
569
|
}
|
|
570
|
-
// TODO -- add recursion for the detailsRenderer, but requires state
|
|
571
570
|
if (renderer.type.kind == "table" && renderer.kind == "tableRenderer") {
|
|
572
571
|
return ValueOrErrors.Operations.All(
|
|
573
572
|
List(
|
|
@@ -584,83 +583,109 @@ export const RendererTraversal = {
|
|
|
584
583
|
})
|
|
585
584
|
.valueSeq(),
|
|
586
585
|
),
|
|
587
|
-
)
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
return ValueOrErrors.Default.return(
|
|
595
|
-
Option.Default.some((evalContext: EvalContext<T, Res>) => {
|
|
596
|
-
const iterator = evalContext.traversalIterator;
|
|
597
|
-
if (!PredicateValue.Operations.IsTable(iterator)) {
|
|
598
|
-
return ValueOrErrors.Default.throwOne(
|
|
599
|
-
`Error: traversal iterator is not a table, got ${evalContext.traversalIterator}`,
|
|
600
|
-
);
|
|
601
|
-
}
|
|
602
|
-
return TableLayout.Operations.ComputeLayout(
|
|
603
|
-
Map([
|
|
604
|
-
["global", evalContext.global],
|
|
605
|
-
["local", evalContext.local],
|
|
606
|
-
["root", evalContext.root],
|
|
607
|
-
]),
|
|
608
|
-
renderer.visibleColumns,
|
|
609
|
-
).Then((visibleColumns) => {
|
|
610
|
-
// Note: we do not allow visiblity predicates on individual column cells
|
|
611
|
-
return ValueOrErrors.Operations.All<Res, string>(
|
|
612
|
-
columnTraversals.flatMap((c) => {
|
|
613
|
-
const colTraversal = c.columnTraversal;
|
|
614
|
-
if (
|
|
615
|
-
colTraversal.kind == "l" ||
|
|
616
|
-
!visibleColumns.columns.includes(c.columnName)
|
|
617
|
-
) {
|
|
618
|
-
return [];
|
|
619
|
-
}
|
|
620
|
-
return iterator.data.valueSeq().flatMap((row) => {
|
|
621
|
-
// TODO make this monadic
|
|
622
|
-
const columnValue = row.fields.get(c.columnName);
|
|
623
|
-
if (!columnValue) {
|
|
624
|
-
return [
|
|
625
|
-
ValueOrErrors.Default.throwOne(
|
|
626
|
-
`Error: cannot find column ${
|
|
627
|
-
c.columnName
|
|
628
|
-
} in row ${JSON.stringify(row)}`,
|
|
629
|
-
),
|
|
630
|
-
];
|
|
631
|
-
}
|
|
632
|
-
return [
|
|
633
|
-
colTraversal.value({
|
|
634
|
-
...evalContext,
|
|
635
|
-
traversalIterator: columnValue,
|
|
636
|
-
}),
|
|
637
|
-
];
|
|
638
|
-
});
|
|
586
|
+
)
|
|
587
|
+
.Then((columnTraversals) =>
|
|
588
|
+
renderer.detailsRenderer
|
|
589
|
+
? rec(renderer.detailsRenderer.renderer, traversalContext).Map(
|
|
590
|
+
(detailsTraversal) => ({
|
|
591
|
+
detailsTraversal: detailsTraversal,
|
|
592
|
+
columnTraversals: columnTraversals,
|
|
639
593
|
}),
|
|
640
|
-
)
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
594
|
+
)
|
|
595
|
+
: ValueOrErrors.Default.return({
|
|
596
|
+
detailsTraversal:
|
|
597
|
+
Option.Default.none<ValueTraversal<T, Res>>(),
|
|
598
|
+
columnTraversals: columnTraversals,
|
|
599
|
+
}),
|
|
600
|
+
)
|
|
601
|
+
.Then(({ detailsTraversal, columnTraversals }) => {
|
|
602
|
+
if (
|
|
603
|
+
columnTraversals.every((c) => c.columnTraversal.kind == "l") &&
|
|
604
|
+
traverseNode.kind == "l"
|
|
605
|
+
) {
|
|
606
|
+
return ValueOrErrors.Default.return(Option.Default.none());
|
|
607
|
+
}
|
|
608
|
+
return ValueOrErrors.Default.return(
|
|
609
|
+
Option.Default.some((evalContext: EvalContext<T, Res>) => {
|
|
610
|
+
const iterator = evalContext.traversalIterator;
|
|
611
|
+
if (!PredicateValue.Operations.IsTable(iterator)) {
|
|
612
|
+
return ValueOrErrors.Default.throwOne(
|
|
613
|
+
`Error: traversal iterator is not a table, got ${evalContext.traversalIterator}`,
|
|
614
|
+
);
|
|
615
|
+
}
|
|
616
|
+
return TableLayout.Operations.ComputeLayout(
|
|
617
|
+
Map([
|
|
618
|
+
["global", evalContext.global],
|
|
619
|
+
["local", evalContext.local],
|
|
620
|
+
["root", evalContext.root],
|
|
621
|
+
]),
|
|
622
|
+
renderer.visibleColumns,
|
|
623
|
+
).Then((visibleColumns) => {
|
|
624
|
+
// Note: we do not allow visiblity predicates on individual column cells
|
|
625
|
+
return ValueOrErrors.Operations.All<Res, string>(
|
|
626
|
+
columnTraversals
|
|
627
|
+
.flatMap<ValueOrErrors<Res, string>>((c) => {
|
|
628
|
+
const colTraversal = c.columnTraversal;
|
|
629
|
+
if (
|
|
630
|
+
colTraversal.kind == "l" ||
|
|
631
|
+
!visibleColumns.columns.includes(c.columnName)
|
|
632
|
+
) {
|
|
633
|
+
return [];
|
|
634
|
+
}
|
|
635
|
+
return iterator.data.valueSeq().flatMap((row) => {
|
|
636
|
+
// TODO make this monadic
|
|
637
|
+
const columnValue = row.fields.get(c.columnName);
|
|
638
|
+
if (!columnValue) {
|
|
639
|
+
return [
|
|
640
|
+
ValueOrErrors.Default.throwOne(
|
|
641
|
+
`Error: cannot find column ${
|
|
642
|
+
c.columnName
|
|
643
|
+
} in row ${JSON.stringify(row)}`,
|
|
644
|
+
),
|
|
645
|
+
];
|
|
646
|
+
}
|
|
647
|
+
return [
|
|
648
|
+
colTraversal.value({
|
|
649
|
+
...evalContext,
|
|
650
|
+
traversalIterator: columnValue,
|
|
651
|
+
}),
|
|
652
|
+
];
|
|
653
|
+
});
|
|
654
|
+
})
|
|
655
|
+
.concat(
|
|
656
|
+
detailsTraversal.kind == "l"
|
|
657
|
+
? []
|
|
658
|
+
: iterator.data.valueSeq().map((row) => {
|
|
659
|
+
return detailsTraversal.value({
|
|
660
|
+
...evalContext,
|
|
661
|
+
traversalIterator: row,
|
|
662
|
+
});
|
|
663
|
+
}),
|
|
664
|
+
),
|
|
665
|
+
).Then((columnAndDetailsResults) => {
|
|
666
|
+
return traverseNode.kind == "r"
|
|
667
|
+
? traverseNode
|
|
668
|
+
.value(evalContext)
|
|
669
|
+
.Then((nodeResult: Res) =>
|
|
670
|
+
ValueOrErrors.Default.return(
|
|
671
|
+
columnAndDetailsResults.reduce(
|
|
672
|
+
(acc, res) =>
|
|
673
|
+
traversalContext.joinRes([acc, res]),
|
|
674
|
+
nodeResult,
|
|
675
|
+
),
|
|
650
676
|
),
|
|
677
|
+
)
|
|
678
|
+
: ValueOrErrors.Default.return(
|
|
679
|
+
columnAndDetailsResults.reduce(
|
|
680
|
+
(acc, res) => traversalContext.joinRes([acc, res]),
|
|
681
|
+
traversalContext.zeroRes(unit),
|
|
651
682
|
),
|
|
652
|
-
)
|
|
653
|
-
|
|
654
|
-
columnResults.reduce(
|
|
655
|
-
(acc, res) => traversalContext.joinRes([acc, res]),
|
|
656
|
-
traversalContext.zeroRes(unit),
|
|
657
|
-
),
|
|
658
|
-
);
|
|
683
|
+
);
|
|
684
|
+
});
|
|
659
685
|
});
|
|
660
|
-
})
|
|
661
|
-
|
|
662
|
-
);
|
|
663
|
-
});
|
|
686
|
+
}),
|
|
687
|
+
);
|
|
688
|
+
});
|
|
664
689
|
}
|
|
665
690
|
// TODO -- should we also look at the previewRenderer? Woud also requite state
|
|
666
691
|
if (renderer.type.kind == "one" && renderer.kind == "oneRenderer") {
|
|
@@ -364,6 +364,16 @@ export type ValueReadOnly = {
|
|
|
364
364
|
ReadOnly: PredicateValue;
|
|
365
365
|
};
|
|
366
366
|
|
|
367
|
+
export const ValueReadOnly = {
|
|
368
|
+
Default: (value: PredicateValue): ValueReadOnly => ({
|
|
369
|
+
kind: "readOnly",
|
|
370
|
+
ReadOnly: value,
|
|
371
|
+
}),
|
|
372
|
+
Updaters: {
|
|
373
|
+
...simpleUpdater<ValueReadOnly>()("ReadOnly"),
|
|
374
|
+
},
|
|
375
|
+
};
|
|
376
|
+
|
|
367
377
|
export const ValueTable = {
|
|
368
378
|
Default: {
|
|
369
379
|
empty: (): ValueTable => ({
|