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