react-survey-builder 1.0.71 → 1.0.73

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.
@@ -0,0 +1,793 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
4
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
6
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
7
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
8
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
9
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
10
+ 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; }
11
+ 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) { _defineProperty(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; }
12
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
14
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
15
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
16
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
17
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
18
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
19
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
20
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
21
+ import React from 'react';
22
+ import ReactDOM from 'react-dom';
23
+ import SurveyElements, { Image, Checkboxes, Signature, Download, Camera, FileUpload, PhoneNumber, DatePicker, TextInput, EmailInput, NumberInput, TextArea, Dropdown, Tags } from './survey-elements';
24
+ import { TwoColumnRow, ThreeColumnRow, MultiColumnRow } from './multi-column';
25
+ import { FieldSet } from './fieldset';
26
+ import { Step } from './step';
27
+ import CustomElement from './survey-elements/custom-element';
28
+ import Registry from './stores/registry';
29
+ import { Button, Form } from 'react-bootstrap';
30
+ import { Controller, FormProvider } from "react-hook-form";
31
+ import { addRecordToBottom, isListNotEmpty, isObjectNotEmpty, updateRecord } from './utils/objectUtils';
32
+ var ReactSurveyFormSteps = function ReactSurveyFormSteps(_ref) {
33
+ var _ref$validateForCorre = _ref.validateForCorrectness,
34
+ validateForCorrectness = _ref$validateForCorre === void 0 ? false : _ref$validateForCorre,
35
+ _ref$displayShort = _ref.displayShort,
36
+ displayShort = _ref$displayShort === void 0 ? false : _ref$displayShort,
37
+ _ref$readOnly = _ref.readOnly,
38
+ readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
39
+ downloadPath = _ref.downloadPath,
40
+ answers = _ref.answers,
41
+ onSubmit = _ref.onSubmit,
42
+ onChange = _ref.onChange,
43
+ items = _ref.items,
44
+ _ref$submitButton = _ref.submitButton,
45
+ submitButton = _ref$submitButton === void 0 ? false : _ref$submitButton,
46
+ _ref$backButton = _ref.backButton,
47
+ backButton = _ref$backButton === void 0 ? false : _ref$backButton,
48
+ _ref$backAction = _ref.backAction,
49
+ backAction = _ref$backAction === void 0 ? null : _ref$backAction,
50
+ _ref$hideActions = _ref.hideActions,
51
+ hideActions = _ref$hideActions === void 0 ? false : _ref$hideActions,
52
+ _ref$hideLabels = _ref.hideLabels,
53
+ hideLabels = _ref$hideLabels === void 0 ? false : _ref$hideLabels,
54
+ variables = _ref.variables,
55
+ buttonClassName = _ref.buttonClassName,
56
+ checkboxButtonClassName = _ref.checkboxButtonClassName,
57
+ headerClassName = _ref.headerClassName,
58
+ labelClassName = _ref.labelClassName,
59
+ formId = _ref.formId,
60
+ methods = _ref.methods,
61
+ _ref$print = _ref.print,
62
+ print = _ref$print === void 0 ? false : _ref$print;
63
+ //#region helper functions
64
+
65
+ var _convert = function _convert($dataAnswers) {
66
+ if (Array.isArray($dataAnswers)) {
67
+ var result = {};
68
+ $dataAnswers.forEach(function (answer) {
69
+ result[answer.name] = answer.value;
70
+ });
71
+ return result;
72
+ }
73
+ return $dataAnswers || {};
74
+ };
75
+ var form = React.useRef();
76
+ var inputs = React.useRef({});
77
+ var answerData = React.useRef(_convert(answers));
78
+ var _React$useState = React.useState(null),
79
+ _React$useState2 = _slicedToArray(_React$useState, 2),
80
+ formAnswers = _React$useState2[0],
81
+ setFormAnswers = _React$useState2[1];
82
+ var _React$useState3 = React.useState([]),
83
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
84
+ steps = _React$useState4[0],
85
+ setSteps = _React$useState4[1];
86
+ var _React$useState5 = React.useState(null),
87
+ _React$useState6 = _slicedToArray(_React$useState5, 2),
88
+ activeStep = _React$useState6[0],
89
+ setActiveStep = _React$useState6[1];
90
+ var _getDefaultValue = function _getDefaultValue($dataItem) {
91
+ var defaultValue = answerData.current[$dataItem.fieldName];
92
+ if ($dataItem.element === 'DatePicker') {
93
+ var _$dataItem$defaultTod;
94
+ var defaultToday = (_$dataItem$defaultTod = $dataItem.defaultToday) !== null && _$dataItem$defaultTod !== void 0 ? _$dataItem$defaultTod : false;
95
+ if (defaultToday && (defaultValue === '' || defaultValue === undefined)) {
96
+ var today = new Date();
97
+ var dd = today.getDate();
98
+ var mm = today.getMonth() + 1;
99
+ var yyyy = today.getFullYear();
100
+ if (dd < 10) {
101
+ dd = '0' + dd;
102
+ }
103
+ if (mm < 10) {
104
+ mm = '0' + mm;
105
+ }
106
+ today = mm + '/' + dd + '/' + yyyy;
107
+ defaultValue = today;
108
+ }
109
+ }
110
+ if ($dataItem.element === 'Checkbox') {
111
+ var _$dataItem$defaultChe;
112
+ var defaultChecked = (_$dataItem$defaultChe = $dataItem.defaultChecked) !== null && _$dataItem$defaultChe !== void 0 ? _$dataItem$defaultChe : false;
113
+ if (defaultChecked === true) {
114
+ defaultValue = true;
115
+ }
116
+ }
117
+ if (defaultValue === undefined) {
118
+ if ($dataItem.element === 'Checkboxes' || $dataItem.element === 'Tags') {
119
+ defaultValue = [];
120
+ } else if ($dataItem.element === 'NumberInput' || $dataItem.element === 'Range') {
121
+ var _$dataItem$minValue;
122
+ defaultValue = (_$dataItem$minValue = $dataItem.minValue) !== null && _$dataItem$minValue !== void 0 ? _$dataItem$minValue : 0;
123
+ } else {
124
+ defaultValue = '';
125
+ }
126
+ }
127
+ return defaultValue;
128
+ };
129
+ var _optionsDefaultValue = function _optionsDefaultValue($dataItem) {
130
+ var defaultValue = _getDefaultValue($dataItem);
131
+ if (defaultValue) {
132
+ return defaultValue;
133
+ }
134
+ var defaultChecked = [];
135
+ $dataItem.options.forEach(function (option) {
136
+ if (answerData.current["option_".concat(option.key)]) {
137
+ defaultChecked.push(option.key);
138
+ }
139
+ });
140
+ return defaultChecked;
141
+ };
142
+ var _getItemValue = function _getItemValue($dataItem, ref) {
143
+ var _ref$inputField;
144
+ var $item = {
145
+ element: $dataItem.element,
146
+ value: ''
147
+ };
148
+ var $formData = methods === null || methods === void 0 ? void 0 : methods.getValues();
149
+ if ($dataItem.element === 'Rating') {
150
+ $item.value = ref.inputField.current.state.rating;
151
+ } else if ($dataItem.element === 'Tags') {
152
+ $item.value = $formData[$dataItem.fieldName];
153
+ // } else if (item.element === 'DatePicker') {
154
+ // $item.value = ref.state.value;
155
+ } else if ($dataItem.element === 'Camera') {
156
+ $item.value = ref.state.img;
157
+ } else if ($dataItem.element === 'FileUpload') {
158
+ $item.value = ref.state.fileUpload;
159
+ } else if ($dataItem.element === 'Signature') {
160
+ $item.value = ref.state.value;
161
+ } else if (ref && ref !== null && ref !== void 0 && ref.inputField && ref !== null && ref !== void 0 && (_ref$inputField = ref.inputField) !== null && _ref$inputField !== void 0 && _ref$inputField.current) {
162
+ $item = ReactDOM.findDOMNode(ref.inputField.current);
163
+ if ($item && typeof $item.value === 'string') {
164
+ $item.value = $item.value.trim();
165
+ }
166
+ } else {
167
+ $item.value = $formData[$dataItem.fieldName];
168
+ }
169
+ return $item;
170
+ };
171
+ var _isIncorrect = function _isIncorrect($dataItem) {
172
+ var incorrect = false;
173
+ var canHaveAnswer = ['NumberInput', 'EmailInput', 'TextInput', 'PhoneNumber', 'TextArea', 'DatePicker', 'Dropdown', 'Tags', 'Checkboxes', 'Checkbox', 'RadioButtons', 'Rating', 'Range'].indexOf($dataItem.element) !== -1;
174
+ if (canHaveAnswer) {
175
+ var ref = inputs.current[$dataItem.fieldName];
176
+ if ($dataItem.element === 'Checkboxes' || $dataItem.element === 'RadioButtons') {
177
+ $dataItem.options.forEach(function (option) {
178
+ var $option = ReactDOM.findDOMNode(ref.options["child_ref_".concat(option.key)]);
179
+ if (option.hasOwnProperty('correct') && !$option.checked || !option.hasOwnProperty('correct') && $option.checked) {
180
+ incorrect = true;
181
+ }
182
+ });
183
+ } else {
184
+ var $item = _getItemValue($dataItem, ref);
185
+ if ($dataItem.element === 'Rating' || $dataItem.element === 'Range' || $dataItem.element === 'NumberInput') {
186
+ // number to string
187
+ if ($item.value.toString() !== $dataItem.correct) {
188
+ incorrect = true;
189
+ }
190
+ } else if ($dataItem.element === 'Checkbox') {
191
+ // boolean to string
192
+ if ($item.value.toString() !== $dataItem.correct) {
193
+ incorrect = true;
194
+ }
195
+ } else if ($item.value.toLowerCase() !== $dataItem.correct.trim().toLowerCase()) {
196
+ incorrect = true;
197
+ }
198
+ }
199
+ }
200
+ return incorrect;
201
+ };
202
+ var _collectFormData = function _collectFormData($dataItems, $formData) {
203
+ var formData = [];
204
+ $dataItems.filter(function (i) {
205
+ return i["static"] !== true;
206
+ }).forEach(function (item) {
207
+ var itemData = {
208
+ id: item.id,
209
+ name: item.fieldName,
210
+ customName: item.customName || item.fieldName,
211
+ label: item.label !== null && item.label !== undefined && item.label !== '' ? item.label.trim() : '',
212
+ value: $formData[item.fieldName],
213
+ required: item.required || false
214
+ };
215
+ if (itemData) {
216
+ formData.push(itemData);
217
+ }
218
+ });
219
+ return formData;
220
+ };
221
+
222
+ //#endregion
223
+ //#region form methods
224
+
225
+ var handleSubmit = function handleSubmit($formData, event) {
226
+ event.preventDefault();
227
+ var hasErrors = false;
228
+ if (validateForCorrectness) {
229
+ hasErrors = validateForm();
230
+ }
231
+
232
+ // Only submit if there are no errors.
233
+ if (hasErrors === false) {
234
+ if (onSubmit) {
235
+ var $data = _collectFormData(items, $formData);
236
+ onSubmit({
237
+ formData: $formData,
238
+ answers: $data
239
+ });
240
+ setFormAnswers($data);
241
+ } else {
242
+ var $form = ReactDOM.findDOMNode(form.current);
243
+ $form.submit();
244
+ }
245
+ }
246
+ };
247
+ var handleChange = function handleChange(event) {
248
+ // Call submit function on change
249
+ var $data = _collectFormData(items, (methods === null || methods === void 0 ? void 0 : methods.getValues()) || []);
250
+ // console.log('handleChange', $data);
251
+
252
+ if (onChange) {
253
+ onChange($data);
254
+ }
255
+ setFormAnswers($data);
256
+ };
257
+ var validateForm = function validateForm() {
258
+ var hasErrors = false;
259
+ var dataItems = items;
260
+ if (displayShort) {
261
+ dataItems = items.filter(function (i) {
262
+ return i.alternateForm === true;
263
+ });
264
+ }
265
+ dataItems.forEach(function (item) {
266
+ if (_isIncorrect(item)) {
267
+ if (methods) {
268
+ methods.setError(item.fieldName, {
269
+ type: 'incorrect',
270
+ message: "".concat(item.label, " was answered incorrectly")
271
+ });
272
+ }
273
+ hasErrors = true;
274
+ }
275
+ });
276
+ return hasErrors;
277
+ };
278
+ var getDataItemById = function getDataItemById(id) {
279
+ var $dataItem = items.find(function (x) {
280
+ return x.id === id;
281
+ });
282
+ if ($dataItem !== undefined) {
283
+ var _ref2, _ref3, _ref4, _$dataItem$fieldName;
284
+ return _objectSpread(_objectSpread({}, $dataItem), {}, {
285
+ fieldRules: getFieldRules($dataItem),
286
+ print: print !== null && print !== void 0 ? print : false,
287
+ readOnly: (_ref2 = readOnly || $dataItem.readOnly) !== null && _ref2 !== void 0 ? _ref2 : false,
288
+ hideLabel: (_ref3 = hideLabels || $dataItem.hideLabel) !== null && _ref3 !== void 0 ? _ref3 : false,
289
+ disabled: (_ref4 = readOnly || $dataItem.readOnly) !== null && _ref4 !== void 0 ? _ref4 : false,
290
+ mutable: true,
291
+ name: (_$dataItem$fieldName = $dataItem.fieldName) !== null && _$dataItem$fieldName !== void 0 ? _$dataItem$fieldName : $dataItem.name,
292
+ key: "form_".concat($dataItem.id),
293
+ item: $dataItem,
294
+ value: _getDefaultValue($dataItem)
295
+ });
296
+ }
297
+ return null;
298
+ };
299
+ var getStandardElement = function getStandardElement(item) {
300
+ if (!item) return null;
301
+ if (item.custom) {
302
+ return getCustomElement(item);
303
+ }
304
+ var Input = SurveyElements[item.element];
305
+ return /*#__PURE__*/React.createElement(Input, {
306
+ name: item.fieldName,
307
+ key: "form_".concat(item.id),
308
+ item: item,
309
+ value: _getDefaultValue(item),
310
+ onChange: handleChange
311
+ });
312
+ };
313
+ var getInputElement = function getInputElement(item) {
314
+ if (!item) return null;
315
+ if (item.custom) {
316
+ return getCustomElement(item);
317
+ }
318
+ var Input = SurveyElements[item.element];
319
+ return /*#__PURE__*/React.createElement(Controller, {
320
+ key: "form_".concat(item.id),
321
+ control: methods.control,
322
+ name: item.fieldName,
323
+ rules: item.fieldRules,
324
+ defaultValue: _getDefaultValue(item),
325
+ disabled: item.disabled,
326
+ required: item.required,
327
+ render: function render(_ref5) {
328
+ var _ref5$field = _ref5.field,
329
+ _onChange = _ref5$field.onChange,
330
+ onBlur = _ref5$field.onBlur,
331
+ value = _ref5$field.value,
332
+ name = _ref5$field.name,
333
+ ref = _ref5$field.ref,
334
+ _ref5$fieldState = _ref5.fieldState,
335
+ invalid = _ref5$fieldState.invalid,
336
+ isTouched = _ref5$fieldState.isTouched,
337
+ isDirty = _ref5$fieldState.isDirty,
338
+ error = _ref5$fieldState.error,
339
+ formState = _ref5.formState;
340
+ return /*#__PURE__*/React.createElement(Input, {
341
+ onBlur: onBlur,
342
+ onChange: function onChange(e) {
343
+ _onChange(e);
344
+ handleChange(e);
345
+ },
346
+ value: value,
347
+ name: name,
348
+ ref: function ref(c) {
349
+ return inputs.current[item.fieldName] = c;
350
+ },
351
+ isInvalid: invalid,
352
+ item: item,
353
+ className: item.element === 'RadioButtons' || item.element === 'Checkbox' ? checkboxButtonClassName !== null && checkboxButtonClassName !== void 0 ? checkboxButtonClassName : null : null,
354
+ checkboxButtonClassName: item.element === 'RadioButtons' || item.element === 'Checkbox' ? checkboxButtonClassName !== null && checkboxButtonClassName !== void 0 ? checkboxButtonClassName : null : null
355
+ });
356
+ }
357
+ });
358
+ };
359
+ var getContainerElement = function getContainerElement(item, Element) {
360
+ var controls = item === null || item === void 0 ? void 0 : item.childItems.map(function (childItem) {
361
+ return childItem ? getInputElement(getDataItemById(childItem)) : /*#__PURE__*/React.createElement("div", null, "\xA0");
362
+ });
363
+ return /*#__PURE__*/React.createElement(Element, {
364
+ mutable: true,
365
+ key: "form_".concat(item.id),
366
+ item: item,
367
+ controls: controls,
368
+ items: items,
369
+ answers: formAnswers
370
+ });
371
+ };
372
+ var getSimpleElement = function getSimpleElement(item) {
373
+ var Element = SurveyElements[item.element];
374
+ return /*#__PURE__*/React.createElement(Element, {
375
+ mutable: true,
376
+ key: "form_".concat(item.id),
377
+ item: item,
378
+ headerClassName: headerClassName,
379
+ labelClassName: labelClassName
380
+ });
381
+ };
382
+ var getCustomElement = function getCustomElement(item) {
383
+ if (!item.component || typeof item.component !== 'function') {
384
+ item.component = Registry.get(item.key);
385
+ if (!item.component) {
386
+ console.error("".concat(item.element, " was not registered"));
387
+ }
388
+ }
389
+ return /*#__PURE__*/React.createElement(Controller, {
390
+ key: "form_".concat(item.id),
391
+ control: methods.control,
392
+ name: item.fieldName,
393
+ rules: item.fieldRules,
394
+ defaultValue: _getDefaultValue(item),
395
+ disabled: item.disabled,
396
+ required: item.required,
397
+ render: function render(_ref6) {
398
+ var _ref6$field = _ref6.field,
399
+ _onChange2 = _ref6$field.onChange,
400
+ onBlur = _ref6$field.onBlur,
401
+ value = _ref6$field.value,
402
+ name = _ref6$field.name,
403
+ ref = _ref6$field.ref,
404
+ _ref6$fieldState = _ref6.fieldState,
405
+ invalid = _ref6$fieldState.invalid,
406
+ isTouched = _ref6$fieldState.isTouched,
407
+ isDirty = _ref6$fieldState.isDirty,
408
+ error = _ref6$fieldState.error,
409
+ formState = _ref6.formState;
410
+ return /*#__PURE__*/React.createElement(CustomElement, {
411
+ onBlur: onBlur,
412
+ onChange: function onChange(e) {
413
+ _onChange2(e);
414
+ handleChange(e);
415
+ },
416
+ value: value,
417
+ name: name,
418
+ ref: function ref(c) {
419
+ return inputs.current[item.fieldName] = c;
420
+ },
421
+ isInvalid: invalid,
422
+ item: item
423
+ });
424
+ }
425
+ });
426
+ };
427
+ var getFieldRules = function getFieldRules(item) {
428
+ var fieldRules = {};
429
+ if (item.fieldRules !== undefined && item.fieldRules !== null) {
430
+ fieldRules = _objectSpread({}, item.fieldRules);
431
+ }
432
+ if (item.required) {
433
+ fieldRules.required = "".concat(item.label, " is required");
434
+ }
435
+ return fieldRules;
436
+ };
437
+ var handleRenderSubmit = function handleRenderSubmit() {
438
+ var actionName = actionName || 'Submit';
439
+ var buttonProps = {};
440
+ if (formId) {
441
+ buttonProps.form = formId;
442
+ }
443
+ return submitButton || /*#__PURE__*/React.createElement(Button, {
444
+ variant: "primary",
445
+ type: "submit"
446
+ }, actionName);
447
+ };
448
+ var handleRenderBack = function handleRenderBack() {
449
+ var backName = backName || 'Cancel';
450
+ return backButton || /*#__PURE__*/React.createElement(Button, {
451
+ variant: "secondary",
452
+ onClick: backAction,
453
+ className: "btn-cancel"
454
+ }, backName);
455
+ };
456
+
457
+ //#endregion
458
+
459
+ var onBackStep = /*#__PURE__*/function () {
460
+ var _ref7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
461
+ var oldStep, previousIndex;
462
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
463
+ while (1) switch (_context.prev = _context.next) {
464
+ case 0:
465
+ oldStep = steps.find(function (i) {
466
+ return i.id === id;
467
+ });
468
+ previousIndex = oldStep.index - 1;
469
+ setActiveStep(previousIndex > 0 ? steps[previousIndex] : null);
470
+ case 3:
471
+ case "end":
472
+ return _context.stop();
473
+ }
474
+ }, _callee);
475
+ }));
476
+ return function onBackStep() {
477
+ return _ref7.apply(this, arguments);
478
+ };
479
+ }();
480
+ var onNextStep = /*#__PURE__*/function () {
481
+ var _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
482
+ var oldStep, clean, updatedSteps, nextStep;
483
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
484
+ while (1) switch (_context2.prev = _context2.next) {
485
+ case 0:
486
+ oldStep = isObjectNotEmpty(activeStep) ? _objectSpread({}, activeStep) : null;
487
+ if (!oldStep) {
488
+ _context2.next = 15;
489
+ break;
490
+ }
491
+ console.log(oldStep);
492
+ // validate childItems of step
493
+ _context2.next = 5;
494
+ return methods.trigger(oldStep.childQuestions.map(function (i) {
495
+ return i.name;
496
+ }), true);
497
+ case 5:
498
+ clean = _context2.sent;
499
+ console.log(clean);
500
+ if (!clean) {
501
+ _context2.next = 14;
502
+ break;
503
+ }
504
+ updatedSteps = updateRecord('id', _objectSpread(_objectSpread({}, oldStep), {}, {
505
+ completed: true,
506
+ answers: _collectFormData(oldStep.childQuestions, (methods === null || methods === void 0 ? void 0 : methods.getValues()) || [])
507
+ }), _toConsumableArray(steps));
508
+ setSteps(updatedSteps);
509
+
510
+ // get next incomplete survey
511
+ nextStep = steps.find(function (i) {
512
+ return i.completed === false;
513
+ });
514
+ if (nextStep !== undefined) {
515
+ setActiveStep(nextStep);
516
+ } else {
517
+ if (onFinishedSurveys) {
518
+ onFinishedSurveys();
519
+ }
520
+ }
521
+ _context2.next = 15;
522
+ break;
523
+ case 14:
524
+ return _context2.abrupt("return");
525
+ case 15:
526
+ case "end":
527
+ return _context2.stop();
528
+ }
529
+ }, _callee2);
530
+ }));
531
+ return function onNextStep() {
532
+ return _ref8.apply(this, arguments);
533
+ };
534
+ }();
535
+ var dataItems = items ? _toConsumableArray(items) : [];
536
+ if (displayShort) {
537
+ dataItems = items ? _toConsumableArray(items).filter(function (i) {
538
+ return i.alternateForm === true;
539
+ }) : [];
540
+ }
541
+ dataItems.forEach(function (item) {
542
+ if (item && item.readOnly && item.variableKey && variables[item.variableKey]) {
543
+ answerData.current[item.fieldName] = variables[item.variableKey];
544
+ }
545
+ });
546
+ var stepItems = dataItems.filter(function (x) {
547
+ return !x.parentId && x.element === 'Step';
548
+ }).map(function (item) {
549
+ var _ref9, _ref10, _ref11;
550
+ if (!item) return null;
551
+ item.fieldRules = getFieldRules(item);
552
+ item.print = print !== null && print !== void 0 ? print : false;
553
+ item.readOnly = (_ref9 = readOnly || item.readOnly) !== null && _ref9 !== void 0 ? _ref9 : false;
554
+ item.hideLabel = (_ref10 = hideLabels || item.hideLabel) !== null && _ref10 !== void 0 ? _ref10 : false;
555
+ item.disabled = (_ref11 = readOnly || item.readOnly) !== null && _ref11 !== void 0 ? _ref11 : false;
556
+ item.mutable = true;
557
+ switch (item.element) {
558
+ case 'RadioButtons':
559
+ case 'Range':
560
+ case 'Checkbox':
561
+ return getInputElement(item);
562
+ case 'Rating':
563
+ case 'Tags':
564
+ case 'Dropdown':
565
+ case 'TextInput':
566
+ case 'EmailInput':
567
+ case 'NumberInput':
568
+ case 'TextArea':
569
+ case 'PhoneNumber':
570
+ case 'DatePicker':
571
+ return getStandardElement(item);
572
+ case 'CustomElement':
573
+ return getCustomElement(item);
574
+ case 'MultiColumnRow':
575
+ return getContainerElement(item, MultiColumnRow);
576
+ case 'ThreeColumnRow':
577
+ return getContainerElement(item, ThreeColumnRow);
578
+ case 'TwoColumnRow':
579
+ return getContainerElement(item, TwoColumnRow);
580
+ case 'Step':
581
+ return getContainerElement(item, Step);
582
+ case 'FieldSet':
583
+ return getContainerElement(item, FieldSet);
584
+ case 'Signature':
585
+ return /*#__PURE__*/React.createElement(Controller, {
586
+ key: "form_".concat(item.id),
587
+ control: methods.control,
588
+ name: item.fieldName,
589
+ rules: item.fieldRules,
590
+ defaultValue: _getDefaultValue(item),
591
+ disabled: item.disabled,
592
+ required: item.required,
593
+ render: function render(_ref12) {
594
+ var _ref12$field = _ref12.field,
595
+ _onChange3 = _ref12$field.onChange,
596
+ onBlur = _ref12$field.onBlur,
597
+ value = _ref12$field.value,
598
+ name = _ref12$field.name,
599
+ ref = _ref12$field.ref,
600
+ _ref12$fieldState = _ref12.fieldState,
601
+ invalid = _ref12$fieldState.invalid,
602
+ isTouched = _ref12$fieldState.isTouched,
603
+ isDirty = _ref12$fieldState.isDirty,
604
+ error = _ref12$fieldState.error,
605
+ formState = _ref12.formState;
606
+ return /*#__PURE__*/React.createElement(Signature, {
607
+ methods: methods,
608
+ onBlur: onBlur,
609
+ onChange: function onChange(e) {
610
+ _onChange3(e);
611
+ handleChange(e);
612
+ },
613
+ value: value,
614
+ name: name,
615
+ ref: function ref(c) {
616
+ return inputs.current[item.fieldName] = c;
617
+ },
618
+ item: item
619
+ });
620
+ }
621
+ });
622
+ case 'Checkboxes':
623
+ return /*#__PURE__*/React.createElement(Controller, {
624
+ key: "form_".concat(item.id),
625
+ control: methods.control,
626
+ name: item.fieldName,
627
+ rules: item.fieldRules,
628
+ defaultValue: _optionsDefaultValue(item),
629
+ disabled: item.disabled,
630
+ required: item.required,
631
+ render: function render(_ref13) {
632
+ var _ref13$field = _ref13.field,
633
+ _onChange4 = _ref13$field.onChange,
634
+ onBlur = _ref13$field.onBlur,
635
+ value = _ref13$field.value,
636
+ name = _ref13$field.name,
637
+ ref = _ref13$field.ref,
638
+ _ref13$fieldState = _ref13.fieldState,
639
+ invalid = _ref13$fieldState.invalid,
640
+ isTouched = _ref13$fieldState.isTouched,
641
+ isDirty = _ref13$fieldState.isDirty,
642
+ error = _ref13$fieldState.error,
643
+ formState = _ref13.formState;
644
+ return /*#__PURE__*/React.createElement(Checkboxes, {
645
+ onBlur: onBlur,
646
+ onChange: function onChange(e) {
647
+ _onChange4(e);
648
+ handleChange(e);
649
+ },
650
+ value: value,
651
+ name: name,
652
+ ref: function ref(c) {
653
+ return inputs.current[item.fieldName] = c;
654
+ },
655
+ isInvalid: invalid,
656
+ item: item,
657
+ className: checkboxButtonClassName !== null && checkboxButtonClassName !== void 0 ? checkboxButtonClassName : null,
658
+ checkboxButtonClassName: checkboxButtonClassName !== null && checkboxButtonClassName !== void 0 ? checkboxButtonClassName : null
659
+ });
660
+ }
661
+ });
662
+ case 'Image':
663
+ return /*#__PURE__*/React.createElement(Image, {
664
+ ref: function ref(c) {
665
+ return inputs.current[item.fieldName] = c;
666
+ },
667
+ key: "form_".concat(item.id),
668
+ item: item
669
+ });
670
+ case 'Download':
671
+ return /*#__PURE__*/React.createElement(Download, {
672
+ downloadPath: downloadPath,
673
+ key: "form_".concat(item.id),
674
+ item: item
675
+ });
676
+ case 'Camera':
677
+ return /*#__PURE__*/React.createElement(Controller, {
678
+ key: "form_".concat(item.id),
679
+ control: methods.control,
680
+ name: item.fieldName,
681
+ rules: item.fieldRules,
682
+ defaultValue: _getDefaultValue(item),
683
+ disabled: item.disabled,
684
+ required: item.required,
685
+ render: function render(_ref14) {
686
+ var _ref14$field = _ref14.field,
687
+ _onChange5 = _ref14$field.onChange,
688
+ onBlur = _ref14$field.onBlur,
689
+ value = _ref14$field.value,
690
+ name = _ref14$field.name,
691
+ ref = _ref14$field.ref,
692
+ _ref14$fieldState = _ref14.fieldState,
693
+ invalid = _ref14$fieldState.invalid,
694
+ isTouched = _ref14$fieldState.isTouched,
695
+ isDirty = _ref14$fieldState.isDirty,
696
+ error = _ref14$fieldState.error,
697
+ formState = _ref14.formState;
698
+ return /*#__PURE__*/React.createElement(Camera, {
699
+ onBlur: onBlur,
700
+ onChange: function onChange(e) {
701
+ _onChange5(e);
702
+ handleChange(e);
703
+ },
704
+ value: value,
705
+ name: name,
706
+ ref: function ref(c) {
707
+ return inputs.current[item.fieldName] = c;
708
+ },
709
+ isInvalid: invalid,
710
+ item: item
711
+ });
712
+ }
713
+ });
714
+ case 'FileUpload':
715
+ return /*#__PURE__*/React.createElement(Controller, {
716
+ key: "form_".concat(item.id),
717
+ control: methods.control,
718
+ name: item.fieldName,
719
+ rules: item.fieldRules,
720
+ defaultValue: _getDefaultValue(item),
721
+ disabled: item.disabled,
722
+ required: item.required,
723
+ render: function render(_ref15) {
724
+ var _ref15$field = _ref15.field,
725
+ _onChange6 = _ref15$field.onChange,
726
+ onBlur = _ref15$field.onBlur,
727
+ value = _ref15$field.value,
728
+ name = _ref15$field.name,
729
+ ref = _ref15$field.ref,
730
+ _ref15$fieldState = _ref15.fieldState,
731
+ invalid = _ref15$fieldState.invalid,
732
+ isTouched = _ref15$fieldState.isTouched,
733
+ isDirty = _ref15$fieldState.isDirty,
734
+ error = _ref15$fieldState.error,
735
+ formState = _ref15.formState;
736
+ return /*#__PURE__*/React.createElement(FileUpload, {
737
+ onBlur: onBlur,
738
+ onChange: function onChange(e) {
739
+ _onChange6(e);
740
+ handleChange(e);
741
+ },
742
+ value: value,
743
+ name: name,
744
+ ref: function ref(c) {
745
+ return inputs.current[item.fieldName] = c;
746
+ },
747
+ isInvalid: invalid,
748
+ item: item
749
+ });
750
+ }
751
+ });
752
+ default:
753
+ return getSimpleElement(item);
754
+ }
755
+ });
756
+ React.useMemo(function () {
757
+ if (isListNotEmpty(stepItems)) {
758
+ var surveySteps = stepItems.map(function (step, index) {
759
+ return _objectSpread(_objectSpread({}, step), {}, {
760
+ childQuestions: dataItems.filter(function (i) {
761
+ return step.id === i.parentId;
762
+ }),
763
+ completed: false,
764
+ answers: []
765
+ });
766
+ });
767
+ setSteps(surveySteps);
768
+ if (isListNotEmpty(surveySteps)) {
769
+ setActiveStep(surveySteps[0]);
770
+ } else {
771
+ setActiveStep(null);
772
+ }
773
+ }
774
+ }, []);
775
+ var formProps = {};
776
+ if (formId) {
777
+ formProps.id = formId;
778
+ }
779
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
780
+ className: "react-survey-builder-form"
781
+ }, /*#__PURE__*/React.createElement(FormProvider, methods, /*#__PURE__*/React.createElement(Form, _extends({
782
+ onSubmit: methods.handleSubmit(handleSubmit)
783
+ }, formProps), activeStep, /*#__PURE__*/React.createElement("div", {
784
+ className: buttonClassName ? buttonClassName : 'btn-toolbar'
785
+ }, !hideActions && handleRenderSubmit(), !hideActions && backAction && handleRenderBack(), /*#__PURE__*/React.createElement(Button, {
786
+ variant: "secondary",
787
+ onClick: onBackStep
788
+ }, "Back"), /*#__PURE__*/React.createElement(Button, {
789
+ variant: "primary",
790
+ onClick: onNextStep
791
+ }, "Next"))))));
792
+ };
793
+ export default ReactSurveyFormSteps;