@react-typed-forms/schemas 1.0.0-dev.17 → 1.0.0-dev.18

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/lib/index.js CHANGED
@@ -1,9 +1,13 @@
1
1
  var React = require('react');
2
2
  var core = require('@react-typed-forms/core');
3
+ var jsonata = require('jsonata');
4
+ var clsx = require('clsx');
3
5
 
4
6
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
5
7
 
6
8
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
9
+ var jsonata__default = /*#__PURE__*/_interopDefaultLegacy(jsonata);
10
+ var clsx__default = /*#__PURE__*/_interopDefaultLegacy(clsx);
7
11
 
8
12
  function _extends() {
9
13
  _extends = Object.assign ? Object.assign.bind() : function (target) {
@@ -19,6 +23,49 @@ function _extends() {
19
23
  };
20
24
  return _extends.apply(this, arguments);
21
25
  }
26
+ function _objectWithoutPropertiesLoose(source, excluded) {
27
+ if (source == null) return {};
28
+ var target = {};
29
+ var sourceKeys = Object.keys(source);
30
+ var key, i;
31
+ for (i = 0; i < sourceKeys.length; i++) {
32
+ key = sourceKeys[i];
33
+ if (excluded.indexOf(key) >= 0) continue;
34
+ target[key] = source[key];
35
+ }
36
+ return target;
37
+ }
38
+ function _unsupportedIterableToArray(o, minLen) {
39
+ if (!o) return;
40
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
41
+ var n = Object.prototype.toString.call(o).slice(8, -1);
42
+ if (n === "Object" && o.constructor) n = o.constructor.name;
43
+ if (n === "Map" || n === "Set") return Array.from(o);
44
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
45
+ }
46
+ function _arrayLikeToArray(arr, len) {
47
+ if (len == null || len > arr.length) len = arr.length;
48
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
49
+ return arr2;
50
+ }
51
+ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
52
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
53
+ if (it) return (it = it.call(o)).next.bind(it);
54
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
55
+ if (it) o = it;
56
+ var i = 0;
57
+ return function () {
58
+ if (i >= o.length) return {
59
+ done: true
60
+ };
61
+ return {
62
+ done: false,
63
+ value: o[i++]
64
+ };
65
+ };
66
+ }
67
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
68
+ }
22
69
 
23
70
  exports.FieldType = void 0;
24
71
  (function (FieldType) {
@@ -52,10 +99,18 @@ exports.ExpressionType = void 0;
52
99
  ExpressionType["FieldValue"] = "FieldValue";
53
100
  ExpressionType["UserMatch"] = "UserMatch";
54
101
  })(exports.ExpressionType || (exports.ExpressionType = {}));
102
+ exports.AdornmentPlacement = void 0;
103
+ (function (AdornmentPlacement) {
104
+ AdornmentPlacement["ControlStart"] = "ControlStart";
105
+ AdornmentPlacement["ControlEnd"] = "ControlEnd";
106
+ AdornmentPlacement["LabelStart"] = "LabelStart";
107
+ AdornmentPlacement["LabelEnd"] = "LabelEnd";
108
+ })(exports.AdornmentPlacement || (exports.AdornmentPlacement = {}));
55
109
  exports.ControlAdornmentType = void 0;
56
110
  (function (ControlAdornmentType) {
57
111
  ControlAdornmentType["Tooltip"] = "Tooltip";
58
112
  ControlAdornmentType["Accordion"] = "Accordion";
113
+ ControlAdornmentType["HelpText"] = "HelpText";
59
114
  })(exports.ControlAdornmentType || (exports.ControlAdornmentType = {}));
60
115
  exports.DataRenderType = void 0;
61
116
  (function (DataRenderType) {
@@ -68,6 +123,8 @@ exports.DataRenderType = void 0;
68
123
  DataRenderType["Synchronised"] = "Synchronised";
69
124
  DataRenderType["IconSelector"] = "IconSelector";
70
125
  DataRenderType["DateTime"] = "DateTime";
126
+ DataRenderType["Checkbox"] = "Checkbox";
127
+ DataRenderType["Dropdown"] = "Dropdown";
71
128
  })(exports.DataRenderType || (exports.DataRenderType = {}));
72
129
  exports.SyncTextType = void 0;
73
130
  (function (SyncTextType) {
@@ -86,6 +143,16 @@ exports.DisplayDataType = void 0;
86
143
  DisplayDataType["Text"] = "Text";
87
144
  DisplayDataType["Html"] = "Html";
88
145
  })(exports.DisplayDataType || (exports.DisplayDataType = {}));
146
+ exports.ValidatorType = void 0;
147
+ (function (ValidatorType) {
148
+ ValidatorType["Jsonata"] = "Jsonata";
149
+ ValidatorType["Date"] = "Date";
150
+ })(exports.ValidatorType || (exports.ValidatorType = {}));
151
+ exports.DateComparison = void 0;
152
+ (function (DateComparison) {
153
+ DateComparison["NotBefore"] = "NotBefore";
154
+ DateComparison["NotAfter"] = "NotAfter";
155
+ })(exports.DateComparison || (exports.DateComparison = {}));
89
156
  function isDataControlDefinition(x) {
90
157
  return x.type === exports.ControlDefinitionType.Data;
91
158
  }
@@ -131,6 +198,9 @@ function visibility(expr) {
131
198
  expr: expr
132
199
  };
133
200
  }
201
+ function isGridRenderer(options) {
202
+ return options.type === exports.GroupRenderType.Grid;
203
+ }
134
204
 
135
205
  function buildSchema(def) {
136
206
  return Object.entries(def).map(function (x) {
@@ -214,6 +284,10 @@ function fieldDisplayName(field) {
214
284
  var _field$displayName;
215
285
  return (_field$displayName = field.displayName) != null ? _field$displayName : field.field;
216
286
  }
287
+ function hasOptions(o) {
288
+ var _o$options$length, _o$options;
289
+ return ((_o$options$length = (_o$options = o.options) == null ? void 0 : _o$options.length) != null ? _o$options$length : 0) > 0;
290
+ }
217
291
 
218
292
  var _FormRendererComponentsContext = null;
219
293
  function FormRendererComponentsContext() {
@@ -306,15 +380,16 @@ function findField(fields, field) {
306
380
  function controlTitle(title, field) {
307
381
  return title ? title : fieldDisplayName(field);
308
382
  }
309
- function renderControl(definition, formState, hooks, key, wrapChild) {
383
+ function renderControl(definition, formState, hooks, key) {
310
384
  var fields = formState.fields;
311
385
  return visitControlDefinition(definition, {
312
386
  data: function data(def) {
313
387
  var fieldData = findScalarField(fields, def.field);
314
- if (!fieldData) return /*#__PURE__*/React__default["default"].createElement("h1", null, "No schema field for: ", def.field);
388
+ if (!fieldData) return /*#__PURE__*/React__default["default"].createElement("h1", {
389
+ key: key
390
+ }, "No schema field for: ", def.field);
315
391
  return /*#__PURE__*/React__default["default"].createElement(DataRenderer, {
316
392
  key: key,
317
- wrapElem: wrapElem,
318
393
  formState: formState,
319
394
  hooks: hooks,
320
395
  controlDef: def,
@@ -326,8 +401,7 @@ function renderControl(definition, formState, hooks, key, wrapChild) {
326
401
  key: key,
327
402
  hooks: hooks,
328
403
  groupDef: d,
329
- formState: formState,
330
- wrapElem: wrapElem
404
+ formState: formState
331
405
  });
332
406
  },
333
407
  action: function action(d) {
@@ -335,7 +409,6 @@ function renderControl(definition, formState, hooks, key, wrapChild) {
335
409
  key: key,
336
410
  hooks: hooks,
337
411
  formState: formState,
338
- wrapElem: wrapElem,
339
412
  actionDef: d
340
413
  });
341
414
  },
@@ -344,17 +417,12 @@ function renderControl(definition, formState, hooks, key, wrapChild) {
344
417
  key: key,
345
418
  hooks: hooks,
346
419
  formState: formState,
347
- wrapElem: wrapElem,
348
420
  displayDef: d
349
421
  });
350
422
  }
351
423
  }, function () {
352
424
  return /*#__PURE__*/React__default["default"].createElement("h1", null, "Unknown control: ", definition.type);
353
425
  });
354
- function wrapElem(e) {
355
- var _wrapChild;
356
- return (_wrapChild = wrapChild == null ? void 0 : wrapChild(key, e)) != null ? _wrapChild : e;
357
- }
358
426
  }
359
427
  /** @trackControls */
360
428
  function DataRenderer(_ref2) {
@@ -364,17 +432,10 @@ function DataRenderer(_ref2) {
364
432
  var hooks = _ref2.hooks,
365
433
  formState = _ref2.formState,
366
434
  controlDef = _ref2.controlDef,
367
- wrapElem = _ref2.wrapElem,
368
435
  fieldData = _ref2.fieldData;
369
436
  var renderer = useFormRendererComponents();
370
- var props = hooks.useDataProperties(formState, controlDef, fieldData);
371
- var scalarProps = {
372
- formEditState: formState,
373
- field: fieldData,
374
- definition: controlDef,
375
- properties: props
376
- };
377
- return wrapElem(((_props$customRender = props.customRender) != null ? _props$customRender : renderer.renderData)(scalarProps, props.control, false, renderer));
437
+ var props = hooks.useDataProperties(formState, controlDef, fieldData, renderer);
438
+ return ((_props$customRender = props.customRender) != null ? _props$customRender : renderer.renderData)(props);
378
439
  } finally {
379
440
  _effect2();
380
441
  }
@@ -385,15 +446,11 @@ function ActionRenderer(_ref3) {
385
446
  try {
386
447
  var hooks = _ref3.hooks,
387
448
  formState = _ref3.formState,
388
- wrapElem = _ref3.wrapElem,
389
449
  actionDef = _ref3.actionDef;
390
450
  var _useFormRendererCompo = useFormRendererComponents(),
391
451
  renderAction = _useFormRendererCompo.renderAction;
392
452
  var actionControlProperties = hooks.useActionProperties(formState, actionDef);
393
- return wrapElem(renderAction({
394
- definition: actionDef,
395
- properties: actionControlProperties
396
- }));
453
+ return renderAction(actionControlProperties);
397
454
  } finally {
398
455
  _effect3();
399
456
  }
@@ -404,32 +461,10 @@ function GroupRenderer(_ref4) {
404
461
  try {
405
462
  var hooks = _ref4.hooks,
406
463
  formState = _ref4.formState,
407
- groupDef = _ref4.groupDef,
408
- wrapElem = _ref4.wrapElem;
464
+ groupDef = _ref4.groupDef;
409
465
  var renderers = useFormRendererComponents();
410
- var groupProps = hooks.useGroupProperties(formState, groupDef, hooks);
411
- var compoundField = groupDef.compoundField ? findCompoundField(formState.fields, groupDef.compoundField) : undefined;
412
- if (compoundField) {
413
- return wrapElem(renderers.renderCompound({
414
- definition: groupDef,
415
- field: compoundField,
416
- properties: groupProps,
417
- renderChild: function renderChild(k, c, data, wrapChild) {
418
- return renderControl(c, _extends({}, formState, {
419
- fields: compoundField.children,
420
- data: data
421
- }), groupProps.hooks, k, wrapChild);
422
- }
423
- }, formState.data.fields[compoundField.field], renderers));
424
- }
425
- return wrapElem(renderers.renderGroup({
426
- definition: groupDef,
427
- childCount: groupDef.children.length,
428
- properties: groupProps,
429
- renderChild: function renderChild(c, wrapChild) {
430
- return renderControl(groupDef.children[c], formState, groupProps.hooks, c, wrapChild);
431
- }
432
- }));
466
+ var groupProps = hooks.useGroupProperties(formState, groupDef, hooks, renderers);
467
+ return renderers.renderGroup(groupProps);
433
468
  } finally {
434
469
  _effect4();
435
470
  }
@@ -439,16 +474,12 @@ function DisplayRenderer(_ref5) {
439
474
  var _effect5 = core.useComponentTracking();
440
475
  try {
441
476
  var hooks = _ref5.hooks,
442
- wrapElem = _ref5.wrapElem,
443
477
  formState = _ref5.formState,
444
478
  displayDef = _ref5.displayDef;
445
479
  var _useFormRendererCompo2 = useFormRendererComponents(),
446
480
  renderDisplay = _useFormRendererCompo2.renderDisplay;
447
481
  var displayProps = hooks.useDisplayProperties(formState, displayDef);
448
- return wrapElem(renderDisplay({
449
- definition: displayDef,
450
- properties: displayProps
451
- }));
482
+ return renderDisplay(displayProps);
452
483
  } finally {
453
484
  _effect5();
454
485
  }
@@ -467,24 +498,80 @@ function isDataControl(c) {
467
498
  function isGroupControl(c) {
468
499
  return c.type === exports.ControlDefinitionType.Group;
469
500
  }
501
+ var AlwaysVisible = {
502
+ value: true,
503
+ canChange: false
504
+ };
505
+ function createAction(label, onClick, actionId) {
506
+ return {
507
+ definition: {
508
+ type: exports.ControlDefinitionType.Action,
509
+ actionId: actionId != null ? actionId : label,
510
+ title: label
511
+ },
512
+ visible: AlwaysVisible,
513
+ onClick: onClick
514
+ };
515
+ }
516
+ function visitControlData(definition, _ref7, cb) {
517
+ var fields = _ref7.fields,
518
+ _data = _ref7.data;
519
+ return visitControlDefinition(definition, {
520
+ data: function data(def) {
521
+ var fieldData = findScalarField(fields, def.field);
522
+ if (!fieldData) return undefined;
523
+ return cb(def, _data.fields[fieldData.field]);
524
+ },
525
+ group: function group(d) {
526
+ if (d.compoundField) {
527
+ var compound = findCompoundField(fields, d.compoundField);
528
+ if (!compound) return;
529
+ fields = compound.children;
530
+ _data = _data.fields[compound.field];
531
+ }
532
+ var childState = {
533
+ fields: fields,
534
+ data: _data
535
+ };
536
+ for (var _iterator = _createForOfIteratorHelperLoose(d.children), _step; !(_step = _iterator()).done;) {
537
+ var c = _step.value;
538
+ var res = visitControlData(c, childState, cb);
539
+ if (res !== undefined) return res;
540
+ }
541
+ return undefined;
542
+ },
543
+ action: function action(d) {
544
+ return undefined;
545
+ },
546
+ display: function display(d) {
547
+ return undefined;
548
+ }
549
+ }, function () {
550
+ return undefined;
551
+ });
552
+ }
470
553
 
471
- function useDefaultValue(definition, field, formState, useExpression) {
554
+ function useDefaultValue(definition, field, formState, hooks) {
472
555
  var _definition$dynamic;
473
556
  var valueExpression = (_definition$dynamic = definition.dynamic) == null ? void 0 : _definition$dynamic.find(function (x) {
474
557
  return x.type === exports.DynamicPropertyType.DefaultValue;
475
558
  });
476
559
  if (valueExpression) {
477
- return useExpression(valueExpression.expr, formState);
560
+ return hooks.useExpression(valueExpression.expr, formState).value;
478
561
  }
479
562
  return field.defaultValue;
480
563
  }
481
- function useIsControlVisible(definition, formState, useExpression) {
482
- var _definition$dynamic2, _ref2;
564
+ function useIsControlVisible(definition, formState, hooks) {
565
+ var _definition$dynamic2, _ref2, _onlyForTypes$length;
483
566
  var visibleExpression = (_definition$dynamic2 = definition.dynamic) == null ? void 0 : _definition$dynamic2.find(function (x) {
484
567
  return x.type === exports.DynamicPropertyType.Visible;
485
568
  });
486
569
  if (visibleExpression && visibleExpression.expr) {
487
- return Boolean(useExpression(visibleExpression.expr, formState));
570
+ var exprValue = hooks.useExpression(visibleExpression.expr, formState).value;
571
+ return {
572
+ value: Boolean(exprValue),
573
+ canChange: true
574
+ };
488
575
  }
489
576
  var schemaFields = formState.fields;
490
577
  var _useMemo = React.useMemo(function () {
@@ -503,17 +590,28 @@ function useIsControlVisible(definition, formState, useExpression) {
503
590
  compoundField = _useMemo.compoundField;
504
591
  var fieldName = fieldForControl(definition);
505
592
  var onlyForTypes = (_ref2 = fieldName ? findField(schemaFields, fieldName) : undefined) == null ? void 0 : _ref2.onlyForTypes;
506
- return (!compoundField || compoundField.value != null) && (!onlyForTypes || onlyForTypes.length === 0 || Boolean(typeControl.value && onlyForTypes.includes(typeControl.value)));
593
+ var canChange = Boolean(compoundField || ((_onlyForTypes$length = onlyForTypes == null ? void 0 : onlyForTypes.length) != null ? _onlyForTypes$length : 0) > 0);
594
+ var value = (!compoundField || compoundField.value != null) && (!onlyForTypes || onlyForTypes.length === 0 || Boolean(typeControl.value && onlyForTypes.includes(typeControl.value)));
595
+ return {
596
+ value: value,
597
+ canChange: canChange
598
+ };
507
599
  }
508
- function getDefaultScalarControlProperties(definition, field, visible, defaultValue, control, readonly) {
509
- var _definition$required, _ref3;
600
+ function getDefaultScalarControlProperties(definition, field, visible, defaultValue, control, formState) {
601
+ var _definition$renderOpt, _definition$required, _ref3, _formState$readonly;
510
602
  return {
603
+ definition: definition,
604
+ field: field,
511
605
  defaultValue: defaultValue,
512
606
  options: getOptionsForScalarField(field),
607
+ renderOptions: (_definition$renderOpt = definition.renderOptions) != null ? _definition$renderOpt : {
608
+ type: exports.DataRenderType.Standard
609
+ },
513
610
  required: (_definition$required = definition.required) != null ? _definition$required : false,
514
611
  visible: visible,
515
- readonly: (_ref3 = readonly != null ? readonly : definition.readonly) != null ? _ref3 : false,
516
- control: control
612
+ readonly: (_ref3 = (_formState$readonly = formState.readonly) != null ? _formState$readonly : definition.readonly) != null ? _ref3 : false,
613
+ control: control,
614
+ formState: formState
517
615
  };
518
616
  }
519
617
  function getOptionsForScalarField(field) {
@@ -524,53 +622,846 @@ function getOptionsForScalarField(field) {
524
622
  }
525
623
  return undefined;
526
624
  }
527
- var defaultExpressionHook = function defaultExpressionHook(expr, formState) {
528
- switch (expr.type) {
529
- case exports.ExpressionType.FieldValue:
530
- var fvExpr = expr;
531
- return controlForField(fvExpr.field, formState).value === fvExpr.value;
532
- default:
533
- return undefined;
625
+ function createDefaultSchemaHooks() {
626
+ function useExpression(expr, formState) {
627
+ switch (expr.type) {
628
+ case exports.ExpressionType.Jsonata:
629
+ var jExpr = expr;
630
+ var compiledExpr = React.useMemo(function () {
631
+ return jsonata__default["default"](jExpr.expression);
632
+ }, [jExpr.expression]);
633
+ var control = core.useControl();
634
+ core.useControlEffect(function () {
635
+ return formState.data.value;
636
+ }, function (v) {
637
+ try {
638
+ return Promise.resolve(compiledExpr.evaluate(v)).then(function (_compiledExpr$evaluat) {
639
+ control.value = _compiledExpr$evaluat;
640
+ });
641
+ } catch (e) {
642
+ return Promise.reject(e);
643
+ }
644
+ });
645
+ return control;
646
+ case exports.ExpressionType.FieldValue:
647
+ var fvExpr = expr;
648
+ return core.useComputed(function () {
649
+ var fv = controlForField(fvExpr.field, formState).value;
650
+ return Array.isArray(fv) ? fv.includes(fvExpr.value) : fv === fvExpr.value;
651
+ });
652
+ default:
653
+ return core.useControl(undefined);
654
+ }
655
+ }
656
+ function useValidators(formState, isVisible, control, required, validators) {
657
+ if (required) core.useValidator(control, function (v) {
658
+ return isVisible && (v == null || v == "") ? "Please enter a value" : null;
659
+ }, "required");
660
+ validators == null || validators.forEach(function (v, i) {
661
+ switch (v.type) {
662
+ case exports.ValidatorType.Date:
663
+ processDateValidator(v);
664
+ break;
665
+ case exports.ValidatorType.Jsonata:
666
+ var errorMsg = useExpression(v, formState);
667
+ core.useControlEffect(function () {
668
+ return [isVisible, errorMsg.value];
669
+ }, function (_ref4) {
670
+ var isVisible = _ref4[0],
671
+ msg = _ref4[1];
672
+ return control.setError(v.type + i, isVisible ? msg : null);
673
+ }, true);
674
+ break;
675
+ }
676
+ function processDateValidator(dv) {
677
+ var comparisonDate;
678
+ if (dv.fixedDate) {
679
+ comparisonDate = Date.parse(dv.fixedDate);
680
+ } else {
681
+ var nowDate = new Date();
682
+ comparisonDate = Date.UTC(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate());
683
+ if (dv.daysFromCurrent) {
684
+ comparisonDate += dv.daysFromCurrent * 86400000;
685
+ }
686
+ }
687
+ core.useValidator(control, function (v) {
688
+ if (v) {
689
+ var selDate = Date.parse(v);
690
+ var notAfter = dv.comparison === exports.DateComparison.NotAfter;
691
+ if (notAfter ? selDate > comparisonDate : selDate < comparisonDate) {
692
+ return "Date must not be " + (notAfter ? "after" : "before") + " " + new Date(comparisonDate).toDateString();
693
+ }
694
+ }
695
+ return null;
696
+ }, "date" + i);
697
+ }
698
+ });
534
699
  }
535
- };
536
- function createFormEditHooks(useExpression) {
537
700
  return {
538
701
  useExpression: useExpression,
539
- useDataProperties: function useDataProperties(formState, definition, field) {
540
- var visible = useIsControlVisible(definition, formState, useExpression);
541
- var defaultValue = useDefaultValue(definition, field, formState, useExpression);
702
+ useValidators: useValidators
703
+ };
704
+ }
705
+ var defaultFormEditHooks = createFormEditHooks(createDefaultSchemaHooks());
706
+ function createFormEditHooks(schemaHooks) {
707
+ return {
708
+ schemaHooks: schemaHooks,
709
+ useDataProperties: function useDataProperties(formState, definition, field, renderer) {
710
+ var visible = useIsControlVisible(definition, formState, schemaHooks);
711
+ var isVisible = visible.value && !formState.invisible;
712
+ var defaultValue = useDefaultValue(definition, field, formState, schemaHooks);
542
713
  var scalarControl = formState.data.fields[field.field];
543
714
  React.useEffect(function () {
544
- if (!visible) scalarControl.value = null;else if (scalarControl.current.value == null) {
715
+ if (!isVisible) scalarControl.value = null;else if (scalarControl.current.value == null) {
545
716
  scalarControl.value = defaultValue;
546
717
  }
547
- }, [visible, defaultValue]);
548
- return getDefaultScalarControlProperties(definition, field, visible, defaultValue, scalarControl, formState.readonly);
718
+ }, [isVisible, defaultValue]);
719
+ var dataProps = getDefaultScalarControlProperties(definition, field, visible, defaultValue, scalarControl, formState);
720
+ schemaHooks.useValidators(formState, isVisible, scalarControl, dataProps.required, definition.validators);
721
+ React.useEffect(function () {
722
+ var subscription = scalarControl.subscribe(function (c) {
723
+ return c.touched = true;
724
+ }, core.ControlChange.Validate);
725
+ return function () {
726
+ return scalarControl.unsubscribe(subscription);
727
+ };
728
+ }, []);
729
+ if (!field.collection) return dataProps;
730
+ return _extends({}, dataProps, {
731
+ array: defaultArrayRendererProps(scalarControl, field, definition, dataProps.readonly, function (c) {
732
+ return renderer.renderData(_extends({}, dataProps, {
733
+ control: c
734
+ }));
735
+ })
736
+ });
549
737
  },
550
738
  useDisplayProperties: function useDisplayProperties(fs, definition) {
551
- var visible = useIsControlVisible(definition, fs, useExpression);
739
+ var visible = useIsControlVisible(definition, fs, schemaHooks);
552
740
  return {
553
- visible: visible
741
+ visible: visible,
742
+ definition: definition
554
743
  };
555
744
  },
556
- useGroupProperties: function useGroupProperties(fs, definition, hooks) {
557
- var visible = useIsControlVisible(definition, fs, useExpression);
558
- return {
745
+ useGroupProperties: function useGroupProperties(fs, definition, hooks, renderers) {
746
+ var _definition$groupOpti;
747
+ var visible = useIsControlVisible(definition, fs, schemaHooks);
748
+ var field = definition.compoundField ? findCompoundField(fs.fields, definition.compoundField) : undefined;
749
+ var newFs = _extends({}, fs, {
750
+ fields: field ? field.children : fs.fields,
751
+ data: field ? fs.data.fields[field.field] : fs.data,
752
+ invisible: !visible.value || fs.invisible
753
+ });
754
+ var groupProps = {
559
755
  visible: visible,
560
- hooks: hooks
756
+ hooks: hooks,
757
+ hideTitle: (_definition$groupOpti = definition.groupOptions.hideTitle) != null ? _definition$groupOpti : false,
758
+ childCount: definition.children.length,
759
+ renderChild: function renderChild(i) {
760
+ return renderControl(definition.children[i], newFs, hooks, i);
761
+ },
762
+ definition: definition
561
763
  };
764
+ if (field != null && field.collection) {
765
+ return _extends({}, groupProps, {
766
+ array: defaultArrayRendererProps(newFs.data, field, definition, fs.readonly, function (e) {
767
+ return renderers.renderGroup(_extends({}, groupProps, {
768
+ hideTitle: true,
769
+ renderChild: function renderChild(i) {
770
+ return renderControl(definition.children[i], _extends({}, newFs, {
771
+ data: e
772
+ }), hooks, i);
773
+ }
774
+ }));
775
+ })
776
+ });
777
+ }
778
+ return groupProps;
562
779
  },
563
780
  useActionProperties: function useActionProperties(formState, definition) {
564
- var visible = useIsControlVisible(definition, formState, useExpression);
781
+ var visible = useIsControlVisible(definition, formState, schemaHooks);
565
782
  return {
566
783
  visible: visible,
567
- onClick: function onClick() {}
784
+ onClick: function onClick() {},
785
+ definition: definition
568
786
  };
569
787
  }
570
788
  };
571
789
  }
790
+ function defaultArrayRendererProps(control, field, definition, readonly, renderElem) {
791
+ var _control$elements$len, _control$elements;
792
+ return {
793
+ control: control,
794
+ childCount: (_control$elements$len = (_control$elements = control.elements) == null ? void 0 : _control$elements.length) != null ? _control$elements$len : 0,
795
+ field: field,
796
+ definition: definition,
797
+ addAction: !readonly ? {
798
+ definition: {
799
+ title: "Add " + controlTitle(definition.title, field),
800
+ type: exports.ControlDefinitionType.Action,
801
+ actionId: "addElement"
802
+ },
803
+ visible: {
804
+ value: true,
805
+ canChange: false
806
+ },
807
+ onClick: function onClick() {
808
+ return core.addElement(control, elementValueForField(field));
809
+ }
810
+ } : undefined,
811
+ removeAction: !readonly ? function (i) {
812
+ return {
813
+ definition: {
814
+ title: "Remove",
815
+ type: exports.ControlDefinitionType.Action,
816
+ actionId: "removeElement"
817
+ },
818
+ visible: {
819
+ value: true,
820
+ canChange: false
821
+ },
822
+ onClick: function onClick() {
823
+ return core.removeElement(control, control.elements[i]);
824
+ }
825
+ };
826
+ } : undefined,
827
+ childKey: function childKey(i) {
828
+ return control.elements[i].uniqueId;
829
+ },
830
+ renderChild: function renderChild(i) {
831
+ var c = control.elements[i];
832
+ return /*#__PURE__*/React__default["default"].createElement(React.Fragment, {
833
+ key: c.uniqueId
834
+ }, renderElem(c));
835
+ }
836
+ };
837
+ }
838
+
839
+ var _excluded = ["control", "convert"],
840
+ _excluded2 = ["errorText", "value", "onChange"],
841
+ _excluded3 = ["state", "options", "className", "convert", "required", "emptyText", "requiredText"];
842
+ function createFormRenderer(customRenderers, defaultRenderers) {
843
+ var _customRenderers$find, _customRenderers$find2;
844
+ if (customRenderers === void 0) {
845
+ customRenderers = [];
846
+ }
847
+ if (defaultRenderers === void 0) {
848
+ defaultRenderers = createClassStyledRenderers();
849
+ }
850
+ var dataRegistrations = customRenderers.filter(isDataRegistration);
851
+ var adornmentRegistrations = customRenderers.filter(isAdornmentRegistration);
852
+ var labelRenderer = (_customRenderers$find = customRenderers.find(isLabelRegistration)) != null ? _customRenderers$find : defaultRenderers.label;
853
+ var renderVisibility = ((_customRenderers$find2 = customRenderers.find(isVisibilityRegistration)) != null ? _customRenderers$find2 : defaultRenderers.visibility).render;
854
+ var formRenderers = {
855
+ renderAction: renderAction,
856
+ renderData: _renderData,
857
+ renderGroup: _renderGroup,
858
+ renderDisplay: renderDisplay,
859
+ renderLabel: renderLabel,
860
+ renderArray: renderArray,
861
+ renderVisibility: renderVisibility,
862
+ renderAdornment: renderAdornment
863
+ };
864
+ function renderAdornment(props) {
865
+ var _adornmentRegistratio;
866
+ var renderer = (_adornmentRegistratio = adornmentRegistrations.find(function (x) {
867
+ return isOneOf(x.adornmentType, props.definition.type);
868
+ })) != null ? _adornmentRegistratio : defaultRenderers.adornment;
869
+ return renderer.render(props);
870
+ }
871
+ function renderArray(props) {
872
+ return defaultRenderers.array.render(props, formRenderers);
873
+ }
874
+ function renderLabel(props, elem) {
875
+ return labelRenderer.render(props, elem, formRenderers);
876
+ }
877
+ function withAdornments(definition, adornments) {
878
+ var _definition$adornment, _definition$adornment2;
879
+ var rAdornments = adornments ? adornments : (_definition$adornment = (_definition$adornment2 = definition.adornments) == null ? void 0 : _definition$adornment2.map(function (x, i) {
880
+ return renderAdornment({
881
+ definition: x,
882
+ key: i
883
+ });
884
+ })) != null ? _definition$adornment : [];
885
+ function combineAdornments(placement) {
886
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, rAdornments.filter(function (x) {
887
+ return x.child && x.child[0] === placement;
888
+ }).map(function (x) {
889
+ return x.child[1];
890
+ }));
891
+ }
892
+ return [rAdornments, combineAdornments, function (mainElem) {
893
+ return !adornments ? mainElem : rAdornments.reduce(function (e, n) {
894
+ var _n$wrap;
895
+ return (_n$wrap = n.wrap == null ? void 0 : n.wrap(e)) != null ? _n$wrap : e;
896
+ }, mainElem);
897
+ }];
898
+ }
899
+ function _renderData(props, adornments) {
900
+ var _dataRegistrations$fi;
901
+ var definition = props.definition,
902
+ renderType = props.renderOptions.type,
903
+ visible = props.visible,
904
+ required = props.required,
905
+ control = props.control,
906
+ field = props.field;
907
+ var options = hasOptions(props);
908
+ var renderer = (_dataRegistrations$fi = dataRegistrations.find(function (x) {
909
+ var _x$collection, _field$collection, _x$options;
910
+ return ((_x$collection = x.collection) != null ? _x$collection : false) === ((_field$collection = field.collection) != null ? _field$collection : false) && ((_x$options = x.options) != null ? _x$options : false) === options && isOneOf(x.schemaType, field.type) && isOneOf(x.renderType, renderType) && (!x.match || x.match(props));
911
+ })) != null ? _dataRegistrations$fi : defaultRenderers.data;
912
+ var _withAdornments = withAdornments(definition, adornments),
913
+ rAdornments = _withAdornments[0],
914
+ renderAdornment = _withAdornments[1],
915
+ wrapElem = _withAdornments[2];
916
+ return wrapElem(renderer.render(props, createLabel, _extends({}, formRenderers, {
917
+ renderData: function renderData(p) {
918
+ return _renderData(p, rAdornments);
919
+ }
920
+ })));
921
+ function createLabel(labelProps) {
922
+ var _labelProps$title;
923
+ return _extends({
924
+ visible: visible,
925
+ required: required,
926
+ control: control,
927
+ forId: "c" + control.uniqueId,
928
+ renderAdornment: renderAdornment
929
+ }, labelProps, {
930
+ title: (_labelProps$title = labelProps == null ? void 0 : labelProps.title) != null ? _labelProps$title : controlTitle(definition.title, field)
931
+ });
932
+ }
933
+ }
934
+ function _renderGroup(props, adornments) {
935
+ var definition = props.definition,
936
+ visible = props.visible,
937
+ field = props.field;
938
+ var _withAdornments2 = withAdornments(props.definition, adornments),
939
+ rAdornments = _withAdornments2[0],
940
+ renderAdornment = _withAdornments2[1],
941
+ wrapElem = _withAdornments2[2];
942
+ var title = props.hideTitle ? undefined : field ? controlTitle(definition.title, field) : definition.title;
943
+ return wrapElem(defaultRenderers.group.render(props, createLabel, _extends({}, formRenderers, {
944
+ renderGroup: function renderGroup(p) {
945
+ return _renderGroup(p, rAdornments);
946
+ }
947
+ })));
948
+ function createLabel(labelProps) {
949
+ return _extends({
950
+ required: false,
951
+ visible: visible,
952
+ group: true,
953
+ renderAdornment: renderAdornment,
954
+ title: title
955
+ }, labelProps);
956
+ }
957
+ }
958
+ function renderAction(props, adornments) {
959
+ var _customRenderers$find3;
960
+ var renderer = (_customRenderers$find3 = customRenderers.find(isActionRegistration)) != null ? _customRenderers$find3 : defaultRenderers.action;
961
+ var _withAdornments3 = withAdornments(props.definition, adornments),
962
+ wrapElem = _withAdornments3[2];
963
+ return wrapElem(renderer.render(props, formRenderers));
964
+ }
965
+ function renderDisplay(props, adornments) {
966
+ var _withAdornments4 = withAdornments(props.definition, adornments),
967
+ wrapElem = _withAdornments4[2];
968
+ return wrapElem(defaultRenderers.display.render(props, formRenderers));
969
+ }
970
+ return formRenderers;
971
+ }
972
+ function createDefaultActionRenderer(options) {
973
+ if (options === void 0) {
974
+ options = {};
975
+ }
976
+ function render(_ref, _ref2) {
977
+ var visible = _ref.visible,
978
+ onClick = _ref.onClick,
979
+ title = _ref.definition.title;
980
+ var renderVisibility = _ref2.renderVisibility;
981
+ return renderVisibility(visible, /*#__PURE__*/React__default["default"].createElement("button", {
982
+ className: options.className,
983
+ onClick: onClick
984
+ }, title));
985
+ }
986
+ return {
987
+ render: render,
988
+ type: "action"
989
+ };
990
+ }
991
+ function createDefaultLabelRenderer(options) {
992
+ if (options === void 0) {
993
+ options = {
994
+ requiredElement: /*#__PURE__*/React__default["default"].createElement("span", null, " *")
995
+ };
996
+ }
997
+ return {
998
+ render: function render(p, elem, _ref3) {
999
+ var renderVisibility = _ref3.renderVisibility;
1000
+ return renderVisibility(p.visible, /*#__PURE__*/React__default["default"].createElement(DefaultLabelRenderer, _extends({}, p, options, {
1001
+ children: elem
1002
+ })));
1003
+ },
1004
+ type: "label"
1005
+ };
1006
+ }
1007
+ function DefaultLabelRenderer(_ref4) {
1008
+ var _effect = core.useComponentTracking();
1009
+ try {
1010
+ var className = _ref4.className,
1011
+ labelClass = _ref4.labelClass,
1012
+ title = _ref4.title,
1013
+ forId = _ref4.forId,
1014
+ required = _ref4.required,
1015
+ children = _ref4.children,
1016
+ group = _ref4.group,
1017
+ groupLabelClass = _ref4.groupLabelClass,
1018
+ renderAdornment = _ref4.renderAdornment,
1019
+ requiredElement = _ref4.requiredElement;
1020
+ return title ? /*#__PURE__*/React__default["default"].createElement("div", {
1021
+ className: className
1022
+ }, renderAdornment(exports.AdornmentPlacement.LabelStart), /*#__PURE__*/React__default["default"].createElement("label", {
1023
+ htmlFor: forId,
1024
+ className: clsx__default["default"](labelClass, group && groupLabelClass)
1025
+ }, title, required && requiredElement), renderAdornment(exports.AdornmentPlacement.LabelEnd), renderAdornment(exports.AdornmentPlacement.ControlStart), children, renderAdornment(exports.AdornmentPlacement.ControlEnd)) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, children);
1026
+ } finally {
1027
+ _effect();
1028
+ }
1029
+ }
1030
+ function createDefaultArrayRenderer(options) {
1031
+ var _ref5 = options != null ? options : {},
1032
+ className = _ref5.className,
1033
+ removableClass = _ref5.removableClass,
1034
+ childClass = _ref5.childClass,
1035
+ removableChildClass = _ref5.removableChildClass,
1036
+ removeActionClass = _ref5.removeActionClass,
1037
+ addActionClass = _ref5.addActionClass;
1038
+ function render(_ref6, _ref7) {
1039
+ var childCount = _ref6.childCount,
1040
+ renderChild = _ref6.renderChild,
1041
+ addAction = _ref6.addAction,
1042
+ removeAction = _ref6.removeAction,
1043
+ childKey = _ref6.childKey;
1044
+ var renderAction = _ref7.renderAction;
1045
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
1046
+ className: clsx__default["default"](className, removeAction && removableClass)
1047
+ }, Array.from({
1048
+ length: childCount
1049
+ }, function (_, x) {
1050
+ return removeAction ? /*#__PURE__*/React__default["default"].createElement(React.Fragment, {
1051
+ key: childKey(x)
1052
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
1053
+ className: clsx__default["default"](childClass, removableChildClass)
1054
+ }, renderChild(x)), /*#__PURE__*/React__default["default"].createElement("div", {
1055
+ className: removeActionClass
1056
+ }, renderAction(removeAction(x)))) : /*#__PURE__*/React__default["default"].createElement("div", {
1057
+ key: childKey(x),
1058
+ className: childClass
1059
+ }, renderChild(x));
1060
+ })), addAction && /*#__PURE__*/React__default["default"].createElement("div", {
1061
+ className: addActionClass
1062
+ }, renderAction(addAction)));
1063
+ }
1064
+ return {
1065
+ render: render,
1066
+ type: "array"
1067
+ };
1068
+ }
1069
+ function createDefaultGroupRenderer(options) {
1070
+ var _ref8 = options != null ? options : {},
1071
+ className = _ref8.className,
1072
+ _ref8$gridStyles = _ref8.gridStyles,
1073
+ gridStyles = _ref8$gridStyles === void 0 ? defaultGridStyles : _ref8$gridStyles,
1074
+ _ref8$defaultGridColu = _ref8.defaultGridColumns,
1075
+ defaultGridColumns = _ref8$defaultGridColu === void 0 ? 2 : _ref8$defaultGridColu,
1076
+ gridClassName = _ref8.gridClassName,
1077
+ standardClassName = _ref8.standardClassName;
1078
+ function defaultGridStyles(_ref9) {
1079
+ var _ref9$columns = _ref9.columns,
1080
+ columns = _ref9$columns === void 0 ? defaultGridColumns : _ref9$columns;
1081
+ return {
1082
+ className: gridClassName,
1083
+ style: {
1084
+ display: "grid",
1085
+ gridTemplateColumns: "repeat(" + columns + ", 1fr)"
1086
+ }
1087
+ };
1088
+ }
1089
+ function render(props, defaultLabel, _ref10) {
1090
+ var renderLabel = _ref10.renderLabel,
1091
+ renderArray = _ref10.renderArray;
1092
+ var childCount = props.childCount,
1093
+ renderChild = props.renderChild,
1094
+ definition = props.definition;
1095
+ return renderLabel(defaultLabel(), props.array ? renderArray(props.array) : renderChildren());
1096
+ function renderChildren() {
1097
+ var groupOptions = definition.groupOptions;
1098
+ var _ref11 = isGridRenderer(groupOptions) ? gridStyles(groupOptions) : {
1099
+ className: standardClassName
1100
+ },
1101
+ style = _ref11.style,
1102
+ gcn = _ref11.className;
1103
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1104
+ className: clsx__default["default"](className, gcn),
1105
+ style: style
1106
+ }, Array.from({
1107
+ length: childCount
1108
+ }, function (_, x) {
1109
+ return renderChild(x);
1110
+ }));
1111
+ }
1112
+ }
1113
+ return {
1114
+ type: "group",
1115
+ render: render
1116
+ };
1117
+ }
1118
+ function createDefaultDisplayRenderer(options) {
1119
+ if (options === void 0) {
1120
+ options = {};
1121
+ }
1122
+ function doRender(_ref12) {
1123
+ var displayData = _ref12.definition.displayData;
1124
+ switch (displayData.type) {
1125
+ case exports.DisplayDataType.Text:
1126
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1127
+ className: options.textClassName
1128
+ }, displayData.text);
1129
+ case exports.DisplayDataType.Html:
1130
+ return /*#__PURE__*/React__default["default"].createElement("div", {
1131
+ className: options.htmlClassName,
1132
+ dangerouslySetInnerHTML: {
1133
+ __html: displayData.html
1134
+ }
1135
+ });
1136
+ default:
1137
+ return /*#__PURE__*/React__default["default"].createElement("h1", null, "Unknown display type: ", displayData.type);
1138
+ }
1139
+ }
1140
+ return {
1141
+ render: function render(p, _ref13) {
1142
+ var renderVisibility = _ref13.renderVisibility;
1143
+ return renderVisibility(p.visible, doRender(p));
1144
+ },
1145
+ type: "display"
1146
+ };
1147
+ }
1148
+ var DefaultBoolOptions = [{
1149
+ name: "Yes",
1150
+ value: true
1151
+ }, {
1152
+ name: "No",
1153
+ value: false
1154
+ }];
1155
+ function createDefaultDataRenderer(options) {
1156
+ var _options$selectOption;
1157
+ if (options === void 0) {
1158
+ options = {};
1159
+ }
1160
+ var selectRenderer = createSelectRenderer((_options$selectOption = options.selectOptions) != null ? _options$selectOption : {});
1161
+ var _optionRenderer$boole = _extends({
1162
+ optionRenderer: selectRenderer,
1163
+ booleanOptions: DefaultBoolOptions
1164
+ }, options),
1165
+ inputClass = _optionRenderer$boole.inputClass,
1166
+ booleanOptions = _optionRenderer$boole.booleanOptions,
1167
+ optionRenderer = _optionRenderer$boole.optionRenderer;
1168
+ return createDataRenderer(function (props, defaultLabel, renderers) {
1169
+ if (props.array) {
1170
+ return renderers.renderArray(props.array);
1171
+ }
1172
+ var renderType = props.renderOptions.type;
1173
+ var fieldType = props.field.type;
1174
+ var isBool = fieldType === exports.FieldType.Bool;
1175
+ if (booleanOptions != null && isBool && props.options == null) {
1176
+ return renderers.renderData(_extends({}, props, {
1177
+ options: booleanOptions
1178
+ }));
1179
+ }
1180
+ if (renderType === exports.DataRenderType.Standard && hasOptions(props)) {
1181
+ return optionRenderer.render(props, defaultLabel, renderers);
1182
+ }
1183
+ switch (renderType) {
1184
+ case exports.DataRenderType.Dropdown:
1185
+ return selectRenderer.render(props, defaultLabel, renderers);
1186
+ }
1187
+ var l = defaultLabel();
1188
+ return renderers.renderLabel(l, renderType === exports.DataRenderType.Checkbox ? /*#__PURE__*/React__default["default"].createElement(core.Fcheckbox, {
1189
+ control: props.control
1190
+ }) : /*#__PURE__*/React__default["default"].createElement(ControlInput, {
1191
+ className: inputClass,
1192
+ id: l.forId,
1193
+ readOnly: props.readonly,
1194
+ control: props.control,
1195
+ convert: createInputConversion(props.field.type)
1196
+ }));
1197
+ });
1198
+ }
1199
+ function ControlInput(_ref14) {
1200
+ var _effect2 = core.useComponentTracking();
1201
+ try {
1202
+ var control = _ref14.control,
1203
+ convert = _ref14.convert,
1204
+ props = _objectWithoutPropertiesLoose(_ref14, _excluded);
1205
+ var _formControlProps = core.formControlProps(control),
1206
+ errorText = _formControlProps.errorText,
1207
+ value = _formControlProps.value,
1208
+ onChange = _formControlProps.onChange,
1209
+ inputProps = _objectWithoutPropertiesLoose(_formControlProps, _excluded2);
1210
+ return /*#__PURE__*/React__default["default"].createElement("input", _extends({}, inputProps, {
1211
+ type: convert[0],
1212
+ value: value == null ? "" : convert[2](value),
1213
+ onChange: function onChange(e) {
1214
+ control.value = convert[1](e.target.value);
1215
+ }
1216
+ }, props));
1217
+ } finally {
1218
+ _effect2();
1219
+ }
1220
+ }
1221
+ function createDefaultAdornmentRenderer(options) {
1222
+ return {
1223
+ type: "adornment",
1224
+ render: function render() {
1225
+ return {};
1226
+ }
1227
+ };
1228
+ }
1229
+ function createDefaultVisibilityRenderer(options) {
1230
+ return {
1231
+ type: "visibility",
1232
+ render: function render(visible, children) {
1233
+ return visible.value ? children : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null);
1234
+ }
1235
+ };
1236
+ }
1237
+ function createDefaultRenderers(options) {
1238
+ if (options === void 0) {
1239
+ options = {};
1240
+ }
1241
+ return {
1242
+ data: createDefaultDataRenderer(options.data),
1243
+ display: createDefaultDisplayRenderer(options.display),
1244
+ action: createDefaultActionRenderer(options.action),
1245
+ array: createDefaultArrayRenderer(options.array),
1246
+ group: createDefaultGroupRenderer(options.group),
1247
+ label: createDefaultLabelRenderer(options.label),
1248
+ visibility: createDefaultVisibilityRenderer(),
1249
+ adornment: createDefaultAdornmentRenderer()
1250
+ };
1251
+ }
1252
+ function createClassStyledRenderers() {
1253
+ return createDefaultRenderers({
1254
+ label: {
1255
+ className: "control"
1256
+ },
1257
+ group: {
1258
+ className: "group"
1259
+ },
1260
+ array: {
1261
+ className: "control-array"
1262
+ },
1263
+ action: {
1264
+ className: "action"
1265
+ },
1266
+ data: {
1267
+ inputClass: "data"
1268
+ },
1269
+ display: {
1270
+ htmlClassName: "html",
1271
+ textClassName: "text"
1272
+ }
1273
+ });
1274
+ }
1275
+ function isAdornmentRegistration(x) {
1276
+ return x.type === "adornment";
1277
+ }
1278
+ function isDataRegistration(x) {
1279
+ return x.type === "data";
1280
+ }
1281
+ function isLabelRegistration(x) {
1282
+ return x.type === "label";
1283
+ }
1284
+ function isActionRegistration(x) {
1285
+ return x.type === "action";
1286
+ }
1287
+ function isVisibilityRegistration(x) {
1288
+ return x.type === "visibility";
1289
+ }
1290
+ function isOneOf(x, v) {
1291
+ return x == null ? true : Array.isArray(x) ? x.includes(v) : v === x;
1292
+ }
1293
+ function createDataRenderer(render, options) {
1294
+ return _extends({
1295
+ type: "data",
1296
+ render: render
1297
+ }, options);
1298
+ }
1299
+ function createDataRendererLabelled(_render, options) {
1300
+ return _extends({
1301
+ type: "data",
1302
+ render: function render(props, defaultLabel, renderers) {
1303
+ var dl = defaultLabel();
1304
+ return renderers.renderLabel(dl, _render(props, dl.forId, renderers));
1305
+ }
1306
+ }, options);
1307
+ }
1308
+ function createLabelRenderer(options) {
1309
+ return _extends({
1310
+ type: "label"
1311
+ }, options);
1312
+ }
1313
+ function createAdornmentRenderer(render, options) {
1314
+ return _extends({
1315
+ type: "adornment"
1316
+ }, options, {
1317
+ render: render
1318
+ });
1319
+ }
1320
+ function createSelectRenderer(options) {
1321
+ if (options === void 0) {
1322
+ options = {};
1323
+ }
1324
+ return createDataRendererLabelled(function (props, id) {
1325
+ return /*#__PURE__*/React__default["default"].createElement(SelectDataRenderer, {
1326
+ className: options.className,
1327
+ state: props.control,
1328
+ id: id,
1329
+ options: props.options,
1330
+ required: props.required,
1331
+ emptyText: options.emptyText,
1332
+ requiredText: options.requiredText,
1333
+ convert: createSelectConversion(props.field.type)
1334
+ });
1335
+ }, {
1336
+ options: true
1337
+ });
1338
+ }
1339
+ function SelectDataRenderer(_ref15) {
1340
+ var _effect3 = core.useComponentTracking();
1341
+ try {
1342
+ var state = _ref15.state,
1343
+ options = _ref15.options,
1344
+ className = _ref15.className,
1345
+ convert = _ref15.convert,
1346
+ required = _ref15.required,
1347
+ _ref15$emptyText = _ref15.emptyText,
1348
+ emptyText = _ref15$emptyText === void 0 ? "N/A" : _ref15$emptyText,
1349
+ _ref15$requiredText = _ref15.requiredText,
1350
+ requiredText = _ref15$requiredText === void 0 ? "<please select>" : _ref15$requiredText,
1351
+ props = _objectWithoutPropertiesLoose(_ref15, _excluded3);
1352
+ var value = state.value,
1353
+ disabled = state.disabled;
1354
+ var _useState = React.useState(!required || value == null),
1355
+ showEmpty = _useState[0];
1356
+ var optionStringMap = React.useMemo(function () {
1357
+ return Object.fromEntries(options.map(function (x) {
1358
+ return [convert(x.value), x.value];
1359
+ }));
1360
+ }, [options]);
1361
+ return /*#__PURE__*/React__default["default"].createElement("select", _extends({}, props, {
1362
+ className: className,
1363
+ onChange: function onChange(v) {
1364
+ return state.value = optionStringMap[v.target.value];
1365
+ },
1366
+ value: convert(value),
1367
+ disabled: disabled
1368
+ }), showEmpty && /*#__PURE__*/React__default["default"].createElement("option", {
1369
+ value: ""
1370
+ }, required ? requiredText : emptyText), options.map(function (x, i) {
1371
+ return /*#__PURE__*/React__default["default"].createElement("option", {
1372
+ key: i,
1373
+ value: convert(x.value),
1374
+ disabled: x.disabled
1375
+ }, x.name);
1376
+ }));
1377
+ } finally {
1378
+ _effect3();
1379
+ }
1380
+ }
1381
+ function createSelectConversion(ft) {
1382
+ switch (ft) {
1383
+ case exports.FieldType.String:
1384
+ case exports.FieldType.Int:
1385
+ case exports.FieldType.Double:
1386
+ return function (a) {
1387
+ return a;
1388
+ };
1389
+ default:
1390
+ return function (a) {
1391
+ var _a$toString;
1392
+ return (_a$toString = a == null ? void 0 : a.toString()) != null ? _a$toString : "";
1393
+ };
1394
+ }
1395
+ }
1396
+ function createInputConversion(ft) {
1397
+ switch (ft) {
1398
+ case exports.FieldType.String:
1399
+ return ["text", function (a) {
1400
+ return a;
1401
+ }, function (a) {
1402
+ return a;
1403
+ }];
1404
+ case exports.FieldType.Bool:
1405
+ return ["text", function (a) {
1406
+ return a === "true";
1407
+ }, function (a) {
1408
+ var _a$toString2;
1409
+ return (_a$toString2 = a == null ? void 0 : a.toString()) != null ? _a$toString2 : "";
1410
+ }];
1411
+ case exports.FieldType.Int:
1412
+ return ["number", function (a) {
1413
+ return a !== "" ? parseInt(a) : null;
1414
+ }, function (a) {
1415
+ return a == null ? "" : a;
1416
+ }];
1417
+ case exports.FieldType.Date:
1418
+ return ["date", function (a) {
1419
+ return a;
1420
+ }, function (a) {
1421
+ return a;
1422
+ }];
1423
+ case exports.FieldType.Double:
1424
+ return ["number", function (a) {
1425
+ return parseFloat(a);
1426
+ }, function (a) {
1427
+ return a;
1428
+ }];
1429
+ default:
1430
+ return ["text", function (a) {
1431
+ return a;
1432
+ }, function (a) {
1433
+ return a;
1434
+ }];
1435
+ }
1436
+ }
1437
+
1438
+ var defaultTailwindTheme = {
1439
+ label: {
1440
+ className: "flex flex-col",
1441
+ groupLabelClass: "font-bold",
1442
+ requiredElement: /*#__PURE__*/React__default["default"].createElement("span", {
1443
+ className: "text-red-500"
1444
+ }, " *")
1445
+ },
1446
+ array: {
1447
+ removableClass: "grid grid-cols-[1fr_auto] items-center gap-x-2",
1448
+ childClass: "grow"
1449
+ },
1450
+ group: {
1451
+ standardClassName: "space-y-4",
1452
+ gridClassName: "gap-x-2 gap-y-4"
1453
+ },
1454
+ action: {
1455
+ className: "bg-primary rounded-lg p-3 text-white"
1456
+ }
1457
+ };
572
1458
 
1459
+ exports.AlwaysVisible = AlwaysVisible;
1460
+ exports.ControlInput = ControlInput;
1461
+ exports.DefaultBoolOptions = DefaultBoolOptions;
1462
+ exports.DefaultLabelRenderer = DefaultLabelRenderer;
573
1463
  exports.FormRendererProvider = FormRendererProvider;
1464
+ exports.SelectDataRenderer = SelectDataRenderer;
574
1465
  exports.applyDefaultForField = applyDefaultForField;
575
1466
  exports.applyDefaultValues = applyDefaultValues;
576
1467
  exports.boolField = boolField;
@@ -578,11 +1469,31 @@ exports.buildSchema = buildSchema;
578
1469
  exports.compoundField = compoundField;
579
1470
  exports.controlForField = controlForField;
580
1471
  exports.controlTitle = controlTitle;
1472
+ exports.createAction = createAction;
1473
+ exports.createAdornmentRenderer = createAdornmentRenderer;
1474
+ exports.createDataRenderer = createDataRenderer;
1475
+ exports.createDataRendererLabelled = createDataRendererLabelled;
1476
+ exports.createDefaultActionRenderer = createDefaultActionRenderer;
1477
+ exports.createDefaultAdornmentRenderer = createDefaultAdornmentRenderer;
1478
+ exports.createDefaultArrayRenderer = createDefaultArrayRenderer;
1479
+ exports.createDefaultDataRenderer = createDefaultDataRenderer;
1480
+ exports.createDefaultDisplayRenderer = createDefaultDisplayRenderer;
1481
+ exports.createDefaultGroupRenderer = createDefaultGroupRenderer;
1482
+ exports.createDefaultLabelRenderer = createDefaultLabelRenderer;
1483
+ exports.createDefaultRenderers = createDefaultRenderers;
1484
+ exports.createDefaultSchemaHooks = createDefaultSchemaHooks;
1485
+ exports.createDefaultVisibilityRenderer = createDefaultVisibilityRenderer;
581
1486
  exports.createFormEditHooks = createFormEditHooks;
1487
+ exports.createFormRenderer = createFormRenderer;
1488
+ exports.createInputConversion = createInputConversion;
1489
+ exports.createLabelRenderer = createLabelRenderer;
1490
+ exports.createSelectConversion = createSelectConversion;
1491
+ exports.createSelectRenderer = createSelectRenderer;
582
1492
  exports.dataControl = dataControl;
583
1493
  exports.defaultCompoundField = defaultCompoundField;
584
- exports.defaultExpressionHook = defaultExpressionHook;
1494
+ exports.defaultFormEditHooks = defaultFormEditHooks;
585
1495
  exports.defaultScalarField = defaultScalarField;
1496
+ exports.defaultTailwindTheme = defaultTailwindTheme;
586
1497
  exports.defaultValueForField = defaultValueForField;
587
1498
  exports.defaultValueForFields = defaultValueForFields;
588
1499
  exports.elementValueForField = elementValueForField;
@@ -595,12 +1506,14 @@ exports.findField = findField;
595
1506
  exports.findScalarField = findScalarField;
596
1507
  exports.getDefaultScalarControlProperties = getDefaultScalarControlProperties;
597
1508
  exports.getOptionsForScalarField = getOptionsForScalarField;
1509
+ exports.hasOptions = hasOptions;
598
1510
  exports.intField = intField;
599
1511
  exports.isActionControlsDefinition = isActionControlsDefinition;
600
1512
  exports.isCompoundField = isCompoundField;
601
1513
  exports.isDataControl = isDataControl;
602
1514
  exports.isDataControlDefinition = isDataControlDefinition;
603
1515
  exports.isDisplayControlsDefinition = isDisplayControlsDefinition;
1516
+ exports.isGridRenderer = isGridRenderer;
604
1517
  exports.isGroupControl = isGroupControl;
605
1518
  exports.isGroupControlsDefinition = isGroupControlsDefinition;
606
1519
  exports.isScalarField = isScalarField;
@@ -613,6 +1526,7 @@ exports.useDefaultValue = useDefaultValue;
613
1526
  exports.useFormRendererComponents = useFormRendererComponents;
614
1527
  exports.useIsControlVisible = useIsControlVisible;
615
1528
  exports.visibility = visibility;
1529
+ exports.visitControlData = visitControlData;
616
1530
  exports.visitControlDefinition = visitControlDefinition;
617
1531
  exports.withScalarOptions = withScalarOptions;
618
1532
  //# sourceMappingURL=index.js.map