@builttocreate/engine-utils 2.7.0 → 2.8.0-beta.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 +1 -0
- package/dist/activityHelper.js +15 -40
- package/dist/changedKeys.js +1 -4
- package/dist/chartHelper.js +4 -13
- package/dist/constants/ActivityTypes.js +5 -9
- package/dist/constants/DocumentTypes.js +1 -2
- package/dist/constants/FieldDisplayTypes.js +5 -6
- package/dist/constants/FieldPresentationModes.js +4 -8
- package/dist/constants/FieldTableColumnTypes.js +2 -3
- package/dist/constants/FieldTableCustomColumnIds.js +2 -3
- package/dist/constants/FieldTypes.js +3 -3
- package/dist/constants/FileTypes.js +4 -7
- package/dist/constants/FileViews.js +2 -4
- package/dist/constants/FormStyleOptions.js +23 -0
- package/dist/constants/ListTypes.js +2 -3
- package/dist/constants/PageLayoutModes.js +2 -4
- package/dist/constants/PageTypes.js +15 -0
- package/dist/constants/Roles.js +1 -3
- package/dist/constants/Table.js +6 -11
- package/dist/fieldHelper.js +25 -85
- package/dist/fileHelper.js +3 -11
- package/dist/generateObjectId.js +2 -5
- package/dist/index.js +4 -31
- package/dist/joyDocHelper.js +487 -132
- package/dist/paginationHelper.js +3 -7
- package/dist/reduxApiMiddleware.js +12 -27
- package/dist/roleHelper.js +4 -13
- package/dist/tableHelper.js +159 -283
- package/dist/validateObjectId.js +2 -5
- package/package.json +5 -5
package/dist/joyDocHelper.js
CHANGED
|
@@ -1,39 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
exports.sortPages = exports.getPageOrder = exports.getDocumentFromTemplate = exports.getDefaultTemplate = exports.getDefaultJoyDocPage = exports.getDefaultJoyDocFile = exports.getDefaultJoyDoc = exports.getDefaultDocument = exports.getCleanedJoyDocPages = exports.getCleanedJoyDoc = exports.duplicateDocumentPage = exports.duplicate = exports["default"] = exports.cleanPageOrder = void 0;
|
|
9
|
-
|
|
7
|
+
exports.sortPages = exports.sortFieldPositionsByXAndYCoordinates = exports.removeOrphanedFieldsFromJoydoc = exports.mergeAssoicatedFieldPositionsForMobilePage = exports.getPageOrder = exports.getMobileViewFromFile = exports.getDocumentFromTemplate = exports.getDefaultTemplate = exports.getDefaultJoyDocPage = exports.getDefaultJoyDocFile = exports.getDefaultJoyDoc = exports.getDefaultDocument = exports.getCleanedJoyDocPages = exports.getCleanedJoyDoc = exports.generateMobileViewFromFile = exports.generateMobilePageFieldPositions = exports.generateMobilePage = exports.formatTableFieldPositions = exports.duplicateDocumentPage = exports.duplicate = exports["default"] = exports.cleanPageOrder = void 0;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
10
|
var _generateObjectId = _interopRequireDefault(require("./generateObjectId"));
|
|
13
|
-
|
|
14
11
|
var _validateObjectId = _interopRequireDefault(require("./validateObjectId"));
|
|
15
|
-
|
|
16
12
|
var _PageLayoutModes = _interopRequireDefault(require("./constants/PageLayoutModes"));
|
|
17
|
-
|
|
18
13
|
var _FieldPresentationModes = _interopRequireDefault(require("./constants/FieldPresentationModes"));
|
|
19
|
-
|
|
20
14
|
var _DocumentTypes = _interopRequireDefault(require("./constants/DocumentTypes"));
|
|
21
|
-
|
|
15
|
+
var _PageTypes = _interopRequireDefault(require("./constants/PageTypes"));
|
|
22
16
|
var _FieldTypes = _interopRequireDefault(require("./constants/FieldTypes"));
|
|
23
|
-
|
|
17
|
+
var _FieldDisplayTypes = _interopRequireDefault(require("./constants/FieldDisplayTypes"));
|
|
18
|
+
var _FileViews = _interopRequireDefault(require("./constants/FileViews"));
|
|
19
|
+
var _FormStyleOptions = _interopRequireDefault(require("./constants/FormStyleOptions"));
|
|
24
20
|
var _tableHelper = require("./tableHelper");
|
|
25
|
-
|
|
26
|
-
function
|
|
27
|
-
|
|
28
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
29
|
-
|
|
21
|
+
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; }
|
|
22
|
+
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; }
|
|
30
23
|
/**
|
|
31
24
|
* Create default page
|
|
32
25
|
*
|
|
33
26
|
* @param {Object} defaults
|
|
34
27
|
* @return {Object}
|
|
35
28
|
*/
|
|
36
|
-
var getDefaultJoyDocPage = function getDefaultJoyDocPage() {
|
|
29
|
+
var getDefaultJoyDocPage = exports.getDefaultJoyDocPage = function getDefaultJoyDocPage() {
|
|
37
30
|
var defaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
38
31
|
return _objectSpread({
|
|
39
32
|
_id: (0, _generateObjectId["default"])(),
|
|
@@ -48,6 +41,7 @@ var getDefaultJoyDocPage = function getDefaultJoyDocPage() {
|
|
|
48
41
|
padding: 24
|
|
49
42
|
}, defaults);
|
|
50
43
|
};
|
|
44
|
+
|
|
51
45
|
/**
|
|
52
46
|
* Create default file
|
|
53
47
|
*
|
|
@@ -55,11 +49,7 @@ var getDefaultJoyDocPage = function getDefaultJoyDocPage() {
|
|
|
55
49
|
* @param {Object} pageDefaults
|
|
56
50
|
* @return {Object}
|
|
57
51
|
*/
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
exports.getDefaultJoyDocPage = getDefaultJoyDocPage;
|
|
61
|
-
|
|
62
|
-
var getDefaultJoyDocFile = function getDefaultJoyDocFile() {
|
|
52
|
+
var getDefaultJoyDocFile = exports.getDefaultJoyDocFile = function getDefaultJoyDocFile() {
|
|
63
53
|
var defaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
64
54
|
var pageDefaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
65
55
|
var page = getDefaultJoyDocPage(pageDefaults);
|
|
@@ -73,6 +63,7 @@ var getDefaultJoyDocFile = function getDefaultJoyDocFile() {
|
|
|
73
63
|
}
|
|
74
64
|
}, defaults);
|
|
75
65
|
};
|
|
66
|
+
|
|
76
67
|
/**
|
|
77
68
|
* Create default document
|
|
78
69
|
*
|
|
@@ -80,11 +71,7 @@ var getDefaultJoyDocFile = function getDefaultJoyDocFile() {
|
|
|
80
71
|
* @param {Object} pageDefaults
|
|
81
72
|
* @return {Object}
|
|
82
73
|
*/
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
exports.getDefaultJoyDocFile = getDefaultJoyDocFile;
|
|
86
|
-
|
|
87
|
-
var getDefaultJoyDoc = function getDefaultJoyDoc() {
|
|
74
|
+
var getDefaultJoyDoc = exports.getDefaultJoyDoc = function getDefaultJoyDoc() {
|
|
88
75
|
var defaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
89
76
|
var fileDefaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
90
77
|
var pageDefaults = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
@@ -97,6 +84,7 @@ var getDefaultJoyDoc = function getDefaultJoyDoc() {
|
|
|
97
84
|
fields: []
|
|
98
85
|
}, defaults);
|
|
99
86
|
};
|
|
87
|
+
|
|
100
88
|
/**
|
|
101
89
|
* Get Clean JoyDoc Format
|
|
102
90
|
*
|
|
@@ -111,78 +99,161 @@ var getDefaultJoyDoc = function getDefaultJoyDoc() {
|
|
|
111
99
|
* @param {Object} doc
|
|
112
100
|
* @returns {Object}
|
|
113
101
|
*/
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
exports.getDefaultJoyDoc = getDefaultJoyDoc;
|
|
117
|
-
|
|
118
|
-
var getCleanedJoyDoc = function getCleanedJoyDoc(doc) {
|
|
102
|
+
var getCleanedJoyDoc = exports.getCleanedJoyDoc = function getCleanedJoyDoc(doc) {
|
|
119
103
|
if (!doc) return getDefaultJoyDoc();
|
|
104
|
+
var nextDoc = removeOrphanedFieldsFromJoydoc(doc);
|
|
120
105
|
|
|
121
|
-
var nextDoc = _objectSpread({}, doc);
|
|
122
106
|
/**
|
|
123
107
|
* Step 1.1: Replace doc._id if it is not valid
|
|
124
108
|
*/
|
|
125
|
-
|
|
126
|
-
|
|
127
109
|
if (nextDoc._id && !(0, _validateObjectId["default"])(nextDoc._id)) nextDoc._id = (0, _generateObjectId["default"])();
|
|
128
|
-
|
|
129
110
|
if (nextDoc.files && nextDoc.files.length > 0) {
|
|
130
111
|
nextDoc.files = nextDoc.files.map(function (file) {
|
|
131
112
|
var _nextFile$views;
|
|
132
|
-
|
|
133
113
|
var nextFile = _objectSpread({}, file);
|
|
114
|
+
|
|
134
115
|
/**
|
|
135
116
|
* Step 1.2: Replace files[x]._id if it is not valid
|
|
136
117
|
*/
|
|
137
|
-
|
|
138
|
-
|
|
139
118
|
if (nextFile._id && !(0, _validateObjectId["default"])(nextFile._id)) nextFile._id = (0, _generateObjectId["default"])();
|
|
119
|
+
|
|
140
120
|
/**
|
|
141
121
|
* Step 1.3: Replace page ids and field ids if they are not valid
|
|
142
122
|
*/
|
|
143
|
-
|
|
144
123
|
nextFile.pages = getCleanedJoyDocPages(nextFile.pages);
|
|
145
124
|
nextFile.pageOrder = cleanPageOrder(getPageOrder(nextFile.pageOrder, nextFile.pages), nextFile.pages);
|
|
125
|
+
|
|
146
126
|
/**
|
|
147
127
|
* Step 1.4: Replace view page ids and field ids if they are not valid
|
|
148
128
|
*/
|
|
149
|
-
|
|
150
129
|
if ((nextFile === null || nextFile === void 0 ? void 0 : (_nextFile$views = nextFile.views) === null || _nextFile$views === void 0 ? void 0 : _nextFile$views.length) > 0) {
|
|
151
130
|
nextFile.views = nextFile.views.map(function (view) {
|
|
152
131
|
var nextView = _objectSpread({}, view);
|
|
153
|
-
|
|
154
132
|
nextView.pages = getCleanedJoyDocPages(nextView.pages);
|
|
155
133
|
nextView.pageOrder = cleanPageOrder(getPageOrder(nextView.pageOrder, nextView.pages), nextView.pages);
|
|
156
134
|
return nextView;
|
|
157
135
|
});
|
|
158
136
|
}
|
|
159
|
-
|
|
160
137
|
return nextFile;
|
|
161
138
|
});
|
|
162
139
|
} else {
|
|
163
140
|
nextDoc.files = [getDefaultJoyDocFile()];
|
|
164
141
|
}
|
|
142
|
+
|
|
165
143
|
/**
|
|
166
144
|
* Logic below is used to clean the table field rowOrder by removing the
|
|
167
145
|
* deletedRowIds / duplicateRowIds from the rowOrder.
|
|
168
146
|
**/
|
|
169
|
-
|
|
170
|
-
|
|
171
147
|
if (nextDoc.fields && nextDoc.fields.length > 0) {
|
|
172
148
|
nextDoc.fields = nextDoc.fields.map(function (field) {
|
|
173
149
|
var nextField = _objectSpread({}, field);
|
|
174
|
-
|
|
175
150
|
if (field.type === _FieldTypes["default"].table) {
|
|
176
151
|
var cleanedRoworder = (0, _tableHelper.getCleanedRowOrder)(field.rowOrder, field.value);
|
|
177
152
|
nextField.rowOrder = cleanedRoworder;
|
|
178
153
|
}
|
|
179
|
-
|
|
180
154
|
return nextField;
|
|
181
155
|
});
|
|
182
156
|
}
|
|
183
|
-
|
|
184
157
|
return nextDoc;
|
|
185
158
|
};
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Remove orphaned fields from doc
|
|
162
|
+
*/
|
|
163
|
+
|
|
164
|
+
// export const removeOrphanedFieldsFromJoydoc = (doc) => {
|
|
165
|
+
|
|
166
|
+
// const nextDoc = { ...doc };
|
|
167
|
+
|
|
168
|
+
// /**
|
|
169
|
+
// * Logic below removes orphaned fields (ie fields without fieldPositions)
|
|
170
|
+
// */
|
|
171
|
+
|
|
172
|
+
// nextDoc.fields = nextDoc.fields.filter((field) => {
|
|
173
|
+
|
|
174
|
+
// let isOrphanedField = true;
|
|
175
|
+
|
|
176
|
+
// nextDoc.files.forEach((file) => {
|
|
177
|
+
|
|
178
|
+
// const primaryViewPages = file.pages;
|
|
179
|
+
|
|
180
|
+
// // Check if field is associated with any field positions in primary view pages
|
|
181
|
+
// const isFieldAssociatedWithPrimaryView = primaryViewPages.some((page) => {
|
|
182
|
+
// return page.fieldPositions.some((fieldPosition) => fieldPosition.field === field._id);
|
|
183
|
+
// });
|
|
184
|
+
|
|
185
|
+
// // Check if field is associated with other views
|
|
186
|
+
// let isFieldAssociatedWithAnotherView;
|
|
187
|
+
|
|
188
|
+
// if (file.views && file.views.length > 0) {
|
|
189
|
+
|
|
190
|
+
// isFieldAssociatedWithAnotherView = file.views.some((view) => {
|
|
191
|
+
// return view.pages.some((page) => {
|
|
192
|
+
// return page.fieldPositions.some((fieldPosition) => fieldPosition.field === field._id);
|
|
193
|
+
// });
|
|
194
|
+
// });
|
|
195
|
+
|
|
196
|
+
// }
|
|
197
|
+
|
|
198
|
+
// if (isFieldAssociatedWithPrimaryView || isFieldAssociatedWithAnotherView) {
|
|
199
|
+
// isOrphanedField = false;
|
|
200
|
+
// }
|
|
201
|
+
|
|
202
|
+
// });
|
|
203
|
+
|
|
204
|
+
// if (!isOrphanedField) return field;
|
|
205
|
+
|
|
206
|
+
// return null;
|
|
207
|
+
|
|
208
|
+
// });
|
|
209
|
+
|
|
210
|
+
// return nextDoc;
|
|
211
|
+
|
|
212
|
+
// };
|
|
213
|
+
|
|
214
|
+
var removeOrphanedFieldsFromJoydoc = exports.removeOrphanedFieldsFromJoydoc = function removeOrphanedFieldsFromJoydoc(doc) {
|
|
215
|
+
var _nextDoc$files;
|
|
216
|
+
var nextDoc = _objectSpread({}, doc);
|
|
217
|
+
var associatedFieldIdLookup = {};
|
|
218
|
+
nextDoc === null || nextDoc === void 0 ? void 0 : (_nextDoc$files = nextDoc.files) === null || _nextDoc$files === void 0 ? void 0 : _nextDoc$files.forEach(function (file) {
|
|
219
|
+
var _file$views;
|
|
220
|
+
/**
|
|
221
|
+
* Primary view
|
|
222
|
+
*/
|
|
223
|
+
file.pages.forEach(function (page) {
|
|
224
|
+
page.fieldPositions.forEach(function (fieldPosition) {
|
|
225
|
+
return associatedFieldIdLookup[fieldPosition.field] = true;
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Alternative view
|
|
231
|
+
*/
|
|
232
|
+
(_file$views = file.views) === null || _file$views === void 0 ? void 0 : _file$views.forEach(function (view) {
|
|
233
|
+
var _view$pages;
|
|
234
|
+
view === null || view === void 0 ? void 0 : (_view$pages = view.pages) === null || _view$pages === void 0 ? void 0 : _view$pages.forEach(function (page) {
|
|
235
|
+
page === null || page === void 0 ? void 0 : page.fieldPositions.forEach(function (fieldPosition) {
|
|
236
|
+
return associatedFieldIdLookup[fieldPosition.field] = true;
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Logic below removes orphaned fields (ie fields without fieldPositions)
|
|
244
|
+
*/
|
|
245
|
+
var validFields = [];
|
|
246
|
+
var deletedFields = [];
|
|
247
|
+
nextDoc.fields.forEach(function (field) {
|
|
248
|
+
if (associatedFieldIdLookup[field._id]) validFields.push(field);else deletedFields.push(field);
|
|
249
|
+
});
|
|
250
|
+
nextDoc.fields = validFields;
|
|
251
|
+
nextDoc.deletedFields = deletedFields;
|
|
252
|
+
return {
|
|
253
|
+
doc: nextDoc
|
|
254
|
+
};
|
|
255
|
+
};
|
|
256
|
+
|
|
186
257
|
/**
|
|
187
258
|
* Get Cleaned JoyDoc Pages
|
|
188
259
|
*
|
|
@@ -195,27 +266,20 @@ var getCleanedJoyDoc = function getCleanedJoyDoc(doc) {
|
|
|
195
266
|
* @param {Object} doc
|
|
196
267
|
* @returns {Object}
|
|
197
268
|
*/
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
exports.getCleanedJoyDoc = getCleanedJoyDoc;
|
|
201
|
-
|
|
202
|
-
var getCleanedJoyDocPages = function getCleanedJoyDocPages(pages) {
|
|
269
|
+
var getCleanedJoyDocPages = exports.getCleanedJoyDocPages = function getCleanedJoyDocPages(pages) {
|
|
203
270
|
if ((pages === null || pages === void 0 ? void 0 : pages.length) > 0) {
|
|
204
271
|
return pages.map(function (page) {
|
|
205
272
|
/**
|
|
206
273
|
* Step 1: Replace pages[x]._id if it is not valid
|
|
207
274
|
*/
|
|
208
275
|
var nextPage = _objectSpread({}, page);
|
|
209
|
-
|
|
210
276
|
if (nextPage._id && !(0, _validateObjectId["default"])(nextPage._id)) nextPage._id = (0, _generateObjectId["default"])();
|
|
211
|
-
|
|
212
277
|
if (nextPage.fieldPositions && nextPage.fieldPositions.length > 0) {
|
|
213
278
|
nextPage.fieldPositions = nextPage.fieldPositions.map(function (fieldPosition) {
|
|
214
279
|
/**
|
|
215
280
|
* Step 1.2: Replace fieldPosition _id and field reference if they are not valid
|
|
216
281
|
*/
|
|
217
282
|
var nextFieldPosition = _objectSpread({}, fieldPosition);
|
|
218
|
-
|
|
219
283
|
if (nextFieldPosition._id && !(0, _validateObjectId["default"])(nextFieldPosition._id)) nextFieldPosition._id = (0, _generateObjectId["default"])();
|
|
220
284
|
if (nextFieldPosition.field && !(0, _validateObjectId["default"])(nextFieldPosition.field)) nextFieldPosition.field = (0, _generateObjectId["default"])();
|
|
221
285
|
return nextFieldPosition;
|
|
@@ -223,13 +287,13 @@ var getCleanedJoyDocPages = function getCleanedJoyDocPages(pages) {
|
|
|
223
287
|
} else {
|
|
224
288
|
nextPage.fieldPositions = [];
|
|
225
289
|
}
|
|
226
|
-
|
|
227
290
|
return nextPage;
|
|
228
291
|
});
|
|
229
292
|
} else {
|
|
230
293
|
return [getDefaultJoyDocPage()];
|
|
231
294
|
}
|
|
232
295
|
};
|
|
296
|
+
|
|
233
297
|
/**
|
|
234
298
|
* Get page order
|
|
235
299
|
*
|
|
@@ -237,15 +301,12 @@ var getCleanedJoyDocPages = function getCleanedJoyDocPages(pages) {
|
|
|
237
301
|
* @param {Array} pageOrder
|
|
238
302
|
* @return {Array}
|
|
239
303
|
*/
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
exports.getCleanedJoyDocPages = getCleanedJoyDocPages;
|
|
243
|
-
|
|
244
|
-
var getPageOrder = function getPageOrder(pageOrder, pages) {
|
|
304
|
+
var getPageOrder = exports.getPageOrder = function getPageOrder(pageOrder, pages) {
|
|
245
305
|
return pageOrder || pages.map(function (page) {
|
|
246
306
|
return page._id;
|
|
247
307
|
});
|
|
248
308
|
};
|
|
309
|
+
|
|
249
310
|
/**
|
|
250
311
|
*
|
|
251
312
|
* Clean pageOrder
|
|
@@ -258,11 +319,7 @@ var getPageOrder = function getPageOrder(pageOrder, pages) {
|
|
|
258
319
|
* @param {Array} pages //[object, object, ...]
|
|
259
320
|
* @returns {Array}
|
|
260
321
|
*/
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
exports.getPageOrder = getPageOrder;
|
|
264
|
-
|
|
265
|
-
var cleanPageOrder = function cleanPageOrder(pageOrder, pages) {
|
|
322
|
+
var cleanPageOrder = exports.cleanPageOrder = function cleanPageOrder(pageOrder, pages) {
|
|
266
323
|
var pageLookup = {};
|
|
267
324
|
pages.forEach(function (page) {
|
|
268
325
|
return pageLookup[page._id] = page && !page.deleted;
|
|
@@ -271,14 +328,11 @@ var cleanPageOrder = function cleanPageOrder(pageOrder, pages) {
|
|
|
271
328
|
return pageLookup[pageId] && pageId && pageOrder.indexOf(pageId) === index;
|
|
272
329
|
});
|
|
273
330
|
};
|
|
331
|
+
|
|
274
332
|
/**
|
|
275
333
|
* Sort pages based on pageOrder
|
|
276
334
|
*/
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
exports.cleanPageOrder = cleanPageOrder;
|
|
280
|
-
|
|
281
|
-
var sortPages = function sortPages(pages, pageOrder) {
|
|
335
|
+
var sortPages = exports.sortPages = function sortPages(pages, pageOrder) {
|
|
282
336
|
if (!pageOrder) return pages;
|
|
283
337
|
var pageLookup = {};
|
|
284
338
|
pages.forEach(function (page) {
|
|
@@ -290,20 +344,15 @@ var sortPages = function sortPages(pages, pageOrder) {
|
|
|
290
344
|
});
|
|
291
345
|
return sortedPages;
|
|
292
346
|
};
|
|
347
|
+
|
|
293
348
|
/**
|
|
294
349
|
* Get a properly formatted Document JoyDoc
|
|
295
350
|
*
|
|
296
351
|
* @returns {Object}
|
|
297
352
|
*/
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
exports.sortPages = sortPages;
|
|
301
|
-
|
|
302
|
-
var getDefaultDocument = function getDefaultDocument() {
|
|
353
|
+
var getDefaultDocument = exports.getDefaultDocument = function getDefaultDocument() {
|
|
303
354
|
var type = _DocumentTypes["default"].document;
|
|
304
|
-
|
|
305
355
|
var _id = (0, _generateObjectId["default"])();
|
|
306
|
-
|
|
307
356
|
var identifier = "doc_".concat(_id);
|
|
308
357
|
var name = 'New Doc';
|
|
309
358
|
return getDefaultJoyDoc({
|
|
@@ -313,20 +362,15 @@ var getDefaultDocument = function getDefaultDocument() {
|
|
|
313
362
|
name: name
|
|
314
363
|
});
|
|
315
364
|
};
|
|
365
|
+
|
|
316
366
|
/**
|
|
317
367
|
* Get a properly formatted Template JoyDoc
|
|
318
368
|
*
|
|
319
369
|
* @returns {Object}
|
|
320
370
|
*/
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
exports.getDefaultDocument = getDefaultDocument;
|
|
324
|
-
|
|
325
|
-
var getDefaultTemplate = function getDefaultTemplate() {
|
|
371
|
+
var getDefaultTemplate = exports.getDefaultTemplate = function getDefaultTemplate() {
|
|
326
372
|
var type = _DocumentTypes["default"].template;
|
|
327
|
-
|
|
328
373
|
var _id = (0, _generateObjectId["default"])();
|
|
329
|
-
|
|
330
374
|
var identifier = "template_".concat(_id);
|
|
331
375
|
var name = 'New Template';
|
|
332
376
|
return getDefaultJoyDoc({
|
|
@@ -336,21 +380,16 @@ var getDefaultTemplate = function getDefaultTemplate() {
|
|
|
336
380
|
name: name
|
|
337
381
|
});
|
|
338
382
|
};
|
|
383
|
+
|
|
339
384
|
/**
|
|
340
385
|
* Get a properly formatted duplicate of a Template or Document
|
|
341
386
|
*
|
|
342
387
|
* @returns {Object}
|
|
343
388
|
*/
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
exports.getDefaultTemplate = getDefaultTemplate;
|
|
347
|
-
|
|
348
|
-
var duplicate = function duplicate(original, defaults) {
|
|
389
|
+
var duplicate = exports.duplicate = function duplicate(original, defaults) {
|
|
349
390
|
//Remove all references to original template object
|
|
350
391
|
var origin = JSON.parse(JSON.stringify(original));
|
|
351
|
-
|
|
352
392
|
var _id = (0, _generateObjectId["default"])();
|
|
353
|
-
|
|
354
393
|
var identifier = origin.type === _DocumentTypes["default"].template ? "template_".concat(_id) : "doc_".concat(_id);
|
|
355
394
|
return _objectSpread(_objectSpread({}, origin), {}, {
|
|
356
395
|
_id: _id,
|
|
@@ -359,21 +398,18 @@ var duplicate = function duplicate(original, defaults) {
|
|
|
359
398
|
source: origin.identifier
|
|
360
399
|
}, defaults);
|
|
361
400
|
};
|
|
401
|
+
|
|
362
402
|
/**
|
|
363
403
|
* Get a properly formatted Document JoyDoc from Template JoyDoc
|
|
364
404
|
*
|
|
365
405
|
* @param {Object} template
|
|
366
406
|
* @returns {Object}
|
|
367
407
|
*/
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
exports.duplicate = duplicate;
|
|
371
|
-
|
|
372
|
-
var getDocumentFromTemplate = function getDocumentFromTemplate(template) {
|
|
408
|
+
var getDocumentFromTemplate = exports.getDocumentFromTemplate = function getDocumentFromTemplate(template) {
|
|
373
409
|
var _id = (0, _generateObjectId["default"])();
|
|
410
|
+
var identifier = "doc_".concat(_id);
|
|
374
411
|
|
|
375
|
-
|
|
376
|
-
|
|
412
|
+
//Remove all references to original template object
|
|
377
413
|
var temp = JSON.parse(JSON.stringify(template));
|
|
378
414
|
return {
|
|
379
415
|
_id: _id,
|
|
@@ -386,6 +422,7 @@ var getDocumentFromTemplate = function getDocumentFromTemplate(template) {
|
|
|
386
422
|
fields: temp.fields
|
|
387
423
|
};
|
|
388
424
|
};
|
|
425
|
+
|
|
389
426
|
/**
|
|
390
427
|
* Handle Page Duplication for JoyDoc
|
|
391
428
|
*
|
|
@@ -395,13 +432,8 @@ var getDocumentFromTemplate = function getDocumentFromTemplate(template) {
|
|
|
395
432
|
* @param {Object} pageDefaults
|
|
396
433
|
* @returns {Object}
|
|
397
434
|
*/
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
exports.getDocumentFromTemplate = getDocumentFromTemplate;
|
|
401
|
-
|
|
402
|
-
var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId) {
|
|
435
|
+
var duplicateDocumentPage = exports.duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId) {
|
|
403
436
|
var _nextDoc$fields;
|
|
404
|
-
|
|
405
437
|
var pageDefaults = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
406
438
|
var changelogInfo = {
|
|
407
439
|
primaryPages: {
|
|
@@ -420,25 +452,26 @@ var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId)
|
|
|
420
452
|
(_nextDoc$fields = nextDoc.fields) === null || _nextDoc$fields === void 0 ? void 0 : _nextDoc$fields.forEach(function (field) {
|
|
421
453
|
if (field.file === fileId) fieldLookup[field._id] = field;
|
|
422
454
|
});
|
|
455
|
+
|
|
423
456
|
/**
|
|
424
457
|
* Step 1: Duplicate fields associated with target page
|
|
425
458
|
*/
|
|
459
|
+
var fieldIdsToDuplicate = [];
|
|
426
460
|
|
|
427
|
-
|
|
428
|
-
|
|
461
|
+
//Step 1.1 Get all field Ids from primary page
|
|
429
462
|
var targetPageIndex = nextDoc.files[fileIndex].pages.findIndex(function (page) {
|
|
430
463
|
return page._id === pageId;
|
|
431
464
|
});
|
|
432
465
|
if (targetPageIndex !== -1) nextDoc.files[fileIndex].pages[targetPageIndex].fieldPositions.forEach(function (fieldPosition) {
|
|
433
466
|
return fieldIdsToDuplicate.push(fieldPosition.field);
|
|
434
|
-
});
|
|
467
|
+
});
|
|
435
468
|
|
|
469
|
+
//Step 1.2 Get all field Ids from view page
|
|
436
470
|
if (nextDoc.files[fileIndex].views && nextDoc.files[fileIndex].views.length > 0) {
|
|
437
471
|
nextDoc.files[fileIndex].views.forEach(function (view) {
|
|
438
472
|
var viewPageIndex = view.pages.findIndex(function (page) {
|
|
439
473
|
return page._id === pageId;
|
|
440
474
|
});
|
|
441
|
-
|
|
442
475
|
if (viewPageIndex !== -1) {
|
|
443
476
|
view.pages[viewPageIndex].fieldPositions.forEach(function (fieldPosition) {
|
|
444
477
|
if (fieldIdsToDuplicate.indexOf(fieldPosition.field) === -1) fieldIdsToDuplicate.push(fieldPosition.field);
|
|
@@ -446,7 +479,6 @@ var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId)
|
|
|
446
479
|
}
|
|
447
480
|
});
|
|
448
481
|
}
|
|
449
|
-
|
|
450
482
|
var newFieldsLookupByOldId = {};
|
|
451
483
|
var duplicatedFields = [];
|
|
452
484
|
fieldIdsToDuplicate.forEach(function (fieldId) {
|
|
@@ -460,18 +492,17 @@ var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId)
|
|
|
460
492
|
*/
|
|
461
493
|
if (newFieldsLookupByOldId[fieldId]) return;
|
|
462
494
|
var field = fieldLookup[fieldId];
|
|
463
|
-
|
|
464
495
|
var duplicateField = _objectSpread(_objectSpread({}, field), {}, {
|
|
465
496
|
_id: (0, _generateObjectId["default"])()
|
|
466
497
|
});
|
|
467
|
-
|
|
468
498
|
duplicatedFields.push(duplicateField);
|
|
499
|
+
|
|
469
500
|
/**
|
|
470
501
|
* Add to lookup so it can be used with other associated field positions
|
|
471
502
|
*/
|
|
472
|
-
|
|
473
503
|
newFieldsLookupByOldId[field._id] = duplicateField;
|
|
474
504
|
});
|
|
505
|
+
|
|
475
506
|
/**
|
|
476
507
|
* Step 2: Update newly duplicated fields logic properties
|
|
477
508
|
*
|
|
@@ -481,14 +512,11 @@ var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId)
|
|
|
481
512
|
* that we are duplicating. We do this by checking the logic.condition[x].page
|
|
482
513
|
* property of the condition.
|
|
483
514
|
*/
|
|
484
|
-
|
|
485
515
|
duplicatedFields = duplicatedFields.map(function (duplicatedField) {
|
|
486
516
|
if (!duplicatedField.logic || !duplicatedField.logic.conditions || duplicatedField.logic.conditions.length < 1) return duplicatedField;
|
|
487
|
-
|
|
488
517
|
var nextField = _objectSpread(_objectSpread({}, duplicatedField), {}, {
|
|
489
518
|
logic: _objectSpread({}, duplicatedField.logic)
|
|
490
519
|
});
|
|
491
|
-
|
|
492
520
|
nextField.logic.conditions = nextField.logic.conditions.map(function (condition) {
|
|
493
521
|
/**
|
|
494
522
|
* 1. Only update conditions associated with the current page being duplicated.
|
|
@@ -505,20 +533,20 @@ var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId)
|
|
|
505
533
|
});
|
|
506
534
|
return nextField;
|
|
507
535
|
});
|
|
536
|
+
|
|
508
537
|
/**
|
|
509
538
|
* Step 3: Add newly duplicated fields changelogs and update doucment
|
|
510
539
|
*/
|
|
511
|
-
|
|
512
540
|
duplicatedFields.forEach(function (duplicateField) {
|
|
513
541
|
changelogInfo.fields.push(duplicateField);
|
|
514
542
|
nextDoc.fields.push(duplicateField);
|
|
515
543
|
});
|
|
544
|
+
|
|
516
545
|
/**
|
|
517
546
|
* Step 4: Update Primary View Page Order
|
|
518
547
|
*
|
|
519
548
|
* IMPORTANT NOTE: Page order update must go before page object creation.
|
|
520
549
|
*/
|
|
521
|
-
|
|
522
550
|
var pageOrder = getPageOrder(nextDoc.files[fileIndex].pageOrder, nextDoc.files[fileIndex].pages);
|
|
523
551
|
var primaryPageOrderIndex = pageOrder.findIndex(function (id) {
|
|
524
552
|
return id === pageId;
|
|
@@ -526,10 +554,10 @@ var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId)
|
|
|
526
554
|
var primaryPageOrderTargetIndex = primaryPageOrderIndex + 1;
|
|
527
555
|
nextDoc.files[fileIndex].pageOrder = pageOrder;
|
|
528
556
|
nextDoc.files[fileIndex].pageOrder.splice(primaryPageOrderTargetIndex, 0, newPageId);
|
|
557
|
+
|
|
529
558
|
/**
|
|
530
559
|
* Step 5: Generate Primary View Page
|
|
531
560
|
*/
|
|
532
|
-
|
|
533
561
|
var primaryPageIndex = nextDoc.files[fileIndex].pages.findIndex(function (page) {
|
|
534
562
|
return page._id === pageId;
|
|
535
563
|
});
|
|
@@ -544,30 +572,29 @@ var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId)
|
|
|
544
572
|
}));
|
|
545
573
|
});
|
|
546
574
|
nextDoc.files[fileIndex].pages.splice(primaryPageIndex + 1, 0, newPrimaryPage);
|
|
575
|
+
|
|
547
576
|
/**
|
|
548
577
|
* Step 6: Update Primary Page Changelog
|
|
549
578
|
*/
|
|
550
|
-
|
|
551
579
|
changelogInfo.primaryPages.targetIndex = primaryPageOrderTargetIndex;
|
|
552
580
|
changelogInfo.primaryPages.page = newPrimaryPage;
|
|
581
|
+
|
|
553
582
|
/**
|
|
554
583
|
* Step 7: Update Views
|
|
555
584
|
*/
|
|
556
|
-
|
|
557
585
|
if (nextDoc.files[fileIndex].views && nextDoc.files[fileIndex].views.length > 0) {
|
|
558
586
|
nextDoc.files[fileIndex].views = nextDoc.files[fileIndex].views.map(function (view) {
|
|
559
587
|
var nextView = _objectSpread({}, view);
|
|
560
|
-
|
|
561
588
|
var viewPageIndex = nextView.pages.findIndex(function (page) {
|
|
562
589
|
return page._id === pageId;
|
|
563
590
|
});
|
|
564
591
|
if (viewPageIndex === -1) return view;
|
|
592
|
+
|
|
565
593
|
/**
|
|
566
594
|
* Step 7.1 Update View Page Order.
|
|
567
595
|
*
|
|
568
596
|
* IMPORTANT NOTE: Page order update must go before page object creation.
|
|
569
597
|
*/
|
|
570
|
-
|
|
571
598
|
var nextViewPageOrder = getPageOrder(nextView.pageOrder, nextView.pages);
|
|
572
599
|
var nextViewPageOrderIndex = nextViewPageOrder.findIndex(function (id) {
|
|
573
600
|
return id === pageId;
|
|
@@ -575,15 +602,14 @@ var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId)
|
|
|
575
602
|
var nextViewTargetPageOrderIndex = nextViewPageOrderIndex + 1;
|
|
576
603
|
nextView.pageOrder = nextViewPageOrder;
|
|
577
604
|
nextView.pageOrder.splice(nextViewTargetPageOrderIndex, 0, newPageId);
|
|
605
|
+
|
|
578
606
|
/**
|
|
579
607
|
* Step 7.2 Update View Pages
|
|
580
608
|
*/
|
|
581
|
-
|
|
582
609
|
var newViewPage = _objectSpread(_objectSpread({}, nextView.pages[viewPageIndex]), {}, {
|
|
583
610
|
_id: newPageId,
|
|
584
611
|
fieldPositions: []
|
|
585
612
|
}, pageDefaults);
|
|
586
|
-
|
|
587
613
|
nextView.pages[viewPageIndex].fieldPositions.forEach(function (fieldPosition) {
|
|
588
614
|
var newField = newFieldsLookupByOldId[fieldPosition.field];
|
|
589
615
|
newViewPage.fieldPositions.push(_objectSpread(_objectSpread({}, fieldPosition), {}, {
|
|
@@ -591,10 +617,10 @@ var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId)
|
|
|
591
617
|
}));
|
|
592
618
|
});
|
|
593
619
|
nextView.pages.splice(viewPageIndex + 1, 0, newViewPage);
|
|
620
|
+
|
|
594
621
|
/**
|
|
595
622
|
* Step 7.3 Add View Page Changelog Info
|
|
596
623
|
*/
|
|
597
|
-
|
|
598
624
|
changelogInfo.viewPages.push({
|
|
599
625
|
viewId: view._id,
|
|
600
626
|
view: view.type,
|
|
@@ -604,15 +630,339 @@ var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId)
|
|
|
604
630
|
return nextView;
|
|
605
631
|
});
|
|
606
632
|
}
|
|
607
|
-
|
|
608
633
|
return {
|
|
609
634
|
changelogInfo: changelogInfo,
|
|
610
635
|
doc: nextDoc
|
|
611
636
|
};
|
|
612
637
|
};
|
|
613
638
|
|
|
614
|
-
|
|
615
|
-
|
|
639
|
+
/**
|
|
640
|
+
* Generate the mobile view and add specific mobile view properties
|
|
641
|
+
*
|
|
642
|
+
* @param {Object} file //Full file object
|
|
643
|
+
* @returns {Object}
|
|
644
|
+
*/
|
|
645
|
+
var getMobileViewFromFile = exports.getMobileViewFromFile = function getMobileViewFromFile(file) {
|
|
646
|
+
var _file$views2;
|
|
647
|
+
var mobileViewIndex = file !== null && file !== void 0 && file.views && (file === null || file === void 0 ? void 0 : (_file$views2 = file.views) === null || _file$views2 === void 0 ? void 0 : _file$views2.length) > 0 ? file.views.findIndex(function (view) {
|
|
648
|
+
return view.type === _FileViews["default"].mobile;
|
|
649
|
+
}) : -1;
|
|
650
|
+
if (mobileViewIndex !== -1) {
|
|
651
|
+
/**
|
|
652
|
+
* Why do we do this? Early versions of alternative views did not contain pageOrder so
|
|
653
|
+
* we ensure it's populated here.
|
|
654
|
+
*/
|
|
655
|
+
var mobileView = file.views[mobileViewIndex];
|
|
656
|
+
var mobileViewPageOrder = cleanPageOrder(getPageOrder(mobileView.pageOrder, mobileView.pages), mobileView.pages);
|
|
657
|
+
return _objectSpread(_objectSpread({}, mobileView), {}, {
|
|
658
|
+
pageOrder: mobileViewPageOrder
|
|
659
|
+
});
|
|
660
|
+
} else {
|
|
661
|
+
return generateMobileViewFromFile(file);
|
|
662
|
+
}
|
|
663
|
+
};
|
|
664
|
+
|
|
665
|
+
/**
|
|
666
|
+
* Generates the alternative mobile view from the default file view.
|
|
667
|
+
*
|
|
668
|
+
* @param {Object} file //Full file object
|
|
669
|
+
* @returns {Object}
|
|
670
|
+
*/
|
|
671
|
+
var generateMobileViewFromFile = exports.generateMobileViewFromFile = function generateMobileViewFromFile(file) {
|
|
672
|
+
var pages = file.pages || [];
|
|
673
|
+
var pageOrder = cleanPageOrder(getPageOrder(file.pageOrder, file.pages), file.pages);
|
|
674
|
+
return {
|
|
675
|
+
_id: (0, _generateObjectId["default"])(),
|
|
676
|
+
type: _FileViews["default"].mobile,
|
|
677
|
+
pages: (0, _toConsumableArray2["default"])(pages).map(function (page) {
|
|
678
|
+
var _id = page._id,
|
|
679
|
+
name = page.name,
|
|
680
|
+
identifier = page.identifier,
|
|
681
|
+
fieldPositions = page.fieldPositions,
|
|
682
|
+
rowHeight = page.rowHeight;
|
|
683
|
+
return generateMobilePage({
|
|
684
|
+
_id: _id,
|
|
685
|
+
identifier: identifier,
|
|
686
|
+
name: name,
|
|
687
|
+
fieldPositions: fieldPositions,
|
|
688
|
+
rowHeight: rowHeight
|
|
689
|
+
});
|
|
690
|
+
}),
|
|
691
|
+
pageOrder: (0, _toConsumableArray2["default"])(pageOrder)
|
|
692
|
+
};
|
|
693
|
+
};
|
|
694
|
+
|
|
695
|
+
/**
|
|
696
|
+
* Apply the pr
|
|
697
|
+
*
|
|
698
|
+
* @param {Object} page
|
|
699
|
+
* @returns {Objectg}
|
|
700
|
+
*/
|
|
701
|
+
var generateMobilePage = exports.generateMobilePage = function generateMobilePage(page) {
|
|
702
|
+
return _objectSpread(_objectSpread({}, page), {}, {
|
|
703
|
+
fieldPositions: page.fieldPositions ? generateMobilePageFieldPositions(page.fieldPositions, page.rowHeight) : [],
|
|
704
|
+
type: _PageTypes["default"].mobile,
|
|
705
|
+
rowHeight: 1,
|
|
706
|
+
cols: 1,
|
|
707
|
+
padding: 12,
|
|
708
|
+
width: 816,
|
|
709
|
+
height: 1056,
|
|
710
|
+
layout: _PageLayoutModes["default"].grid,
|
|
711
|
+
presentation: _FieldPresentationModes["default"].normal
|
|
712
|
+
});
|
|
713
|
+
};
|
|
714
|
+
var generateMobilePageFieldPositions = exports.generateMobilePageFieldPositions = function generateMobilePageFieldPositions(fieldPositions, originalRowHeight) {
|
|
715
|
+
var mobileFieldPositions = [];
|
|
716
|
+
|
|
717
|
+
/**
|
|
718
|
+
* Step 1: Sort fieldPositions
|
|
719
|
+
*/
|
|
720
|
+
var sortedFieldPositions = sortFieldPositionsByXAndYCoordinates(fieldPositions);
|
|
721
|
+
sortedFieldPositions.forEach(function (joySpecFieldPosition) {
|
|
722
|
+
var mobileFieldPositionData = _objectSpread(_objectSpread({}, joySpecFieldPosition), {}, {
|
|
723
|
+
titleDisplay: _FormStyleOptions["default"].displayInline,
|
|
724
|
+
displayType: _FieldDisplayTypes["default"].original,
|
|
725
|
+
height: joySpecFieldPosition.height * (originalRowHeight || 1),
|
|
726
|
+
width: 1,
|
|
727
|
+
x: 0
|
|
728
|
+
});
|
|
729
|
+
|
|
730
|
+
/**
|
|
731
|
+
* Step 1.2 Hide chart lines on mobile
|
|
732
|
+
*/
|
|
733
|
+
if (joySpecFieldPosition.type === _FieldTypes["default"].chart) mobileFieldPositionData.primaryDisplayOnly = true;
|
|
734
|
+
mobileFieldPositions.push(mobileFieldPositionData);
|
|
735
|
+
});
|
|
736
|
+
return mergeAssoicatedFieldPositionsForMobilePage(mobileFieldPositions);
|
|
737
|
+
};
|
|
738
|
+
|
|
739
|
+
/**
|
|
740
|
+
* Merge Field Positions assoicated with the same Field.
|
|
741
|
+
*
|
|
742
|
+
* Why do duplicate fields get created from fieldPositions
|
|
743
|
+
*
|
|
744
|
+
* The same field can get added twice because we may have multiple fieldPositions belonging
|
|
745
|
+
* to the same field. This can happen with dropdown, multiSelect, and table fields.
|
|
746
|
+
*
|
|
747
|
+
* Since the fields get generated by looping over the fieldPositions and not regular fields
|
|
748
|
+
* we may encounter the the same field multiple times because it has multiple fieldPositions.
|
|
749
|
+
*
|
|
750
|
+
* @param {Array} fields
|
|
751
|
+
* @returns {Array}
|
|
752
|
+
*/
|
|
753
|
+
var mergeAssoicatedFieldPositionsForMobilePage = exports.mergeAssoicatedFieldPositionsForMobilePage = function mergeAssoicatedFieldPositionsForMobilePage(fieldPositions) {
|
|
754
|
+
var filteredFieldPositions = [];
|
|
755
|
+
fieldPositions === null || fieldPositions === void 0 ? void 0 : fieldPositions.forEach(function (fieldPosition) {
|
|
756
|
+
var fieldPositionIndex = filteredFieldPositions.findIndex(function (filtered) {
|
|
757
|
+
var _filtered$field, _fieldPosition$field;
|
|
758
|
+
return (filtered === null || filtered === void 0 ? void 0 : (_filtered$field = filtered.field) === null || _filtered$field === void 0 ? void 0 : _filtered$field.toString()) === (fieldPosition === null || fieldPosition === void 0 ? void 0 : (_fieldPosition$field = fieldPosition.field) === null || _fieldPosition$field === void 0 ? void 0 : _fieldPosition$field.toString());
|
|
759
|
+
});
|
|
760
|
+
|
|
761
|
+
//Only add field to the list if it hasn't already been added
|
|
762
|
+
if (fieldPositionIndex === -1) filteredFieldPositions.push(fieldPosition);
|
|
763
|
+
});
|
|
764
|
+
return filteredFieldPositions;
|
|
765
|
+
};
|
|
766
|
+
|
|
767
|
+
/**
|
|
768
|
+
* Sort fields by their y and x coordinates
|
|
769
|
+
*
|
|
770
|
+
* For example:
|
|
771
|
+
* [
|
|
772
|
+
* { "y": 3, "x": 4 },
|
|
773
|
+
* { "y": 3, "x": 1 },
|
|
774
|
+
* { "y": 2, "x": 0 },
|
|
775
|
+
* { "y": 1, "x": 5.22 },
|
|
776
|
+
* { "y": 1, "x": 10 },
|
|
777
|
+
* { "y": 1, "x": 0 },
|
|
778
|
+
* ]
|
|
779
|
+
* will become the following after sort
|
|
780
|
+
* [
|
|
781
|
+
* { "y": 1, "x": 0 },
|
|
782
|
+
* { "y": 1, "x": 5.22 },
|
|
783
|
+
* { "y": 1, "x": 10 },
|
|
784
|
+
* { "y": 2, "x": 0 },
|
|
785
|
+
* { "y": 3, "x": 1 },
|
|
786
|
+
* { "y": 3, "x": 4 }
|
|
787
|
+
* ];
|
|
788
|
+
*
|
|
789
|
+
* @param {Array} fieldPositions
|
|
790
|
+
* @returns {Array}
|
|
791
|
+
*/
|
|
792
|
+
var sortFieldPositionsByXAndYCoordinates = exports.sortFieldPositionsByXAndYCoordinates = function sortFieldPositionsByXAndYCoordinates(fieldPositions) {
|
|
793
|
+
var sortedFieldPositions = (0, _toConsumableArray2["default"])(fieldPositions);
|
|
794
|
+
sortedFieldPositions.sort(function (a, b) {
|
|
795
|
+
if (a.y === b.y) {
|
|
796
|
+
return a.x - b.x;
|
|
797
|
+
} else if (a.y > b.y) {
|
|
798
|
+
return 1;
|
|
799
|
+
} else if (a.y < b.y) {
|
|
800
|
+
return -1;
|
|
801
|
+
} else {
|
|
802
|
+
return 0;
|
|
803
|
+
}
|
|
804
|
+
});
|
|
805
|
+
return sortedFieldPositions;
|
|
806
|
+
};
|
|
807
|
+
|
|
808
|
+
/**
|
|
809
|
+
* Formats individual table cell field positions that have already been merged with their associated field.
|
|
810
|
+
* This additional information is added and used for rendering the fieldPositions on the form.
|
|
811
|
+
*
|
|
812
|
+
* For instance, adds properties like columnType, calculatedCellValue, options, etc.
|
|
813
|
+
*
|
|
814
|
+
* @param {Array} fieldPositions
|
|
815
|
+
* @returns {Array}
|
|
816
|
+
*/
|
|
817
|
+
var formatTableFieldPositions = exports.formatTableFieldPositions = function formatTableFieldPositions(fieldPositions) {
|
|
818
|
+
/**
|
|
819
|
+
* We only want to generate the table value calculated lookup for each table field once.
|
|
820
|
+
* We use these lookups because multiple table fieldPositions belonging to the same table
|
|
821
|
+
* field will all use the same table value calculated lookup.
|
|
822
|
+
*/
|
|
823
|
+
var tableFieldLookup = {};
|
|
824
|
+
var nextFieldPositions = [];
|
|
825
|
+
(0, _toConsumableArray2["default"])(fieldPositions).forEach(function (fieldPosition) {
|
|
826
|
+
var nextFieldPosition = _objectSpread({}, fieldPosition);
|
|
827
|
+
if (fieldPosition.type === _FieldTypes["default"].table) {
|
|
828
|
+
var field = fieldPosition.field,
|
|
829
|
+
column = fieldPosition.column,
|
|
830
|
+
rowIndex = fieldPosition.rowIndex,
|
|
831
|
+
tableColumns = fieldPosition.tableColumns,
|
|
832
|
+
value = fieldPosition.value,
|
|
833
|
+
rowOrder = fieldPosition.rowOrder,
|
|
834
|
+
tableColumnOrder = fieldPosition.tableColumnOrder;
|
|
835
|
+
|
|
836
|
+
/**
|
|
837
|
+
* Step 1: Generate rows, rowOrder, tableColumns, etc. lookups for associated field. We only have to
|
|
838
|
+
* do this once per-field. This increases performance if there are multiple form positions associated
|
|
839
|
+
* with the same form.
|
|
840
|
+
*/
|
|
841
|
+
if (!tableFieldLookup[field]) {
|
|
842
|
+
/**
|
|
843
|
+
* Step 1.1 Handle rows
|
|
844
|
+
*/
|
|
845
|
+
var nextRows = (0, _tableHelper.getRows)(value);
|
|
846
|
+
var nextRowOrder = (0, _tableHelper.getCleanedRowOrder)(rowOrder, nextRows);
|
|
847
|
+
var nextSortedRows = (0, _tableHelper.sortRows)(nextRows, nextRowOrder);
|
|
848
|
+
|
|
849
|
+
/**
|
|
850
|
+
* Step 1.2 Handle columns
|
|
851
|
+
*/
|
|
852
|
+
var nextTableColumnOrder = (0, _tableHelper.getCleanedColumnOrder)(tableColumnOrder, tableColumns);
|
|
853
|
+
var nextSortedTableColumns = (0, _tableHelper.sortColumns)(tableColumns, nextTableColumnOrder);
|
|
854
|
+
var nextTableColumns = (0, _tableHelper.getColumns)(nextSortedTableColumns);
|
|
855
|
+
var nextTableColumnLookup = {};
|
|
856
|
+
nextTableColumns.forEach(function (column) {
|
|
857
|
+
return nextTableColumnLookup[column._id] = column;
|
|
858
|
+
});
|
|
859
|
+
|
|
860
|
+
/**
|
|
861
|
+
* Step 1.3 Handle cell calculations
|
|
862
|
+
*/
|
|
863
|
+
var calculatedValue = (0, _tableHelper.generateTableLookup)(nextSortedRows, nextSortedTableColumns);
|
|
864
|
+
tableFieldLookup[field] = {
|
|
865
|
+
value: nextSortedRows,
|
|
866
|
+
rowOrder: nextRowOrder,
|
|
867
|
+
tableColumns: nextTableColumns,
|
|
868
|
+
tableColumnOrder: nextTableColumnOrder,
|
|
869
|
+
tableColumnLookup: nextTableColumnLookup,
|
|
870
|
+
calculatedValue: calculatedValue
|
|
871
|
+
};
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
/**
|
|
875
|
+
* Ensure each table field has a properly formatted properties
|
|
876
|
+
*/
|
|
877
|
+
nextFieldPosition.value = tableFieldLookup[field].value;
|
|
878
|
+
nextFieldPosition.rowOrder = tableFieldLookup[field].rowOrder;
|
|
879
|
+
nextFieldPosition.tableColumns = tableFieldLookup[field].tableColumns;
|
|
880
|
+
nextFieldPosition.tableColumnOrder = tableFieldLookup[field].tableColumnOrder;
|
|
881
|
+
|
|
882
|
+
/**
|
|
883
|
+
* Add calculated value lookup. For instance, { A1: '', B1: '', C1: '', ... }
|
|
884
|
+
*/
|
|
885
|
+
nextFieldPosition.calculatedValue = tableFieldLookup[field].calculatedValue;
|
|
886
|
+
|
|
887
|
+
/**
|
|
888
|
+
* Individual Table Cell vs Entire Table
|
|
889
|
+
*
|
|
890
|
+
* Only add cellValue, calculatedCellValue, columnType, and column options to
|
|
891
|
+
* individually mapped table cell fieldPositions. Regular table fields (entire table)
|
|
892
|
+
* just simply use the fieldPositions.value parameter so we don't need the calculated
|
|
893
|
+
* values, etc.
|
|
894
|
+
*
|
|
895
|
+
* We determine an individual table cell fieldPosition vs an entire table
|
|
896
|
+
* fieldPosition by checking for column and rowIndex. Individual cells have
|
|
897
|
+
* column and rowIndex but regular tables do not.
|
|
898
|
+
*
|
|
899
|
+
* Note:
|
|
900
|
+
* rowIndex + 1 is used while calculating cell value since column operands
|
|
901
|
+
* start from 1 instead of zero in the table lookups
|
|
902
|
+
* (ie: [A1:{}, B1:{}] instead of [A0:{}, B0:{}])
|
|
903
|
+
*
|
|
904
|
+
* If tableRowIndex associated with a cell doesn't have a table row associated
|
|
905
|
+
* with it (ie rows[rowIndex] is undefined) it means that particular row is deleted
|
|
906
|
+
*/
|
|
907
|
+
if (tableFieldLookup[field] && column && typeof rowIndex === 'number') {
|
|
908
|
+
var _tableFieldLookup$fie;
|
|
909
|
+
/**
|
|
910
|
+
* What is the difference between rowIndex and targetRowIndex?
|
|
911
|
+
*
|
|
912
|
+
* - The rowIndex on the fieldPosition is the saved index of where the rowId lives inside of the rowOrder.
|
|
913
|
+
* - The targetRowIndex is the actual index of the row object inside the value (array of row data) of the field.
|
|
914
|
+
*
|
|
915
|
+
* We use the fieldPosition.rowIndex to get the rowId from the rowOrder. Then we use the rowId to locate
|
|
916
|
+
* the assoicated row object data in the value property. The rowOrder and value (rows) do not follow the same
|
|
917
|
+
* order. The rowOrder is updated when users insert rows, move rows up or down, etc. it manages where rows
|
|
918
|
+
* are at in the list and how they should be rendered. This is why the rowIndex uses the rowOrder.
|
|
919
|
+
*/
|
|
920
|
+
var targetColumn = tableFieldLookup[field].tableColumnLookup[column];
|
|
921
|
+
var targetRowId = tableFieldLookup[field].rowOrder[rowIndex];
|
|
922
|
+
var targetRowIndex = tableFieldLookup[field].value.findIndex(function (row) {
|
|
923
|
+
return (row === null || row === void 0 ? void 0 : row._id) === targetRowId;
|
|
924
|
+
});
|
|
925
|
+
|
|
926
|
+
/**
|
|
927
|
+
* Add proper rowId to the field position so that it can be used
|
|
928
|
+
* inside the element for change handlers;
|
|
929
|
+
*/
|
|
930
|
+
nextFieldPosition.rowId = targetRowId;
|
|
931
|
+
|
|
932
|
+
/**
|
|
933
|
+
* If rows[rowIndex] is undefined, it means the row that was present
|
|
934
|
+
* at the particular rowIndex was deleted
|
|
935
|
+
*/
|
|
936
|
+
nextFieldPosition.cellValue = ((_tableFieldLookup$fie = tableFieldLookup[field].value[targetRowIndex]) === null || _tableFieldLookup$fie === void 0 ? void 0 : _tableFieldLookup$fie.cells[column]) || '';
|
|
937
|
+
|
|
938
|
+
/**
|
|
939
|
+
* Skip any individual field position that is associated with a deleted column.
|
|
940
|
+
* targetColumn will appear as undefined if a column is deleted
|
|
941
|
+
*/
|
|
942
|
+
if (targetColumn) {
|
|
943
|
+
nextFieldPosition.calculatedCellValue = tableFieldLookup[field].calculatedValue["".concat(targetColumn.operand).concat(targetRowIndex + 1)];
|
|
944
|
+
nextFieldPosition.columnType = targetColumn.type;
|
|
945
|
+
nextFieldPosition.options = targetColumn.options;
|
|
946
|
+
nextFieldPosition.columnIdentifier = targetColumn.identifier;
|
|
947
|
+
|
|
948
|
+
/**
|
|
949
|
+
* IMPORTANT NOTE: We only add individual table cell field position into
|
|
950
|
+
* the fieldPosition list if the associated column is not deleted.
|
|
951
|
+
*/
|
|
952
|
+
nextFieldPositions.push(nextFieldPosition);
|
|
953
|
+
}
|
|
954
|
+
} else {
|
|
955
|
+
//Push table fields with original display type
|
|
956
|
+
nextFieldPositions.push(nextFieldPosition);
|
|
957
|
+
}
|
|
958
|
+
} else {
|
|
959
|
+
//Push other fields
|
|
960
|
+
nextFieldPositions.push(nextFieldPosition);
|
|
961
|
+
}
|
|
962
|
+
});
|
|
963
|
+
return nextFieldPositions;
|
|
964
|
+
};
|
|
965
|
+
var _default = exports["default"] = {
|
|
616
966
|
getDefaultJoyDocPage: getDefaultJoyDocPage,
|
|
617
967
|
getDefaultJoyDocFile: getDefaultJoyDocFile,
|
|
618
968
|
getDefaultJoyDoc: getDefaultJoyDoc,
|
|
@@ -624,6 +974,11 @@ var _default = {
|
|
|
624
974
|
duplicate: duplicate,
|
|
625
975
|
duplicateDocumentPage: duplicateDocumentPage,
|
|
626
976
|
getPageOrder: getPageOrder,
|
|
627
|
-
sortPages: sortPages
|
|
628
|
-
|
|
629
|
-
|
|
977
|
+
sortPages: sortPages,
|
|
978
|
+
sortFieldPositionsByXAndYCoordinates: sortFieldPositionsByXAndYCoordinates,
|
|
979
|
+
mergeAssoicatedFieldPositionsForMobilePage: mergeAssoicatedFieldPositionsForMobilePage,
|
|
980
|
+
generateMobileViewFromFile: generateMobileViewFromFile,
|
|
981
|
+
generateMobilePage: generateMobilePage,
|
|
982
|
+
generateMobilePageFieldPositions: generateMobilePageFieldPositions,
|
|
983
|
+
formatTableFieldPositions: formatTableFieldPositions
|
|
984
|
+
};
|