ballerina-core 1.0.262 → 1.0.266

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.
Files changed (159) hide show
  1. package/bin/main.d.ts +4 -0
  2. package/bin/main.d.ts.map +1 -1
  3. package/bin/main.js +4 -0
  4. package/bin/main.js.map +1 -1
  5. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/layout/state.d.ts +51 -0
  6. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/layout/state.d.ts.map +1 -0
  7. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/layout/state.js +57 -0
  8. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/layout/state.js.map +1 -0
  9. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/domains/recordFieldRenderer/state.d.ts +1 -7
  10. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/domains/recordFieldRenderer/state.d.ts.map +1 -1
  11. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/domains/recordFieldRenderer/state.js +6 -19
  12. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/domains/recordFieldRenderer/state.js.map +1 -1
  13. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/state.d.ts +2 -3
  14. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/state.d.ts.map +1 -1
  15. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/state.js +11 -11
  16. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/state.js.map +1 -1
  17. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/domains/tableCellRenderer/state.d.ts +3 -9
  18. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/domains/tableCellRenderer/state.d.ts.map +1 -1
  19. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/domains/tableCellRenderer/state.js +2 -11
  20. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/domains/tableCellRenderer/state.js.map +1 -1
  21. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/state.d.ts +2 -6
  22. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/state.d.ts.map +1 -1
  23. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/state.js +10 -14
  24. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/state.js.map +1 -1
  25. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/state.d.ts.map +1 -1
  26. package/bin/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/state.js.map +1 -1
  27. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/base-64-file/template.js +1 -1
  28. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/base-64-file/template.js.map +1 -1
  29. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/boolean/template.js +1 -1
  30. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/boolean/template.js.map +1 -1
  31. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/date/template.js +1 -1
  32. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/date/template.js.map +1 -1
  33. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum/template.js +1 -1
  34. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum/template.js.map +1 -1
  35. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum-multiselect/template.js +1 -1
  36. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum-multiselect/template.js.map +1 -1
  37. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/template.d.ts.map +1 -1
  38. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/template.js +3 -3
  39. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/template.js.map +1 -1
  40. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/map/template.d.ts.map +1 -1
  41. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/map/template.js +3 -3
  42. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/map/template.js.map +1 -1
  43. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/number/template.js +1 -1
  44. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/number/template.js.map +1 -1
  45. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/template.d.ts.map +1 -1
  46. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/template.js +3 -3
  47. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/template.js.map +1 -1
  48. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/readOnly/template.d.ts.map +1 -1
  49. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/readOnly/template.js +2 -2
  50. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/readOnly/template.js.map +1 -1
  51. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/template.d.ts +2 -4
  52. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/template.d.ts.map +1 -1
  53. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/template.js +18 -20
  54. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/template.js.map +1 -1
  55. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream/template.d.ts.map +1 -1
  56. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream/template.js +1 -1
  57. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream/template.js.map +1 -1
  58. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream-multiselect/template.d.ts.map +1 -1
  59. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream-multiselect/template.js +1 -2
  60. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream-multiselect/template.js.map +1 -1
  61. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/secret/template.js +1 -1
  62. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/secret/template.js.map +1 -1
  63. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/state.d.ts +10 -1
  64. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/state.d.ts.map +1 -1
  65. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/state.js.map +1 -1
  66. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/string/template.js +1 -1
  67. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/string/template.js.map +1 -1
  68. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/template.d.ts.map +1 -1
  69. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/template.js +3 -3
  70. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/template.js.map +1 -1
  71. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/template.d.ts +1 -1
  72. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/template.d.ts.map +1 -1
  73. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/template.js +29 -32
  74. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/template.js.map +1 -1
  75. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/tuple/template.d.ts.map +1 -1
  76. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/tuple/template.js +2 -2
  77. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/tuple/template.js.map +1 -1
  78. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/union/template.d.ts.map +1 -1
  79. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/union/template.js +2 -2
  80. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/union/template.js.map +1 -1
  81. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/unit/template.js +1 -1
  82. package/bin/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/unit/template.js.map +1 -1
  83. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/lookup/state.d.ts.map +1 -1
  84. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/lookup/state.js +5 -1
  85. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/lookup/state.js.map +1 -1
  86. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/state.d.ts +1 -1
  87. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/state.d.ts.map +1 -1
  88. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/state.js +7 -5
  89. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/state.js.map +1 -1
  90. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/table/state.d.ts +1 -1
  91. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/table/state.d.ts.map +1 -1
  92. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/table/state.js +5 -4
  93. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/table/state.js.map +1 -1
  94. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/unionDispatcher/state.d.ts +1 -1
  95. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/unionDispatcher/state.d.ts.map +1 -1
  96. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/unionDispatcher/state.js +6 -2
  97. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/unionDispatcher/state.js.map +1 -1
  98. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/state.d.ts +1 -1
  99. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/state.d.ts.map +1 -1
  100. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/state.js +5 -5
  101. package/bin/src/forms/domains/dispatched-forms/runner/domains/dispatcher/state.js.map +1 -1
  102. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/template.d.ts.map +1 -1
  103. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/template.js +1 -1
  104. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/create/template.js.map +1 -1
  105. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/template.d.ts.map +1 -1
  106. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/template.js +1 -1
  107. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/edit/template.js.map +1 -1
  108. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/template.d.ts.map +1 -1
  109. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/template.js +1 -1
  110. package/bin/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/template.js.map +1 -1
  111. package/bin/src/forms/domains/dispatched-forms/runner/domains/traversal/state.d.ts.map +1 -1
  112. package/bin/src/forms/domains/dispatched-forms/runner/domains/traversal/state.js +1 -12
  113. package/bin/src/forms/domains/dispatched-forms/runner/domains/traversal/state.js.map +1 -1
  114. package/bin/src/forms/domains/dispatched-forms/runner/state.d.ts +2 -1
  115. package/bin/src/forms/domains/dispatched-forms/runner/state.d.ts.map +1 -1
  116. package/bin/src/forms/domains/dispatched-forms/runner/state.js.map +1 -1
  117. package/bin/src/forms/domains/dispatched-forms/runner/template.d.ts +1 -0
  118. package/bin/src/forms/domains/dispatched-forms/runner/template.d.ts.map +1 -1
  119. package/bin/src/forms/domains/launcher/coroutines/runner.d.ts.map +1 -1
  120. package/bin/src/forms/domains/launcher/template.d.ts.map +1 -1
  121. package/main.ts +18 -0
  122. package/package.json +3 -3
  123. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/layout/state.ts +127 -0
  124. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/domains/recordFieldRenderer/state.ts +7 -45
  125. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/record/state.ts +18 -37
  126. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/domains/tableCellRenderer/state.ts +19 -54
  127. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/domains/table/state.ts +37 -51
  128. package/src/forms/domains/dispatched-forms/deserializer/domains/specification/domains/forms/domains/renderer/state.ts +0 -1
  129. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/base-64-file/template.tsx +1 -1
  130. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/boolean/template.tsx +1 -1
  131. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/date/template.tsx +1 -1
  132. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum/template.tsx +1 -1
  133. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/enum-multiselect/template.tsx +1 -1
  134. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/list/template.tsx +11 -5
  135. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/map/template.tsx +11 -3
  136. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/number/template.tsx +1 -1
  137. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/one/template.tsx +9 -3
  138. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/readOnly/template.tsx +5 -2
  139. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/record/template.tsx +31 -53
  140. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream/template.tsx +1 -2
  141. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/searchable-infinite-stream-multiselect/template.tsx +1 -3
  142. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/secret/template.tsx +1 -1
  143. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/state.ts +11 -0
  144. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/string/template.tsx +1 -1
  145. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/sum/template.tsx +9 -3
  146. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/table/template.tsx +51 -54
  147. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/tuple/template.tsx +7 -2
  148. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/union/template.tsx +7 -3
  149. package/src/forms/domains/dispatched-forms/runner/domains/abstract-renderers/unit/template.tsx +1 -1
  150. package/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/lookup/state.ts +10 -4
  151. package/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/record/state.ts +6 -3
  152. package/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/table/state.ts +4 -2
  153. package/src/forms/domains/dispatched-forms/runner/domains/dispatcher/domains/unionDispatcher/state.ts +7 -0
  154. package/src/forms/domains/dispatched-forms/runner/domains/dispatcher/state.ts +6 -0
  155. package/src/forms/domains/dispatched-forms/runner/domains/kind/create/template.tsx +3 -0
  156. package/src/forms/domains/dispatched-forms/runner/domains/kind/edit/template.tsx +3 -0
  157. package/src/forms/domains/dispatched-forms/runner/domains/kind/passthrough/template.tsx +3 -0
  158. package/src/forms/domains/dispatched-forms/runner/domains/traversal/state.ts +0 -13
  159. package/src/forms/domains/dispatched-forms/runner/state.ts +2 -0
@@ -4,13 +4,9 @@ import {
4
4
  DispatchCommonFormState,
5
5
  DispatchDelta,
6
6
  DispatchParsedType,
7
- Expr,
8
- FormLayout,
9
- PredicateFormLayout,
10
7
  PredicateValue,
11
8
  replaceWith,
12
9
  Updater,
13
- ValueOrErrors,
14
10
  ValueRecord,
15
11
  DispatchOnChange,
16
12
  IdWrapperProps,
@@ -20,9 +16,9 @@ import {
20
16
  CommonAbstractRendererReadonlyContext,
21
17
  CommonAbstractRendererState,
22
18
  CommonAbstractRendererForeignMutationsExpected,
23
- StringSerializedType,
24
- DisabledFields,
25
- PredicateComputedOrInlined,
19
+ FormLayout,
20
+ ValueOrErrors,
21
+ PredicateFormLayout,
26
22
  } from "../../../../../../../../main";
27
23
  import { Template } from "../../../../../../../template/state";
28
24
 
@@ -52,15 +48,12 @@ export const RecordAbstractRenderer = <
52
48
  CommonAbstractRendererState,
53
49
  CommonAbstractRendererForeignMutationsExpected<Flags>
54
50
  >;
55
- visible?: Expr;
56
- disabled?: Expr;
57
51
  label?: string;
58
52
  GetDefaultState: () => CommonAbstractRendererState;
59
53
  }
60
54
  >,
61
55
  FieldRenderers: Map<string, RecordFieldRenderer<any>>,
62
56
  Layout: PredicateFormLayout,
63
- DisabledFieldsPredicate: PredicateComputedOrInlined,
64
57
  IdProvider: (props: IdWrapperProps) => React.ReactNode,
65
58
  ErrorRenderer: (props: ErrorRendererProps) => React.ReactNode,
66
59
  isInlined: boolean,
@@ -122,13 +115,17 @@ export const RecordAbstractRenderer = <
122
115
  extraContext: _.extraContext,
123
116
  customPresentationContext: _.customPresentationContext,
124
117
  remoteEntityVersionIdentifier: _.remoteEntityVersionIdentifier,
125
- domNodeAncestorPath:
126
- _.domNodeAncestorPath + `[record][${fieldName}]`,
118
+ domNodeAncestorPath: _.domNodeAncestorPath + `[${fieldName}]`,
119
+ predictionAncestorPath:
120
+ _.predictionAncestorPath + `[${fieldName}]`,
121
+ layoutAncestorPath:
122
+ _.layoutAncestorPath + `[record][${fieldName}]`,
127
123
  labelContext,
128
124
  typeAncestors: [_.type as DispatchParsedType<any>].concat(
129
125
  _.typeAncestors,
130
126
  ),
131
127
  lookupTypeAncestorNames: _.lookupTypeAncestorNames,
128
+ preprocessedSpecContext: _.preprocessedSpecContext,
132
129
  };
133
130
  },
134
131
  )
@@ -220,7 +217,7 @@ export const RecordAbstractRenderer = <
220
217
  RecordAbstractRendererForeignMutationsExpected<Flags>,
221
218
  RecordAbstractRendererView<CustomPresentationContext, Flags, ExtraContext>
222
219
  >((props) => {
223
- const domNodeId = props.context.domNodeAncestorPath + "[record]";
220
+ const domNodeId = props.context.domNodeAncestorPath;
224
221
 
225
222
  if (
226
223
  !PredicateValue.Operations.IsRecord(props.context.value) &&
@@ -244,10 +241,19 @@ export const RecordAbstractRenderer = <
244
241
  ? props.context.bindings
245
242
  : props.context.bindings.set("local", props.context.value);
246
243
 
247
- const calculatedLayout = FormLayout.Operations.ComputeLayout(
248
- updatedBindings,
249
- Layout,
250
- );
244
+ const layoutFromPreprocessor =
245
+ props.context.preprocessedSpecContext?.formLayouts.get(
246
+ props.context.layoutAncestorPath,
247
+ );
248
+
249
+ if (layoutFromPreprocessor == undefined) {
250
+ console.warn("Layout not found for " + props.context.layoutAncestorPath);
251
+ }
252
+
253
+ const calculatedLayout =
254
+ layoutFromPreprocessor != undefined
255
+ ? ValueOrErrors.Default.return(layoutFromPreprocessor)
256
+ : FormLayout.Operations.ComputeLayout(updatedBindings, Layout);
251
257
 
252
258
  // TODO -- set error template up top
253
259
  if (calculatedLayout.kind == "errors") {
@@ -257,18 +263,8 @@ export const RecordAbstractRenderer = <
257
263
 
258
264
  const visibleFieldKeys = ValueOrErrors.Operations.All(
259
265
  List(
260
- FieldTemplates.map(({ visible }, fieldName) =>
261
- visible == undefined
262
- ? ValueOrErrors.Default.return(fieldName)
263
- : Expr.Operations.EvaluateAs("visibility predicate")(
264
- updatedBindings,
265
- )(visible).Then((value) =>
266
- ValueOrErrors.Default.return(
267
- PredicateValue.Operations.IsBoolean(value) && value
268
- ? fieldName
269
- : null,
270
- ),
271
- ),
266
+ FieldTemplates.map((_, fieldName) =>
267
+ ValueOrErrors.Default.return<string, string>(fieldName),
272
268
  ).valueSeq(),
273
269
  ),
274
270
  );
@@ -293,32 +289,14 @@ export const RecordAbstractRenderer = <
293
289
  visibleFieldKeys.value.filter((fieldName) => fieldName != null),
294
290
  );
295
291
 
296
- const calculatedDisabledFields = DisabledFields.Operations.Compute(
297
- updatedBindings,
298
- DisabledFieldsPredicate,
299
- );
300
-
301
- const disabledFieldsValue =
302
- calculatedDisabledFields.kind == "value"
303
- ? calculatedDisabledFields.value.fields
304
- : [];
305
-
306
292
  const disabledFieldKeys = ValueOrErrors.Operations.All(
307
293
  List(
308
- FieldTemplates.map(({ disabled }, fieldName) =>
309
- disabled == undefined
310
- ? disabledFieldsValue.includes(fieldName)
311
- ? ValueOrErrors.Default.return(fieldName)
312
- : ValueOrErrors.Default.return(null)
313
- : Expr.Operations.EvaluateAs("disabled predicate")(updatedBindings)(
314
- disabled,
315
- ).Then((value) =>
316
- ValueOrErrors.Default.return(
317
- PredicateValue.Operations.IsBoolean(value) && value
318
- ? fieldName
319
- : null,
320
- ),
321
- ),
294
+ FieldTemplates.map((_, fieldName) =>
295
+ props.context.preprocessedSpecContext?.disabledFields?.has(
296
+ props.context.predictionAncestorPath + `[${fieldName}]`,
297
+ )
298
+ ? ValueOrErrors.Default.return(fieldName)
299
+ : ValueOrErrors.Default.return(null),
322
300
  ).valueSeq(),
323
301
  ),
324
302
  );
@@ -109,8 +109,7 @@ export const SearchableInfiniteStreamAbstractRenderer = <
109
109
  ExtraContext
110
110
  >
111
111
  >((props) => {
112
- const domNodeId =
113
- props.context.domNodeAncestorPath + "[searchableInfiniteStream]";
112
+ const domNodeId = props.context.domNodeAncestorPath;
114
113
 
115
114
  if (!PredicateValue.Operations.IsOption(props.context.value)) {
116
115
  console.error(
@@ -111,9 +111,7 @@ export const InfiniteMultiselectDropdownFormAbstractRenderer = <
111
111
  ExtraContext
112
112
  >
113
113
  >((props) => {
114
- const domNodeId =
115
- props.context.domNodeAncestorPath +
116
- "[searchableInfiniteStreamMultiselect]";
114
+ const domNodeId = props.context.domNodeAncestorPath;
117
115
 
118
116
  if (!PredicateValue.Operations.IsRecord(props.context.value)) {
119
117
  console.error(
@@ -32,7 +32,7 @@ export const SecretAbstractRenderer = <
32
32
  SecretAbstractRendererForeignMutationsExpected<Flags>,
33
33
  SecretAbstractRendererView<CustomPresentationContext, Flags, ExtraContext>
34
34
  >((props) => {
35
- const domNodeId = props.context.domNodeAncestorPath + "[secret]";
35
+ const domNodeId = props.context.domNodeAncestorPath;
36
36
 
37
37
  if (!PredicateValue.Operations.IsString(props.context.value)) {
38
38
  console.error(
@@ -1,7 +1,9 @@
1
+ import { Map, Set } from "immutable";
1
2
  import {
2
3
  Bindings,
3
4
  DispatchOnChange,
4
5
  DispatchParsedType,
6
+ FormLayout,
5
7
  NestedRenderer,
6
8
  PredicateValue,
7
9
  Renderer,
@@ -34,14 +36,23 @@ export type CommonAbstractRendererReadonlyContext<
34
36
  customPresentationContext: C | undefined;
35
37
  remoteEntityVersionIdentifier: string;
36
38
  domNodeAncestorPath: string;
39
+ predictionAncestorPath: string;
40
+ layoutAncestorPath: string;
37
41
  typeAncestors: DispatchParsedType<any>[];
38
42
  lookupTypeAncestorNames: string[];
43
+ preprocessedSpecContext?: PreprocessedSpecContext;
39
44
  };
40
45
 
41
46
  export type CommonAbstractRendererViewOnlyReadonlyContext = {
42
47
  domNodeId: string;
43
48
  };
44
49
 
50
+ export type PreprocessedSpecContext = {
51
+ formLayouts: Map<string, FormLayout>;
52
+ tableLayouts: Map<string, string[]>;
53
+ disabledFields: Set<string>;
54
+ };
55
+
45
56
  export type CommonAbstractRendererState = {
46
57
  commonFormState: DispatchCommonFormState;
47
58
  customFormState: unknown;
@@ -35,7 +35,7 @@ export const StringAbstractRenderer = <
35
35
  StringAbstractRendererForeignMutationsExpected<Flags>,
36
36
  StringAbstractRendererView<CustomPresentationContext, Flags, ExtraContext>
37
37
  >((props) => {
38
- const domNodeId = props.context.domNodeAncestorPath + "[string]";
38
+ const domNodeId = props.context.domNodeAncestorPath;
39
39
 
40
40
  if (!PredicateValue.Operations.IsString(props.context.value)) {
41
41
  console.error(
@@ -88,11 +88,14 @@ export const SumAbstractRenderer = <
88
88
  customPresentationContext: _.customPresentationContext,
89
89
  remoteEntityVersionIdentifier:
90
90
  _.remoteEntityVersionIdentifier,
91
- domNodeAncestorPath: _.domNodeAncestorPath + "[sum][left]",
91
+ domNodeAncestorPath: _.domNodeAncestorPath + "[Value]",
92
+ predictionAncestorPath: _.predictionAncestorPath + "[Value]",
93
+ layoutAncestorPath: _.layoutAncestorPath + "[sum][left]",
92
94
  typeAncestors: [_.type as DispatchParsedType<any>].concat(
93
95
  _.typeAncestors,
94
96
  ),
95
97
  lookupTypeAncestorNames: _.lookupTypeAncestorNames,
98
+ preprocessedSpecContext: _.preprocessedSpecContext,
96
99
  labelContext,
97
100
  };
98
101
  },
@@ -184,11 +187,14 @@ export const SumAbstractRenderer = <
184
187
  customPresentationContext: _.customPresentationContext,
185
188
  remoteEntityVersionIdentifier:
186
189
  _.remoteEntityVersionIdentifier,
187
- domNodeAncestorPath: _.domNodeAncestorPath + "[sum][right]",
190
+ domNodeAncestorPath: _.domNodeAncestorPath + "[Value]",
191
+ predictionAncestorPath: _.predictionAncestorPath + "[Value]",
192
+ layoutAncestorPath: _.layoutAncestorPath + "[sum][right]",
188
193
  typeAncestors: [_.type as DispatchParsedType<any>].concat(
189
194
  _.typeAncestors,
190
195
  ),
191
196
  lookupTypeAncestorNames: _.lookupTypeAncestorNames,
197
+ preprocessedSpecContext: _.preprocessedSpecContext,
192
198
  labelContext,
193
199
  };
194
200
  },
@@ -251,7 +257,7 @@ export const SumAbstractRenderer = <
251
257
  SumAbstractRendererForeignMutationsExpected<Flags>,
252
258
  SumAbstractRendererView<CustomPresentationContext, Flags, ExtraContext>
253
259
  >((props) => {
254
- const domNodeId = props.context.domNodeAncestorPath + "[sum]";
260
+ const domNodeId = props.context.domNodeAncestorPath;
255
261
 
256
262
  if (
257
263
  !PredicateValue.Operations.IsSum(props.context.value) &&
@@ -84,7 +84,6 @@ export const TableAbstractRenderer = <
84
84
  | undefined,
85
85
  DetailsRendererRaw: NestedRenderer<any> | undefined,
86
86
  VisibleColumnsPredicate: PredicateComputedOrInlined,
87
- DisabledColumnsPredicate: PredicateComputedOrInlined,
88
87
  IdProvider: (props: IdWrapperProps) => React.ReactNode,
89
88
  ErrorRenderer: (props: ErrorRendererProps) => React.ReactNode,
90
89
  TableEntityType: RecordType<any>,
@@ -165,6 +164,7 @@ export const TableAbstractRenderer = <
165
164
  >,
166
165
  ) =>
167
166
  (rowId: string) =>
167
+ (idx: number) =>
168
168
  (value: PredicateValue) =>
169
169
  (disabled: boolean) =>
170
170
  (flags: Flags | undefined) =>
@@ -214,10 +214,13 @@ export const TableAbstractRenderer = <
214
214
  typeAncestors: [_.type as DispatchParsedType<any>].concat(
215
215
  _.typeAncestors,
216
216
  ),
217
- domNodeAncestorPath:
218
- _.domNodeAncestorPath +
219
- `[table][cell][${rowId}][record][${column}]`,
217
+ domNodeAncestorPath: _.domNodeAncestorPath + `[${idx}][${column}]`,
218
+ predictionAncestorPath:
219
+ _.predictionAncestorPath + `[Values][element][${column}]`,
220
+ layoutAncestorPath:
221
+ _.layoutAncestorPath + `[table][row][${column}]`,
220
222
  lookupTypeAncestorNames: _.lookupTypeAncestorNames,
223
+ preprocessedSpecContext: _.preprocessedSpecContext,
221
224
  labelContext,
222
225
  };
223
226
  })
@@ -391,7 +394,11 @@ export const TableAbstractRenderer = <
391
394
  ),
392
395
  domNodeAncestorPath:
393
396
  _.domNodeAncestorPath + `[table][cell][${selectedDetailRow}]`,
397
+ predictionAncestorPath:
398
+ _.predictionAncestorPath + `[Values][element]`,
399
+ layoutAncestorPath: _.layoutAncestorPath + `[table][details]`,
394
400
  lookupTypeAncestorNames: _.lookupTypeAncestorNames,
401
+ preprocessedSpecContext: _.preprocessedSpecContext,
395
402
  labelContext,
396
403
  };
397
404
  })
@@ -541,7 +548,7 @@ export const TableAbstractRenderer = <
541
548
  TableAbstractRendererForeignMutationsExpected<Flags>,
542
549
  TableAbstractRendererView<CustomPresentationContext, Flags, ExtraContext>
543
550
  >((props) => {
544
- const domNodeId = props.context.domNodeAncestorPath + "[table]";
551
+ const domNodeId = props.context.domNodeAncestorPath;
545
552
 
546
553
  if (!PredicateValue.Operations.IsTable(props.context.value)) {
547
554
  console.error(
@@ -563,10 +570,24 @@ export const TableAbstractRenderer = <
563
570
  props.context.value,
564
571
  );
565
572
 
566
- const visibleColumns = TableLayout.Operations.ComputeLayout(
567
- updatedBindings,
568
- VisibleColumnsPredicate,
569
- );
573
+ const preprocessedVisibleColumns =
574
+ props.context.preprocessedSpecContext?.tableLayouts.get(
575
+ props.context.layoutAncestorPath,
576
+ ) ?? undefined;
577
+
578
+ if (preprocessedVisibleColumns == undefined) {
579
+ console.warn(
580
+ "Visible columns not found for " + props.context.layoutAncestorPath,
581
+ );
582
+ }
583
+
584
+ const visibleColumns =
585
+ preprocessedVisibleColumns != undefined
586
+ ? ValueOrErrors.Default.return({ columns: preprocessedVisibleColumns })
587
+ : TableLayout.Operations.ComputeLayout(
588
+ updatedBindings,
589
+ VisibleColumnsPredicate,
590
+ );
570
591
 
571
592
  if (visibleColumns.kind == "errors") {
572
593
  console.error(visibleColumns.errors.map((error) => error).join("\n"));
@@ -577,47 +598,19 @@ export const TableAbstractRenderer = <
577
598
  );
578
599
  }
579
600
 
580
- // TODO: find a better way to warn about missing fields without cluttering the console
581
- // visibleColumns.value.columns.forEach((column) => {
582
- // if (!CellTemplates.has(column)) {
583
- // console.warn(
584
- // `Column ${column} is defined in the visible columns, but not in the CellTemplates. A renderer in the table columns is missing for this column.
585
- // \n...When rendering \n...${domNodeId}
586
- // `,
587
- // );
588
- // }
589
- // });
590
-
591
- const calculatedDisabledColumns = TableLayout.Operations.ComputeLayout(
592
- updatedBindings,
593
- DisabledColumnsPredicate,
594
- );
595
-
596
- const disabledColumnsValue =
597
- calculatedDisabledColumns.kind == "value"
598
- ? calculatedDisabledColumns.value.columns
599
- : [];
600
-
601
601
  // TODO we currently only calculated disabled status on a column basis, predicates will break if we
602
602
  // try to use their local binding (the local is the table).
603
603
  // Later we need to then calculate the disabled on a CELL level, by giving the calculations
604
604
  // the row local binding and calculating per row, not per column.
605
605
  const disabledColumnKeys = ValueOrErrors.Operations.All(
606
606
  List(
607
- CellTemplates.map(({ disabled }, fieldName) =>
608
- disabled == undefined
609
- ? disabledColumnsValue.includes(fieldName)
610
- ? ValueOrErrors.Default.return(fieldName)
611
- : ValueOrErrors.Default.return(null)
612
- : Expr.Operations.EvaluateAs("disabled predicate")(updatedBindings)(
613
- disabled,
614
- ).Then((value) =>
615
- ValueOrErrors.Default.return(
616
- PredicateValue.Operations.IsBoolean(value) && value
617
- ? fieldName
618
- : null,
619
- ),
620
- ),
607
+ CellTemplates.map((_, fieldName) =>
608
+ props.context.preprocessedSpecContext != undefined &&
609
+ props.context.preprocessedSpecContext.disabledFields.includes(
610
+ `[Values][element][${fieldName}]`,
611
+ )
612
+ ? ValueOrErrors.Default.return(fieldName)
613
+ : ValueOrErrors.Default.return(null),
621
614
  ).valueSeq(),
622
615
  ),
623
616
  );
@@ -640,8 +633,8 @@ export const TableAbstractRenderer = <
640
633
 
641
634
  const validColumns = CellTemplates.keySeq().toArray();
642
635
 
643
- const validVisibleColumns = visibleColumns.value.columns.filter((_) =>
644
- validColumns.includes(_),
636
+ const validVisibleColumns = validColumns.filter((column) =>
637
+ visibleColumns.value.columns.includes(column),
645
638
  );
646
639
 
647
640
  const embeddedTableData =
@@ -650,11 +643,12 @@ export const TableAbstractRenderer = <
650
643
  : props.context.value.data.map((rowData, rowId) =>
651
644
  rowData.fields
652
645
  .filter((_, column) => validVisibleColumns.includes(column))
653
- .map((_, column) =>
654
- EmbeddedCellTemplates.get(column)!(rowId)(
646
+ .mapEntries(([column, _], idx) => [
647
+ column,
648
+ EmbeddedCellTemplates.get(column)!(rowId)(idx)(
655
649
  rowData.fields.get(column)!,
656
650
  )(disabledColumnKeysSet.has(column)),
657
- ),
651
+ ]),
658
652
  );
659
653
 
660
654
  const embeddedUnfilteredTableData =
@@ -663,11 +657,14 @@ export const TableAbstractRenderer = <
663
657
  : props.context.value.data.map((rowData, rowId) =>
664
658
  rowData.fields
665
659
  .filter((_, column) => validColumns.includes(column))
666
- .map((_, column) =>
667
- EmbeddedCellTemplates.get(column)!(rowId)(
668
- rowData.fields.get(column)!,
669
- )(disabledColumnKeysSet.has(column)),
670
- ),
660
+ .mapEntries(([column, _], idx) => {
661
+ return [
662
+ column,
663
+ EmbeddedCellTemplates.get(column)!(rowId)(idx)(
664
+ rowData.fields.get(column)!,
665
+ )(disabledColumnKeysSet.has(column)),
666
+ ];
667
+ }),
671
668
  );
672
669
 
673
670
  if (props.context.customFormState.isFilteringInitialized == false) {
@@ -87,12 +87,17 @@ export const DispatchTupleAbstractRenderer = <
87
87
  customPresentationContext: _.customPresentationContext,
88
88
  type: _.type.args[itemIndex],
89
89
  domNodeAncestorPath:
90
- _.domNodeAncestorPath + `[tuple][${itemIndex + 1}]`,
90
+ _.domNodeAncestorPath + `[Item${itemIndex + 1}]`,
91
+ predictionAncestorPath:
92
+ _.predictionAncestorPath + `[Item${itemIndex + 1}]`,
93
+ layoutAncestorPath:
94
+ _.layoutAncestorPath + `[tuple][item${itemIndex + 1}]`,
91
95
  typeAncestors: [_.type as DispatchParsedType<any>].concat(
92
96
  _.typeAncestors,
93
97
  ),
94
98
  labelContext: labelContext,
95
99
  lookupTypeAncestorNames: _.lookupTypeAncestorNames,
100
+ preprocessedSpecContext: _.preprocessedSpecContext,
96
101
  };
97
102
  },
98
103
  )
@@ -175,7 +180,7 @@ export const DispatchTupleAbstractRenderer = <
175
180
  TupleAbstractRendererForeignMutationsExpected<Flags>,
176
181
  TupleAbstractRendererView<CustomPresentationContext, Flags, ExtraContext>
177
182
  >((props) => {
178
- const domNodeId = props.context.domNodeAncestorPath + "[tuple]";
183
+ const domNodeId = props.context.predictionAncestorPath;
179
184
 
180
185
  if (!PredicateValue.Operations.IsTuple(props.context.value)) {
181
186
  console.error(
@@ -88,9 +88,13 @@ export const UnionAbstractRenderer = <
88
88
  typeAncestors: [_.type as DispatchParsedType<any>].concat(
89
89
  _.typeAncestors,
90
90
  ),
91
- domNodeAncestorPath:
92
- _.domNodeAncestorPath + `[union][${caseName}]`,
91
+ domNodeAncestorPath: _.domNodeAncestorPath + `[${caseName}]`,
92
+ predictionAncestorPath:
93
+ _.predictionAncestorPath + `[${caseName}]`,
94
+ layoutAncestorPath:
95
+ _.layoutAncestorPath + `[union][case][${caseName}]`,
93
96
  lookupTypeAncestorNames: _.lookupTypeAncestorNames,
97
+ preprocessedSpecContext: _.preprocessedSpecContext,
94
98
  labelContext,
95
99
  };
96
100
  },
@@ -143,7 +147,7 @@ export const UnionAbstractRenderer = <
143
147
  UnionAbstractRendererForeignMutationsExpected<Flags>,
144
148
  UnionAbstractRendererView<CustomPresentationContext, Flags, ExtraContext>
145
149
  >((props) => {
146
- const domNodeId = props.context.domNodeAncestorPath + "[union]";
150
+ const domNodeId = props.context.domNodeAncestorPath;
147
151
 
148
152
  if (!PredicateValue.Operations.IsUnionCase(props.context.value)) {
149
153
  console.error(
@@ -34,7 +34,7 @@ export const UnitAbstractRenderer = <
34
34
  UnitAbstractRendererForeignMutationsExpected<Flags>,
35
35
  UnitAbstractRendererView<CustomPresentationContext, Flags, ExtraContext>
36
36
  >((props) => {
37
- const domNodeId = props.context.domNodeAncestorPath + "[unit]";
37
+ const domNodeId = props.context.domNodeAncestorPath;
38
38
 
39
39
  if (!PredicateValue.Operations.IsUnit(props.context.value)) {
40
40
  console.error(
@@ -54,10 +54,16 @@ export const LookupDispatcher = {
54
54
  dispatcherContext.IdProvider,
55
55
  dispatcherContext.ErrorRenderer,
56
56
  )
57
- .mapContext((_: any) => ({
58
- ..._,
59
- type: renderer.type,
60
- }))
57
+ .mapContext((_: any) => {
58
+ return {
59
+ ..._,
60
+ type: renderer.type,
61
+ layoutAncestorPath:
62
+ renderer.kind == "lookupType-lookupRenderer"
63
+ ? `[${renderer.lookupRenderer}]`
64
+ : `${_.layoutAncestorPath}`,
65
+ };
66
+ })
61
67
  .withView(dispatcherContext.lookupTypeRenderer()),
62
68
  ),
63
69
  )
@@ -56,6 +56,7 @@ export const RecordDispatcher = {
56
56
  >,
57
57
  isNested: boolean,
58
58
  isInlined: boolean,
59
+ currentLookupRenderer: string | undefined,
59
60
  ): ValueOrErrors<Template<any, any, any, any>, string> =>
60
61
  ValueOrErrors.Operations.All(
61
62
  List<
@@ -97,8 +98,6 @@ export const RecordDispatcher = {
97
98
  fieldName,
98
99
  {
99
100
  template,
100
- visible: fieldRenderer.visible,
101
- disabled: fieldRenderer.disabled,
102
101
  label: fieldRenderer.label,
103
102
  GetDefaultState: () => defaultState,
104
103
  },
@@ -126,7 +125,6 @@ export const RecordDispatcher = {
126
125
  ),
127
126
  renderer.fields,
128
127
  renderer.tabs,
129
- renderer.disabledFields,
130
128
  dispatcherContext.IdProvider,
131
129
  dispatcherContext.ErrorRenderer,
132
130
  isInlined,
@@ -134,6 +132,11 @@ export const RecordDispatcher = {
134
132
  .mapContext((_: any) => ({
135
133
  ..._,
136
134
  type: renderer.type,
135
+ layoutAncestorPath: currentLookupRenderer
136
+ ? `[${currentLookupRenderer}]`
137
+ : isInlined
138
+ ? _.layoutAncestorPath + "[inline]"
139
+ : _.layoutAncestorPath,
137
140
  }))
138
141
  .withView(concreteRenderer),
139
142
  ),
@@ -78,6 +78,7 @@ export const TableDispatcher = {
78
78
  >,
79
79
  tableApi: string | Array<string> | undefined,
80
80
  isInlined: boolean,
81
+ currentLookupRenderer: string | undefined,
81
82
  ): ValueOrErrors<Template<any, any, any, any>, string> =>
82
83
  Array.isArray(tableApi)
83
84
  ? ValueOrErrors.Default.throwOne("lookup api not supported for table")
@@ -163,7 +164,6 @@ export const TableDispatcher = {
163
164
  ).withView(
164
165
  dispatcherContext.lookupTypeRenderer(),
165
166
  ),
166
- disabled: columnRenderer.disabled,
167
167
  label: columnRenderer.label,
168
168
  GetDefaultState: () => defaultState,
169
169
  GetDefaultValue: () => defaultValue,
@@ -288,7 +288,6 @@ export const TableDispatcher = {
288
288
  detailsRenderer,
289
289
  renderer.detailsRenderer,
290
290
  renderer.visibleColumns,
291
- renderer.disabledColumns,
292
291
  dispatcherContext.IdProvider,
293
292
  dispatcherContext.ErrorRenderer,
294
293
  tableEntityType,
@@ -311,6 +310,9 @@ export const TableDispatcher = {
311
310
  )?.methods ?? []),
312
311
  sorting,
313
312
  highlightedFilters,
313
+ layoutAncestorPath: currentLookupRenderer
314
+ ? `[${currentLookupRenderer}]`
315
+ : _.layoutAncestorPath,
314
316
  }))
315
317
  .withView(concreteRenderer),
316
318
  );
@@ -30,7 +30,9 @@ export const UnionDispatcher = {
30
30
  CustomPresentationContext,
31
31
  ExtraContext
32
32
  >,
33
+ isInlined: boolean,
33
34
  isNested: boolean,
35
+ currentLookupRenderer: string | undefined,
34
36
  ): ValueOrErrors<Template<any, any, any, any>, string> =>
35
37
  ValueOrErrors.Operations.All(
36
38
  List<ValueOrErrors<[string, Template<any, any, any, any>], string>>(
@@ -121,6 +123,11 @@ export const UnionDispatcher = {
121
123
  .mapContext((_: any) => ({
122
124
  ..._,
123
125
  type: renderer.type,
126
+ layoutAncestorPath: currentLookupRenderer
127
+ ? `[${currentLookupRenderer}]`
128
+ : isInlined
129
+ ? _.layoutAncestorPath + "[inline]"
130
+ : _.layoutAncestorPath,
124
131
  }))
125
132
  .withView(concreteRenderer),
126
133
  ),