react-survey-builder 1.0.72 → 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.
- package/README.md +2 -0
- package/dist/app.css +1 -1
- package/dist/app.css.map +1 -1
- package/dist/bundle.js +628 -35
- package/dist/src_survey-elements-edit_jsx.bundle.js +2 -2
- package/lib/dynamic-option-list.js +140 -155
- package/lib/fieldset/FieldSet.js +118 -0
- package/lib/fieldset/index.js +2 -132
- package/lib/form-fields.js +41 -14
- package/lib/form-steps.js +793 -0
- package/lib/form.js +43 -15
- package/lib/index.js +130 -124
- package/lib/multi-column/MultiColumnRow.js +69 -81
- package/lib/multi-column/dustbin.js +52 -18
- package/lib/preview.js +378 -349
- package/lib/sortable-element.js +9 -0
- package/lib/sortable-form-elements.js +28 -2
- package/lib/step/Step.js +147 -0
- package/lib/step/index.js +2 -0
- package/lib/survey-elements/component-drag-layer.js +13 -8
- package/lib/survey-elements/component-error-message.js +1 -1
- package/lib/survey-elements/component-header.js +12 -11
- package/lib/survey-elements/custom-element.js +51 -62
- package/lib/survey-elements/header-bar.js +36 -55
- package/lib/survey-elements/index.js +372 -370
- package/lib/survey-elements/star-rating.js +232 -282
- package/lib/survey-elements-edit.js +659 -564
- package/lib/survey-place-holder.js +9 -33
- package/lib/survey-validator.js +45 -75
- package/lib/toolbar-draggable-item.js +10 -34
- package/lib/toolbar-group-item.js +1 -1
- package/lib/toolbar.js +578 -558
- package/lib/utils/objectUtils.js +139 -0
- package/package.json +6 -5
- package/types/index.d.ts +5 -0
package/lib/preview.js
CHANGED
@@ -1,396 +1,425 @@
|
|
1
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
2
|
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; }
|
3
3
|
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; }
|
4
|
+
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; }
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
6
|
+
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); }
|
4
7
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
5
8
|
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."); }
|
6
|
-
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); }
|
7
9
|
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
8
10
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
11
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
12
|
+
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."); }
|
13
|
+
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); }
|
9
14
|
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; }
|
10
|
-
function
|
11
|
-
function
|
12
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
13
|
-
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
14
|
-
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
15
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
16
|
-
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
17
|
-
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
18
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
19
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
20
|
-
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; }
|
21
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
22
|
-
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 _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; } }
|
16
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
23
17
|
import React from 'react';
|
24
|
-
import update from 'immutability-helper';
|
25
18
|
import store from './stores/store';
|
26
19
|
import SurveyElementsEdit from './survey-dynamic-edit';
|
27
20
|
import SortableFormElements from './sortable-form-elements';
|
28
21
|
import CustomDragLayer from './survey-elements/component-drag-layer';
|
22
|
+
import { isListNotEmpty, isObjectNotEmpty, removeRecord, updateRecord } from './utils/objectUtils';
|
29
23
|
var PlaceHolder = SortableFormElements.PlaceHolder;
|
30
|
-
var Preview =
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
24
|
+
var Preview = function Preview(_ref) {
|
25
|
+
var _ref$items = _ref.items,
|
26
|
+
loadItems = _ref$items === void 0 ? [] : _ref$items,
|
27
|
+
_ref$showCorrectColum = _ref.showCorrectColumn,
|
28
|
+
showCorrectColumn = _ref$showCorrectColum === void 0 ? false : _ref$showCorrectColum,
|
29
|
+
_ref$showDescription = _ref.showDescription,
|
30
|
+
showDescription = _ref$showDescription === void 0 ? false : _ref$showDescription,
|
31
|
+
_ref$files = _ref.files,
|
32
|
+
files = _ref$files === void 0 ? [] : _ref$files,
|
33
|
+
renderEditForm = _ref.renderEditForm,
|
34
|
+
onLoad = _ref.onLoad,
|
35
|
+
onPost = _ref.onPost,
|
36
|
+
className = _ref.className,
|
37
|
+
_ref$editMode = _ref.editMode,
|
38
|
+
editMode = _ref$editMode === void 0 ? false : _ref$editMode,
|
39
|
+
setEditMode = _ref.setEditMode,
|
40
|
+
_ref$editElement = _ref.editElement,
|
41
|
+
editElement = _ref$editElement === void 0 ? null : _ref$editElement,
|
42
|
+
setEditElement = _ref.setEditElement,
|
43
|
+
_ref$variables = _ref.variables,
|
44
|
+
variables = _ref$variables === void 0 ? {} : _ref$variables,
|
45
|
+
url = _ref.url,
|
46
|
+
saveUrl = _ref.saveUrl,
|
47
|
+
_ref$saveAlways = _ref.saveAlways,
|
48
|
+
saveAlways = _ref$saveAlways === void 0 ? false : _ref$saveAlways,
|
49
|
+
registry = _ref.registry;
|
50
|
+
var _React$useState = React.useState(isListNotEmpty(loadItems) ? _toConsumableArray(loadItems) : []),
|
51
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
52
|
+
items = _React$useState2[0],
|
53
|
+
setItems = _React$useState2[1];
|
54
|
+
var _React$useState3 = React.useState({}),
|
55
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
56
|
+
answerData = _React$useState4[0],
|
57
|
+
setAnswerData = _React$useState4[1];
|
58
|
+
var _React$useState5 = React.useState(0),
|
59
|
+
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
60
|
+
seq = _React$useState6[0],
|
61
|
+
setSeq = _React$useState6[1];
|
62
|
+
var editForm = React.useRef();
|
63
|
+
var editModeOn = function editModeOn(item, e) {
|
64
|
+
e.preventDefault();
|
65
|
+
e.stopPropagation();
|
66
|
+
if (editMode) {
|
67
|
+
setEditMode(false);
|
68
|
+
setEditElement(null);
|
69
|
+
} else {
|
70
|
+
setEditMode(true);
|
71
|
+
setEditElement(item);
|
72
|
+
}
|
73
|
+
};
|
74
|
+
var editModeOff = function editModeOff(e) {
|
75
|
+
if (editForm.current && !editForm.current.contains(e.target)) {
|
76
|
+
manualEditModeOff();
|
77
|
+
}
|
78
|
+
};
|
79
|
+
var manualEditModeOff = function manualEditModeOff() {
|
80
|
+
if (editElement && editElement.dirty) {
|
81
|
+
editElement.dirty = false;
|
82
|
+
_updateElement(_objectSpread(_objectSpread({}, editElement), {}, {
|
83
|
+
dirty: false
|
84
|
+
}));
|
85
|
+
}
|
86
|
+
if (editMode) {
|
87
|
+
setEditMode(false);
|
88
|
+
setEditElement(null);
|
89
|
+
}
|
90
|
+
};
|
91
|
+
var _updateElement = function updateElement(element) {
|
92
|
+
var updatedElement = isObjectNotEmpty(element) ? _objectSpread({}, element) : {};
|
93
|
+
var existingList = isListNotEmpty(items) ? _toConsumableArray(items) : [];
|
94
|
+
var found = existingList.some(function (i) {
|
95
|
+
return updatedElement && updatedElement.id && i.id === updatedElement.id;
|
43
96
|
});
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
97
|
+
var updatedList = updateRecord('id', updatedElement, existingList);
|
98
|
+
if (found) {
|
99
|
+
setSeq(seq > 100000 ? 0 : seq + 1);
|
100
|
+
store.dispatch('updateOrder', updatedList);
|
101
|
+
setEditElement(updatedElement);
|
102
|
+
}
|
103
|
+
};
|
104
|
+
var _onChange = function _onChange(stateItems) {
|
105
|
+
// console.log('_onChange', stateItems);
|
106
|
+
var updatedItems = isListNotEmpty(stateItems) ? _toConsumableArray(stateItems) : [];
|
107
|
+
var updatedAnswerData = _objectSpread({}, answerData);
|
108
|
+
updatedItems.forEach(function (item) {
|
109
|
+
if (item && item.readOnly && variables[item.variableKey]) {
|
110
|
+
updatedAnswerData[item.fieldName] = variables[item.variableKey];
|
49
111
|
}
|
50
|
-
_this.props.manualEditModeOff();
|
51
112
|
});
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
_this._onUpdate = _this._onChange.bind(_this);
|
62
|
-
_this.getItemById = _this.getItemById.bind(_this);
|
63
|
-
_this.moveCard = _this.moveCard.bind(_this);
|
64
|
-
_this.insertCard = _this.insertCard.bind(_this);
|
65
|
-
_this.setAsChild = _this.setAsChild.bind(_this);
|
66
|
-
_this.removeChild = _this.removeChild.bind(_this);
|
67
|
-
_this._onDestroy = _this._onDestroy.bind(_this);
|
68
|
-
return _this;
|
69
|
-
}
|
70
|
-
_inherits(Preview, _React$Component);
|
71
|
-
return _createClass(Preview, [{
|
72
|
-
key: "componentDidMount",
|
73
|
-
value: function componentDidMount() {
|
74
|
-
var _this2 = this;
|
75
|
-
var _this$props = this.props,
|
76
|
-
items = _this$props.items,
|
77
|
-
url = _this$props.url,
|
78
|
-
saveUrl = _this$props.saveUrl,
|
79
|
-
saveAlways = _this$props.saveAlways;
|
80
|
-
store.subscribe(function (state) {
|
81
|
-
return _this2._onUpdate(state.items);
|
82
|
-
});
|
83
|
-
store.dispatch('load', {
|
84
|
-
loadUrl: url,
|
85
|
-
saveUrl: saveUrl,
|
86
|
-
items: items || [],
|
87
|
-
saveAlways: saveAlways
|
113
|
+
setItems(updatedItems);
|
114
|
+
setAnswerData(updatedAnswerData);
|
115
|
+
};
|
116
|
+
var _onDestroy = function _onDestroy(item) {
|
117
|
+
// console.log('_onDestroy', item);
|
118
|
+
var updatedList = _toConsumableArray(items);
|
119
|
+
if (isListNotEmpty(item.childItems)) {
|
120
|
+
item.childItems.forEach(function (childItem) {
|
121
|
+
updatedList = removeRecord('id', childItem === null || childItem === void 0 ? void 0 : childItem.id, _toConsumableArray(updatedList));
|
88
122
|
});
|
89
|
-
document.addEventListener('mousedown', this.editModeOff);
|
90
123
|
}
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
124
|
+
updatedList = removeRecord('id', item.id, _toConsumableArray(updatedList));
|
125
|
+
store.dispatch('updateOrder', updatedList);
|
126
|
+
setItems(_toConsumableArray(updatedList));
|
127
|
+
};
|
128
|
+
var getItemById = function getItemById(id) {
|
129
|
+
return items.find(function (x) {
|
130
|
+
return x && x.id === id;
|
131
|
+
});
|
132
|
+
};
|
133
|
+
var swapChildren = function swapChildren(item, child, col) {
|
134
|
+
// console.log('swapping children', item, child, col);
|
135
|
+
if (child.col !== undefined && item.id !== child.parentId) {
|
136
|
+
return false;
|
95
137
|
}
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
return text.replace(/[^A-Z0-9]+/ig, '_').toLowerCase();
|
138
|
+
if (!(child.col !== undefined && child.col !== col && item.childItems[col])) {
|
139
|
+
// No child was assigned yet in both source and target.
|
140
|
+
return false;
|
100
141
|
}
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
142
|
+
var oldItems = _toConsumableArray(items);
|
143
|
+
var oldId = item.childItems[col];
|
144
|
+
var oldItem = oldItems.find(function (i) {
|
145
|
+
return i.id === oldId;
|
146
|
+
});
|
147
|
+
//const oldCol = child.col;
|
148
|
+
// eslint-disable-next-line no-param-reassign
|
149
|
+
var updatedChildItems = _toConsumableArray(item.childItems);
|
150
|
+
updatedChildItems[child.col] = oldId;
|
151
|
+
updatedChildItems[col] = child.id;
|
152
|
+
var updatedItem = _objectSpread(_objectSpread({}, item), {}, {
|
153
|
+
childItems: updatedChildItems
|
154
|
+
});
|
155
|
+
var updatedOldItem = _objectSpread(_objectSpread({}, oldItem), {}, {
|
156
|
+
col: child.col
|
157
|
+
});
|
158
|
+
var updatedChild = _objectSpread(_objectSpread({}, child), {}, {
|
159
|
+
col: col
|
160
|
+
});
|
161
|
+
var updatedItems = updateRecord('id', updatedItem, oldItems);
|
162
|
+
updatedItems = updateRecord('id', updatedOldItem, _toConsumableArray(updatedItems));
|
163
|
+
updatedItems = updateRecord('id', updatedChild, _toConsumableArray(updatedItems));
|
164
|
+
store.dispatch('updateOrder', updatedItems);
|
165
|
+
setItems(updatedItems);
|
166
|
+
return true;
|
167
|
+
};
|
168
|
+
var setAsChild = function setAsChild(item, child, childIsNew, childIndex, col, isBusy) {
|
169
|
+
// console.log('saveAsChild', item, child, childIsNew, childIndex, col, isBusy);
|
170
|
+
if (swapChildren(item, child, col)) {
|
171
|
+
return;
|
117
172
|
}
|
118
|
-
|
119
|
-
|
120
|
-
value: function _onChange($dataItems) {
|
121
|
-
var _this3 = this;
|
122
|
-
var answerData = {};
|
123
|
-
$dataItems.forEach(function (item) {
|
124
|
-
if (item && item.readOnly && _this3.props.variables[item.variableKey]) {
|
125
|
-
answerData[item.fieldName] = _this3.props.variables[item.variableKey];
|
126
|
-
}
|
127
|
-
});
|
128
|
-
this.setState({
|
129
|
-
items: $dataItems,
|
130
|
-
answerData: answerData
|
131
|
-
});
|
173
|
+
if (isBusy) {
|
174
|
+
return;
|
132
175
|
}
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
176
|
+
var oldItems = _toConsumableArray(items);
|
177
|
+
|
178
|
+
// eslint-disable-next-line no-param-reassign
|
179
|
+
var updatedChildItems = isListNotEmpty(item.childItems) ? _toConsumableArray(item.childItems) : [];
|
180
|
+
updatedChildItems[col] = child.id;
|
181
|
+
var updatedItem = _objectSpread(_objectSpread({}, item), {}, {
|
182
|
+
childItems: updatedChildItems
|
183
|
+
});
|
184
|
+
var updatedChild = _objectSpread(_objectSpread({}, child), {}, {
|
185
|
+
col: col,
|
186
|
+
parentId: item.id,
|
187
|
+
parentIndex: oldItems.indexOf(item)
|
188
|
+
});
|
189
|
+
var oldParent = oldItems.find(function (i) {
|
190
|
+
return i.id === child.parentId;
|
191
|
+
});
|
192
|
+
var updatedParent = null;
|
193
|
+
if (oldParent) {
|
194
|
+
updatedParent = _objectSpread({}, oldParent);
|
195
|
+
var updatedParentChildItems = _toConsumableArray(oldParent.childItems);
|
196
|
+
updatedParentChildItems[child.col] = null;
|
146
197
|
}
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
return
|
152
|
-
|
198
|
+
var list = oldItems.filter(function (x) {
|
199
|
+
return x && x.parentId === item.id;
|
200
|
+
});
|
201
|
+
var toRemove = list.filter(function (x) {
|
202
|
+
return item.childItems.indexOf(x.id) === -1;
|
203
|
+
});
|
204
|
+
var updatedList = _toConsumableArray(items);
|
205
|
+
if (toRemove.length) {
|
206
|
+
console.log('toRemove', toRemove);
|
207
|
+
updatedList = updatedList.filter(function (x) {
|
208
|
+
return toRemove.indexOf(x) === -1;
|
153
209
|
});
|
154
210
|
}
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
return false;
|
160
|
-
}
|
161
|
-
if (!(child.col !== undefined && child.col !== col && item.childItems[col])) {
|
162
|
-
// No child was assigned yet in both source and target.
|
163
|
-
return false;
|
164
|
-
}
|
165
|
-
var oldId = item.childItems[col];
|
166
|
-
var oldItem = this.getItemById(oldId);
|
167
|
-
var oldCol = child.col;
|
168
|
-
// eslint-disable-next-line no-param-reassign
|
169
|
-
item.childItems[oldCol] = oldId;
|
170
|
-
oldItem.col = oldCol;
|
171
|
-
// eslint-disable-next-line no-param-reassign
|
172
|
-
item.childItems[col] = child.id;
|
173
|
-
child.col = col;
|
174
|
-
store.dispatch('updateOrder', $dataItems);
|
175
|
-
return true;
|
211
|
+
if (!updatedList.find(function (i) {
|
212
|
+
return i.id === child.id;
|
213
|
+
})) {
|
214
|
+
updatedList.push(updatedChild);
|
176
215
|
}
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
var oldParent = this.getItemById(child.parentId);
|
188
|
-
var oldCol = child.col;
|
189
|
-
// eslint-disable-next-line no-param-reassign
|
190
|
-
item.childItems[col] = child.id;
|
191
|
-
child.col = col;
|
192
|
-
// eslint-disable-next-line no-param-reassign
|
193
|
-
child.parentId = item.id;
|
194
|
-
// eslint-disable-next-line no-param-reassign
|
195
|
-
child.parentIndex = items.indexOf(item);
|
196
|
-
if (oldParent) {
|
197
|
-
oldParent.childItems[oldCol] = null;
|
198
|
-
}
|
199
|
-
var list = items.filter(function (x) {
|
200
|
-
return x && x.parentId === item.id;
|
201
|
-
});
|
202
|
-
var toRemove = list.filter(function (x) {
|
203
|
-
return item.childItems.indexOf(x.id) === -1;
|
204
|
-
});
|
205
|
-
var newData = items;
|
206
|
-
if (toRemove.length) {
|
207
|
-
// console.log('toRemove', toRemove);
|
208
|
-
newData = items.filter(function (x) {
|
209
|
-
return toRemove.indexOf(x) === -1;
|
210
|
-
});
|
211
|
-
}
|
212
|
-
if (!this.getItemById(child.id)) {
|
213
|
-
newData.push(child);
|
214
|
-
}
|
215
|
-
store.dispatch('updateOrder', newData);
|
216
|
+
if (childIsNew && childIndex > -1) {
|
217
|
+
var _oldItems$childIndex;
|
218
|
+
// Instance where child was hovered over main drop zone first and then
|
219
|
+
// dropped into a container, it will not be created yet due to race condition but will
|
220
|
+
// have an index equal to the position in the main drop zone where it was hovering prior
|
221
|
+
// to being dropped in the container. Therefore, we need to delete the item in the main
|
222
|
+
// drop zone so that there aren't duplicates since it was intended to go into the container.
|
223
|
+
|
224
|
+
// add item to toRemove list to be removed
|
225
|
+
updatedList = removeRecord('id', (_oldItems$childIndex = oldItems[childIndex]) === null || _oldItems$childIndex === void 0 ? void 0 : _oldItems$childIndex.id, _toConsumableArray(updatedList));
|
216
226
|
}
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
var oldId = item.childItems[col];
|
222
|
-
var oldItem = this.getItemById(oldId);
|
223
|
-
if (oldItem) {
|
224
|
-
var newData = items.filter(function (x) {
|
225
|
-
return x !== oldItem;
|
226
|
-
});
|
227
|
-
// eslint-disable-next-line no-param-reassign
|
228
|
-
item.childItems[col] = null;
|
229
|
-
// delete oldItem.parentId;
|
230
|
-
this.seq = this.seq > 100000 ? 0 : this.seq + 1;
|
231
|
-
store.dispatch('updateOrder', newData);
|
232
|
-
this.setState({
|
233
|
-
items: newData
|
234
|
-
});
|
235
|
-
}
|
227
|
+
updatedList = updateRecord('id', updatedItem, _toConsumableArray(updatedList));
|
228
|
+
updatedList = updateRecord('id', updatedChild, _toConsumableArray(updatedList));
|
229
|
+
if (updatedParent) {
|
230
|
+
updatedList = updateRecord('id', updatedParent, _toConsumableArray(updatedList));
|
236
231
|
}
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
});
|
232
|
+
store.dispatch('updateOrder', updatedList);
|
233
|
+
setItems(updatedList);
|
234
|
+
};
|
235
|
+
var removeChild = function removeChild(item, col) {
|
236
|
+
console.log('removeChild', item, col);
|
237
|
+
var existingList = _toConsumableArray(items);
|
238
|
+
var oldId = item.childItems[col];
|
239
|
+
var oldItem = existingList.find(function (i) {
|
240
|
+
return i.id === oldId;
|
241
|
+
});
|
242
|
+
if (oldItem) {
|
243
|
+
var updatedListWithoutChild = existingList.filter(function (x) {
|
244
|
+
return x !== oldItem;
|
245
|
+
});
|
246
|
+
// eslint-disable-next-line no-param-reassign
|
247
|
+
var updatedItem = _objectSpread({}, item);
|
248
|
+
// for multi-column containers, set back to null
|
249
|
+
// for fieldsets and steps, delete it
|
250
|
+
if (updatedItem.element === 'FieldSet' || updatedItem.element === 'Step') {
|
251
|
+
updatedItem.childItems.splice(col, 1);
|
252
|
+
} else {
|
253
|
+
updatedItem.childItems[col] = null;
|
260
254
|
}
|
255
|
+
|
256
|
+
// delete oldItem.parentId;
|
257
|
+
setSeq(seq > 100000 ? 0 : seq + 1);
|
258
|
+
var updatedItems = updateRecord('id', updatedItem, _toConsumableArray(updatedListWithoutChild));
|
259
|
+
store.dispatch('updateOrder', updatedItems);
|
260
|
+
setItems(updatedItems);
|
261
261
|
}
|
262
|
-
}
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
262
|
+
};
|
263
|
+
var restoreCard = function restoreCard(item, id) {
|
264
|
+
// console.log('restoreCard', item, id);
|
265
|
+
var existingItems = _toConsumableArray(items);
|
266
|
+
var parent = existingItems.find(function (i) {
|
267
|
+
return i.id === item.item.parentId;
|
268
|
+
});
|
269
|
+
var oldItem = existingItems.find(function (i) {
|
270
|
+
return i.id === id;
|
271
|
+
});
|
272
|
+
if (parent && oldItem) {
|
273
|
+
var updatedParent = _objectSpread({}, parent);
|
274
|
+
var updatedOldItem = _objectSpread({}, oldItem);
|
275
|
+
|
276
|
+
// for multi-column containers, set back to null
|
277
|
+
// for fieldsets and steps, delete it
|
278
|
+
if (updatedParent.element === 'FieldSet' || updatedParent.element === 'Step') {
|
279
|
+
updatedParent.childItems.splice(oldItem.col, 1);
|
268
280
|
} else {
|
269
|
-
|
270
|
-
this.saveData(item, hoverIndex, hoverIndex);
|
271
|
-
store.dispatch('insertItem', item);
|
281
|
+
updatedParent.childItems[oldItem.col] = null;
|
272
282
|
}
|
273
|
-
}
|
274
|
-
}, {
|
275
|
-
key: "moveCard",
|
276
|
-
value: function moveCard(dragIndex, hoverIndex) {
|
277
|
-
var items = this.state.items;
|
278
|
-
var dragCard = items[dragIndex];
|
279
|
-
this.saveData(dragCard, dragIndex, hoverIndex);
|
280
|
-
}
|
281
283
|
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
//
|
284
|
+
// eslint-disable-next-line no-param-reassign
|
285
|
+
delete updatedOldItem.parentId;
|
286
|
+
// eslint-disable-next-line no-param-reassign
|
287
|
+
delete updatedOldItem.setAsChild;
|
288
|
+
// eslint-disable-next-line no-param-reassign
|
289
|
+
delete updatedOldItem.parentIndex;
|
290
|
+
// eslint-disable-next-line no-param-reassign
|
291
|
+
delete updatedOldItem.col;
|
292
|
+
setSeq(seq > 100000 ? 0 : seq + 1);
|
293
|
+
var updatedItems = updateRecord('id', updatedOldItem, _toConsumableArray(items));
|
294
|
+
updatedItems = updateRecord('id', updatedParent, _toConsumableArray(updatedItems));
|
295
|
+
store.dispatch('updateOrder', updatedItems);
|
296
|
+
setItems(updatedItems);
|
287
297
|
}
|
288
|
-
}
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
+
};
|
299
|
+
var insertCard = function insertCard(item, hoverIndex, id) {
|
300
|
+
// console.log('insertCard', item, hoverIndex, id);
|
301
|
+
var $dataItems = _toConsumableArray(items);
|
302
|
+
if (id) {
|
303
|
+
restoreCard(item, id);
|
304
|
+
} else {
|
305
|
+
// fixed bug where cards were getting wiped out when you dragged another card over a card to insert it. card should be inserted, not replacing existing cards. If an existing card should be removed, the remove button should be used
|
306
|
+
$dataItems.splice(hoverIndex, 0, item);
|
307
|
+
setItems($dataItems);
|
308
|
+
store.dispatch('updateOrder', $dataItems);
|
309
|
+
// store.dispatch('insertItem', { ...item });
|
298
310
|
}
|
299
|
-
}
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
311
|
+
};
|
312
|
+
var moveCard = function moveCard(dragIndex, hoverIndex) {
|
313
|
+
// console.log('moveCard', dragIndex, hoverIndex);
|
314
|
+
var $dataItems = _toConsumableArray(items);
|
315
|
+
var dragCard = $dataItems[dragIndex];
|
316
|
+
$dataItems.splice(dragIndex, 1);
|
317
|
+
$dataItems.splice(hoverIndex, 0, dragCard);
|
318
|
+
setItems($dataItems);
|
319
|
+
store.dispatch('updateOrder', $dataItems);
|
320
|
+
};
|
321
|
+
|
322
|
+
// eslint-disable-next-line no-unused-vars
|
323
|
+
var cardPlaceHolder = function cardPlaceHolder(dragIndex, hoverIndex) {
|
324
|
+
// Dummy
|
325
|
+
};
|
326
|
+
var getElement = function getElement(item, index) {
|
327
|
+
var _item$fieldName;
|
328
|
+
if (item.custom) {
|
329
|
+
if (!item.component || typeof item.component !== 'function') {
|
330
|
+
// eslint-disable-next-line no-param-reassign
|
331
|
+
item.component = registry.get(item.key);
|
312
332
|
}
|
313
|
-
return /*#__PURE__*/React.createElement(SortableFormElement, {
|
314
|
-
id: item.id,
|
315
|
-
name: item.fieldName,
|
316
|
-
seq: this.seq,
|
317
|
-
index: index,
|
318
|
-
moveCard: this.moveCard,
|
319
|
-
insertCard: this.insertCard,
|
320
|
-
mutable: false,
|
321
|
-
parent: this.props.parent,
|
322
|
-
editModeOn: this.props.editModeOn,
|
323
|
-
isDraggable: true,
|
324
|
-
key: item.id,
|
325
|
-
sortData: item.id,
|
326
|
-
item: _objectSpread(_objectSpread({}, item), {}, {
|
327
|
-
mutable: false,
|
328
|
-
readOnly: false,
|
329
|
-
print: false
|
330
|
-
}),
|
331
|
-
getDataById: this.getItemById,
|
332
|
-
setAsChild: this.setAsChild,
|
333
|
-
removeChild: this.removeChild,
|
334
|
-
_onDestroy: this._onDestroy
|
335
|
-
});
|
336
333
|
}
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
var _this5 = this;
|
341
|
-
var handleUpdateElement = function handleUpdateElement(element) {
|
342
|
-
return _this5.updateElement(element);
|
343
|
-
};
|
344
|
-
handleUpdateElement.bind(this);
|
345
|
-
var formElementEditProps = {
|
346
|
-
showCorrectColumn: this.props.showCorrectColumn,
|
347
|
-
files: this.props.files,
|
348
|
-
manualEditModeOff: this.manualEditModeOff,
|
349
|
-
preview: this,
|
350
|
-
element: this.props.editElement,
|
351
|
-
updateElement: handleUpdateElement
|
352
|
-
};
|
353
|
-
return this.props.renderEditForm(formElementEditProps);
|
334
|
+
var SortableFormElement = SortableFormElements[item.element];
|
335
|
+
if (SortableFormElement === null) {
|
336
|
+
return null;
|
354
337
|
}
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
338
|
+
return /*#__PURE__*/React.createElement(SortableFormElement, {
|
339
|
+
id: item.id,
|
340
|
+
name: (_item$fieldName = item.fieldName) !== null && _item$fieldName !== void 0 ? _item$fieldName : item.name,
|
341
|
+
seq: seq,
|
342
|
+
index: index,
|
343
|
+
moveCard: moveCard,
|
344
|
+
insertCard: insertCard,
|
345
|
+
mutable: false,
|
346
|
+
editModeOn: editModeOn,
|
347
|
+
isDraggable: true,
|
348
|
+
key: item.id,
|
349
|
+
sortData: item.id,
|
350
|
+
item: _objectSpread(_objectSpread({}, item), {}, {
|
351
|
+
mutable: false,
|
352
|
+
readOnly: false,
|
353
|
+
print: false
|
354
|
+
}),
|
355
|
+
getItemById: getItemById,
|
356
|
+
setAsChild: setAsChild,
|
357
|
+
removeChild: removeChild,
|
358
|
+
_onDestroy: _onDestroy
|
359
|
+
});
|
360
|
+
};
|
361
|
+
var showEditForm = function showEditForm() {
|
362
|
+
var editFormProps = {
|
363
|
+
showCorrectColumn: showCorrectColumn,
|
364
|
+
showDescription: showDescription,
|
365
|
+
files: files,
|
366
|
+
manualEditModeOff: manualEditModeOff,
|
367
|
+
element: editElement,
|
368
|
+
setElement: setEditElement,
|
369
|
+
updateElement: function updateElement(element) {
|
370
|
+
return _updateElement(element);
|
362
371
|
}
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
}
|
384
|
-
}]);
|
385
|
-
|
386
|
-
|
372
|
+
};
|
373
|
+
return renderEditForm(editFormProps);
|
374
|
+
};
|
375
|
+
React.useEffect(function () {
|
376
|
+
store.setExternalHandler(onLoad, onPost);
|
377
|
+
}, [onLoad, onPost]);
|
378
|
+
React.useEffect(function () {
|
379
|
+
setItems(loadItems);
|
380
|
+
store.subscribe(function (state) {
|
381
|
+
_onChange(state.items);
|
382
|
+
});
|
383
|
+
store.dispatch('load', {
|
384
|
+
loadUrl: url,
|
385
|
+
saveUrl: saveUrl,
|
386
|
+
items: loadItems,
|
387
|
+
saveAlways: saveAlways
|
388
|
+
});
|
389
|
+
document.addEventListener('mousedown', editModeOff);
|
390
|
+
return function () {
|
391
|
+
document.removeEventListener('mousedown', editModeOff);
|
392
|
+
};
|
393
|
+
}, []);
|
394
|
+
var dataItems = items.filter(function (x) {
|
395
|
+
return !!x && !x.parentId;
|
396
|
+
});
|
397
|
+
var elementItems = dataItems.map(function (item, index) {
|
398
|
+
return getElement(item, index);
|
399
|
+
});
|
400
|
+
return /*#__PURE__*/React.createElement("div", {
|
401
|
+
className: editMode ? className + ' is-editing' : className
|
402
|
+
}, /*#__PURE__*/React.createElement("div", {
|
403
|
+
className: "edit-form",
|
404
|
+
ref: editForm
|
405
|
+
}, editElement !== undefined && editElement !== null && showEditForm()), /*#__PURE__*/React.createElement("div", {
|
406
|
+
className: "Sortable"
|
407
|
+
}, elementItems), /*#__PURE__*/React.createElement(PlaceHolder, {
|
408
|
+
id: "form-place-holder",
|
409
|
+
show: true,
|
410
|
+
index: elementItems.length,
|
411
|
+
moveCard: cardPlaceHolder,
|
412
|
+
insertCard: insertCard
|
413
|
+
}), /*#__PURE__*/React.createElement(CustomDragLayer, null));
|
414
|
+
};
|
387
415
|
Preview.defaultProps = {
|
388
416
|
showCorrectColumn: false,
|
389
417
|
files: [],
|
390
418
|
editMode: false,
|
391
419
|
editElement: null,
|
392
420
|
className: 'react-survey-builder-preview',
|
393
|
-
renderEditForm: function renderEditForm(
|
394
|
-
return /*#__PURE__*/React.createElement(SurveyElementsEdit,
|
421
|
+
renderEditForm: function renderEditForm(editFormProps) {
|
422
|
+
return /*#__PURE__*/React.createElement(SurveyElementsEdit, editFormProps);
|
395
423
|
}
|
396
|
-
};
|
424
|
+
};
|
425
|
+
export default Preview;
|