@builttocreate/engine-utils 2.2.0 → 2.3.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/FileViews.js +12 -0
- package/dist/joyDocHelper.js +224 -3
- package/dist/tableHelper.js +1 -1
- package/package.json +2 -1
|
@@ -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.getDocumentFromTemplate = exports.getDefaultTemplate = exports.getDefaultJoyDocPage = exports.getDefaultJoyDocFile = exports.getDefaultJoyDoc = exports.getDefaultDocument = exports.getCleanedJoyDocPages = exports.getCleanedJoyDoc = exports.duplicate = 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
|
|
|
@@ -201,6 +201,66 @@ var getCleanedJoyDocPages = function getCleanedJoyDocPages(pages) {
|
|
|
201
201
|
return [getDefaultJoyDocPage()];
|
|
202
202
|
}
|
|
203
203
|
};
|
|
204
|
+
/**
|
|
205
|
+
* Get page order
|
|
206
|
+
*
|
|
207
|
+
* @param {Array} pages
|
|
208
|
+
* @param {Array} pageOrder
|
|
209
|
+
* @return {Array}
|
|
210
|
+
*/
|
|
211
|
+
|
|
212
|
+
|
|
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
|
+
};
|
|
204
264
|
/**
|
|
205
265
|
* Get a properly formatted Document JoyDoc
|
|
206
266
|
*
|
|
@@ -208,7 +268,7 @@ var getCleanedJoyDocPages = function getCleanedJoyDocPages(pages) {
|
|
|
208
268
|
*/
|
|
209
269
|
|
|
210
270
|
|
|
211
|
-
exports.
|
|
271
|
+
exports.sortPages = sortPages;
|
|
212
272
|
|
|
213
273
|
var getDefaultDocument = function getDefaultDocument() {
|
|
214
274
|
var type = _DocumentTypes["default"].document;
|
|
@@ -297,8 +357,166 @@ var getDocumentFromTemplate = function getDocumentFromTemplate(template) {
|
|
|
297
357
|
fields: temp.fields
|
|
298
358
|
};
|
|
299
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
|
+
|
|
300
370
|
|
|
301
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;
|
|
302
520
|
var _default = {
|
|
303
521
|
getDefaultJoyDocPage: getDefaultJoyDocPage,
|
|
304
522
|
getDefaultJoyDocFile: getDefaultJoyDocFile,
|
|
@@ -308,6 +526,9 @@ var _default = {
|
|
|
308
526
|
getDefaultDocument: getDefaultDocument,
|
|
309
527
|
getDefaultTemplate: getDefaultTemplate,
|
|
310
528
|
getDocumentFromTemplate: getDocumentFromTemplate,
|
|
311
|
-
duplicate: duplicate
|
|
529
|
+
duplicate: duplicate,
|
|
530
|
+
duplicateDocumentPage: duplicateDocumentPage,
|
|
531
|
+
getPageOrder: getPageOrder,
|
|
532
|
+
sortPages: sortPages
|
|
312
533
|
};
|
|
313
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);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@builttocreate/engine-utils",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Utility library for common logic shared across web and mobile",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"build-src": "NODE_ENV=production babel src --out-dir dist --extensions '.js,.jsx' --ignore 'src/testUtils/*','src/**/*.stories.js','src/**/*.test.js','src/lib/**/*.test.js','src/**/__snapshots__','src/**/__mocks__'",
|
|
13
13
|
"build": "npm run clean && npm run build-src",
|
|
14
14
|
"prepublish": "npm run build",
|
|
15
|
+
"publish-beta": "npm publish --tag beta",
|
|
15
16
|
"test": "jest",
|
|
16
17
|
"test-watch": "jest --watch",
|
|
17
18
|
"lint": "npx eslint ./src",
|