@builttocreate/engine-utils 2.0.1 → 2.2.0-rc.1.0.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.
- package/dist/constants/DocumentTypes.js +13 -0
- package/dist/constants/FileViews.js +12 -0
- package/dist/joyDocHelper.js +325 -2
- package/dist/tableHelper.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var types = {
|
|
8
|
+
document: 'document',
|
|
9
|
+
template: 'template',
|
|
10
|
+
version: 'version'
|
|
11
|
+
};
|
|
12
|
+
var _default = types;
|
|
13
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = exports.FileViews = void 0;
|
|
7
|
+
var FileViews = {
|
|
8
|
+
mobile: 'mobile'
|
|
9
|
+
};
|
|
10
|
+
exports.FileViews = FileViews;
|
|
11
|
+
var _default = FileViews;
|
|
12
|
+
exports["default"] = _default;
|
package/dist/joyDocHelper.js
CHANGED
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.getDefaultJoyDocPage = exports.getDefaultJoyDocFile = exports.getDefaultJoyDoc = exports.getCleanedJoyDocPages = exports.getCleanedJoyDoc = exports["default"] = void 0;
|
|
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
9
|
|
|
10
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
11
|
|
|
@@ -17,6 +17,8 @@ var _PageLayoutModes = _interopRequireDefault(require("./constants/PageLayoutMod
|
|
|
17
17
|
|
|
18
18
|
var _FieldPresentationModes = _interopRequireDefault(require("./constants/FieldPresentationModes"));
|
|
19
19
|
|
|
20
|
+
var _DocumentTypes = _interopRequireDefault(require("./constants/DocumentTypes"));
|
|
21
|
+
|
|
20
22
|
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; }
|
|
21
23
|
|
|
22
24
|
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; }
|
|
@@ -199,13 +201,334 @@ var getCleanedJoyDocPages = function getCleanedJoyDocPages(pages) {
|
|
|
199
201
|
return [getDefaultJoyDocPage()];
|
|
200
202
|
}
|
|
201
203
|
};
|
|
204
|
+
/**
|
|
205
|
+
* Get page order
|
|
206
|
+
*
|
|
207
|
+
* @param {Array} pages
|
|
208
|
+
* @param {Array} pageOrder
|
|
209
|
+
* @return {Array}
|
|
210
|
+
*/
|
|
211
|
+
|
|
202
212
|
|
|
203
213
|
exports.getCleanedJoyDocPages = getCleanedJoyDocPages;
|
|
214
|
+
|
|
215
|
+
var getPageOrder = function getPageOrder(pageOrder, pages) {
|
|
216
|
+
return pageOrder || pages.map(function (page) {
|
|
217
|
+
return page._id;
|
|
218
|
+
});
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
*
|
|
222
|
+
* Clean pageOrder
|
|
223
|
+
*
|
|
224
|
+
* 1. Remove any pageIds associated with a missing page.
|
|
225
|
+
* 2. Remove any underfined or invalid pageIds
|
|
226
|
+
* 3. Remove any duplicate pageIds
|
|
227
|
+
*
|
|
228
|
+
* @param {Array} pageOrder //[string, string, ...]
|
|
229
|
+
* @param {Array} pages //[object, object, ...]
|
|
230
|
+
* @returns {Array}
|
|
231
|
+
*/
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
exports.getPageOrder = getPageOrder;
|
|
235
|
+
|
|
236
|
+
var cleanPageOrder = function cleanPageOrder(pageOrder, pages) {
|
|
237
|
+
var pageLookup = {};
|
|
238
|
+
pages.forEach(function (page) {
|
|
239
|
+
return pageLookup[page._id] = page && !page.deleted;
|
|
240
|
+
});
|
|
241
|
+
return pageOrder.filter(function (pageId, index) {
|
|
242
|
+
return pageLookup[pageId] && pageId && pageOrder.indexOf(pageId) === index;
|
|
243
|
+
});
|
|
244
|
+
};
|
|
245
|
+
/**
|
|
246
|
+
* Sort pages based on pageOrder
|
|
247
|
+
*/
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
exports.cleanPageOrder = cleanPageOrder;
|
|
251
|
+
|
|
252
|
+
var sortPages = function sortPages(pages, pageOrder) {
|
|
253
|
+
if (!pageOrder) return pages;
|
|
254
|
+
var pageLookup = {};
|
|
255
|
+
pages.forEach(function (page) {
|
|
256
|
+
pageLookup[page._id] = page;
|
|
257
|
+
});
|
|
258
|
+
var sortedPages = [];
|
|
259
|
+
pageOrder.forEach(function (pageId) {
|
|
260
|
+
if (pageLookup[pageId]) sortedPages.push(pageLookup[pageId]);
|
|
261
|
+
});
|
|
262
|
+
return sortedPages;
|
|
263
|
+
};
|
|
264
|
+
/**
|
|
265
|
+
* Get a properly formatted Document JoyDoc
|
|
266
|
+
*
|
|
267
|
+
* @returns {Object}
|
|
268
|
+
*/
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
exports.sortPages = sortPages;
|
|
272
|
+
|
|
273
|
+
var getDefaultDocument = function getDefaultDocument() {
|
|
274
|
+
var type = _DocumentTypes["default"].document;
|
|
275
|
+
|
|
276
|
+
var _id = (0, _generateObjectId["default"])();
|
|
277
|
+
|
|
278
|
+
var identifier = "doc_".concat(_id);
|
|
279
|
+
var name = 'New Doc';
|
|
280
|
+
return getDefaultJoyDoc({
|
|
281
|
+
type: type,
|
|
282
|
+
_id: _id,
|
|
283
|
+
identifier: identifier,
|
|
284
|
+
name: name
|
|
285
|
+
});
|
|
286
|
+
};
|
|
287
|
+
/**
|
|
288
|
+
* Get a properly formatted Template JoyDoc
|
|
289
|
+
*
|
|
290
|
+
* @returns {Object}
|
|
291
|
+
*/
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
exports.getDefaultDocument = getDefaultDocument;
|
|
295
|
+
|
|
296
|
+
var getDefaultTemplate = function getDefaultTemplate() {
|
|
297
|
+
var type = _DocumentTypes["default"].template;
|
|
298
|
+
|
|
299
|
+
var _id = (0, _generateObjectId["default"])();
|
|
300
|
+
|
|
301
|
+
var identifier = "template_".concat(_id);
|
|
302
|
+
var name = 'New Template';
|
|
303
|
+
return getDefaultJoyDoc({
|
|
304
|
+
type: type,
|
|
305
|
+
_id: _id,
|
|
306
|
+
identifier: identifier,
|
|
307
|
+
name: name
|
|
308
|
+
});
|
|
309
|
+
};
|
|
310
|
+
/**
|
|
311
|
+
* Get a properly formatted duplicate of a Template or Document
|
|
312
|
+
*
|
|
313
|
+
* @returns {Object}
|
|
314
|
+
*/
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
exports.getDefaultTemplate = getDefaultTemplate;
|
|
318
|
+
|
|
319
|
+
var duplicate = function duplicate(original, defaults) {
|
|
320
|
+
//Remove all references to original template object
|
|
321
|
+
var origin = JSON.parse(JSON.stringify(original));
|
|
322
|
+
|
|
323
|
+
var _id = (0, _generateObjectId["default"])();
|
|
324
|
+
|
|
325
|
+
var identifier = origin.type === _DocumentTypes["default"].template ? "template_".concat(_id) : "doc_".concat(_id);
|
|
326
|
+
return _objectSpread(_objectSpread({}, origin), {}, {
|
|
327
|
+
_id: _id,
|
|
328
|
+
identifier: identifier,
|
|
329
|
+
createdOn: new Date().getTime(),
|
|
330
|
+
source: origin.identifier
|
|
331
|
+
}, defaults);
|
|
332
|
+
};
|
|
333
|
+
/**
|
|
334
|
+
* Get a properly formatted Document JoyDoc from Template JoyDoc
|
|
335
|
+
*
|
|
336
|
+
* @param {Object} template
|
|
337
|
+
* @returns {Object}
|
|
338
|
+
*/
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
exports.duplicate = duplicate;
|
|
342
|
+
|
|
343
|
+
var getDocumentFromTemplate = function getDocumentFromTemplate(template) {
|
|
344
|
+
var _id = (0, _generateObjectId["default"])();
|
|
345
|
+
|
|
346
|
+
var identifier = "doc_".concat(_id); //Remove all references to original template object
|
|
347
|
+
|
|
348
|
+
var temp = JSON.parse(JSON.stringify(template));
|
|
349
|
+
return {
|
|
350
|
+
_id: _id,
|
|
351
|
+
identifier: identifier,
|
|
352
|
+
type: _DocumentTypes["default"].document,
|
|
353
|
+
name: temp.name,
|
|
354
|
+
template: temp.identifier,
|
|
355
|
+
source: temp.identifier,
|
|
356
|
+
files: temp.files,
|
|
357
|
+
fields: temp.fields
|
|
358
|
+
};
|
|
359
|
+
};
|
|
360
|
+
/**
|
|
361
|
+
* Handle Page Duplication for JoyDoc
|
|
362
|
+
*
|
|
363
|
+
* @param {Object} doc //Full JoyDoc Payload for Template or Document
|
|
364
|
+
* @param {String} fileId //File ID that contains the page we are duplicating
|
|
365
|
+
* @param {String} pageId
|
|
366
|
+
* @param {Object} pageDefaults
|
|
367
|
+
* @returns {Object}
|
|
368
|
+
*/
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
exports.getDocumentFromTemplate = getDocumentFromTemplate;
|
|
372
|
+
|
|
373
|
+
var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId) {
|
|
374
|
+
var _nextDoc$fields;
|
|
375
|
+
|
|
376
|
+
var pageDefaults = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
377
|
+
var changelogInfo = {
|
|
378
|
+
primaryPages: {
|
|
379
|
+
targetIndex: 0,
|
|
380
|
+
page: null
|
|
381
|
+
},
|
|
382
|
+
viewPages: [],
|
|
383
|
+
fields: []
|
|
384
|
+
};
|
|
385
|
+
var nextDoc = JSON.parse(JSON.stringify(doc));
|
|
386
|
+
var fileIndex = nextDoc.files.findIndex(function (file) {
|
|
387
|
+
return file._id === fileId;
|
|
388
|
+
});
|
|
389
|
+
var newPageId = (0, _generateObjectId["default"])();
|
|
390
|
+
var fieldLookup = {};
|
|
391
|
+
(_nextDoc$fields = nextDoc.fields) === null || _nextDoc$fields === void 0 ? void 0 : _nextDoc$fields.forEach(function (field) {
|
|
392
|
+
if (field.file === fileId) fieldLookup[field._id] = field;
|
|
393
|
+
});
|
|
394
|
+
var newFieldsLookupByOldId = {};
|
|
395
|
+
|
|
396
|
+
var duplicateFieldForFieldPosition = function duplicateFieldForFieldPosition(field) {
|
|
397
|
+
/**
|
|
398
|
+
* Why do we check if a new field has already been created?
|
|
399
|
+
*
|
|
400
|
+
* That is because multiple field positions can be associated with the same
|
|
401
|
+
* field. If a field has already been created by a previous field position
|
|
402
|
+
* that is linked to the same field as the current target then just return
|
|
403
|
+
* the existing newly created field.
|
|
404
|
+
*/
|
|
405
|
+
if (newFieldsLookupByOldId[field._id]) return newFieldsLookupByOldId[field._id];
|
|
406
|
+
|
|
407
|
+
var duplicateField = _objectSpread(_objectSpread({}, field), {}, {
|
|
408
|
+
_id: (0, _generateObjectId["default"])()
|
|
409
|
+
});
|
|
410
|
+
|
|
411
|
+
nextDoc.fields.push(duplicateField);
|
|
412
|
+
changelogInfo.fields.push(duplicateField);
|
|
413
|
+
/**
|
|
414
|
+
* Add to lookup so it can be used with other associated field positions
|
|
415
|
+
*/
|
|
416
|
+
|
|
417
|
+
newFieldsLookupByOldId[field._id] = duplicateField;
|
|
418
|
+
return duplicateField;
|
|
419
|
+
};
|
|
420
|
+
/**
|
|
421
|
+
* Step 1: Update Primary View Page Order
|
|
422
|
+
*
|
|
423
|
+
* IMPORTANT NOTE: Page order update must go before page object creation.
|
|
424
|
+
*/
|
|
425
|
+
|
|
426
|
+
|
|
427
|
+
var pageOrder = getPageOrder(nextDoc.files[fileIndex].pageOrder, nextDoc.files[fileIndex].pages);
|
|
428
|
+
var primaryPageOrderIndex = pageOrder.findIndex(function (id) {
|
|
429
|
+
return id === pageId;
|
|
430
|
+
});
|
|
431
|
+
var primaryPageOrderTargetIndex = primaryPageOrderIndex + 1;
|
|
432
|
+
nextDoc.files[fileIndex].pageOrder = pageOrder;
|
|
433
|
+
nextDoc.files[fileIndex].pageOrder.splice(primaryPageOrderTargetIndex, 0, newPageId);
|
|
434
|
+
/**
|
|
435
|
+
* Step 2: Generate Primary View Page
|
|
436
|
+
*/
|
|
437
|
+
|
|
438
|
+
var primaryPageIndex = nextDoc.files[fileIndex].pages.findIndex(function (page) {
|
|
439
|
+
return page._id === pageId;
|
|
440
|
+
});
|
|
441
|
+
var newPrimaryPage = primaryPageIndex === -1 ? null : _objectSpread(_objectSpread({}, nextDoc.files[fileIndex].pages[primaryPageIndex]), {}, {
|
|
442
|
+
_id: newPageId,
|
|
443
|
+
fieldPositions: []
|
|
444
|
+
}, pageDefaults);
|
|
445
|
+
nextDoc.files[fileIndex].pages[primaryPageIndex].fieldPositions.forEach(function (fieldPosition) {
|
|
446
|
+
var newField = duplicateFieldForFieldPosition(fieldLookup[fieldPosition.field]);
|
|
447
|
+
newPrimaryPage.fieldPositions.push(_objectSpread(_objectSpread({}, fieldPosition), {}, {
|
|
448
|
+
field: newField._id
|
|
449
|
+
}));
|
|
450
|
+
});
|
|
451
|
+
nextDoc.files[fileIndex].pages.splice(primaryPageIndex + 1, 0, newPrimaryPage);
|
|
452
|
+
/**
|
|
453
|
+
* Step 3: Update Primary Page Changelog
|
|
454
|
+
*/
|
|
455
|
+
|
|
456
|
+
changelogInfo.primaryPages.targetIndex = primaryPageOrderTargetIndex;
|
|
457
|
+
changelogInfo.primaryPages.page = newPrimaryPage;
|
|
458
|
+
/**
|
|
459
|
+
* Step 4: Update Views
|
|
460
|
+
*/
|
|
461
|
+
|
|
462
|
+
if (nextDoc.files[fileIndex].views && nextDoc.files[fileIndex].views.length > 0) {
|
|
463
|
+
nextDoc.files[fileIndex].views = nextDoc.files[fileIndex].views.map(function (view) {
|
|
464
|
+
var nextView = _objectSpread({}, view);
|
|
465
|
+
|
|
466
|
+
var viewPageIndex = nextView.pages.findIndex(function (page) {
|
|
467
|
+
return page._id === pageId;
|
|
468
|
+
});
|
|
469
|
+
if (viewPageIndex === -1) return view;
|
|
470
|
+
/**
|
|
471
|
+
* Step 4.1 Update View Page Order.
|
|
472
|
+
*
|
|
473
|
+
* IMPORTANT NOTE: Page order update must go before page object creation.
|
|
474
|
+
*/
|
|
475
|
+
|
|
476
|
+
var nextViewPageOrder = getPageOrder(nextView.pageOrder, nextView.pages);
|
|
477
|
+
var nextViewPageOrderIndex = nextViewPageOrder.findIndex(function (id) {
|
|
478
|
+
return id === pageId;
|
|
479
|
+
});
|
|
480
|
+
var nextViewTargetPageOrderIndex = nextViewPageOrderIndex + 1;
|
|
481
|
+
nextView.pageOrder = nextViewPageOrder;
|
|
482
|
+
nextView.pageOrder.splice(nextViewTargetPageOrderIndex, 0, newPageId);
|
|
483
|
+
/**
|
|
484
|
+
* Step 4.2 Update View Pages
|
|
485
|
+
*/
|
|
486
|
+
|
|
487
|
+
var newViewPage = _objectSpread(_objectSpread({}, nextView.pages[viewPageIndex]), {}, {
|
|
488
|
+
_id: newPageId,
|
|
489
|
+
fieldPositions: []
|
|
490
|
+
}, pageDefaults);
|
|
491
|
+
|
|
492
|
+
nextView.pages[viewPageIndex].fieldPositions.forEach(function (fieldPosition) {
|
|
493
|
+
var newField = duplicateFieldForFieldPosition(fieldLookup[fieldPosition.field]);
|
|
494
|
+
newViewPage.fieldPositions.push(_objectSpread(_objectSpread({}, fieldPosition), {}, {
|
|
495
|
+
field: newField._id
|
|
496
|
+
}));
|
|
497
|
+
});
|
|
498
|
+
nextView.pages.splice(viewPageIndex + 1, 0, newViewPage);
|
|
499
|
+
/**
|
|
500
|
+
* Step 4.3 Add View Page Changelog Info
|
|
501
|
+
*/
|
|
502
|
+
|
|
503
|
+
changelogInfo.viewPages.push({
|
|
504
|
+
viewId: view._id,
|
|
505
|
+
view: view.type,
|
|
506
|
+
targetIndex: nextViewTargetPageOrderIndex,
|
|
507
|
+
page: newViewPage
|
|
508
|
+
});
|
|
509
|
+
return nextView;
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
return {
|
|
514
|
+
changelogInfo: changelogInfo,
|
|
515
|
+
doc: nextDoc
|
|
516
|
+
};
|
|
517
|
+
};
|
|
518
|
+
|
|
519
|
+
exports.duplicateDocumentPage = duplicateDocumentPage;
|
|
204
520
|
var _default = {
|
|
205
521
|
getDefaultJoyDocPage: getDefaultJoyDocPage,
|
|
206
522
|
getDefaultJoyDocFile: getDefaultJoyDocFile,
|
|
207
523
|
getDefaultJoyDoc: getDefaultJoyDoc,
|
|
208
524
|
getCleanedJoyDoc: getCleanedJoyDoc,
|
|
209
|
-
getCleanedJoyDocPages: getCleanedJoyDocPages
|
|
525
|
+
getCleanedJoyDocPages: getCleanedJoyDocPages,
|
|
526
|
+
getDefaultDocument: getDefaultDocument,
|
|
527
|
+
getDefaultTemplate: getDefaultTemplate,
|
|
528
|
+
getDocumentFromTemplate: getDocumentFromTemplate,
|
|
529
|
+
duplicate: duplicate,
|
|
530
|
+
duplicateDocumentPage: duplicateDocumentPage,
|
|
531
|
+
getPageOrder: getPageOrder,
|
|
532
|
+
sortPages: sortPages
|
|
210
533
|
};
|
|
211
534
|
exports["default"] = _default;
|
package/dist/tableHelper.js
CHANGED
|
@@ -655,7 +655,7 @@ var generateTableLookup = function generateTableLookup(rows, columns) {
|
|
|
655
655
|
|
|
656
656
|
if (cellValue && column.type === _FieldTableColumnTypes["default"].dropdown) {
|
|
657
657
|
tableLookup[cellKey] = columnOptionsLookup[column._id][cellValue];
|
|
658
|
-
} else if (cellValue && column.type === _FieldTableColumnTypes["default"].image) {
|
|
658
|
+
} else if ((cellValue || cellRawValue) && column.type === _FieldTableColumnTypes["default"].image) {
|
|
659
659
|
tableLookup[cellKey] = cellRawValue;
|
|
660
660
|
} else if (cellValue && formulaCell && containsOperands) {
|
|
661
661
|
formulaCells.push(cellKey);
|