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 CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "ballerina-core",
3
3
  "author": "Dr. Giuseppe Maggiore",
4
4
  "private": false,
5
- "version": "1.0.219",
5
+ "version": "1.0.221",
6
6
  "main": "main.ts",
7
7
  "scripts": {
8
8
  "prettier": "prettier --write ."
@@ -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
- FormLayout.Operations.ParseLayout(validRecordForm).Then((tabs) =>
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
- PredicateVisibleColumns,
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: PredicateVisibleColumns;
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: PredicateVisibleColumns,
41
+ visibleColumns: PredicateComputedOrInlined,
42
42
  concreteRenderer: string,
43
43
  detailsRenderer?: NestedRenderer<T>,
44
44
  api?: string,
@@ -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
- ? ValueOrErrors.Default.return(null)
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) =>
@@ -6,7 +6,7 @@ import {
6
6
  TableAbstractRendererState,
7
7
  TableLayout,
8
8
  Expr,
9
- PredicateVisibleColumns,
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: PredicateVisibleColumns,
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 toRawObject(delta.replace, delta.type, delta.state).Then(
652
- (value) =>
653
- ValueOrErrors.Default.return<
654
- [
655
- DispatchDeltaTransfer<DispatchDeltaTransferCustom>,
656
- DispatchDeltaTransferComparand,
657
- AggregatedFlags<Flags>,
658
- ],
659
- string
660
- >([
661
- {
662
- Discriminator: "UnitReplace",
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(
@@ -128,6 +128,7 @@ export const RecordDispatcher = {
128
128
  fieldTemplates.map((template) => [template[0], template[1]]),
129
129
  ),
130
130
  renderer.tabs,
131
+ renderer.disabledFields,
131
132
  dispatcherContext.IdProvider,
132
133
  dispatcherContext.ErrorRenderer,
133
134
  isInlined,
@@ -249,20 +249,91 @@ export const FormLayout = {
249
249
  },
250
250
  };
251
251
 
252
- export type PredicateVisibleColumns =
252
+ export type PredicateComputedOrInlined =
253
253
  | {
254
254
  kind: "Computed";
255
- columns: Expr;
255
+ content: Expr;
256
256
  }
257
257
  | {
258
258
  kind: "Inlined";
259
- columns: Array<string>;
259
+ content: Array<string>;
260
260
  };
261
261
 
262
- export const RawVisibleColumns = {
263
- isInlined: (rawVisibleColumns: unknown): rawVisibleColumns is Array<string> =>
264
- Array.isArray(rawVisibleColumns) &&
265
- rawVisibleColumns.every((column) => typeof column == "string"),
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<PredicateVisibleColumns, string> => {
280
- if (RawVisibleColumns.isInlined(rawVisibleColumns)) {
281
- return ValueOrErrors.Default.return({
282
- kind: "Inlined",
283
- columns: rawVisibleColumns,
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
- columns: expr,
362
+ content: expr,
290
363
  }),
291
364
  );
292
365
  },
293
366
  ComputeLayout: (
294
367
  bindings: Bindings,
295
- visibleColumns: PredicateVisibleColumns,
368
+ visibleColumns: PredicateComputedOrInlined,
296
369
  ): ValueOrErrors<CalculatedTableLayout, string> => {
297
370
  if (visibleColumns.kind == "Inlined") {
298
371
  return ValueOrErrors.Default.return({
299
- columns: visibleColumns.columns,
372
+ columns: visibleColumns.content,
300
373
  });
301
374
  }
302
- return Expr.Operations.Evaluate(bindings)(visibleColumns.columns).Then(
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
- PredicateVisibleColumns,
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: PredicateVisibleColumns;
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
- PredicateVisibleColumns,
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: PredicateVisibleColumns;
67
+ visibleColumns: PredicateComputedOrInlined;
68
68
  columnHeaders: Map<FieldName, string | undefined>;
69
69
  form: EntityFormTemplate<any, any, any, any>;
70
70
  };