@react-typed-forms/schemas 1.0.0-dev.2 → 1.0.0-dev.21

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