@builttocreate/engine-utils 2.1.0 → 2.3.0-beta.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 +249 -4
- 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["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;
|
|
@@ -247,6 +307,29 @@ var getDefaultTemplate = function getDefaultTemplate() {
|
|
|
247
307
|
name: name
|
|
248
308
|
});
|
|
249
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
|
+
};
|
|
250
333
|
/**
|
|
251
334
|
* Get a properly formatted Document JoyDoc from Template JoyDoc
|
|
252
335
|
*
|
|
@@ -255,7 +338,7 @@ var getDefaultTemplate = function getDefaultTemplate() {
|
|
|
255
338
|
*/
|
|
256
339
|
|
|
257
340
|
|
|
258
|
-
exports.
|
|
341
|
+
exports.duplicate = duplicate;
|
|
259
342
|
|
|
260
343
|
var getDocumentFromTemplate = function getDocumentFromTemplate(template) {
|
|
261
344
|
var _id = (0, _generateObjectId["default"])();
|
|
@@ -274,8 +357,166 @@ var getDocumentFromTemplate = function getDocumentFromTemplate(template) {
|
|
|
274
357
|
fields: temp.fields
|
|
275
358
|
};
|
|
276
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
|
+
|
|
277
370
|
|
|
278
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;
|
|
279
520
|
var _default = {
|
|
280
521
|
getDefaultJoyDocPage: getDefaultJoyDocPage,
|
|
281
522
|
getDefaultJoyDocFile: getDefaultJoyDocFile,
|
|
@@ -284,6 +525,10 @@ var _default = {
|
|
|
284
525
|
getCleanedJoyDocPages: getCleanedJoyDocPages,
|
|
285
526
|
getDefaultDocument: getDefaultDocument,
|
|
286
527
|
getDefaultTemplate: getDefaultTemplate,
|
|
287
|
-
getDocumentFromTemplate: getDocumentFromTemplate
|
|
528
|
+
getDocumentFromTemplate: getDocumentFromTemplate,
|
|
529
|
+
duplicate: duplicate,
|
|
530
|
+
duplicateDocumentPage: duplicateDocumentPage,
|
|
531
|
+
getPageOrder: getPageOrder,
|
|
532
|
+
sortPages: sortPages
|
|
288
533
|
};
|
|
289
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-beta.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 run build && npm publish --tag beta",
|
|
15
16
|
"test": "jest",
|
|
16
17
|
"test-watch": "jest --watch",
|
|
17
18
|
"lint": "npx eslint ./src",
|