@scenid/react-formulator 0.1.9 → 0.1.11

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/dist/index.cjs.js CHANGED
@@ -9,6 +9,7 @@ var cx = require('classnames');
9
9
  var styles$n = require('@material-ui/styles');
10
10
  var AutorenewIcon = require('@material-ui/icons/Autorenew');
11
11
  var icons = require('@material-ui/icons');
12
+ var luxon = require('luxon');
12
13
  var path$3 = require('path');
13
14
  var proc = require('process');
14
15
  var url = require('url');
@@ -29170,7 +29171,6 @@ var useStyles = styles$n.makeStyles(function (theme) {
29170
29171
  var FormControlField$1 = function FormControlField(_ref) {
29171
29172
  var variant = _ref.variant,
29172
29173
  type = _ref.type,
29173
- isRender = _ref.isRender,
29174
29174
  name = _ref.name,
29175
29175
  label = _ref.label,
29176
29176
  component = _ref.component,
@@ -29199,6 +29199,8 @@ var FormControlField$1 = function FormControlField(_ref) {
29199
29199
  onChange: onChange
29200
29200
  });
29201
29201
 
29202
+ var isRender = type === 'render';
29203
+
29202
29204
  if (validating) {
29203
29205
  finalProps.endAdornment = [/*#__PURE__*/React__default["default"].createElement(core$1.InputAdornment, {
29204
29206
  position: "end"
@@ -29248,7 +29250,6 @@ var FormControlField$1 = function FormControlField(_ref) {
29248
29250
 
29249
29251
  FormControlField$1.propTypes = {
29250
29252
  variant: PropTypes__default["default"].oneOf(['standard', 'filled', 'outlined']),
29251
- isRender: PropTypes__default["default"].bool,
29252
29253
  component: PropTypes__default["default"].any.isRequired,
29253
29254
  componentProps: PropTypes__default["default"].object,
29254
29255
  type: PropTypes__default["default"].string.isRequired,
@@ -29292,7 +29293,6 @@ var FormField = function FormField(_ref2) {
29292
29293
 
29293
29294
  FormField.propTypes = {
29294
29295
  variant: PropTypes__default["default"].oneOf(['standard', 'filled', 'outlined']),
29295
- isRender: PropTypes__default["default"].bool,
29296
29296
  component: PropTypes__default["default"].any.isRequired,
29297
29297
  componentProps: PropTypes__default["default"].object,
29298
29298
  type: PropTypes__default["default"].string.isRequired,
@@ -29399,11 +29399,12 @@ FormNumber.propTypes = {
29399
29399
  onChange: PropTypes__default["default"].func.isRequired
29400
29400
  };
29401
29401
 
29402
- var _excluded$3 = ["options", "required"];
29402
+ var _excluded$3 = ["options", "required", "value"];
29403
29403
 
29404
29404
  var FormSelect = function FormSelect(_ref) {
29405
29405
  var options = _ref.options,
29406
29406
  required = _ref.required,
29407
+ value = _ref.value,
29407
29408
  props = _objectWithoutProperties(_ref, _excluded$3);
29408
29409
 
29409
29410
  var unselectOption = [];
@@ -29419,7 +29420,9 @@ var FormSelect = function FormSelect(_ref) {
29419
29420
  return l.label.localeCompare(r.label);
29420
29421
  })));
29421
29422
  return /*#__PURE__*/React__default["default"].createElement(core$1.TextField, _extends({
29422
- select: true
29423
+ select: true,
29424
+ required: required,
29425
+ value: value === undefined ? '' : value
29423
29426
  }, props), allOptions.map(function (_ref2) {
29424
29427
  var itemLabel = _ref2.label,
29425
29428
  itemValue = _ref2.value;
@@ -29701,7 +29704,7 @@ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if
29701
29704
  function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
29702
29705
 
29703
29706
  var FormControlField = function FormControlField(_ref) {
29704
- var isRender = _ref.isRender,
29707
+ var type = _ref.type,
29705
29708
  name = _ref.name,
29706
29709
  label = _ref.label,
29707
29710
  component = _ref.component,
@@ -29724,7 +29727,7 @@ var FormControlField = function FormControlField(_ref) {
29724
29727
  }
29725
29728
 
29726
29729
  var control;
29727
- if (isRender) control = /*#__PURE__*/React__default["default"].cloneElement(component, finalProps);else control = /*#__PURE__*/React__default["default"].createElement(component, finalProps);
29730
+ if (type === 'render') control = /*#__PURE__*/React__default["default"].cloneElement(component, finalProps);else control = /*#__PURE__*/React__default["default"].createElement(component, finalProps);
29728
29731
  return /*#__PURE__*/React__default["default"].createElement(core$1.Box, {
29729
29732
  width: "100%",
29730
29733
  display: "flex",
@@ -29737,10 +29740,10 @@ var FormControlField = function FormControlField(_ref) {
29737
29740
  };
29738
29741
 
29739
29742
  FormControlField.propTypes = {
29740
- isRender: PropTypes__default["default"].bool,
29741
29743
  component: PropTypes__default["default"].any.isRequired,
29742
29744
  componentProps: PropTypes__default["default"].object,
29743
29745
  name: PropTypes__default["default"].string.isRequired,
29746
+ type: PropTypes__default["default"].string.isRequired,
29744
29747
  label: PropTypes__default["default"].string.isRequired,
29745
29748
  value: PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].number, PropTypes__default["default"].bool, PropTypes__default["default"].array]),
29746
29749
  options: PropTypes__default["default"].arrayOf(PropTypes__default["default"].shape({
@@ -29799,14 +29802,21 @@ FormReadOnlyField.propTypes = {
29799
29802
  };
29800
29803
  var FormReadOnlyField$1 = /*#__PURE__*/React__default["default"].memo(FormReadOnlyField);
29801
29804
 
29802
- var ReadOnlyText = function ReadOnlyText(_ref) {
29803
- var value = _ref.value;
29805
+ var FormReadOnlyText = function FormReadOnlyText(_ref) {
29806
+ var value = _ref.value,
29807
+ type = _ref.type;
29808
+ var finalValue = value;
29809
+
29810
+ if (type === 'date' || type === 'datetime-local') {
29811
+ finalValue = luxon.DateTime.fromISO(value).toLocaleString(luxon.DateTime.DATE_MED_WITH_WEEKDAY);
29812
+ }
29813
+
29804
29814
  return /*#__PURE__*/React__default["default"].createElement(core$1.Typography, {
29805
29815
  variant: "body1"
29806
- }, value);
29816
+ }, finalValue);
29807
29817
  };
29808
29818
 
29809
- ReadOnlyText.propTypes = {
29819
+ FormReadOnlyText.propTypes = {
29810
29820
  value: PropTypes__default["default"].oneOfType([PropTypes__default["default"].number, PropTypes__default["default"].string])
29811
29821
  };
29812
29822
 
@@ -68021,7 +68031,7 @@ FormReadOnlyMarkdown.propTypes = {
68021
68031
 
68022
68032
  var FormReadOnlyNumber = function FormReadOnlyNumber(_ref) {
68023
68033
  var value = _ref.value;
68024
- return /*#__PURE__*/React__default["default"].createElement(ReadOnlyText, {
68034
+ return /*#__PURE__*/React__default["default"].createElement(FormReadOnlyText, {
68025
68035
  value: castToNumber(value)
68026
68036
  });
68027
68037
  };
@@ -68035,7 +68045,7 @@ var FormReadOnlySelect = function FormReadOnlySelect(_ref) {
68035
68045
 
68036
68046
  var value = _ref.value,
68037
68047
  options = _ref.options;
68038
- return /*#__PURE__*/React__default["default"].createElement(ReadOnlyText, {
68048
+ return /*#__PURE__*/React__default["default"].createElement(FormReadOnlyText, {
68039
68049
  value: (_options$find = options.find(function (o) {
68040
68050
  return o.value === value;
68041
68051
  })) === null || _options$find === void 0 ? void 0 : _options$find.label
@@ -75447,9 +75457,9 @@ function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeRefl
75447
75457
 
75448
75458
  function _isNativeReflectConstruct$1() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
75449
75459
  var formReadOnlyComponentMap = {
75450
- "default": ReadOnlyText,
75460
+ "default": FormReadOnlyText,
75451
75461
  markdown: FormReadOnlyMarkdown,
75452
- string: ReadOnlyText,
75462
+ string: FormReadOnlyText,
75453
75463
  number: FormReadOnlyNumber,
75454
75464
  select: FormReadOnlySelect,
75455
75465
  "boolean": FormReadOnlyBoolean,
@@ -75491,17 +75501,23 @@ var FormulatorFormSection = /*#__PURE__*/function (_React$Component) {
75491
75501
  errorMessages = _this$props.errorMessages,
75492
75502
  results = _this$props.results,
75493
75503
  data = _this$props.data,
75494
- fieldStates = _this$props.fieldStates;
75504
+ fieldStates = _this$props.fieldStates,
75505
+ renderComponentMap = _this$props.renderComponentMap;
75495
75506
  var field = fieldEntry,
75496
75507
  specialProps = {};
75497
75508
 
75498
75509
  if (Array.isArray(fieldEntry)) {
75499
75510
  if (fieldEntry[0] === '@@render') {
75500
75511
  field = fieldEntry[1];
75501
- specialProps = _objectSpread$1({
75502
- isRender: true
75503
- }, fieldEntry[2] || {});
75504
- } else if (fieldEntry[0] === '@@markdown') {
75512
+ return {
75513
+ type: 'render',
75514
+ name: field,
75515
+ component: renderComponentMap[field],
75516
+ componentProps: fieldEntry[2] || {}
75517
+ };
75518
+ }
75519
+
75520
+ if (fieldEntry[0] === '@@markdown') {
75505
75521
  return {
75506
75522
  type: 'markdown',
75507
75523
  name: fieldEntry[1],
@@ -75510,10 +75526,11 @@ var FormulatorFormSection = /*#__PURE__*/function (_React$Component) {
75510
75526
  content: fieldEntry[2]
75511
75527
  }
75512
75528
  };
75513
- } else {
75514
- field = fieldEntry[0];
75515
- specialProps = fieldEntry[1];
75516
75529
  }
75530
+
75531
+ field = fieldEntry[0];
75532
+ if (!fieldEntry[1]) throw new Error("field \"".concat(field, "\" is defined in an array, but has no props definition"));
75533
+ specialProps = fieldEntry[1];
75517
75534
  }
75518
75535
 
75519
75536
  var _specialProps = specialProps,
@@ -75534,8 +75551,8 @@ var FormulatorFormSection = /*#__PURE__*/function (_React$Component) {
75534
75551
  type = _schema$properties$fi.type,
75535
75552
  defaultValue = _schema$properties$fi["default"];
75536
75553
  var mapKey;
75537
- if (specialProps.isRender) mapKey = type;else if (componentMap[field] !== undefined) mapKey = field;else if (typeof type === 'string' && componentMap[type] !== undefined) mapKey = type;else if (Array.isArray(type)) mapKey = 'select';else if (componentMap["default"] !== undefined) mapKey = 'default';else throw new Error("Could not find a Component to render for \"".concat(field, "\""));
75538
- var mapEntry = specialProps.isRender ? '@@render' : componentMap[mapKey];
75554
+ if (componentMap[field] !== undefined) mapKey = field;else if (typeof type === 'string' && componentMap[type] !== undefined) mapKey = type;else if (Array.isArray(type)) mapKey = 'select';else if (componentMap["default"] !== undefined) mapKey = 'default';else throw new Error("Could not find a Component to render for \"".concat(field, "\""));
75555
+ var mapEntry = componentMap[mapKey];
75539
75556
  var component = mapEntry,
75540
75557
  props = {};
75541
75558
 
@@ -75639,7 +75656,6 @@ var FormulatorFormSection = /*#__PURE__*/function (_React$Component) {
75639
75656
  type: _type,
75640
75657
  label: _label,
75641
75658
  value: _value,
75642
- isRender: true,
75643
75659
  required: _required,
75644
75660
  hasErrors: _hasErrors,
75645
75661
  errors: _errors,
@@ -76439,7 +76455,7 @@ exports.FormReadOnlyMarkdown = FormReadOnlyMarkdown;
76439
76455
  exports.FormReadOnlyNumber = FormReadOnlyNumber;
76440
76456
  exports.FormReadOnlyRepeater = FormReadOnlyRepeater;
76441
76457
  exports.FormReadOnlySelect = FormReadOnlySelect;
76442
- exports.FormReadOnlyText = ReadOnlyText;
76458
+ exports.FormReadOnlyText = FormReadOnlyText;
76443
76459
  exports.FormRepeater = FormRepeater;
76444
76460
  exports.FormSelect = FormSelect;
76445
76461
  exports.FormText = FormText;
package/dist/index.esm.js CHANGED
@@ -7,6 +7,7 @@ import cx from 'classnames';
7
7
  import { makeStyles as makeStyles$1 } from '@material-ui/styles';
8
8
  import AutorenewIcon from '@material-ui/icons/Autorenew';
9
9
  import { Delete, Save, Clear } from '@material-ui/icons';
10
+ import { DateTime } from 'luxon';
10
11
  import path$3 from 'path';
11
12
  import proc from 'process';
12
13
  import { fileURLToPath } from 'url';
@@ -29126,7 +29127,6 @@ var useStyles = makeStyles$1(function (theme) {
29126
29127
  var FormControlField$1 = function FormControlField(_ref) {
29127
29128
  var variant = _ref.variant,
29128
29129
  type = _ref.type,
29129
- isRender = _ref.isRender,
29130
29130
  name = _ref.name,
29131
29131
  label = _ref.label,
29132
29132
  component = _ref.component,
@@ -29155,6 +29155,8 @@ var FormControlField$1 = function FormControlField(_ref) {
29155
29155
  onChange: onChange
29156
29156
  });
29157
29157
 
29158
+ var isRender = type === 'render';
29159
+
29158
29160
  if (validating) {
29159
29161
  finalProps.endAdornment = [/*#__PURE__*/React__default.createElement(InputAdornment, {
29160
29162
  position: "end"
@@ -29204,7 +29206,6 @@ var FormControlField$1 = function FormControlField(_ref) {
29204
29206
 
29205
29207
  FormControlField$1.propTypes = {
29206
29208
  variant: PropTypes__default.oneOf(['standard', 'filled', 'outlined']),
29207
- isRender: PropTypes__default.bool,
29208
29209
  component: PropTypes__default.any.isRequired,
29209
29210
  componentProps: PropTypes__default.object,
29210
29211
  type: PropTypes__default.string.isRequired,
@@ -29248,7 +29249,6 @@ var FormField = function FormField(_ref2) {
29248
29249
 
29249
29250
  FormField.propTypes = {
29250
29251
  variant: PropTypes__default.oneOf(['standard', 'filled', 'outlined']),
29251
- isRender: PropTypes__default.bool,
29252
29252
  component: PropTypes__default.any.isRequired,
29253
29253
  componentProps: PropTypes__default.object,
29254
29254
  type: PropTypes__default.string.isRequired,
@@ -29355,11 +29355,12 @@ FormNumber.propTypes = {
29355
29355
  onChange: PropTypes__default.func.isRequired
29356
29356
  };
29357
29357
 
29358
- var _excluded$3 = ["options", "required"];
29358
+ var _excluded$3 = ["options", "required", "value"];
29359
29359
 
29360
29360
  var FormSelect = function FormSelect(_ref) {
29361
29361
  var options = _ref.options,
29362
29362
  required = _ref.required,
29363
+ value = _ref.value,
29363
29364
  props = _objectWithoutProperties(_ref, _excluded$3);
29364
29365
 
29365
29366
  var unselectOption = [];
@@ -29375,7 +29376,9 @@ var FormSelect = function FormSelect(_ref) {
29375
29376
  return l.label.localeCompare(r.label);
29376
29377
  })));
29377
29378
  return /*#__PURE__*/React__default.createElement(TextField, _extends({
29378
- select: true
29379
+ select: true,
29380
+ required: required,
29381
+ value: value === undefined ? '' : value
29379
29382
  }, props), allOptions.map(function (_ref2) {
29380
29383
  var itemLabel = _ref2.label,
29381
29384
  itemValue = _ref2.value;
@@ -29657,7 +29660,7 @@ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if
29657
29660
  function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
29658
29661
 
29659
29662
  var FormControlField = function FormControlField(_ref) {
29660
- var isRender = _ref.isRender,
29663
+ var type = _ref.type,
29661
29664
  name = _ref.name,
29662
29665
  label = _ref.label,
29663
29666
  component = _ref.component,
@@ -29680,7 +29683,7 @@ var FormControlField = function FormControlField(_ref) {
29680
29683
  }
29681
29684
 
29682
29685
  var control;
29683
- if (isRender) control = /*#__PURE__*/React__default.cloneElement(component, finalProps);else control = /*#__PURE__*/React__default.createElement(component, finalProps);
29686
+ if (type === 'render') control = /*#__PURE__*/React__default.cloneElement(component, finalProps);else control = /*#__PURE__*/React__default.createElement(component, finalProps);
29684
29687
  return /*#__PURE__*/React__default.createElement(Box, {
29685
29688
  width: "100%",
29686
29689
  display: "flex",
@@ -29693,10 +29696,10 @@ var FormControlField = function FormControlField(_ref) {
29693
29696
  };
29694
29697
 
29695
29698
  FormControlField.propTypes = {
29696
- isRender: PropTypes__default.bool,
29697
29699
  component: PropTypes__default.any.isRequired,
29698
29700
  componentProps: PropTypes__default.object,
29699
29701
  name: PropTypes__default.string.isRequired,
29702
+ type: PropTypes__default.string.isRequired,
29700
29703
  label: PropTypes__default.string.isRequired,
29701
29704
  value: PropTypes__default.oneOfType([PropTypes__default.string, PropTypes__default.number, PropTypes__default.bool, PropTypes__default.array]),
29702
29705
  options: PropTypes__default.arrayOf(PropTypes__default.shape({
@@ -29755,14 +29758,21 @@ FormReadOnlyField.propTypes = {
29755
29758
  };
29756
29759
  var FormReadOnlyField$1 = /*#__PURE__*/React__default.memo(FormReadOnlyField);
29757
29760
 
29758
- var ReadOnlyText = function ReadOnlyText(_ref) {
29759
- var value = _ref.value;
29761
+ var FormReadOnlyText = function FormReadOnlyText(_ref) {
29762
+ var value = _ref.value,
29763
+ type = _ref.type;
29764
+ var finalValue = value;
29765
+
29766
+ if (type === 'date' || type === 'datetime-local') {
29767
+ finalValue = DateTime.fromISO(value).toLocaleString(DateTime.DATE_MED_WITH_WEEKDAY);
29768
+ }
29769
+
29760
29770
  return /*#__PURE__*/React__default.createElement(Typography, {
29761
29771
  variant: "body1"
29762
- }, value);
29772
+ }, finalValue);
29763
29773
  };
29764
29774
 
29765
- ReadOnlyText.propTypes = {
29775
+ FormReadOnlyText.propTypes = {
29766
29776
  value: PropTypes__default.oneOfType([PropTypes__default.number, PropTypes__default.string])
29767
29777
  };
29768
29778
 
@@ -67977,7 +67987,7 @@ FormReadOnlyMarkdown.propTypes = {
67977
67987
 
67978
67988
  var FormReadOnlyNumber = function FormReadOnlyNumber(_ref) {
67979
67989
  var value = _ref.value;
67980
- return /*#__PURE__*/React__default.createElement(ReadOnlyText, {
67990
+ return /*#__PURE__*/React__default.createElement(FormReadOnlyText, {
67981
67991
  value: castToNumber(value)
67982
67992
  });
67983
67993
  };
@@ -67991,7 +68001,7 @@ var FormReadOnlySelect = function FormReadOnlySelect(_ref) {
67991
68001
 
67992
68002
  var value = _ref.value,
67993
68003
  options = _ref.options;
67994
- return /*#__PURE__*/React__default.createElement(ReadOnlyText, {
68004
+ return /*#__PURE__*/React__default.createElement(FormReadOnlyText, {
67995
68005
  value: (_options$find = options.find(function (o) {
67996
68006
  return o.value === value;
67997
68007
  })) === null || _options$find === void 0 ? void 0 : _options$find.label
@@ -75403,9 +75413,9 @@ function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeRefl
75403
75413
 
75404
75414
  function _isNativeReflectConstruct$1() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
75405
75415
  var formReadOnlyComponentMap = {
75406
- "default": ReadOnlyText,
75416
+ "default": FormReadOnlyText,
75407
75417
  markdown: FormReadOnlyMarkdown,
75408
- string: ReadOnlyText,
75418
+ string: FormReadOnlyText,
75409
75419
  number: FormReadOnlyNumber,
75410
75420
  select: FormReadOnlySelect,
75411
75421
  "boolean": FormReadOnlyBoolean,
@@ -75447,17 +75457,23 @@ var FormulatorFormSection = /*#__PURE__*/function (_React$Component) {
75447
75457
  errorMessages = _this$props.errorMessages,
75448
75458
  results = _this$props.results,
75449
75459
  data = _this$props.data,
75450
- fieldStates = _this$props.fieldStates;
75460
+ fieldStates = _this$props.fieldStates,
75461
+ renderComponentMap = _this$props.renderComponentMap;
75451
75462
  var field = fieldEntry,
75452
75463
  specialProps = {};
75453
75464
 
75454
75465
  if (Array.isArray(fieldEntry)) {
75455
75466
  if (fieldEntry[0] === '@@render') {
75456
75467
  field = fieldEntry[1];
75457
- specialProps = _objectSpread$1({
75458
- isRender: true
75459
- }, fieldEntry[2] || {});
75460
- } else if (fieldEntry[0] === '@@markdown') {
75468
+ return {
75469
+ type: 'render',
75470
+ name: field,
75471
+ component: renderComponentMap[field],
75472
+ componentProps: fieldEntry[2] || {}
75473
+ };
75474
+ }
75475
+
75476
+ if (fieldEntry[0] === '@@markdown') {
75461
75477
  return {
75462
75478
  type: 'markdown',
75463
75479
  name: fieldEntry[1],
@@ -75466,10 +75482,11 @@ var FormulatorFormSection = /*#__PURE__*/function (_React$Component) {
75466
75482
  content: fieldEntry[2]
75467
75483
  }
75468
75484
  };
75469
- } else {
75470
- field = fieldEntry[0];
75471
- specialProps = fieldEntry[1];
75472
75485
  }
75486
+
75487
+ field = fieldEntry[0];
75488
+ if (!fieldEntry[1]) throw new Error("field \"".concat(field, "\" is defined in an array, but has no props definition"));
75489
+ specialProps = fieldEntry[1];
75473
75490
  }
75474
75491
 
75475
75492
  var _specialProps = specialProps,
@@ -75490,8 +75507,8 @@ var FormulatorFormSection = /*#__PURE__*/function (_React$Component) {
75490
75507
  type = _schema$properties$fi.type,
75491
75508
  defaultValue = _schema$properties$fi["default"];
75492
75509
  var mapKey;
75493
- if (specialProps.isRender) mapKey = type;else if (componentMap[field] !== undefined) mapKey = field;else if (typeof type === 'string' && componentMap[type] !== undefined) mapKey = type;else if (Array.isArray(type)) mapKey = 'select';else if (componentMap["default"] !== undefined) mapKey = 'default';else throw new Error("Could not find a Component to render for \"".concat(field, "\""));
75494
- var mapEntry = specialProps.isRender ? '@@render' : componentMap[mapKey];
75510
+ if (componentMap[field] !== undefined) mapKey = field;else if (typeof type === 'string' && componentMap[type] !== undefined) mapKey = type;else if (Array.isArray(type)) mapKey = 'select';else if (componentMap["default"] !== undefined) mapKey = 'default';else throw new Error("Could not find a Component to render for \"".concat(field, "\""));
75511
+ var mapEntry = componentMap[mapKey];
75495
75512
  var component = mapEntry,
75496
75513
  props = {};
75497
75514
 
@@ -75595,7 +75612,6 @@ var FormulatorFormSection = /*#__PURE__*/function (_React$Component) {
75595
75612
  type: _type,
75596
75613
  label: _label,
75597
75614
  value: _value,
75598
- isRender: true,
75599
75615
  required: _required,
75600
75616
  hasErrors: _hasErrors,
75601
75617
  errors: _errors,
@@ -76386,4 +76402,4 @@ FormulatorForm.defaultProps = {
76386
76402
  errorMessages: {}
76387
76403
  };
76388
76404
 
76389
- export { FormBoolean, FormField$1 as FormField, FormNumber, FormReadOnlyBoolean, FormReadOnlyField$1 as FormReadOnlyField, FormReadOnlyMarkdown, FormReadOnlyNumber, FormReadOnlyRepeater, FormReadOnlySelect, ReadOnlyText as FormReadOnlyText, FormRepeater, FormSelect, FormText, FormulatorForm };
76405
+ export { FormBoolean, FormField$1 as FormField, FormNumber, FormReadOnlyBoolean, FormReadOnlyField$1 as FormReadOnlyField, FormReadOnlyMarkdown, FormReadOnlyNumber, FormReadOnlyRepeater, FormReadOnlySelect, FormReadOnlyText, FormRepeater, FormSelect, FormText, FormulatorForm };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scenid/react-formulator",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "main": "dist/index.cjs.js",
5
5
  "module": "dist/index.esm.js",
6
6
  "repository": "https://dennykoch@bitbucket.org/scenid/react-formulator.git",
@@ -21,6 +21,7 @@
21
21
  "@material-ui/icons": "^4.11.3",
22
22
  "@material-ui/styles": "^4.11.5",
23
23
  "classnames": "^2.3.1",
24
+ "luxon": "^2.3.2",
24
25
  "prop-types": "^15.8.1",
25
26
  "react": "16.11.0",
26
27
  "react-dom": "16.11.0"
@@ -46,6 +47,7 @@
46
47
  "@storybook/testing-library": "^0.0.11",
47
48
  "babel-loader": "^8.2.5",
48
49
  "classnames": "^2.3.1",
50
+ "luxon": "^2.3.2",
49
51
  "cross-env": "^7.0.3",
50
52
  "eslint": "^7.11.0",
51
53
  "eslint-config-airbnb": "^18.0.1",
@@ -21,7 +21,6 @@ const useStyles = makeStyles(theme => ({ error: { color: theme.palette.error.mai
21
21
  const FormControlField = ({
22
22
  variant,
23
23
  type,
24
- isRender,
25
24
  name,
26
25
  label,
27
26
  component,
@@ -51,6 +50,8 @@ const FormControlField = ({
51
50
  onChange
52
51
  }
53
52
 
53
+ const isRender = type === 'render'
54
+
54
55
  if (validating) {
55
56
  finalProps.endAdornment = [(
56
57
  <InputAdornment position="end">
@@ -127,7 +128,6 @@ const FormControlField = ({
127
128
 
128
129
  FormControlField.propTypes = {
129
130
  variant: PropTypes.oneOf(['standard', 'filled', 'outlined']),
130
- isRender: PropTypes.bool,
131
131
  component: PropTypes.any.isRequired,
132
132
  componentProps: PropTypes.object,
133
133
  type: PropTypes.string.isRequired,
@@ -190,7 +190,6 @@ const FormField = ({
190
190
 
191
191
  FormField.propTypes = {
192
192
  variant: PropTypes.oneOf(['standard', 'filled', 'outlined']),
193
- isRender: PropTypes.bool,
194
193
  component: PropTypes.any.isRequired,
195
194
  componentProps: PropTypes.object,
196
195
  type: PropTypes.string.isRequired,
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types'
3
3
 
4
4
  import { TextField, MenuItem } from '@material-ui/core'
5
5
 
6
- const FormSelect = ({ options, required, ...props }) => {
6
+ const FormSelect = ({ options, required, value, ...props }) => {
7
7
  let unselectOption = []
8
8
 
9
9
  if (!required) {
@@ -18,6 +18,8 @@ const FormSelect = ({ options, required, ...props }) => {
18
18
  return (
19
19
  <TextField
20
20
  select
21
+ required={required}
22
+ value={value === undefined ? '' : value}
21
23
  {...props}
22
24
  >
23
25
  {
@@ -60,18 +60,23 @@ class FormulatorFormSection extends React.Component {
60
60
  errorMessages,
61
61
  results,
62
62
  data,
63
- fieldStates
63
+ fieldStates,
64
+ renderComponentMap
64
65
  } = this.props
65
66
 
66
67
  let field = fieldEntry, specialProps = {}
67
68
  if (Array.isArray(fieldEntry)) {
68
69
  if (fieldEntry[0] === '@@render') {
69
70
  field = fieldEntry[1]
70
- specialProps = {
71
- isRender: true,
72
- ...(fieldEntry[2] || {})
73
- }
74
- } else if (fieldEntry[0] === '@@markdown') {
71
+ return ({
72
+ type: 'render',
73
+ name: field,
74
+ component: renderComponentMap[field],
75
+ componentProps: fieldEntry[2] || {}
76
+ })
77
+ }
78
+
79
+ if (fieldEntry[0] === '@@markdown') {
75
80
  return ({
76
81
  type: 'markdown',
77
82
  name: fieldEntry[1],
@@ -80,10 +85,12 @@ class FormulatorFormSection extends React.Component {
80
85
  content: fieldEntry[2]
81
86
  }
82
87
  })
83
- } else {
84
- field = fieldEntry[0]
85
- specialProps = fieldEntry[1]
86
88
  }
89
+
90
+
91
+ field = fieldEntry[0]
92
+ if (!fieldEntry[1]) throw new Error(`field "${field}" is defined in an array, but has no props definition`)
93
+ specialProps = fieldEntry[1]
87
94
  }
88
95
 
89
96
  const { hidden, hideLabel, ...extraProps } = specialProps
@@ -97,14 +104,13 @@ class FormulatorFormSection extends React.Component {
97
104
  const { type, default: defaultValue } = schema.properties[field]
98
105
 
99
106
  let mapKey
100
- if (specialProps.isRender) mapKey = type
101
- else if (componentMap[field] !== undefined) mapKey = field
107
+ if (componentMap[field] !== undefined) mapKey = field
102
108
  else if (typeof type === 'string' && componentMap[type] !== undefined) mapKey = type
103
109
  else if (Array.isArray(type)) mapKey = 'select'
104
110
  else if (componentMap.default !== undefined) mapKey = 'default'
105
111
  else throw new Error(`Could not find a Component to render for "${field}"`)
106
112
 
107
- const mapEntry = specialProps.isRender ? '@@render' : componentMap[mapKey]
113
+ const mapEntry = componentMap[mapKey]
108
114
  let component = mapEntry, props = {}
109
115
 
110
116
  if (mapKey === 'select') {
@@ -218,7 +224,6 @@ class FormulatorFormSection extends React.Component {
218
224
  type,
219
225
  label,
220
226
  value,
221
- isRender: true,
222
227
  required,
223
228
  hasErrors,
224
229
  errors,
@@ -4,7 +4,7 @@ import PropTypes from 'prop-types'
4
4
  import { Typography, Box } from '@material-ui/core'
5
5
 
6
6
  const FormControlField = ({
7
- isRender,
7
+ type,
8
8
  name,
9
9
  label,
10
10
  component,
@@ -28,7 +28,7 @@ const FormControlField = ({
28
28
  }
29
29
 
30
30
  let control
31
- if (isRender) control = React.cloneElement(component, finalProps)
31
+ if (type === 'render') control = React.cloneElement(component, finalProps)
32
32
  else control = React.createElement(component, finalProps)
33
33
 
34
34
  return (
@@ -55,10 +55,10 @@ const FormControlField = ({
55
55
  }
56
56
 
57
57
  FormControlField.propTypes = {
58
- isRender: PropTypes.bool,
59
58
  component: PropTypes.any.isRequired,
60
59
  componentProps: PropTypes.object,
61
60
  name: PropTypes.string.isRequired,
61
+ type: PropTypes.string.isRequired,
62
62
  label: PropTypes.string.isRequired,
63
63
  value: PropTypes.oneOfType([
64
64
  PropTypes.string,
@@ -3,17 +3,27 @@ import PropTypes from 'prop-types'
3
3
 
4
4
  import { Typography } from '@material-ui/core'
5
5
 
6
- const ReadOnlyText = ({ value }) => (
7
- <Typography variant="body1">
8
- {value}
9
- </Typography>
10
- )
6
+ import { DateTime } from 'luxon'
11
7
 
12
- ReadOnlyText.propTypes = {
8
+ const FormReadOnlyText = ({ value, type }) => {
9
+ let finalValue = value
10
+
11
+ if (type === 'date' || type === 'datetime-local') {
12
+ finalValue = DateTime.fromISO(value).toLocaleString(DateTime.DATE_MED_WITH_WEEKDAY)
13
+ }
14
+
15
+ return (
16
+ <Typography variant="body1">
17
+ {finalValue}
18
+ </Typography>
19
+ )
20
+ }
21
+
22
+ FormReadOnlyText.propTypes = {
13
23
  value: PropTypes.oneOfType([
14
24
  PropTypes.number,
15
25
  PropTypes.string
16
26
  ])
17
27
  }
18
28
 
19
- export default ReadOnlyText
29
+ export default FormReadOnlyText