@astroapps/forms-core 1.1.0 → 1.2.0

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.
@@ -61,6 +61,7 @@ export declare function defaultCompoundField(field: string, displayName: string,
61
61
  type: FieldType.Compound;
62
62
  };
63
63
  export declare function mergeField(field: SchemaField, mergeInto: SchemaField[]): SchemaField[];
64
+ export declare function mergeOption(fields: SchemaField[], name: string, value: any, fieldName: string): SchemaField[];
64
65
  export declare function mergeFields(fields: SchemaField[], name: string, value: any, newFields: SchemaField[]): SchemaField[];
65
66
  export declare function addFieldOption(typeField: SchemaField, name: string, value: any): SchemaField;
66
67
  export declare function resolveSchemas<A extends SchemaMap>(schemaMap: A): A;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astroapps/forms-core",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "lib/index.cjs",
package/src/formState.ts CHANGED
@@ -48,6 +48,7 @@ export interface ControlState {
48
48
  definition: ControlDefinition;
49
49
  schemaInterface: SchemaInterface;
50
50
  dataNode?: SchemaDataNode | undefined;
51
+ display?: string;
51
52
  stateId?: string;
52
53
  style?: object;
53
54
  layoutStyle?: object;
@@ -194,39 +195,11 @@ export function createFormState(
194
195
  Control<any>
195
196
  >;
196
197
 
197
- const df = displayOverrides.fields as Record<
198
+ const { text, html } = displayOverrides.fields as Record<
198
199
  KeysOfUnion<TextDisplay | HtmlDisplay>,
199
200
  Control<any>
200
201
  >;
201
202
 
202
- createScopedEffect((c) => {
203
- const textDisplay =
204
- isDisplayControl(def) && isTextDisplay(def.displayData)
205
- ? def.displayData
206
- : undefined;
207
- evalExpr(
208
- c,
209
- textDisplay?.text,
210
- df.text,
211
- textDisplay && firstExpr(formNode, DynamicPropertyType.Display),
212
- coerceString,
213
- );
214
- }, displayOverrides);
215
-
216
- createScopedEffect((c) => {
217
- const htmlDisplay =
218
- isDisplayControl(def) && isHtmlDisplay(def.displayData)
219
- ? def.displayData
220
- : undefined;
221
- evalExpr(
222
- c,
223
- htmlDisplay?.html,
224
- df.html,
225
- htmlDisplay && firstExpr(formNode, DynamicPropertyType.Display),
226
- coerceString,
227
- );
228
- }, displayOverrides);
229
-
230
203
  updateComputedValue(of.displayData, () =>
231
204
  isDisplayControl(def)
232
205
  ? createOverrideProxy(def.displayData, displayOverrides)
@@ -319,6 +292,7 @@ export function createFormState(
319
292
  allowedOptions,
320
293
  disabled,
321
294
  variables,
295
+ display,
322
296
  } = control.fields;
323
297
 
324
298
  createScopedEffect(
@@ -357,6 +331,18 @@ export function createFormState(
357
331
  scope,
358
332
  );
359
333
 
334
+ createScopedEffect(
335
+ (c) =>
336
+ evalExpr(
337
+ c,
338
+ undefined,
339
+ display,
340
+ firstExpr(formNode, DynamicPropertyType.Display),
341
+ coerceString,
342
+ ),
343
+ scope,
344
+ );
345
+
360
346
  updateComputedValue(dataNode, () => lookupDataNode(definition, parent));
361
347
  updateComputedValue(
362
348
  hidden,
@@ -388,6 +374,22 @@ export function createFormState(
388
374
  }
389
375
  }, scope);
390
376
 
377
+ createSyncEffect(() => {
378
+ if (isDisplayControl(def)) {
379
+ if (display.value !== undefined) {
380
+ text.value = isTextDisplay(def.displayData)
381
+ ? display.value
382
+ : NoOverride;
383
+ html.value = isHtmlDisplay(def.displayData)
384
+ ? display.value
385
+ : NoOverride;
386
+ } else {
387
+ text.value = NoOverride;
388
+ html.value = NoOverride;
389
+ }
390
+ }
391
+ }, displayOverrides);
392
+
391
393
  setupValidation(
392
394
  controlImpl,
393
395
  definition,
@@ -498,7 +500,8 @@ export function createOverrideProxy<
498
500
  return new Proxy(proxyFor, {
499
501
  get(target: A, p: string | symbol, receiver: any): any {
500
502
  if (Object.hasOwn(overrides, p)) {
501
- return overrides[p as keyof B]!.value;
503
+ const nv = overrides[p as keyof B]!.value;
504
+ if (nv !== NoOverride) return nv;
502
505
  }
503
506
  return Reflect.get(target, p, receiver);
504
507
  },
@@ -519,4 +522,7 @@ export function createOverrideProxy<
519
522
  });
520
523
  }
521
524
 
525
+ class NoValue {}
526
+ const NoOverride = new NoValue();
527
+
522
528
  type KeysOfUnion<T> = T extends T ? keyof T : never;
@@ -266,6 +266,17 @@ export function mergeField(
266
266
  }
267
267
  }
268
268
 
269
+ export function mergeOption(
270
+ fields: SchemaField[],
271
+ name: string,
272
+ value: any,
273
+ fieldName: string,
274
+ ): SchemaField[] {
275
+ return fields.map((x) =>
276
+ x.field === fieldName ? addFieldOption(x, name, value) : x,
277
+ );
278
+ }
279
+
269
280
  export function mergeFields(
270
281
  fields: SchemaField[],
271
282
  name: string,