react-survey-builder 1.0.16 → 1.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +18 -16
  2. package/dist/186.index.js +1 -0
  3. package/dist/app.css +1 -1
  4. package/dist/app.css.map +1 -1
  5. package/dist/index.js +1 -1
  6. package/lib/dynamic-option-list.js +1 -1
  7. package/lib/fieldset/FieldSet.js +15 -17
  8. package/lib/form copy.js +622 -0
  9. package/lib/form-fields.js +201 -208
  10. package/lib/form.js +765 -534
  11. package/lib/index.js +3 -3
  12. package/lib/language-provider/locales/en-us.json +1 -0
  13. package/lib/multi-column/MultiColumnRow.js +25 -25
  14. package/lib/multi-column/dustbin.js +16 -16
  15. package/lib/multi-column/grip.js +6 -6
  16. package/lib/preview.js +41 -40
  17. package/lib/sortable-element.js +6 -6
  18. package/lib/sortable-form-elements.js +2 -0
  19. package/lib/stores/store.js +22 -22
  20. package/lib/survey-elements/component-drag-handle.js +6 -6
  21. package/lib/survey-elements/component-drag-layer.js +3 -3
  22. package/lib/survey-elements/component-drag-preview.js +1 -1
  23. package/lib/survey-elements/component-error-message.js +1 -0
  24. package/lib/survey-elements/component-header.js +5 -5
  25. package/lib/survey-elements/component-label.js +12 -6
  26. package/lib/survey-elements/custom-element.js +23 -12
  27. package/lib/survey-elements/header-bar.js +5 -5
  28. package/lib/survey-elements/index.js +817 -740
  29. package/lib/survey-elements/myxss.js +68 -1
  30. package/lib/survey-elements-edit.js +211 -53
  31. package/lib/toolbar-draggable-item.js +4 -4
  32. package/lib/toolbar.js +49 -18
  33. package/lib/utils/ipUtils.js +53 -0
  34. package/package.json +2 -3
  35. package/types/index.d.ts +5 -1
  36. package/dist/967.index.js +0 -1
  37. package/lib/survey-elements/date-picker.js +0 -272
  38. package/lib/utils/custom-date-picker.js +0 -93
package/lib/form.js CHANGED
@@ -6,27 +6,23 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports["default"] = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
12
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
14
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
15
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
10
  var _react = _interopRequireDefault(require("react"));
17
11
  var _reactDom = _interopRequireDefault(require("react-dom"));
18
- var _fbemitter = require("fbemitter");
19
12
  var _reactIntl = require("react-intl");
20
- var _surveyValidator = _interopRequireDefault(require("./survey-validator"));
21
13
  var _surveyElements = _interopRequireDefault(require("./survey-elements"));
22
14
  var _multiColumn = require("./multi-column");
23
15
  var _fieldset = require("./fieldset");
24
16
  var _customElement = _interopRequireDefault(require("./survey-elements/custom-element"));
25
17
  var _registry = _interopRequireDefault(require("./stores/registry"));
26
18
  var _reactBootstrap = require("react-bootstrap");
27
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
28
- function _isNativeReflectConstruct() { 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; } } /**
29
- * <Form />
19
+ var _reactHookForm = require("react-hook-form");
20
+ var _lodash = require("lodash");
21
+ var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
22
+ var _reactPhoneNumberInput = require("react-phone-number-input");
23
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /**
25
+ * <FormFields />
30
26
  */
31
27
  var Image = _surveyElements["default"].Image,
32
28
  Checkboxes = _surveyElements["default"].Checkboxes,
@@ -34,593 +30,828 @@ var Image = _surveyElements["default"].Image,
34
30
  Download = _surveyElements["default"].Download,
35
31
  Camera = _surveyElements["default"].Camera,
36
32
  FileUpload = _surveyElements["default"].FileUpload;
37
- var ReactSurvey = /*#__PURE__*/function (_React$Component) {
38
- (0, _inherits2["default"])(ReactSurvey, _React$Component);
39
- var _super = _createSuper(ReactSurvey);
40
- function ReactSurvey(props) {
41
- var _this;
42
- (0, _classCallCheck2["default"])(this, ReactSurvey);
43
- _this = _super.call(this, props);
44
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "form", void 0);
45
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "inputs", {});
46
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "answerData", void 0);
47
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleRenderSubmit", function () {
48
- var name = _this.props.actionName || _this.props.actionName;
49
- var actionName = name || 'Submit';
50
- var _this$props$submitBut = _this.props.submitButton,
51
- submitButton = _this$props$submitBut === void 0 ? false : _this$props$submitBut;
52
- var buttonProps = {};
53
- if (_this.props.formId) {
54
- buttonProps.form = _this.props.formId;
55
- }
56
- return submitButton || /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Button, {
57
- variant: "primary",
58
- type: "submit"
59
- }, actionName);
60
- });
61
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleRenderBack", function () {
62
- var name = _this.props.backName || _this.props.backName;
63
- var backName = name || 'Cancel';
64
- var _this$props$backButto = _this.props.backButton,
65
- backButton = _this$props$backButto === void 0 ? false : _this$props$backButto;
66
- return backButton || /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Button, {
67
- variant: "secondary",
68
- onClick: _this.props.backAction,
69
- className: "btn-cancel"
70
- }, backName);
71
- });
72
- _this.answerData = _this._convert(props.answerData);
73
- _this.emitter = new _fbemitter.EventEmitter();
74
- _this.getDataById = _this.getDataById.bind((0, _assertThisInitialized2["default"])(_this));
33
+ var ReactSurvey = function ReactSurvey(_ref) {
34
+ var _ref$validateForCorre = _ref.validateForCorrectness,
35
+ validateForCorrectness = _ref$validateForCorre === void 0 ? false : _ref$validateForCorre,
36
+ _ref$skipValidations = _ref.skipValidations,
37
+ skipValidations = _ref$skipValidations === void 0 ? false : _ref$skipValidations,
38
+ _ref$displayShort = _ref.displayShort,
39
+ displayShort = _ref$displayShort === void 0 ? false : _ref$displayShort,
40
+ _ref$hideRequiredAler = _ref.hideRequiredAlert,
41
+ hideRequiredAlert = _ref$hideRequiredAler === void 0 ? false : _ref$hideRequiredAler,
42
+ _ref$readOnly = _ref.readOnly,
43
+ readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
44
+ downloadPath = _ref.downloadPath,
45
+ intl = _ref.intl,
46
+ answers = _ref.answers,
47
+ onSubmit = _ref.onSubmit,
48
+ onChange = _ref.onChange,
49
+ onBlur = _ref.onBlur,
50
+ items = _ref.items,
51
+ _ref$submitButton = _ref.submitButton,
52
+ submitButton = _ref$submitButton === void 0 ? false : _ref$submitButton,
53
+ _ref$backButton = _ref.backButton,
54
+ backButton = _ref$backButton === void 0 ? false : _ref$backButton,
55
+ _ref$actionName = _ref.actionName,
56
+ actionName = _ref$actionName === void 0 ? null : _ref$actionName,
57
+ _ref$backName = _ref.backName,
58
+ backName = _ref$backName === void 0 ? null : _ref$backName,
59
+ _ref$backAction = _ref.backAction,
60
+ backAction = _ref$backAction === void 0 ? null : _ref$backAction,
61
+ _ref$hideActions = _ref.hideActions,
62
+ hideActions = _ref$hideActions === void 0 ? false : _ref$hideActions,
63
+ formAction = _ref.formAction,
64
+ formMethod = _ref.formMethod,
65
+ variables = _ref.variables,
66
+ authenticity_token = _ref.authenticity_token,
67
+ task_id = _ref.task_id,
68
+ buttonClassName = _ref.buttonClassName,
69
+ formId = _ref.formId,
70
+ _ref$print = _ref.print,
71
+ print = _ref$print === void 0 ? false : _ref$print;
72
+ //#region useForms
75
73
 
76
- // Bind handleBlur and handleChange methods
77
- _this.handleBlur = _this.handleBlur.bind((0, _assertThisInitialized2["default"])(_this));
78
- _this.handleChange = _this.handleChange.bind((0, _assertThisInitialized2["default"])(_this));
79
- _this.handleSubmit = _this.handleSubmit.bind((0, _assertThisInitialized2["default"])(_this));
80
- return _this;
81
- }
82
- (0, _createClass2["default"])(ReactSurvey, [{
83
- key: "_convert",
84
- value: function _convert(answers) {
85
- if (Array.isArray(answers)) {
86
- var result = {};
87
- answers.forEach(function (x) {
88
- if (x.name.indexOf('tags_') > -1) {
89
- if (Array.isArray(x.value)) {
90
- result[x.name] = x.value.map(function (y) {
91
- return y.value;
92
- }).join(',');
93
- } else {
94
- result[x.name] = x.value;
95
- }
96
- } else {
97
- result[x.name] = x.value;
98
- }
99
- });
100
- return result;
101
- }
102
- return answers || {};
74
+ var methods = (0, _reactHookForm.useForm)({
75
+ mode: 'all',
76
+ reValidateMode: 'onChange',
77
+ criteriaMode: 'all',
78
+ shouldFocusError: true,
79
+ shouldUnregister: true
80
+ });
81
+
82
+ //#endregion
83
+ //#region helper functions
84
+
85
+ var _convert = function _convert($dataAnswers) {
86
+ if (Array.isArray($dataAnswers)) {
87
+ var result = {};
88
+ $dataAnswers.forEach(function (answer) {
89
+ result[answer.name] = answer.value;
90
+ });
91
+ return result;
103
92
  }
104
- }, {
105
- key: "_getDefaultValue",
106
- value: function _getDefaultValue(item) {
107
- return this.answerData[item.fieldName];
93
+ return $dataAnswers || {};
94
+ };
95
+ var form = _react["default"].useRef();
96
+ var inputs = _react["default"].useRef({});
97
+ var answerData = _react["default"].useRef(_convert(answers));
98
+ var _getDefaultValue = function _getDefaultValue($dataItem) {
99
+ var defaultValue = answerData.current[$dataItem.fieldName];
100
+ if ($dataItem.element === 'DatePicker') {
101
+ var _$dataItem$defaultTod;
102
+ var defaultToday = (_$dataItem$defaultTod = $dataItem.defaultToday) !== null && _$dataItem$defaultTod !== void 0 ? _$dataItem$defaultTod : false;
103
+ var formatMask = $dataItem.formatMask || 'MM/DD/YYYY';
104
+ if (defaultToday && (defaultValue === '' || defaultValue === undefined)) {
105
+ defaultValue = (0, _momentTimezone["default"])().format(formatMask);
106
+ }
108
107
  }
109
- }, {
110
- key: "_optionsDefaultValue",
111
- value: function _optionsDefaultValue(item) {
112
- var _this2 = this;
113
- var defaultValue = this._getDefaultValue(item);
114
- if (defaultValue) {
115
- return defaultValue;
108
+ if ($dataItem.element === 'Checkbox') {
109
+ var _$dataItem$defaultChe;
110
+ var defaultChecked = (_$dataItem$defaultChe = $dataItem.defaultChecked) !== null && _$dataItem$defaultChe !== void 0 ? _$dataItem$defaultChe : false;
111
+ if (defaultChecked === true) {
112
+ defaultValue = true;
116
113
  }
117
- var defaultChecked = [];
118
- item.options.forEach(function (option) {
119
- if (_this2.answerData["option_".concat(option.key)]) {
120
- defaultChecked.push(option.key);
121
- }
122
- });
123
- return defaultChecked;
124
114
  }
125
- }, {
126
- key: "_getItemValue",
127
- value: function _getItemValue(item, ref) {
128
- var $item = {
129
- element: item.element,
130
- value: ''
131
- };
132
- if (item.element === 'Rating') {
133
- $item.value = ref.inputField.current.state.rating;
134
- } else if (item.element === 'Tags') {
135
- $item.value = ref.state.value;
136
- // } else if (item.element === 'DatePicker') {
137
- // $item.value = ref.state.value;
138
- } else if (item.element === 'Camera') {
139
- $item.value = ref.state.img;
140
- } else if (item.element === 'FileUpload') {
141
- $item.value = ref.state.fileUpload;
142
- } else if (ref && ref.inputField && ref.inputField.current) {
143
- $item = _reactDom["default"].findDOMNode(ref.inputField.current);
144
- if ($item && typeof $item.value === 'string') {
145
- $item.value = $item.value.trim();
146
- }
115
+ if (defaultValue === undefined) {
116
+ if ($dataItem.element === 'Checkboxes' || $dataItem.element === 'Tags') {
117
+ defaultValue = [];
118
+ } else {
119
+ defaultValue = '';
147
120
  }
148
- return $item;
149
121
  }
150
- }, {
151
- key: "_isIncorrect",
152
- value: function _isIncorrect(item) {
153
- var incorrect = false;
154
- if (item.canHaveAnswer) {
155
- var ref = this.inputs[item.fieldName];
156
- if (item.element === 'Checkboxes' || item.element === 'RadioButtons') {
157
- item.options.forEach(function (option) {
158
- var $option = _reactDom["default"].findDOMNode(ref.options["child_ref_".concat(option.key)]);
159
- if (option.hasOwnProperty('correct') && !$option.checked || !option.hasOwnProperty('correct') && $option.checked) {
160
- incorrect = true;
161
- }
162
- });
163
- } else {
164
- var $item = this._getItemValue(item, ref);
165
- if (item.element === 'Rating') {
166
- if ($item.value.toString() !== item.correct) {
167
- incorrect = true;
168
- }
169
- } else if ($item.value.toLowerCase() !== item.correct.trim().toLowerCase()) {
170
- incorrect = true;
171
- }
172
- }
122
+ return defaultValue;
123
+ };
124
+ var _optionsDefaultValue = function _optionsDefaultValue($dataItem) {
125
+ var defaultValue = _getDefaultValue($dataItem);
126
+ if (defaultValue) {
127
+ return defaultValue;
128
+ }
129
+ var defaultChecked = [];
130
+ $dataItem.options.forEach(function (option) {
131
+ if (answerData.current["option_".concat(option.key)]) {
132
+ defaultChecked.push(option.key);
133
+ }
134
+ });
135
+ return defaultChecked;
136
+ };
137
+ var _getItemValue = function _getItemValue($dataItem, ref) {
138
+ var $item = {
139
+ element: $dataItem.element,
140
+ value: ''
141
+ };
142
+ if ($dataItem.element === 'Rating') {
143
+ $item.value = ref.inputField.current.state.rating;
144
+ } else if ($dataItem.element === 'Tags') {
145
+ $item.value = ref.props.value;
146
+ // } else if (item.element === 'DatePicker') {
147
+ // $item.value = ref.state.value;
148
+ } else if ($dataItem.element === 'Camera') {
149
+ $item.value = ref.state.img;
150
+ } else if ($dataItem.element === 'FileUpload') {
151
+ $item.value = ref.state.fileUpload;
152
+ } else if ($dataItem.element === 'Signature') {
153
+ $item.value = ref.state.value;
154
+ } else if (ref && ref.inputField && ref.inputField.current) {
155
+ $item = _reactDom["default"].findDOMNode(ref.inputField.current);
156
+ if ($item && typeof $item.value === 'string') {
157
+ $item.value = $item.value.trim();
173
158
  }
174
- return incorrect;
175
159
  }
176
- }, {
177
- key: "_isInvalid",
178
- value: function _isInvalid(item) {
179
- var invalid = false;
180
- if (item.required === true) {
181
- var ref = this.inputs[item.fieldName];
182
- if (item.element === 'Checkboxes' || item.element === 'RadioButtons') {
183
- var checked_options = 0;
184
- item.options.forEach(function (option) {
185
- var $option = _reactDom["default"].findDOMNode(ref.options["child_ref_".concat(option.key)]);
186
- if ($option.checked) {
187
- checked_options += 1;
188
- }
189
- });
190
- if (checked_options < 1) {
191
- // errors.push(item.label + ' is required!');
192
- invalid = true;
160
+ return $item;
161
+ };
162
+ var _isIncorrect = function _isIncorrect($dataItem) {
163
+ var incorrect = false;
164
+ if ($dataItem.canHaveAnswer) {
165
+ var ref = inputs.current[$dataItem.fieldName];
166
+ if ($dataItem.element === 'Checkboxes' || $dataItem.element === 'RadioButtons') {
167
+ $dataItem.options.forEach(function (option) {
168
+ var $option = _reactDom["default"].findDOMNode(ref.options["child_ref_".concat(option.key)]);
169
+ if (option.hasOwnProperty('correct') && !$option.checked || !option.hasOwnProperty('correct') && $option.checked) {
170
+ incorrect = true;
193
171
  }
194
- } else {
195
- var $item = this._getItemValue(item, ref);
196
- if (item.element === 'Rating') {
197
- if ($item.value === 0) {
198
- invalid = true;
199
- }
200
- } else if ($item.value === undefined || $item.value.length < 1) {
201
- invalid = true;
172
+ });
173
+ } else {
174
+ var $item = _getItemValue($dataItem, ref);
175
+ if ($dataItem.element === 'Rating') {
176
+ if ($item.value.toString() !== $dataItem.correct) {
177
+ incorrect = true;
202
178
  }
179
+ } else if ($item.value.toLowerCase() !== $dataItem.correct.trim().toLowerCase()) {
180
+ incorrect = true;
203
181
  }
204
182
  }
205
- return invalid;
206
183
  }
207
- }, {
208
- key: "_collect",
209
- value: function _collect(item) {
210
- var itemData = {
211
- id: item.id,
212
- name: item.fieldName,
213
- customName: item.customName || item.fieldName,
214
- help: item.help,
215
- label: item.label !== null && item.label !== undefined && item.label !== '' ? item.label.trim() : ''
216
- };
217
- if (!itemData.name) return null;
218
- var ref = this.inputs[item.fieldName];
219
- if (item.element === 'Checkboxes') {
220
- var checkedOptions = [];
221
- item.options.forEach(function (option) {
222
- var $option = _reactDom["default"].findDOMNode(ref.options["child_ref_".concat(option.key)]);
223
- if ($option.checked) {
224
- checkedOptions.push(option.value);
225
- }
226
- });
227
- itemData.value = checkedOptions;
228
- } else if (item.element === 'RadioButtons') {
229
- item.options.forEach(function (option) {
184
+ return incorrect;
185
+ };
186
+ var _isInvalid = function _isInvalid($dataItem) {
187
+ var invalid = false;
188
+ if ($dataItem.required === true) {
189
+ var ref = inputs.current[$dataItem.fieldName];
190
+ if ($dataItem.element === 'Checkboxes' || $dataItem.element === 'RadioButtons') {
191
+ var checked_options = 0;
192
+ $dataItem.options.forEach(function (option) {
230
193
  var $option = _reactDom["default"].findDOMNode(ref.options["child_ref_".concat(option.key)]);
231
194
  if ($option.checked) {
232
- itemData.value = option.value;
195
+ checked_options += 1;
233
196
  }
234
197
  });
235
- } else if (item.element === 'Checkbox') {
236
- if (!ref || !ref.inputField || !ref.inputField.current) {
237
- itemData.value = false;
238
- } else {
239
- itemData.value = ref.inputField.current.checked;
198
+ if (checked_options < 1) {
199
+ // errors.push(item.label + ' is required!');
200
+ invalid = true;
240
201
  }
241
202
  } else {
242
- if (!ref) return null;
243
- itemData.value = this._getItemValue(item, ref).value;
203
+ var $item = _getItemValue($dataItem, ref);
204
+ if ($dataItem.element === 'Rating') {
205
+ if ($item.value === 0) {
206
+ invalid = true;
207
+ }
208
+ } else if ($item.value === undefined || $item.value.length < 1) {
209
+ invalid = true;
210
+ }
244
211
  }
245
- itemData.required = item.required || false;
246
- return itemData;
247
212
  }
248
- }, {
249
- key: "_collectFormData",
250
- value: function _collectFormData(data) {
251
- var _this3 = this;
252
- var formData = [];
253
- data.forEach(function (item) {
254
- var item_data = _this3._collect(item);
255
- if (item_data) {
256
- formData.push(item_data);
213
+ return invalid;
214
+ };
215
+ var _collect = function _collect($dataItem) {
216
+ var itemData = {
217
+ id: $dataItem.id,
218
+ name: $dataItem.fieldName,
219
+ customName: $dataItem.customName || $dataItem.fieldName,
220
+ label: $dataItem.label !== null && $dataItem.label !== undefined && $dataItem.label !== '' ? $dataItem.label.trim() : ''
221
+ };
222
+ if (!itemData.name) return null;
223
+ var ref = inputs.current[$dataItem.fieldName];
224
+ if ($dataItem.element === 'Checkboxes') {
225
+ var checkedOptions = [];
226
+ $dataItem.options.forEach(function (option) {
227
+ var $option = _reactDom["default"].findDOMNode(ref.options["child_ref_".concat(option.key)]);
228
+ if ($option.checked) {
229
+ checkedOptions.push(option.value);
257
230
  }
258
231
  });
259
- return formData;
260
- }
261
- }, {
262
- key: "_getSignatureImg",
263
- value: function _getSignatureImg(item) {
264
- var ref = this.inputs[item.fieldName];
265
- var $canvas_sig = ref.canvas.current;
266
- if ($canvas_sig) {
267
- var base64 = $canvas_sig.toDataURL().replace('data:image/png;base64,', '');
268
- var isEmpty = $canvas_sig.isEmpty();
269
- var $input_sig = _reactDom["default"].findDOMNode(ref.inputField.current);
270
- if (isEmpty) {
271
- $input_sig.value = '';
272
- } else {
273
- $input_sig.value = base64;
232
+ itemData.value = checkedOptions;
233
+ } else if ($dataItem.element === 'RadioButtons') {
234
+ $dataItem.options.forEach(function (option) {
235
+ var $option = _reactDom["default"].findDOMNode(ref.options["child_ref_".concat(option.key)]);
236
+ if ($option.checked) {
237
+ itemData.value = option.value;
274
238
  }
239
+ });
240
+ } else if ($dataItem.element === 'Checkbox') {
241
+ if (!ref || !ref.inputField || !ref.inputField.current) {
242
+ itemData.value = false;
243
+ } else {
244
+ itemData.value = ref.inputField.current.checked;
275
245
  }
246
+ } else {
247
+ if (!ref) return null;
248
+ itemData.value = _getItemValue($dataItem, ref).value;
276
249
  }
277
- }, {
278
- key: "handleSubmit",
279
- value: function handleSubmit(e) {
280
- e.preventDefault();
281
- var errors = [];
282
- if (!this.props.skipValidations) {
283
- errors = this.validateForm();
284
- // Publish errors, if any.
285
- this.emitter.emit('surveyValidation', errors);
250
+ itemData.required = $dataItem.required || false;
251
+ return itemData;
252
+ };
253
+ var _collectFormData = function _collectFormData($dataItems) {
254
+ var formData = [];
255
+ $dataItems.forEach(function (item) {
256
+ var itemData = _collect(item);
257
+ if (itemData) {
258
+ formData.push(itemData);
286
259
  }
287
-
288
- // Only submit if there are no errors.
289
- if (errors.length < 1) {
290
- var onSubmit = this.props.onSubmit;
291
- if (onSubmit) {
292
- var data = this._collectFormData(this.props.data);
293
- onSubmit(data);
294
- } else {
295
- var $form = _reactDom["default"].findDOMNode(this.form);
296
- $form.submit();
297
- }
260
+ });
261
+ return formData;
262
+ };
263
+ var _getSignatureImg = function _getSignatureImg($dataItem) {
264
+ var ref = inputs.current[$dataItem.fieldName];
265
+ var $canvas_sig = ref.canvas.current;
266
+ if ($canvas_sig) {
267
+ var base64 = $canvas_sig.toDataURL().replace('data:image/png;base64,', '');
268
+ var _isEmpty = $canvas_sig.isEmpty();
269
+ var $input_sig = _reactDom["default"].findDOMNode(ref.inputField.current);
270
+ if (_isEmpty) {
271
+ $input_sig.value = '';
272
+ methods.setValue($dataItem.fieldName, '');
273
+ } else {
274
+ $input_sig.value = base64;
275
+ methods.setValue($dataItem.fieldName, base64);
298
276
  }
299
277
  }
300
- }, {
301
- key: "handleBlur",
302
- value: function handleBlur(event) {
303
- // Call submit function on blur
304
- if (this.props.onBlur) {
305
- var onBlur = this.props.onBlur;
306
- var data = this._collectFormData(this.props.data);
307
- onBlur(data);
308
- }
278
+ };
279
+
280
+ //#endregion
281
+ //#region form methods
282
+
283
+ var handleSubmit = function handleSubmit($formData, event) {
284
+ event.preventDefault();
285
+ console.log('handleSubmit', $formData);
286
+ var errors = [];
287
+ if (!skipValidations) {
288
+ errors = validateForm();
289
+ // Publish errors, if any.
290
+ //emitter.emit('surveyValidation', errors);
309
291
  }
310
- }, {
311
- key: "handleChange",
312
- value: function handleChange(event) {
313
- // Call submit function on change
314
- if (this.props.onChange) {
315
- var onChange = this.props.onChange;
316
- var data = this._collectFormData(this.props.data);
317
- onChange(data);
292
+
293
+ // Only submit if there are no errors.
294
+ if (errors.length < 1) {
295
+ if (onSubmit) {
296
+ var $data = _collectFormData(items);
297
+ onSubmit($data);
298
+ } else {
299
+ var $form = _reactDom["default"].findDOMNode(form.current);
300
+ $form.submit();
318
301
  }
319
302
  }
320
- }, {
321
- key: "validateForm",
322
- value: function validateForm() {
323
- var _this4 = this;
324
- var errors = [];
325
- var data_items = this.props.data;
326
- var intl = this.props.intl;
327
- if (this.props.displayShort) {
328
- data_items = this.props.data.filter(function (i) {
329
- return i.alternateForm === true;
330
- });
303
+ };
304
+ var handleChange = function handleChange(event) {
305
+ // console.log('handleChange');
306
+ // Call submit function on change
307
+ if (onChange) {
308
+ var $data = _collectFormData(items);
309
+ onChange($data);
310
+ }
311
+ };
312
+ var validateForm = function validateForm() {
313
+ var errors = [];
314
+ var dataItems = items;
315
+ if (displayShort) {
316
+ dataItems = items.filter(function (i) {
317
+ return i.alternateForm === true;
318
+ });
319
+ }
320
+ dataItems.forEach(function (item) {
321
+ if (item.element === 'Signature') {
322
+ _getSignatureImg(item);
331
323
  }
332
- data_items.forEach(function (item) {
333
- if (item.element === 'Signature') {
334
- _this4._getSignatureImg(item);
335
- }
336
- if (_this4._isInvalid(item)) {
337
- errors.push("".concat(item.label, " ").concat(intl.formatMessage({
338
- id: 'message.is-required'
339
- }), "!"));
340
- }
341
- if (item.element === 'EmailInput') {
342
- var ref = _this4.inputs[item.fieldName];
343
- var emailValue = _this4._getItemValue(item, ref).value;
344
- if (emailValue) {
345
- var validateEmail = function validateEmail(email) {
346
- return email.match(
347
- // eslint-disable-next-line no-useless-escape
348
- /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
349
- };
350
- var checkEmail = validateEmail(emailValue);
351
- if (!checkEmail) {
352
- errors.push("".concat(item.label, " ").concat(intl.formatMessage({
353
- id: 'message.invalid-email'
354
- })));
355
- }
324
+ if (_isInvalid(item)) {
325
+ errors.push("".concat(item.label, " ").concat(intl.formatMessage({
326
+ id: 'message.is-required'
327
+ }), "!"));
328
+ }
329
+ if (item.element === 'EmailInput') {
330
+ var ref = inputs.current[item.fieldName];
331
+ var emailValue = _getItemValue(item, ref).value;
332
+ if (emailValue) {
333
+ var checkEmail = validateEmail(emailValue);
334
+ if (!checkEmail) {
335
+ errors.push("".concat(item.label, " ").concat(intl.formatMessage({
336
+ id: 'message.invalid-email'
337
+ })));
356
338
  }
357
339
  }
358
- if (item.element === 'PhoneNumber') {
359
- var _ref = _this4.inputs[item.fieldName];
360
- var phoneValue = _this4._getItemValue(item, _ref).value;
361
- if (phoneValue) {
362
- var validatePhone = function validatePhone(phone) {
363
- return phone.match(
364
- // eslint-disable-next-line no-useless-escape
365
- /^[+]?(1\-|1\s|1|\d{3}\-|\d{3}\s|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/g);
366
- };
367
- var checkPhone = validatePhone(phoneValue);
368
- if (!checkPhone) {
369
- errors.push("".concat(item.label, " ").concat(intl.formatMessage({
370
- id: 'message.invalid-phone-number'
371
- })));
372
- }
340
+ }
341
+ if (item.element === 'PhoneNumber') {
342
+ var _ref2 = inputs.current[item.fieldName];
343
+ var phoneValue = _getItemValue(item, _ref2).value;
344
+ if (phoneValue) {
345
+ var checkPhone = validatePhone(phoneValue);
346
+ if (!checkPhone) {
347
+ errors.push("".concat(item.label, " ").concat(intl.formatMessage({
348
+ id: 'message.invalid-phone-number'
349
+ })));
373
350
  }
374
351
  }
375
- if (_this4.props.validateForCorrectness && _this4._isIncorrect(item)) {
376
- errors.push("".concat(item.label, " ").concat(intl.formatMessage({
352
+ }
353
+ if (validateForCorrectness && _isIncorrect(item)) {
354
+ methods.setError(item.fieldName, {
355
+ type: 'incorrect',
356
+ message: "".concat(item.label, " ").concat(intl.formatMessage({
377
357
  id: 'message.was-answered-incorrectly'
378
- }), "!"));
379
- }
380
- });
381
- return errors;
382
- }
383
- }, {
384
- key: "getDataById",
385
- value: function getDataById(id) {
386
- var data = this.props.data;
387
- return data.find(function (x) {
388
- return x.id === id;
389
- });
358
+ }))
359
+ });
360
+ errors.push("".concat(item.label, " ").concat(intl.formatMessage({
361
+ id: 'message.was-answered-incorrectly'
362
+ }), "!"));
363
+ }
364
+ });
365
+ return errors;
366
+ };
367
+ var validateEmail = function validateEmail(email) {
368
+ return email.match(
369
+ // eslint-disable-next-line no-useless-escape
370
+ /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
371
+ };
372
+ var toE164PhoneNumber = function toE164PhoneNumber(phoneNumberValue) {
373
+ if (phoneNumberValue !== undefined && phoneNumberValue !== null) {
374
+ //Filter only numbers from the input
375
+ var cleaned = ('' + phoneNumberValue).replace(/\D/g, '');
376
+
377
+ //Check if the input is of correct
378
+ var match = cleaned.match(/^(1|)?(\d{3})(\d{3})(\d{4})$/);
379
+ if (match) {
380
+ //Remove the matched extension code
381
+ //Change this to format for any country code.
382
+ var intlCode = match[1] ? '+1' : '+1';
383
+ return [intlCode, match[2], match[3], match[4]].join('');
384
+ }
385
+ return '';
386
+ } else {
387
+ return '';
390
388
  }
391
- }, {
392
- key: "getInputElement",
393
- value: function getInputElement(item) {
394
- var _this5 = this;
395
- if (item.custom) {
396
- return this.getCustomElement(item);
389
+ };
390
+ var validatePhone = function validatePhone(phone) {
391
+ return (0, _reactPhoneNumberInput.isValidPhoneNumber)(toE164PhoneNumber(phone), 'US');
392
+ };
393
+ var validateDate = function validateDate(dateString) {
394
+ if (dateString !== undefined && dateString !== null && dateString !== "") {
395
+ var dateformat = /^(0?[1-9]|1[0-2])[\/](0?[1-9]|[1-2][0-9]|3[01])[\/]\d{4}$/;
396
+
397
+ // Matching the date through regular expression
398
+ if (dateString.match(dateformat)) {
399
+ var operator = dateString.split('/');
400
+
401
+ // Extract the string into month, date and year
402
+ var datepart = [];
403
+ if (operator.length > 1) {
404
+ datepart = dateString.split('/');
405
+ }
406
+ var month = parseInt(datepart[0]);
407
+ var day = parseInt(datepart[1]);
408
+ var year = parseInt(datepart[2]);
409
+ if (day > 31 || day < 1) {
410
+ return false;
411
+ }
412
+ var currentYear = new Date().getFullYear();
413
+ if (year < 1900 || year > currentYear + 5) {
414
+ return false;
415
+ }
416
+
417
+ // Create a list of days of a month
418
+ var ListofDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
419
+ if (month === 1 || month > 2) {
420
+ if (day > ListofDays[month - 1]) {
421
+ // to check if the date is out of range
422
+ return false;
423
+ }
424
+ } else if (month === 2) {
425
+ var leapYear = false;
426
+ if (!(year % 4) && year % 100 || !(year % 400)) leapYear = true;
427
+ if (leapYear === false && day >= 29) return false;else if (leapYear === true && day > 29) {
428
+ // console.log('Invalid date format!');
429
+ return false;
430
+ }
431
+ } else if (month > 12 || month < 1) {
432
+ return false;
433
+ }
434
+ } else {
435
+ // console.log("Invalid date format!");
436
+ return false;
397
437
  }
398
- var Input = _surveyElements["default"][item.element];
399
- return /*#__PURE__*/_react["default"].createElement(Input, {
400
- handleChange: this.handleChange,
401
- ref: function ref(c) {
402
- return _this5.inputs[item.fieldName] = c;
403
- },
404
- mutable: true,
405
- key: "form_".concat(item.id),
406
- data: item,
407
- readOnly: this.props.readOnly,
408
- hideRequiredAlert: this.props.hideRequiredAlert || item.hideRequiredAlert,
409
- defaultValue: this._getDefaultValue(item)
410
- });
411
438
  }
412
- }, {
413
- key: "getContainerElement",
414
- value: function getContainerElement(item, Element) {
415
- var _this6 = this;
416
- var controls = item.childItems.map(function (x) {
417
- return x ? _this6.getInputElement(_this6.getDataById(x)) : /*#__PURE__*/_react["default"].createElement("div", null, "\xA0");
418
- });
419
- return /*#__PURE__*/_react["default"].createElement(Element, {
420
- mutable: true,
421
- key: "form_".concat(item.id),
422
- data: item,
423
- controls: controls,
424
- hideRequiredAlert: this.props.hideRequiredAlert || item.hideRequiredAlert
439
+ return true;
440
+ };
441
+ var getDataItemById = function getDataItemById(id) {
442
+ var $dataItem = items.find(function (x) {
443
+ return x.id === id;
444
+ });
445
+ if ($dataItem !== undefined) {
446
+ return _objectSpread(_objectSpread({}, $dataItem), {}, {
447
+ fieldRules: getFieldRules($dataItem),
448
+ print: print !== null && print !== void 0 ? print : false,
449
+ hideRequiredAlert: hideRequiredAlert || $dataItem.hideRequiredAlert,
450
+ readOnly: readOnly || $dataItem.readOnly,
451
+ disabled: $dataItem.readOnly,
452
+ mutable: true
425
453
  });
426
454
  }
427
- }, {
428
- key: "getSimpleElement",
429
- value: function getSimpleElement(item) {
430
- var Element = _surveyElements["default"][item.element];
431
- return /*#__PURE__*/_react["default"].createElement(Element, {
432
- mutable: true,
433
- key: "form_".concat(item.id),
434
- data: item,
435
- hideRequiredAlert: this.props.hideRequiredAlert || item.hideRequiredAlert
436
- });
455
+ return null;
456
+ };
457
+ var getInputElement = function getInputElement(item) {
458
+ if (!item) return null;
459
+ if (item.custom) {
460
+ return getCustomElement(item);
437
461
  }
438
- }, {
439
- key: "getCustomElement",
440
- value: function getCustomElement(item) {
441
- var _this7 = this;
442
- var intl = this.props.intl;
443
- if (!item.component || typeof item.component !== 'function') {
444
- item.component = _registry["default"].get(item.key);
445
- if (!item.component) {
446
- console.error("".concat(item.element, " ").concat(intl.formatMessage({
447
- id: 'message.was-not-registered'
448
- })));
449
- }
462
+ var Input = _surveyElements["default"][item.element];
463
+ return /*#__PURE__*/_react["default"].createElement(_reactHookForm.Controller, {
464
+ key: "form_".concat(item.id),
465
+ control: methods.control,
466
+ name: item.fieldName,
467
+ rules: item.fieldRules,
468
+ defaultValue: _getDefaultValue(item),
469
+ disabled: item.disabled,
470
+ required: item.required,
471
+ render: function render(_ref3) {
472
+ var _ref3$field = _ref3.field,
473
+ _onChange = _ref3$field.onChange,
474
+ onBlur = _ref3$field.onBlur,
475
+ value = _ref3$field.value,
476
+ name = _ref3$field.name,
477
+ ref = _ref3$field.ref,
478
+ _ref3$fieldState = _ref3.fieldState,
479
+ invalid = _ref3$fieldState.invalid,
480
+ isTouched = _ref3$fieldState.isTouched,
481
+ isDirty = _ref3$fieldState.isDirty,
482
+ error = _ref3$fieldState.error,
483
+ formState = _ref3.formState;
484
+ return /*#__PURE__*/_react["default"].createElement(Input, {
485
+ onBlur: onBlur,
486
+ onChange: function onChange(e) {
487
+ _onChange(e);
488
+ handleChange(e);
489
+ },
490
+ value: value,
491
+ name: name,
492
+ ref: function ref(c) {
493
+ return inputs.current[item.fieldName] = c;
494
+ },
495
+ isInvalid: invalid,
496
+ item: item
497
+ });
498
+ }
499
+ });
500
+ };
501
+ var getContainerElement = function getContainerElement(item, Element) {
502
+ var controls = item.childItems.map(function (childItem) {
503
+ return childItem ? getInputElement(getDataItemById(childItem)) : /*#__PURE__*/_react["default"].createElement("div", null, "\xA0");
504
+ });
505
+ return /*#__PURE__*/_react["default"].createElement(Element, {
506
+ mutable: true,
507
+ key: "form_".concat(item.id),
508
+ item: item,
509
+ controls: controls
510
+ });
511
+ };
512
+ var getSimpleElement = function getSimpleElement(item) {
513
+ var Element = _surveyElements["default"][item.element];
514
+ return /*#__PURE__*/_react["default"].createElement(Element, {
515
+ mutable: true,
516
+ key: "form_".concat(item.id),
517
+ item: item
518
+ });
519
+ };
520
+ var getCustomElement = function getCustomElement(item) {
521
+ if (!item.component || typeof item.component !== 'function') {
522
+ item.component = _registry["default"].get(item.key);
523
+ if (!item.component) {
524
+ console.error("".concat(item.element, " ").concat(intl.formatMessage({
525
+ id: 'message.was-not-registered'
526
+ })));
450
527
  }
451
- var inputProps = item.forwardRef && {
452
- handleChange: this.handleChange,
453
- defaultValue: this._getDefaultValue(item),
454
- ref: function ref(c) {
455
- return _this7.inputs[item.fieldName] = c;
456
- }
457
- };
458
- return /*#__PURE__*/_react["default"].createElement(_customElement["default"], (0, _extends2["default"])({
459
- mutable: true,
460
- readOnly: this.props.readOnly,
461
- hideRequiredAlert: this.props.hideRequiredAlert || item.hideRequiredAlert,
462
- key: "form_".concat(item.id),
463
- data: item
464
- }, inputProps));
465
528
  }
466
- }, {
467
- key: "render",
468
- value: function render() {
469
- var _this8 = this;
470
- var dataItems = this.props.data;
471
- if (this.props.displayShort) {
472
- dataItems = this.props.data.filter(function (i) {
473
- return i.alternateForm === true;
529
+ return /*#__PURE__*/_react["default"].createElement(_reactHookForm.Controller, {
530
+ key: "form_".concat(item.id),
531
+ control: methods.control,
532
+ name: item.fieldName,
533
+ rules: item.fieldRules,
534
+ defaultValue: _getDefaultValue(item),
535
+ disabled: item.disabled,
536
+ required: item.required,
537
+ render: function render(_ref4) {
538
+ var _ref4$field = _ref4.field,
539
+ _onChange2 = _ref4$field.onChange,
540
+ onBlur = _ref4$field.onBlur,
541
+ value = _ref4$field.value,
542
+ name = _ref4$field.name,
543
+ ref = _ref4$field.ref,
544
+ _ref4$fieldState = _ref4.fieldState,
545
+ invalid = _ref4$fieldState.invalid,
546
+ isTouched = _ref4$fieldState.isTouched,
547
+ isDirty = _ref4$fieldState.isDirty,
548
+ error = _ref4$fieldState.error,
549
+ formState = _ref4.formState;
550
+ return /*#__PURE__*/_react["default"].createElement(_customElement["default"], {
551
+ onBlur: onBlur,
552
+ onChange: function onChange(e) {
553
+ _onChange2(e);
554
+ handleChange(e);
555
+ },
556
+ value: value,
557
+ name: name,
558
+ ref: function ref(c) {
559
+ return inputs.current[item.fieldName] = c;
560
+ },
561
+ isInvalid: invalid,
562
+ item: item
474
563
  });
475
564
  }
476
- dataItems.forEach(function (item) {
477
- if (item && item.readOnly && item.variableKey && _this8.props.variables[item.variableKey]) {
478
- _this8.answerData[item.fieldName] = _this8.props.variables[item.variableKey];
479
- }
480
- });
481
- var items = dataItems.filter(function (x) {
482
- return !x.parentId;
483
- }).map(function (item) {
484
- if (!item) return null;
485
- switch (item.element) {
486
- case 'TextInput':
487
- case 'EmailInput':
488
- case 'PhoneNumber':
489
- case 'NumberInput':
490
- case 'TextArea':
491
- case 'Dropdown':
492
- case 'DatePicker':
493
- case 'RadioButtons':
494
- case 'Rating':
495
- case 'Tags':
496
- case 'Range':
497
- case 'Checkbox':
498
- return _this8.getInputElement(item);
499
- case 'CustomElement':
500
- return _this8.getCustomElement(item);
501
- case 'MultiColumnRow':
502
- return _this8.getContainerElement(item, _multiColumn.MultiColumnRow);
503
- case 'ThreeColumnRow':
504
- return _this8.getContainerElement(item, _multiColumn.ThreeColumnRow);
505
- case 'TwoColumnRow':
506
- return _this8.getContainerElement(item, _multiColumn.TwoColumnRow);
507
- case 'FieldSet':
508
- return _this8.getContainerElement(item, _fieldset.FieldSet);
509
- case 'Signature':
565
+ });
566
+ };
567
+ var getFieldRules = function getFieldRules(item) {
568
+ var fieldRules = {};
569
+ if (item.fieldRules !== undefined && item.fieldRules !== null && !(0, _lodash.isEmpty)(item.fieldRules)) {
570
+ fieldRules = _objectSpread({}, item.fieldRules);
571
+ }
572
+ if (item.required) {
573
+ fieldRules.required = "".concat(item.label, " ").concat(intl.formatMessage({
574
+ id: 'message.is-required'
575
+ }));
576
+ }
577
+ switch (item.element) {
578
+ case 'EmailInput':
579
+ fieldRules.minLength = {
580
+ value: 4,
581
+ message: "".concat(item.label, " must be at least 4 characters long")
582
+ };
583
+ fieldRules.validate = function (value) {
584
+ return validateEmail(value) || "".concat(item.label, " ").concat(intl.formatMessage({
585
+ id: 'message.invalid-email'
586
+ }));
587
+ };
588
+ break;
589
+ case 'PhoneNumber':
590
+ fieldRules.validate = function (value) {
591
+ return validatePhone(value) || "".concat(item.label, " ").concat(intl.formatMessage({
592
+ id: 'message.invalid-phone-number'
593
+ }));
594
+ };
595
+ break;
596
+ case 'DatePicker':
597
+ fieldRules.validate = function (value) {
598
+ return validateDate(value) || "".concat(item.label, " ").concat(intl.formatMessage({
599
+ id: 'message.invalid-date'
600
+ }));
601
+ };
602
+ break;
603
+ default:
604
+ break;
605
+ }
606
+ return fieldRules;
607
+ };
608
+ var handleRenderSubmit = function handleRenderSubmit() {
609
+ var actionName = actionName || 'Submit';
610
+ var buttonProps = {};
611
+ if (formId) {
612
+ buttonProps.form = formId;
613
+ }
614
+ return submitButton || /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Button, {
615
+ variant: "primary",
616
+ type: "submit"
617
+ }, actionName);
618
+ };
619
+ var handleRenderBack = function handleRenderBack() {
620
+ var backName = backName || 'Cancel';
621
+ return backButton || /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Button, {
622
+ variant: "secondary",
623
+ onClick: backAction,
624
+ className: "btn-cancel"
625
+ }, backName);
626
+ };
627
+
628
+ //#endregion
629
+
630
+ var dataItems = items;
631
+ if (displayShort) {
632
+ dataItems = items.filter(function (i) {
633
+ return i.alternateForm === true;
634
+ });
635
+ }
636
+ dataItems.forEach(function (item) {
637
+ if (item && item.readOnly && item.variableKey && variables[item.variableKey]) {
638
+ answerData.current[item.fieldName] = variables[item.variableKey];
639
+ }
640
+ });
641
+ var fieldItems = dataItems.filter(function (x) {
642
+ return !x.parentId;
643
+ }).map(function (item) {
644
+ if (!item) return null;
645
+ item.fieldRules = getFieldRules(item);
646
+ item.print = print !== null && print !== void 0 ? print : false;
647
+ item.hideRequiredAlert = hideRequiredAlert || item.hideRequiredAlert;
648
+ item.readOnly = readOnly || item.readOnly;
649
+ item.disabled = item.readOnly;
650
+ item.mutable = true;
651
+ switch (item.element) {
652
+ case 'TextInput':
653
+ case 'EmailInput':
654
+ case 'PhoneNumber':
655
+ case 'NumberInput':
656
+ case 'TextArea':
657
+ case 'Dropdown':
658
+ case 'DatePicker':
659
+ case 'RadioButtons':
660
+ case 'Rating':
661
+ case 'Tags':
662
+ case 'Range':
663
+ case 'Checkbox':
664
+ return getInputElement(item);
665
+ case 'CustomElement':
666
+ return getCustomElement(item);
667
+ case 'MultiColumnRow':
668
+ return getContainerElement(item, _multiColumn.MultiColumnRow);
669
+ case 'ThreeColumnRow':
670
+ return getContainerElement(item, _multiColumn.ThreeColumnRow);
671
+ case 'TwoColumnRow':
672
+ return getContainerElement(item, _multiColumn.TwoColumnRow);
673
+ case 'FieldSet':
674
+ return getContainerElement(item, _fieldset.FieldSet);
675
+ case 'Signature':
676
+ return /*#__PURE__*/_react["default"].createElement(_reactHookForm.Controller, {
677
+ key: "form_".concat(item.id),
678
+ control: methods.control,
679
+ name: item.fieldName,
680
+ rules: item.fieldRules,
681
+ defaultValue: _getDefaultValue(item),
682
+ disabled: item.disabled,
683
+ required: item.required,
684
+ render: function render(_ref5) {
685
+ var _ref5$field = _ref5.field,
686
+ _onChange3 = _ref5$field.onChange,
687
+ onBlur = _ref5$field.onBlur,
688
+ value = _ref5$field.value,
689
+ name = _ref5$field.name,
690
+ ref = _ref5$field.ref,
691
+ _ref5$fieldState = _ref5.fieldState,
692
+ invalid = _ref5$fieldState.invalid,
693
+ isTouched = _ref5$fieldState.isTouched,
694
+ isDirty = _ref5$fieldState.isDirty,
695
+ error = _ref5$fieldState.error,
696
+ formState = _ref5.formState;
510
697
  return /*#__PURE__*/_react["default"].createElement(Signature, {
698
+ methods: methods,
699
+ onBlur: onBlur,
700
+ onChange: function onChange(e) {
701
+ _onChange3(e);
702
+ handleChange(e);
703
+ },
704
+ value: value,
705
+ name: name,
511
706
  ref: function ref(c) {
512
- return _this8.inputs[item.fieldName] = c;
707
+ return inputs.current[item.fieldName] = c;
513
708
  },
514
- readOnly: _this8.props.readOnly || item.readOnly,
515
- mutable: true,
516
- key: "form_".concat(item.id),
517
- data: item,
518
- defaultValue: _this8._getDefaultValue(item)
709
+ item: item
519
710
  });
520
- case 'Checkboxes':
711
+ }
712
+ });
713
+ case 'Checkboxes':
714
+ return /*#__PURE__*/_react["default"].createElement(_reactHookForm.Controller, {
715
+ key: "form_".concat(item.id),
716
+ control: methods.control,
717
+ name: item.fieldName,
718
+ rules: item.fieldRules,
719
+ defaultValue: _optionsDefaultValue(item),
720
+ disabled: item.disabled,
721
+ required: item.required,
722
+ render: function render(_ref6) {
723
+ var _ref6$field = _ref6.field,
724
+ _onChange4 = _ref6$field.onChange,
725
+ onBlur = _ref6$field.onBlur,
726
+ value = _ref6$field.value,
727
+ name = _ref6$field.name,
728
+ ref = _ref6$field.ref,
729
+ _ref6$fieldState = _ref6.fieldState,
730
+ invalid = _ref6$fieldState.invalid,
731
+ isTouched = _ref6$fieldState.isTouched,
732
+ isDirty = _ref6$fieldState.isDirty,
733
+ error = _ref6$fieldState.error,
734
+ formState = _ref6.formState;
521
735
  return /*#__PURE__*/_react["default"].createElement(Checkboxes, {
522
- ref: function ref(c) {
523
- return _this8.inputs[item.fieldName] = c;
736
+ onBlur: onBlur,
737
+ onChange: function onChange(e) {
738
+ _onChange4(e);
739
+ handleChange(e);
524
740
  },
525
- readOnly: _this8.props.readOnly,
526
- handleChange: _this8.handleChange,
527
- mutable: true,
528
- key: "form_".concat(item.id),
529
- data: item,
530
- defaultValue: _this8._optionsDefaultValue(item),
531
- hideRequiredAlert: _this8.props.hideRequiredAlert || item.hideRequiredAlert
532
- });
533
- case 'Image':
534
- return /*#__PURE__*/_react["default"].createElement(Image, {
741
+ value: value,
742
+ name: name,
535
743
  ref: function ref(c) {
536
- return _this8.inputs[item.fieldName] = c;
744
+ return inputs.current[item.fieldName] = c;
537
745
  },
538
- handleChange: _this8.handleChange,
539
- mutable: true,
540
- key: "form_".concat(item.id),
541
- data: item,
542
- defaultValue: _this8._getDefaultValue(item),
543
- hideRequiredAlert: _this8.props.hideRequiredAlert || item.hideRequiredAlert
544
- });
545
- case 'Download':
546
- return /*#__PURE__*/_react["default"].createElement(Download, {
547
- downloadPath: _this8.props.downloadPath,
548
- mutable: true,
549
- key: "form_".concat(item.id),
550
- data: item,
551
- hideRequiredAlert: _this8.props.hideRequiredAlert || item.hideRequiredAlert
746
+ isInvalid: invalid,
747
+ item: item
552
748
  });
553
- case 'Camera':
749
+ }
750
+ });
751
+ case 'Image':
752
+ return /*#__PURE__*/_react["default"].createElement(Image, {
753
+ ref: function ref(c) {
754
+ return inputs.current[item.fieldName] = c;
755
+ },
756
+ key: "form_".concat(item.id),
757
+ item: item
758
+ });
759
+ case 'Download':
760
+ return /*#__PURE__*/_react["default"].createElement(Download, {
761
+ downloadPath: downloadPath,
762
+ key: "form_".concat(item.id),
763
+ item: item
764
+ });
765
+ case 'Camera':
766
+ return /*#__PURE__*/_react["default"].createElement(_reactHookForm.Controller, {
767
+ key: "form_".concat(item.id),
768
+ control: methods.control,
769
+ name: item.fieldName,
770
+ rules: item.fieldRules,
771
+ defaultValue: _getDefaultValue(item),
772
+ disabled: item.disabled,
773
+ required: item.required,
774
+ render: function render(_ref7) {
775
+ var _ref7$field = _ref7.field,
776
+ _onChange5 = _ref7$field.onChange,
777
+ onBlur = _ref7$field.onBlur,
778
+ value = _ref7$field.value,
779
+ name = _ref7$field.name,
780
+ ref = _ref7$field.ref,
781
+ _ref7$fieldState = _ref7.fieldState,
782
+ invalid = _ref7$fieldState.invalid,
783
+ isTouched = _ref7$fieldState.isTouched,
784
+ isDirty = _ref7$fieldState.isDirty,
785
+ error = _ref7$fieldState.error,
786
+ formState = _ref7.formState;
554
787
  return /*#__PURE__*/_react["default"].createElement(Camera, {
788
+ onBlur: onBlur,
789
+ onChange: function onChange(e) {
790
+ _onChange5(e);
791
+ handleChange(e);
792
+ },
793
+ value: value,
794
+ name: name,
555
795
  ref: function ref(c) {
556
- return _this8.inputs[item.fieldName] = c;
796
+ return inputs.current[item.fieldName] = c;
557
797
  },
558
- readOnly: _this8.props.readOnly || item.readOnly,
559
- mutable: true,
560
- key: "form_".concat(item.id),
561
- data: item,
562
- defaultValue: _this8._getDefaultValue(item),
563
- hideRequiredAlert: _this8.props.hideRequiredAlert || item.hideRequiredAlert
798
+ isInvalid: invalid,
799
+ item: item
564
800
  });
565
- case 'FileUpload':
801
+ }
802
+ });
803
+ case 'FileUpload':
804
+ return /*#__PURE__*/_react["default"].createElement(_reactHookForm.Controller, {
805
+ key: "form_".concat(item.id),
806
+ control: methods.control,
807
+ name: item.fieldName,
808
+ rules: item.fieldRules,
809
+ defaultValue: _getDefaultValue(item),
810
+ disabled: item.disabled,
811
+ required: item.required,
812
+ render: function render(_ref8) {
813
+ var _ref8$field = _ref8.field,
814
+ _onChange6 = _ref8$field.onChange,
815
+ onBlur = _ref8$field.onBlur,
816
+ value = _ref8$field.value,
817
+ name = _ref8$field.name,
818
+ ref = _ref8$field.ref,
819
+ _ref8$fieldState = _ref8.fieldState,
820
+ invalid = _ref8$fieldState.invalid,
821
+ isTouched = _ref8$fieldState.isTouched,
822
+ isDirty = _ref8$fieldState.isDirty,
823
+ error = _ref8$fieldState.error,
824
+ formState = _ref8.formState;
566
825
  return /*#__PURE__*/_react["default"].createElement(FileUpload, {
826
+ onBlur: onBlur,
827
+ onChange: function onChange(e) {
828
+ _onChange6(e);
829
+ handleChange(e);
830
+ },
831
+ value: value,
832
+ name: name,
567
833
  ref: function ref(c) {
568
- return _this8.inputs[item.fieldName] = c;
834
+ return inputs.current[item.fieldName] = c;
569
835
  },
570
- readOnly: _this8.props.readOnly || item.readOnly,
571
- mutable: true,
572
- key: "form_".concat(item.id),
573
- data: item,
574
- hideRequiredAlert: _this8.props.hideRequiredAlert || item.hideRequiredAlert,
575
- defaultValue: _this8._getDefaultValue(item)
836
+ isInvalid: invalid,
837
+ item: item
576
838
  });
577
- default:
578
- return _this8.getSimpleElement(item);
579
- }
580
- });
581
- var formTokenStyle = {
582
- display: 'none'
583
- };
584
- var formProps = {};
585
- if (this.props.formId) {
586
- formProps.id = this.props.formId;
587
- }
588
- return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_surveyValidator["default"], {
589
- emitter: this.emitter
590
- }), /*#__PURE__*/_react["default"].createElement("div", {
591
- className: "react-survey-builder-form"
592
- }, /*#__PURE__*/_react["default"].createElement("form", (0, _extends2["default"])({
593
- encType: "multipart/form-data",
594
- ref: function ref(c) {
595
- return _this8.form = c;
596
- },
597
- action: this.props.formAction,
598
- onBlur: this.handleBlur,
599
- onChange: this.handleChange,
600
- onSubmit: this.handleSubmit,
601
- method: this.props.formMethod
602
- }, formProps), this.props.authenticity_token && /*#__PURE__*/_react["default"].createElement("div", {
603
- style: formTokenStyle
604
- }, /*#__PURE__*/_react["default"].createElement("input", {
605
- name: "utf8",
606
- type: "hidden",
607
- value: "\u2713"
608
- }), /*#__PURE__*/_react["default"].createElement("input", {
609
- name: "authenticity_token",
610
- type: "hidden",
611
- value: this.props.authenticity_token
612
- }), /*#__PURE__*/_react["default"].createElement("input", {
613
- name: "task_id",
614
- type: "hidden",
615
- value: this.props.task_id
616
- })), items, /*#__PURE__*/_react["default"].createElement("div", {
617
- className: this.props.buttonClassName ? this.props.buttonClassName : 'btn-toolbar'
618
- }, !this.props.hideActions && this.handleRenderSubmit(), !this.props.hideActions && this.props.backAction && this.handleRenderBack()))));
839
+ }
840
+ });
841
+ default:
842
+ return getSimpleElement(item);
619
843
  }
620
- }]);
621
- return ReactSurvey;
622
- }(_react["default"].Component);
623
- var _default = exports["default"] = (0, _reactIntl.injectIntl)(ReactSurvey);
624
- ReactSurvey.defaultProps = {
625
- validateForCorrectness: false
626
- };
844
+ });
845
+ var formProps = {};
846
+ if (formId) {
847
+ formProps.id = formId;
848
+ }
849
+ return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
850
+ className: "react-survey-builder-form"
851
+ }, /*#__PURE__*/_react["default"].createElement(_reactHookForm.FormProvider, methods, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Form, (0, _extends2["default"])({
852
+ onSubmit: methods.handleSubmit(handleSubmit)
853
+ }, formProps), fieldItems, /*#__PURE__*/_react["default"].createElement("div", {
854
+ className: buttonClassName ? buttonClassName : 'btn-toolbar'
855
+ }, !hideActions && handleRenderSubmit(), !hideActions && backAction && handleRenderBack())))));
856
+ };
857
+ var _default = exports["default"] = (0, _reactIntl.injectIntl)(ReactSurvey);