ballerina-core 1.0.172 → 1.0.173

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.172",
5
+ "version": "1.0.173",
6
6
  "main": "main.ts",
7
7
  "scripts": {
8
8
  "prettier": "prettier --write ."
@@ -1,4 +1,4 @@
1
- import { Map } from "immutable";
1
+ import { List, Map } from "immutable";
2
2
  import {
3
3
  ConcreteRendererKinds,
4
4
  DispatchParsedType,
@@ -15,6 +15,39 @@ import { Renderer, SerializedRenderer } from "../../state";
15
15
  export type SerializedListRenderer = {
16
16
  renderer: unknown;
17
17
  elementRenderer: unknown;
18
+ actions: unknown;
19
+ };
20
+
21
+ export const ListMethod = {
22
+ add: "add",
23
+ remove: "remove",
24
+ move: "move",
25
+ duplicate: "duplicate",
26
+ } as const;
27
+ export type ListMethod = (typeof ListMethod)[keyof typeof ListMethod];
28
+
29
+ export type ListMethods = Array<ListMethod>;
30
+ export const ListMethods = {
31
+ Operations: {
32
+ fromRawValue: (value: unknown): ValueOrErrors<ListMethods, string> =>
33
+ typeof value === "undefined"
34
+ ? ValueOrErrors.Default.return([] as ListMethods)
35
+ : typeof value !== "object" || value == null
36
+ ? ValueOrErrors.Default.throwOne(
37
+ `expected an object for list methods, got ${typeof value}`,
38
+ )
39
+ : Object.keys(value).length == 0
40
+ ? ValueOrErrors.Default.return([] as ListMethods)
41
+ : Object.keys(value).find(
42
+ (_) => !ListMethod[_ as keyof typeof ListMethod],
43
+ )
44
+ ? ValueOrErrors.Default.throwOne(
45
+ `expected an object with keys ${Object.keys(ListMethod).join(
46
+ ", ",
47
+ )}, got ${Object.keys(value).join(", ")}`,
48
+ )
49
+ : ValueOrErrors.Default.return(Object.keys(value) as ListMethods),
50
+ },
18
51
  };
19
52
 
20
53
  export type ListRenderer<T> = {
@@ -22,6 +55,7 @@ export type ListRenderer<T> = {
22
55
  renderer: Renderer<T>;
23
56
  elementRenderer: NestedRenderer<T>;
24
57
  type: ListType<T>;
58
+ methods: Array<ListMethod>;
25
59
  };
26
60
 
27
61
  export const ListRenderer = {
@@ -29,11 +63,13 @@ export const ListRenderer = {
29
63
  type: ListType<T>,
30
64
  renderer: Renderer<T>,
31
65
  elementRenderer: NestedRenderer<T>,
66
+ methods?: ListRenderer<T>["methods"],
32
67
  ): ListRenderer<T> => ({
33
68
  kind: "listRenderer",
34
69
  type,
35
70
  renderer,
36
71
  elementRenderer,
72
+ methods: methods ?? [],
37
73
  }),
38
74
  Operations: {
39
75
  hasRenderers: (
@@ -84,8 +120,17 @@ export const ListRenderer = {
84
120
  concreteRenderers,
85
121
  types,
86
122
  ).Then((renderer) =>
87
- ValueOrErrors.Default.return(
88
- ListRenderer.Default(type, renderer, elementRenderer),
123
+ ListMethods.Operations.fromRawValue(
124
+ serializedRenderer.actions,
125
+ ).Then((methods) =>
126
+ ValueOrErrors.Default.return(
127
+ ListRenderer.Default(
128
+ type,
129
+ renderer,
130
+ elementRenderer,
131
+ methods,
132
+ ),
133
+ ),
89
134
  ),
90
135
  ),
91
136
  ),
@@ -52,11 +52,11 @@ export type ListAbstractRendererView<
52
52
  ListAbstractRendererState,
53
53
  ForeignMutationsExpected & {
54
54
  onChange: DispatchOnChange<ValueTuple>;
55
- add: SimpleCallback<Unit>;
56
- remove: SimpleCallback<number>;
57
- move: (elementIndex: number, to: number) => void;
58
- duplicate: SimpleCallback<number>;
59
- insert: SimpleCallback<number>;
55
+ add?: SimpleCallback<Unit>;
56
+ remove?: SimpleCallback<number>;
57
+ move?: (elementIndex: number, to: number) => void;
58
+ duplicate?: SimpleCallback<number>;
59
+ insert?: SimpleCallback<number>;
60
60
  },
61
61
  {
62
62
  embeddedElementTemplate: BasicFun<
@@ -17,6 +17,7 @@ import {
17
17
  import { Template } from "../../../../../../../template/state";
18
18
  import { Value } from "../../../../../../../value/state";
19
19
  import { FormLabel } from "../../../../../singleton/domains/form-label/state";
20
+ import { ListMethods } from "../../../../deserializer/domains/specification/domains/forms/domains/renderer/domains/list/state";
20
21
  import {
21
22
  DispatchParsedType,
22
23
  ListType,
@@ -42,6 +43,7 @@ export const ListAbstractRenderer = <
42
43
  onChange: DispatchOnChange<PredicateValue>;
43
44
  }
44
45
  >,
46
+ methods: ListMethods,
45
47
  IdProvider: (props: IdWrapperProps) => React.ReactNode,
46
48
  ErrorRenderer: (props: ErrorRendererProps) => React.ReactNode,
47
49
  ) => {
@@ -176,134 +178,147 @@ export const ListAbstractRenderer = <
176
178
  }}
177
179
  foreignMutations={{
178
180
  ...props.foreignMutations,
179
- add: (_) => {
180
- const delta: DispatchDelta = {
181
- kind: "ArrayAdd",
182
- value: GetDefaultElementValue(),
183
- state: {
184
- commonFormState: props.context.commonFormState,
185
- elementFormStates: props.context.elementFormStates,
181
+ add: !methods.includes("add")
182
+ ? undefined
183
+ : (_) => {
184
+ const delta: DispatchDelta = {
185
+ kind: "ArrayAdd",
186
+ value: GetDefaultElementValue(),
187
+ state: {
188
+ commonFormState: props.context.commonFormState,
189
+ elementFormStates: props.context.elementFormStates,
190
+ },
191
+ type: (props.context.type as ListType<any>).args[0],
192
+ isWholeEntityMutation: true, // TODO: check
193
+ };
194
+ props.foreignMutations.onChange(
195
+ Updater((list) =>
196
+ PredicateValue.Default.tuple(
197
+ ListRepo.Updaters.push<PredicateValue>(
198
+ GetDefaultElementValue(),
199
+ )(list.values),
200
+ ),
201
+ ),
202
+ delta,
203
+ );
204
+ props.setState(
205
+ ListAbstractRendererState.Updaters.Core.commonFormState(
206
+ DispatchCommonFormState.Updaters.modifiedByUser(
207
+ replaceWith(true),
208
+ ),
209
+ ),
210
+ );
186
211
  },
187
- type: (props.context.type as ListType<any>).args[0],
188
- isWholeEntityMutation: true, // TODO: check
189
- };
190
- props.foreignMutations.onChange(
191
- Updater((list) =>
192
- PredicateValue.Default.tuple(
193
- ListRepo.Updaters.push<PredicateValue>(
194
- GetDefaultElementValue(),
195
- )(list.values),
196
- ),
197
- ),
198
- delta,
199
- );
200
- props.setState(
201
- ListAbstractRendererState.Updaters.Core.commonFormState(
202
- DispatchCommonFormState.Updaters.modifiedByUser(
203
- replaceWith(true),
204
- ),
205
- ),
206
- );
207
- },
208
- remove: (_) => {
209
- const delta: DispatchDelta = {
210
- kind: "ArrayRemoveAt",
211
- index: _,
212
- isWholeEntityMutation: true, // TODO: check
213
- };
214
- props.foreignMutations.onChange(
215
- Updater((list) =>
216
- PredicateValue.Default.tuple(
217
- ListRepo.Updaters.remove<PredicateValue>(_)(list.values),
218
- ),
219
- ),
220
- delta,
221
- );
222
- props.setState(
223
- ListAbstractRendererState.Updaters.Core.commonFormState(
224
- DispatchCommonFormState.Updaters.modifiedByUser(
225
- replaceWith(true),
226
- ),
227
- ),
228
- );
229
- },
230
- move: (index, to) => {
231
- const delta: DispatchDelta = {
232
- kind: "ArrayMoveFromTo",
233
- from: index,
234
- to: to,
235
- isWholeEntityMutation: true, // TODO: check
236
- };
237
- props.foreignMutations.onChange(
238
- Updater((list) =>
239
- PredicateValue.Default.tuple(
240
- ListRepo.Updaters.move<PredicateValue>(
241
- index,
242
- to,
243
- )(list.values),
244
- ),
245
- ),
246
- delta,
247
- );
248
- props.setState(
249
- ListAbstractRendererState.Updaters.Core.commonFormState(
250
- DispatchCommonFormState.Updaters.modifiedByUser(
251
- replaceWith(true),
252
- ),
253
- ),
254
- );
255
- },
256
- duplicate: (_) => {
257
- const delta: DispatchDelta = {
258
- kind: "ArrayDuplicateAt",
259
- index: _,
260
- isWholeEntityMutation: true, // TODO: check
261
- };
262
- props.foreignMutations.onChange(
263
- Updater((list) =>
264
- PredicateValue.Default.tuple(
265
- ListRepo.Updaters.duplicate<PredicateValue>(_)(
266
- list.values,
212
+ remove: !methods.includes("remove")
213
+ ? undefined
214
+ : (_) => {
215
+ const delta: DispatchDelta = {
216
+ kind: "ArrayRemoveAt",
217
+ index: _,
218
+ isWholeEntityMutation: true, // TODO: check
219
+ };
220
+ props.foreignMutations.onChange(
221
+ Updater((list) =>
222
+ PredicateValue.Default.tuple(
223
+ ListRepo.Updaters.remove<PredicateValue>(_)(
224
+ list.values,
225
+ ),
226
+ ),
267
227
  ),
268
- ),
269
- ),
270
- delta,
271
- );
272
- props.setState(
273
- ListAbstractRendererState.Updaters.Core.commonFormState(
274
- DispatchCommonFormState.Updaters.modifiedByUser(
275
- replaceWith(true),
276
- ),
277
- ),
278
- );
279
- },
280
- insert: (_) => {
281
- const delta: DispatchDelta = {
282
- kind: "ArrayAddAt",
283
- value: [_, GetDefaultElementValue()],
284
- elementState: GetDefaultElementState(),
285
- elementType: (props.context.type as ListType<any>).args[0],
286
- isWholeEntityMutation: true, // TODO: check
287
- };
288
- props.foreignMutations.onChange(
289
- Updater((list) =>
290
- PredicateValue.Default.tuple(
291
- ListRepo.Updaters.insert<PredicateValue>(
292
- _,
293
- GetDefaultElementValue(),
294
- )(list.values),
295
- ),
296
- ),
297
- delta,
298
- );
299
- props.setState(
300
- ListAbstractRendererState.Updaters.Core.commonFormState(
301
- DispatchCommonFormState.Updaters.modifiedByUser(
302
- replaceWith(true),
303
- ),
304
- ),
305
- );
306
- },
228
+ delta,
229
+ );
230
+ props.setState(
231
+ ListAbstractRendererState.Updaters.Core.commonFormState(
232
+ DispatchCommonFormState.Updaters.modifiedByUser(
233
+ replaceWith(true),
234
+ ),
235
+ ),
236
+ );
237
+ },
238
+ move: !methods.includes("move")
239
+ ? undefined
240
+ : (index, to) => {
241
+ const delta: DispatchDelta = {
242
+ kind: "ArrayMoveFromTo",
243
+ from: index,
244
+ to: to,
245
+ isWholeEntityMutation: true, // TODO: check
246
+ };
247
+ props.foreignMutations.onChange(
248
+ Updater((list) =>
249
+ PredicateValue.Default.tuple(
250
+ ListRepo.Updaters.move<PredicateValue>(
251
+ index,
252
+ to,
253
+ )(list.values),
254
+ ),
255
+ ),
256
+ delta,
257
+ );
258
+ props.setState(
259
+ ListAbstractRendererState.Updaters.Core.commonFormState(
260
+ DispatchCommonFormState.Updaters.modifiedByUser(
261
+ replaceWith(true),
262
+ ),
263
+ ),
264
+ );
265
+ },
266
+ duplicate: !methods.includes("duplicate")
267
+ ? undefined
268
+ : (_) => {
269
+ const delta: DispatchDelta = {
270
+ kind: "ArrayDuplicateAt",
271
+ index: _,
272
+ isWholeEntityMutation: true, // TODO: check
273
+ };
274
+ props.foreignMutations.onChange(
275
+ Updater((list) =>
276
+ PredicateValue.Default.tuple(
277
+ ListRepo.Updaters.duplicate<PredicateValue>(_)(
278
+ list.values,
279
+ ),
280
+ ),
281
+ ),
282
+ delta,
283
+ );
284
+ props.setState(
285
+ ListAbstractRendererState.Updaters.Core.commonFormState(
286
+ DispatchCommonFormState.Updaters.modifiedByUser(
287
+ replaceWith(true),
288
+ ),
289
+ ),
290
+ );
291
+ },
292
+ insert: !methods.includes("add")
293
+ ? undefined
294
+ : (_) => {
295
+ const delta: DispatchDelta = {
296
+ kind: "ArrayAddAt",
297
+ value: [_, GetDefaultElementValue()],
298
+ elementState: GetDefaultElementState(),
299
+ elementType: (props.context.type as ListType<any>)
300
+ .args[0],
301
+ isWholeEntityMutation: true, // TODO: check
302
+ };
303
+ props.foreignMutations.onChange(
304
+ Updater((list) =>
305
+ PredicateValue.Default.tuple(
306
+ ListRepo.Updaters.insert<PredicateValue>(
307
+ _,
308
+ GetDefaultElementValue(),
309
+ )(list.values),
310
+ ),
311
+ ),
312
+ delta,
313
+ );
314
+ props.setState(
315
+ ListAbstractRendererState.Updaters.Core.commonFormState(
316
+ DispatchCommonFormState.Updaters.modifiedByUser(
317
+ replaceWith(true),
318
+ ),
319
+ ),
320
+ );
321
+ },
307
322
  }}
308
323
  embeddedElementTemplate={embeddedElementTemplate}
309
324
  />
@@ -44,6 +44,7 @@ export const ListDispatcher = {
44
44
  () => defaultElementState,
45
45
  () => defaultElementValue,
46
46
  elementTemplate,
47
+ renderer.methods ?? [],
47
48
  dispatcherContext.IdProvider,
48
49
  dispatcherContext.ErrorRenderer,
49
50
  ).withView(concreteRenderer),