@builttocreate/engine-utils 2.8.0 → 2.9.0

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