ballerina-core 1.0.219 → 1.0.221
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 +1 -1
- package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/state.ts +31 -4
- package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/state.ts +3 -3
- package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/template.tsx +16 -1
- package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/template.tsx +2 -2
- package/src/forms/domains/dispatched-forms/runner/domains/deltas/state.ts +13 -22
- package/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/state.ts +1 -0
- package/src/forms/domains/parser/domains/layout/state.ts +90 -17
- package/src/forms/domains/parser/domains/validator/state.ts +2 -2
- package/src/forms/domains/parser/state.tsx +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { List, Map } from "immutable";
|
|
2
2
|
import {
|
|
3
3
|
ConcreteRenderers,
|
|
4
|
+
DisabledFields,
|
|
4
5
|
DispatchInjectablesTypes,
|
|
5
6
|
DispatchIsObject,
|
|
6
7
|
DispatchParsedType,
|
|
@@ -9,6 +10,7 @@ import {
|
|
|
9
10
|
isString,
|
|
10
11
|
MapRepo,
|
|
11
12
|
PredicateFormLayout,
|
|
13
|
+
PredicateComputedOrInlined,
|
|
12
14
|
ValueOrErrors,
|
|
13
15
|
} from "../../../../../../../../../../../../../main";
|
|
14
16
|
import { RecordType } from "../../../../../../../../../../../../../main";
|
|
@@ -28,6 +30,7 @@ export type RecordRenderer<T> = {
|
|
|
28
30
|
fields: Map<string, RecordFieldRenderer<T>>;
|
|
29
31
|
type: RecordType<T>;
|
|
30
32
|
tabs: PredicateFormLayout;
|
|
33
|
+
disabledFields: PredicateComputedOrInlined;
|
|
31
34
|
};
|
|
32
35
|
|
|
33
36
|
export const RecordRenderer = {
|
|
@@ -35,12 +38,14 @@ export const RecordRenderer = {
|
|
|
35
38
|
type: RecordType<T>,
|
|
36
39
|
fields: Map<string, RecordFieldRenderer<T>>,
|
|
37
40
|
tabs: PredicateFormLayout,
|
|
41
|
+
disabledFields: PredicateComputedOrInlined,
|
|
38
42
|
concreteRenderer?: string,
|
|
39
43
|
): RecordRenderer<T> => ({
|
|
40
44
|
kind: "recordRenderer",
|
|
41
45
|
type,
|
|
42
46
|
fields,
|
|
43
47
|
tabs,
|
|
48
|
+
disabledFields,
|
|
44
49
|
concreteRenderer,
|
|
45
50
|
}),
|
|
46
51
|
Operations: {
|
|
@@ -97,6 +102,10 @@ export const RecordRenderer = {
|
|
|
97
102
|
"extends" in _
|
|
98
103
|
? (_.extends as string[])
|
|
99
104
|
: undefined,
|
|
105
|
+
disabledFields:
|
|
106
|
+
"disabledFields" in _
|
|
107
|
+
? _.disabledFields
|
|
108
|
+
: undefined,
|
|
100
109
|
}),
|
|
101
110
|
Deserialize: <
|
|
102
111
|
T extends DispatchInjectablesTypes<T>,
|
|
@@ -140,16 +149,34 @@ export const RecordRenderer = {
|
|
|
140
149
|
),
|
|
141
150
|
)
|
|
142
151
|
.Then((fieldTuples) =>
|
|
143
|
-
|
|
152
|
+
ValueOrErrors.Operations.All(
|
|
153
|
+
List<
|
|
154
|
+
ValueOrErrors<
|
|
155
|
+
PredicateFormLayout | PredicateComputedOrInlined,
|
|
156
|
+
string
|
|
157
|
+
>
|
|
158
|
+
>([
|
|
159
|
+
FormLayout.Operations.ParseLayout(validRecordForm).MapErrors(
|
|
160
|
+
(errors) =>
|
|
161
|
+
errors.map((error) => `${error}\n...When parsing tabs`),
|
|
162
|
+
),
|
|
163
|
+
DisabledFields.Operations.ParseLayout(
|
|
164
|
+
validRecordForm,
|
|
165
|
+
).MapErrors((errors) =>
|
|
166
|
+
errors.map(
|
|
167
|
+
(error) => `${error}\n...When parsing disabled fields`,
|
|
168
|
+
),
|
|
169
|
+
),
|
|
170
|
+
]),
|
|
171
|
+
).Then(([tabs, disabledFields]) =>
|
|
144
172
|
ValueOrErrors.Default.return(
|
|
145
173
|
RecordRenderer.Default(
|
|
146
174
|
type,
|
|
147
175
|
Map(fieldTuples.toArray()),
|
|
148
|
-
tabs,
|
|
176
|
+
tabs as PredicateFormLayout,
|
|
177
|
+
disabledFields as PredicateComputedOrInlined,
|
|
149
178
|
validRecordForm.renderer,
|
|
150
179
|
),
|
|
151
|
-
).MapErrors((errors) =>
|
|
152
|
-
errors.map((error) => `${error}\n...When parsing tabs`),
|
|
153
180
|
),
|
|
154
181
|
),
|
|
155
182
|
)
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
ConcreteRenderers,
|
|
9
9
|
DispatchInjectablesTypes,
|
|
10
10
|
isString,
|
|
11
|
-
|
|
11
|
+
PredicateComputedOrInlined,
|
|
12
12
|
TableLayout,
|
|
13
13
|
ValueOrErrors,
|
|
14
14
|
} from "../../../../../../../../../../../../../main";
|
|
@@ -28,7 +28,7 @@ export type TableRenderer<T> = {
|
|
|
28
28
|
kind: "tableRenderer";
|
|
29
29
|
type: TableType<T>;
|
|
30
30
|
columns: Map<string, TableCellRenderer<T>>;
|
|
31
|
-
visibleColumns:
|
|
31
|
+
visibleColumns: PredicateComputedOrInlined;
|
|
32
32
|
concreteRenderer: string;
|
|
33
33
|
detailsRenderer?: NestedRenderer<T>;
|
|
34
34
|
api?: string;
|
|
@@ -38,7 +38,7 @@ export const TableRenderer = {
|
|
|
38
38
|
Default: <T>(
|
|
39
39
|
type: TableType<T>,
|
|
40
40
|
columns: Map<string, TableCellRenderer<T>>,
|
|
41
|
-
visibleColumns:
|
|
41
|
+
visibleColumns: PredicateComputedOrInlined,
|
|
42
42
|
concreteRenderer: string,
|
|
43
43
|
detailsRenderer?: NestedRenderer<T>,
|
|
44
44
|
api?: string,
|
package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/template.tsx
CHANGED
|
@@ -21,6 +21,8 @@ import {
|
|
|
21
21
|
CommonAbstractRendererState,
|
|
22
22
|
CommonAbstractRendererForeignMutationsExpected,
|
|
23
23
|
StringSerializedType,
|
|
24
|
+
DisabledFields,
|
|
25
|
+
PredicateComputedOrInlined,
|
|
24
26
|
} from "../../../../../../../../main";
|
|
25
27
|
import { Template } from "../../../../../../../template/state";
|
|
26
28
|
|
|
@@ -56,6 +58,7 @@ export const RecordAbstractRenderer = <
|
|
|
56
58
|
}
|
|
57
59
|
>,
|
|
58
60
|
Layout: PredicateFormLayout,
|
|
61
|
+
DisabledFieldsPredicate: PredicateComputedOrInlined,
|
|
59
62
|
IdProvider: (props: IdWrapperProps) => React.ReactNode,
|
|
60
63
|
ErrorRenderer: (props: ErrorRendererProps) => React.ReactNode,
|
|
61
64
|
isInlined: boolean,
|
|
@@ -263,11 +266,23 @@ export const RecordAbstractRenderer = <
|
|
|
263
266
|
visibleFieldKeys.value.filter((fieldName) => fieldName != null),
|
|
264
267
|
);
|
|
265
268
|
|
|
269
|
+
const calculatedDisabledFields = DisabledFields.Operations.Compute(
|
|
270
|
+
updatedBindings,
|
|
271
|
+
DisabledFieldsPredicate,
|
|
272
|
+
);
|
|
273
|
+
|
|
274
|
+
const disabledFieldsValue =
|
|
275
|
+
calculatedDisabledFields.kind == "value"
|
|
276
|
+
? calculatedDisabledFields.value.fields
|
|
277
|
+
: [];
|
|
278
|
+
|
|
266
279
|
const disabledFieldKeys = ValueOrErrors.Operations.All(
|
|
267
280
|
List(
|
|
268
281
|
FieldTemplates.map(({ disabled }, fieldName) =>
|
|
269
282
|
disabled == undefined
|
|
270
|
-
?
|
|
283
|
+
? disabledFieldsValue.includes(fieldName)
|
|
284
|
+
? ValueOrErrors.Default.return(fieldName)
|
|
285
|
+
: ValueOrErrors.Default.return(null)
|
|
271
286
|
: Expr.Operations.EvaluateAs("disabled predicate")(updatedBindings)(
|
|
272
287
|
disabled,
|
|
273
288
|
).Then((value) =>
|
package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/template.tsx
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
TableAbstractRendererState,
|
|
7
7
|
TableLayout,
|
|
8
8
|
Expr,
|
|
9
|
-
|
|
9
|
+
PredicateComputedOrInlined,
|
|
10
10
|
DispatchDelta,
|
|
11
11
|
ValueOrErrors,
|
|
12
12
|
TableAbstractRendererReadonlyContext,
|
|
@@ -79,7 +79,7 @@ export const TableAbstractRenderer = <
|
|
|
79
79
|
RecordAbstractRendererForeignMutationsExpected<Flags>
|
|
80
80
|
>
|
|
81
81
|
| undefined,
|
|
82
|
-
Layout:
|
|
82
|
+
Layout: PredicateComputedOrInlined,
|
|
83
83
|
IdProvider: (props: IdWrapperProps) => React.ReactNode,
|
|
84
84
|
ErrorRenderer: (props: ErrorRendererProps) => React.ReactNode,
|
|
85
85
|
TableEntityType: RecordType<any>,
|
|
@@ -364,10 +364,7 @@ export type DispatchDeltaTransferPrimitive =
|
|
|
364
364
|
| { Discriminator: "GuidReplace"; Replace: string }
|
|
365
365
|
| { Discriminator: "Int32Replace"; Replace: bigint }
|
|
366
366
|
| { Discriminator: "Float32Replace"; Replace: number };
|
|
367
|
-
export type DispatchDeltaTransferUnit = {
|
|
368
|
-
Discriminator: "UnitReplace";
|
|
369
|
-
Replace: any;
|
|
370
|
-
};
|
|
367
|
+
export type DispatchDeltaTransferUnit = {};
|
|
371
368
|
export type DispatchDeltaTransferOption<DispatchDeltaTransferCustom> =
|
|
372
369
|
| { Discriminator: "OptionReplace"; Replace: any }
|
|
373
370
|
| {
|
|
@@ -648,24 +645,18 @@ export const DispatchDeltaTransfer = {
|
|
|
648
645
|
);
|
|
649
646
|
}
|
|
650
647
|
if (delta.kind == "UnitReplace") {
|
|
651
|
-
return
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
Replace: value,
|
|
664
|
-
},
|
|
665
|
-
"UnitReplace",
|
|
666
|
-
delta.flags ? [[delta.flags, "UnitReplace"]] : [],
|
|
667
|
-
]),
|
|
668
|
-
);
|
|
648
|
+
return ValueOrErrors.Default.return<
|
|
649
|
+
[
|
|
650
|
+
DispatchDeltaTransfer<DispatchDeltaTransferCustom>,
|
|
651
|
+
DispatchDeltaTransferComparand,
|
|
652
|
+
AggregatedFlags<Flags>,
|
|
653
|
+
],
|
|
654
|
+
string
|
|
655
|
+
>([
|
|
656
|
+
{},
|
|
657
|
+
"UnitReplace",
|
|
658
|
+
delta.flags ? [[delta.flags, "UnitReplace"]] : [],
|
|
659
|
+
]);
|
|
669
660
|
}
|
|
670
661
|
if (delta.kind == "OptionReplace") {
|
|
671
662
|
return toRawObject(delta.replace, delta.type, delta.state).Then(
|
|
@@ -249,20 +249,91 @@ export const FormLayout = {
|
|
|
249
249
|
},
|
|
250
250
|
};
|
|
251
251
|
|
|
252
|
-
export type
|
|
252
|
+
export type PredicateComputedOrInlined =
|
|
253
253
|
| {
|
|
254
254
|
kind: "Computed";
|
|
255
|
-
|
|
255
|
+
content: Expr;
|
|
256
256
|
}
|
|
257
257
|
| {
|
|
258
258
|
kind: "Inlined";
|
|
259
|
-
|
|
259
|
+
content: Array<string>;
|
|
260
260
|
};
|
|
261
261
|
|
|
262
|
-
export const
|
|
263
|
-
isInlined: (
|
|
264
|
-
|
|
265
|
-
|
|
262
|
+
export const RawComputedOrInlined = {
|
|
263
|
+
isInlined: (
|
|
264
|
+
rawComputedOrInlined: unknown,
|
|
265
|
+
): rawComputedOrInlined is Array<string> =>
|
|
266
|
+
Array.isArray(rawComputedOrInlined) &&
|
|
267
|
+
rawComputedOrInlined.every((item) => typeof item == "string"),
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
export type CalculatedDisabledFields = {
|
|
271
|
+
fields: Array<string>;
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
export const DisabledFields = {
|
|
275
|
+
Default: (): CalculatedDisabledFields => ({
|
|
276
|
+
fields: [],
|
|
277
|
+
}),
|
|
278
|
+
Operations: {
|
|
279
|
+
ParseLayout: (
|
|
280
|
+
rawLayout: unknown,
|
|
281
|
+
): ValueOrErrors<PredicateComputedOrInlined, string> => {
|
|
282
|
+
if (!rawLayout || typeof rawLayout != "object") {
|
|
283
|
+
return ValueOrErrors.Default.throwOne(
|
|
284
|
+
`Invalid layout, expected object, got ${JSON.stringify(rawLayout)}`,
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
if (
|
|
289
|
+
!("disabledFields" in rawLayout) ||
|
|
290
|
+
typeof rawLayout.disabledFields != "object" ||
|
|
291
|
+
rawLayout.disabledFields == null
|
|
292
|
+
) {
|
|
293
|
+
return ValueOrErrors.Default.return({
|
|
294
|
+
kind: "Inlined",
|
|
295
|
+
content: [],
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
if (RawComputedOrInlined.isInlined(rawLayout.disabledFields)) {
|
|
300
|
+
return ValueOrErrors.Default.return<PredicateComputedOrInlined, string>(
|
|
301
|
+
{
|
|
302
|
+
kind: "Inlined",
|
|
303
|
+
content: rawLayout.disabledFields,
|
|
304
|
+
},
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
return Expr.Operations.parse(rawLayout.disabledFields).Then((expr) =>
|
|
308
|
+
ValueOrErrors.Default.return<PredicateComputedOrInlined, string>({
|
|
309
|
+
kind: "Computed",
|
|
310
|
+
content: expr,
|
|
311
|
+
}),
|
|
312
|
+
);
|
|
313
|
+
},
|
|
314
|
+
Compute: (
|
|
315
|
+
bindings: Bindings,
|
|
316
|
+
disabledFields: PredicateComputedOrInlined,
|
|
317
|
+
): ValueOrErrors<CalculatedDisabledFields, string> => {
|
|
318
|
+
if (disabledFields.kind == "Inlined") {
|
|
319
|
+
return ValueOrErrors.Default.return({
|
|
320
|
+
fields: disabledFields.content,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
return Expr.Operations.Evaluate(bindings)(disabledFields.content).Then(
|
|
324
|
+
(result) => {
|
|
325
|
+
if (!PredicateValue.Operations.IsRecord(result)) {
|
|
326
|
+
return ValueOrErrors.Default.throwOne(
|
|
327
|
+
`Invalid disabled fields: ${JSON.stringify(result)}`,
|
|
328
|
+
);
|
|
329
|
+
}
|
|
330
|
+
return ValueOrErrors.Default.return({
|
|
331
|
+
fields: Array.from(result.fields.keys()),
|
|
332
|
+
});
|
|
333
|
+
},
|
|
334
|
+
);
|
|
335
|
+
},
|
|
336
|
+
},
|
|
266
337
|
};
|
|
267
338
|
|
|
268
339
|
export type CalculatedTableLayout = {
|
|
@@ -276,30 +347,32 @@ export const TableLayout = {
|
|
|
276
347
|
Operations: {
|
|
277
348
|
ParseLayout: (
|
|
278
349
|
rawVisibleColumns: unknown,
|
|
279
|
-
): ValueOrErrors<
|
|
280
|
-
if (
|
|
281
|
-
return ValueOrErrors.Default.return(
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
350
|
+
): ValueOrErrors<PredicateComputedOrInlined, string> => {
|
|
351
|
+
if (RawComputedOrInlined.isInlined(rawVisibleColumns)) {
|
|
352
|
+
return ValueOrErrors.Default.return<PredicateComputedOrInlined, string>(
|
|
353
|
+
{
|
|
354
|
+
kind: "Inlined",
|
|
355
|
+
content: rawVisibleColumns,
|
|
356
|
+
},
|
|
357
|
+
);
|
|
285
358
|
}
|
|
286
359
|
return Expr.Operations.parse(rawVisibleColumns).Then((expr) =>
|
|
287
360
|
ValueOrErrors.Default.return({
|
|
288
361
|
kind: "Computed",
|
|
289
|
-
|
|
362
|
+
content: expr,
|
|
290
363
|
}),
|
|
291
364
|
);
|
|
292
365
|
},
|
|
293
366
|
ComputeLayout: (
|
|
294
367
|
bindings: Bindings,
|
|
295
|
-
visibleColumns:
|
|
368
|
+
visibleColumns: PredicateComputedOrInlined,
|
|
296
369
|
): ValueOrErrors<CalculatedTableLayout, string> => {
|
|
297
370
|
if (visibleColumns.kind == "Inlined") {
|
|
298
371
|
return ValueOrErrors.Default.return({
|
|
299
|
-
columns: visibleColumns.
|
|
372
|
+
columns: visibleColumns.content,
|
|
300
373
|
});
|
|
301
374
|
}
|
|
302
|
-
return Expr.Operations.Evaluate(bindings)(visibleColumns.
|
|
375
|
+
return Expr.Operations.Evaluate(bindings)(visibleColumns.content).Then(
|
|
303
376
|
(result) => {
|
|
304
377
|
if (!PredicateValue.Operations.IsRecord(result)) {
|
|
305
378
|
return ValueOrErrors.Default.throwOne(
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
PredicateFormLayout,
|
|
14
14
|
FormLayout,
|
|
15
15
|
TableLayout,
|
|
16
|
-
|
|
16
|
+
PredicateComputedOrInlined,
|
|
17
17
|
} from "../../../../../../main";
|
|
18
18
|
import { ValueOrErrors } from "../../../../../collections/domains/valueOrErrors/state";
|
|
19
19
|
import { ParsedRenderer } from "../renderer/state";
|
|
@@ -57,7 +57,7 @@ export type ParsedTableFormConfig<T> = {
|
|
|
57
57
|
type: ParsedType<T>;
|
|
58
58
|
columns: Map<FieldName, ParsedRenderer<T>>;
|
|
59
59
|
renderer: string;
|
|
60
|
-
visibleColumns:
|
|
60
|
+
visibleColumns: PredicateComputedOrInlined;
|
|
61
61
|
header?: string;
|
|
62
62
|
};
|
|
63
63
|
|
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
ParsedRecordFormConfig,
|
|
43
43
|
ParsedTableFormConfig,
|
|
44
44
|
TableApiSources,
|
|
45
|
-
|
|
45
|
+
PredicateComputedOrInlined,
|
|
46
46
|
} from "../../../../main";
|
|
47
47
|
import { EnumReference } from "../collection/domains/reference/state";
|
|
48
48
|
import { SearchableInfiniteStreamState } from "../primitives/domains/searchable-infinite-stream/state";
|
|
@@ -64,7 +64,7 @@ export type ParsedTableForm<T> = {
|
|
|
64
64
|
formConfig: any;
|
|
65
65
|
formName: string;
|
|
66
66
|
formDef: ParsedTableFormConfig<T>;
|
|
67
|
-
visibleColumns:
|
|
67
|
+
visibleColumns: PredicateComputedOrInlined;
|
|
68
68
|
columnHeaders: Map<FieldName, string | undefined>;
|
|
69
69
|
form: EntityFormTemplate<any, any, any, any>;
|
|
70
70
|
};
|