@builttocreate/engine-utils 2.11.0-beta.v1364.0 → 3.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/joyDocHelper.js +30 -109
- package/package.json +2 -1
package/dist/joyDocHelper.js
CHANGED
|
@@ -83,7 +83,8 @@ var getDefaultJoyDoc = exports.getDefaultJoyDoc = function getDefaultJoyDoc() {
|
|
|
83
83
|
identifier: "doc_".concat(id),
|
|
84
84
|
name: 'New Doc',
|
|
85
85
|
files: [getDefaultJoyDocFile(fileDefaults, pageDefaults)],
|
|
86
|
-
fields: []
|
|
86
|
+
fields: [],
|
|
87
|
+
formulas: []
|
|
87
88
|
}, defaults);
|
|
88
89
|
};
|
|
89
90
|
|
|
@@ -138,9 +139,9 @@ var getFieldId = function getFieldId(existingId, type, doc) {
|
|
|
138
139
|
* @param {Object} doc
|
|
139
140
|
* @returns {Object}
|
|
140
141
|
*/
|
|
141
|
-
var getCleanedJoyDoc = exports.getCleanedJoyDoc = function getCleanedJoyDoc(doc
|
|
142
|
+
var getCleanedJoyDoc = exports.getCleanedJoyDoc = function getCleanedJoyDoc(doc) {
|
|
142
143
|
if (!doc) return getDefaultJoyDoc();
|
|
143
|
-
var _removeOrphanedFields = removeOrphanedFieldsFromJoydoc(doc
|
|
144
|
+
var _removeOrphanedFields = removeOrphanedFieldsFromJoydoc(doc),
|
|
144
145
|
nextDoc = _removeOrphanedFields.nextDoc;
|
|
145
146
|
|
|
146
147
|
/**
|
|
@@ -166,20 +167,6 @@ var getCleanedJoyDoc = exports.getCleanedJoyDoc = function getCleanedJoyDoc(doc,
|
|
|
166
167
|
return nextField;
|
|
167
168
|
});
|
|
168
169
|
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Step 1.3: Filter collection fields based on license validation
|
|
172
|
-
*/
|
|
173
|
-
if (nextDoc.fields && nextDoc.fields.length > 0) {
|
|
174
|
-
// Check if collection fields should be removed based on license validation
|
|
175
|
-
var shouldRemoveCollectionFields = !licenseValidation || !licenseValidation.decodedData || licenseValidation.decodedData.collectionField === false;
|
|
176
|
-
if (shouldRemoveCollectionFields) {
|
|
177
|
-
// Remove collection fields from the fields array
|
|
178
|
-
nextDoc.fields = nextDoc.fields.filter(function (field) {
|
|
179
|
-
return field.type !== _FieldTypes["default"].collection;
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
170
|
if (nextDoc.files && nextDoc.files.length > 0) {
|
|
184
171
|
nextDoc.files = nextDoc.files.map(function (file) {
|
|
185
172
|
var _nextFile$views;
|
|
@@ -194,7 +181,7 @@ var getCleanedJoyDoc = exports.getCleanedJoyDoc = function getCleanedJoyDoc(doc,
|
|
|
194
181
|
/**
|
|
195
182
|
* Step 1.4: Replace page ids and field ids if they are not valid
|
|
196
183
|
*/
|
|
197
|
-
nextFile.pages = getCleanedJoyDocPages(nextFile.pages, nextDoc
|
|
184
|
+
nextFile.pages = getCleanedJoyDocPages(nextFile.pages, nextDoc);
|
|
198
185
|
nextFile.pageOrder = cleanPageOrder(getPageOrder(nextFile.pageOrder, nextFile.pages), nextFile.pages);
|
|
199
186
|
|
|
200
187
|
/**
|
|
@@ -203,7 +190,7 @@ var getCleanedJoyDoc = exports.getCleanedJoyDoc = function getCleanedJoyDoc(doc,
|
|
|
203
190
|
if ((nextFile === null || nextFile === void 0 ? void 0 : (_nextFile$views = nextFile.views) === null || _nextFile$views === void 0 ? void 0 : _nextFile$views.length) > 0) {
|
|
204
191
|
nextFile.views = nextFile.views.map(function (view) {
|
|
205
192
|
var nextView = _objectSpread({}, view);
|
|
206
|
-
nextView.pages = getCleanedJoyDocPages(nextView.pages, nextDoc
|
|
193
|
+
nextView.pages = getCleanedJoyDocPages(nextView.pages, nextDoc);
|
|
207
194
|
nextView.pageOrder = cleanPageOrder(getPageOrder(nextView.pageOrder, nextView.pages), nextView.pages);
|
|
208
195
|
return nextView;
|
|
209
196
|
});
|
|
@@ -220,76 +207,33 @@ var getCleanedJoyDoc = exports.getCleanedJoyDoc = function getCleanedJoyDoc(doc,
|
|
|
220
207
|
* Remove orphaned fields from doc
|
|
221
208
|
*/
|
|
222
209
|
|
|
223
|
-
var removeOrphanedFieldsFromJoydoc = exports.removeOrphanedFieldsFromJoydoc = function removeOrphanedFieldsFromJoydoc(doc
|
|
210
|
+
var removeOrphanedFieldsFromJoydoc = exports.removeOrphanedFieldsFromJoydoc = function removeOrphanedFieldsFromJoydoc(doc) {
|
|
224
211
|
var _nextDoc$files;
|
|
225
212
|
if (!doc) return getDefaultJoyDoc();
|
|
226
213
|
var nextDoc = _objectSpread({}, doc);
|
|
227
214
|
var associatedFieldIdLookup = {};
|
|
228
|
-
var shouldRemoveCollectionFields = !licenseValidation || !licenseValidation.decodedData || licenseValidation.decodedData.collectionField === false;
|
|
229
215
|
nextDoc === null || nextDoc === void 0 ? void 0 : (_nextDoc$files = nextDoc.files) === null || _nextDoc$files === void 0 ? void 0 : _nextDoc$files.forEach(function (file) {
|
|
230
|
-
var _file$pages, _file$views;
|
|
216
|
+
var _file$header, _file$header$fieldPos, _file$footer, _file$footer$fieldPos, _file$pages, _file$views;
|
|
231
217
|
/**
|
|
232
|
-
* Header
|
|
218
|
+
* Header
|
|
233
219
|
*/
|
|
234
|
-
if (file.header) {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
var _file$header$fieldPos;
|
|
238
|
-
// Filter collection field positions from header
|
|
239
|
-
file.header.fieldPositions = ((_file$header$fieldPos = file.header.fieldPositions) === null || _file$header$fieldPos === void 0 ? void 0 : _file$header$fieldPos.filter(function (fieldPosition) {
|
|
240
|
-
var _nextDoc$fields;
|
|
241
|
-
var referencedField = (_nextDoc$fields = nextDoc.fields) === null || _nextDoc$fields === void 0 ? void 0 : _nextDoc$fields.find(function (field) {
|
|
242
|
-
return field._id === fieldPosition.field;
|
|
243
|
-
});
|
|
244
|
-
// Keep field position only if the referenced field exists AND is not a collection field
|
|
245
|
-
return referencedField && referencedField.type !== _FieldTypes["default"].collection;
|
|
246
|
-
})) || [];
|
|
247
|
-
}
|
|
248
|
-
(_file$header = file.header) === null || _file$header === void 0 ? void 0 : (_file$header$fieldPos2 = _file$header.fieldPositions) === null || _file$header$fieldPos2 === void 0 ? void 0 : _file$header$fieldPos2.forEach(function (fieldPosition) {
|
|
249
|
-
return associatedFieldIdLookup[fieldPosition.field] = true;
|
|
250
|
-
});
|
|
251
|
-
}
|
|
220
|
+
if (file.header) (_file$header = file.header) === null || _file$header === void 0 ? void 0 : (_file$header$fieldPos = _file$header.fieldPositions) === null || _file$header$fieldPos === void 0 ? void 0 : _file$header$fieldPos.forEach(function (fieldPosition) {
|
|
221
|
+
return associatedFieldIdLookup[fieldPosition.field] = true;
|
|
222
|
+
});
|
|
252
223
|
|
|
253
224
|
/**
|
|
254
225
|
* Footer
|
|
255
226
|
*/
|
|
256
|
-
if (file.footer) {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
var _file$footer$fieldPos;
|
|
260
|
-
// Filter collection field positions from footer
|
|
261
|
-
file.footer.fieldPositions = ((_file$footer$fieldPos = file.footer.fieldPositions) === null || _file$footer$fieldPos === void 0 ? void 0 : _file$footer$fieldPos.filter(function (fieldPosition) {
|
|
262
|
-
var _nextDoc$fields2;
|
|
263
|
-
var referencedField = (_nextDoc$fields2 = nextDoc.fields) === null || _nextDoc$fields2 === void 0 ? void 0 : _nextDoc$fields2.find(function (field) {
|
|
264
|
-
return field._id === fieldPosition.field;
|
|
265
|
-
});
|
|
266
|
-
// Keep field position only if the referenced field exists AND is not a collection field
|
|
267
|
-
return referencedField && referencedField.type !== _FieldTypes["default"].collection;
|
|
268
|
-
})) || [];
|
|
269
|
-
}
|
|
270
|
-
(_file$footer = file.footer) === null || _file$footer === void 0 ? void 0 : (_file$footer$fieldPos2 = _file$footer.fieldPositions) === null || _file$footer$fieldPos2 === void 0 ? void 0 : _file$footer$fieldPos2.forEach(function (fieldPosition) {
|
|
271
|
-
return associatedFieldIdLookup[fieldPosition.field] = true;
|
|
272
|
-
});
|
|
273
|
-
}
|
|
227
|
+
if (file.footer) (_file$footer = file.footer) === null || _file$footer === void 0 ? void 0 : (_file$footer$fieldPos = _file$footer.fieldPositions) === null || _file$footer$fieldPos === void 0 ? void 0 : _file$footer$fieldPos.forEach(function (fieldPosition) {
|
|
228
|
+
return associatedFieldIdLookup[fieldPosition.field] = true;
|
|
229
|
+
});
|
|
274
230
|
|
|
275
231
|
/**
|
|
276
232
|
* Primary view
|
|
277
233
|
*/
|
|
278
234
|
(_file$pages = file.pages) === null || _file$pages === void 0 ? void 0 : _file$pages.forEach(function (page) {
|
|
279
|
-
var _page$
|
|
280
|
-
|
|
281
|
-
var _page$fieldPositions;
|
|
282
|
-
// Filter collection field positions from primary view pages
|
|
283
|
-
page.fieldPositions = ((_page$fieldPositions = page.fieldPositions) === null || _page$fieldPositions === void 0 ? void 0 : _page$fieldPositions.filter(function (fieldPosition) {
|
|
284
|
-
var _nextDoc$fields3;
|
|
285
|
-
var referencedField = (_nextDoc$fields3 = nextDoc.fields) === null || _nextDoc$fields3 === void 0 ? void 0 : _nextDoc$fields3.find(function (field) {
|
|
286
|
-
return field._id === fieldPosition.field;
|
|
287
|
-
});
|
|
288
|
-
// Keep field position only if the referenced field exists AND is not a collection field
|
|
289
|
-
return referencedField && referencedField.type !== _FieldTypes["default"].collection;
|
|
290
|
-
})) || [];
|
|
291
|
-
}
|
|
292
|
-
page === null || page === void 0 ? void 0 : (_page$fieldPositions2 = page.fieldPositions) === null || _page$fieldPositions2 === void 0 ? void 0 : _page$fieldPositions2.forEach(function (fieldPosition) {
|
|
235
|
+
var _page$fieldPositions;
|
|
236
|
+
page === null || page === void 0 ? void 0 : (_page$fieldPositions = page.fieldPositions) === null || _page$fieldPositions === void 0 ? void 0 : _page$fieldPositions.forEach(function (fieldPosition) {
|
|
293
237
|
return associatedFieldIdLookup[fieldPosition.field] = true;
|
|
294
238
|
});
|
|
295
239
|
});
|
|
@@ -300,20 +244,8 @@ var removeOrphanedFieldsFromJoydoc = exports.removeOrphanedFieldsFromJoydoc = fu
|
|
|
300
244
|
(_file$views = file.views) === null || _file$views === void 0 ? void 0 : _file$views.forEach(function (view) {
|
|
301
245
|
var _view$pages;
|
|
302
246
|
view === null || view === void 0 ? void 0 : (_view$pages = view.pages) === null || _view$pages === void 0 ? void 0 : _view$pages.forEach(function (page) {
|
|
303
|
-
var _page$
|
|
304
|
-
|
|
305
|
-
var _page$fieldPositions3;
|
|
306
|
-
// Filter collection field positions from alternative view pages
|
|
307
|
-
page.fieldPositions = ((_page$fieldPositions3 = page.fieldPositions) === null || _page$fieldPositions3 === void 0 ? void 0 : _page$fieldPositions3.filter(function (fieldPosition) {
|
|
308
|
-
var _nextDoc$fields4;
|
|
309
|
-
var referencedField = (_nextDoc$fields4 = nextDoc.fields) === null || _nextDoc$fields4 === void 0 ? void 0 : _nextDoc$fields4.find(function (field) {
|
|
310
|
-
return field._id === fieldPosition.field;
|
|
311
|
-
});
|
|
312
|
-
// Keep field position only if the referenced field exists AND is not a collection field
|
|
313
|
-
return referencedField && referencedField.type !== _FieldTypes["default"].collection;
|
|
314
|
-
})) || [];
|
|
315
|
-
}
|
|
316
|
-
page === null || page === void 0 ? void 0 : (_page$fieldPositions4 = page.fieldPositions) === null || _page$fieldPositions4 === void 0 ? void 0 : _page$fieldPositions4.forEach(function (fieldPosition) {
|
|
247
|
+
var _page$fieldPositions2;
|
|
248
|
+
page === null || page === void 0 ? void 0 : (_page$fieldPositions2 = page.fieldPositions) === null || _page$fieldPositions2 === void 0 ? void 0 : _page$fieldPositions2.forEach(function (fieldPosition) {
|
|
317
249
|
return associatedFieldIdLookup[fieldPosition.field] = true;
|
|
318
250
|
});
|
|
319
251
|
});
|
|
@@ -346,10 +278,9 @@ var removeOrphanedFieldsFromJoydoc = exports.removeOrphanedFieldsFromJoydoc = fu
|
|
|
346
278
|
*
|
|
347
279
|
* @param {Array} pages
|
|
348
280
|
* @param {Object} doc - The full document (needed for readableId generation)
|
|
349
|
-
* @param {Object} licenseValidation - License validation object for filtering collection fields
|
|
350
281
|
* @returns {Object}
|
|
351
282
|
*/
|
|
352
|
-
var getCleanedJoyDocPages = exports.getCleanedJoyDocPages = function getCleanedJoyDocPages(pages, doc
|
|
283
|
+
var getCleanedJoyDocPages = exports.getCleanedJoyDocPages = function getCleanedJoyDocPages(pages, doc) {
|
|
353
284
|
if ((pages === null || pages === void 0 ? void 0 : pages.length) > 0) {
|
|
354
285
|
return pages.map(function (page) {
|
|
355
286
|
/**
|
|
@@ -358,21 +289,7 @@ var getCleanedJoyDocPages = exports.getCleanedJoyDocPages = function getCleanedJ
|
|
|
358
289
|
var nextPage = _objectSpread({}, page);
|
|
359
290
|
if (nextPage._id && !(0, _validateObjectId["default"])(nextPage._id) && !(0, _validateReadableId["default"])(nextPage._id)) nextPage._id = (0, _generateObjectId["default"])();
|
|
360
291
|
if (nextPage.fieldPositions && nextPage.fieldPositions.length > 0) {
|
|
361
|
-
|
|
362
|
-
var shouldRemoveCollectionFields = !licenseValidation || !licenseValidation.decodedData || licenseValidation.decodedData.collectionField === false;
|
|
363
|
-
var filteredFieldPositions = nextPage.fieldPositions;
|
|
364
|
-
if (shouldRemoveCollectionFields) {
|
|
365
|
-
// Remove field positions that reference collection fields
|
|
366
|
-
filteredFieldPositions = nextPage.fieldPositions.filter(function (fieldPosition) {
|
|
367
|
-
var _doc$fields;
|
|
368
|
-
var referencedField = (_doc$fields = doc.fields) === null || _doc$fields === void 0 ? void 0 : _doc$fields.find(function (field) {
|
|
369
|
-
return field._id === fieldPosition.field;
|
|
370
|
-
});
|
|
371
|
-
// Keep field position only if the referenced field exists AND is not a collection field
|
|
372
|
-
return referencedField && referencedField.type !== _FieldTypes["default"].collection;
|
|
373
|
-
});
|
|
374
|
-
}
|
|
375
|
-
nextPage.fieldPositions = filteredFieldPositions.map(function (fieldPosition) {
|
|
292
|
+
nextPage.fieldPositions = nextPage.fieldPositions.map(function (fieldPosition) {
|
|
376
293
|
/**
|
|
377
294
|
* Step 1.2: Replace fieldPosition _id and field reference if they are not valid
|
|
378
295
|
* Use simplified approach: respect ObjectIds, otherwise generate readable IDs
|
|
@@ -521,7 +438,8 @@ var getDocumentFromTemplate = exports.getDocumentFromTemplate = function getDocu
|
|
|
521
438
|
template: temp.identifier,
|
|
522
439
|
source: temp.identifier,
|
|
523
440
|
files: temp.files,
|
|
524
|
-
fields: temp.fields
|
|
441
|
+
fields: temp.fields,
|
|
442
|
+
formulas: temp.formulas
|
|
525
443
|
};
|
|
526
444
|
};
|
|
527
445
|
|
|
@@ -535,8 +453,9 @@ var getDocumentFromTemplate = exports.getDocumentFromTemplate = function getDocu
|
|
|
535
453
|
* @returns {Object}
|
|
536
454
|
*/
|
|
537
455
|
var duplicateDocumentPage = exports.duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId) {
|
|
538
|
-
var _nextDoc$
|
|
456
|
+
var _nextDoc$fields;
|
|
539
457
|
var pageDefaults = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
458
|
+
var config = arguments.length > 4 ? arguments[4] : undefined;
|
|
540
459
|
var changelogInfo = {
|
|
541
460
|
primaryPages: {
|
|
542
461
|
targetIndex: 0,
|
|
@@ -545,13 +464,14 @@ var duplicateDocumentPage = exports.duplicateDocumentPage = function duplicateDo
|
|
|
545
464
|
viewPages: [],
|
|
546
465
|
fields: []
|
|
547
466
|
};
|
|
467
|
+
var useReadableIds = (config === null || config === void 0 ? void 0 : config.useReadableIds) || false;
|
|
548
468
|
var nextDoc = JSON.parse(JSON.stringify(doc));
|
|
549
469
|
var fileIndex = nextDoc.files.findIndex(function (file) {
|
|
550
470
|
return file._id === fileId;
|
|
551
471
|
});
|
|
552
472
|
var newPageId = (0, _generateObjectId["default"])();
|
|
553
473
|
var fieldLookup = {};
|
|
554
|
-
(_nextDoc$
|
|
474
|
+
(_nextDoc$fields = nextDoc.fields) === null || _nextDoc$fields === void 0 ? void 0 : _nextDoc$fields.forEach(function (field) {
|
|
555
475
|
fieldLookup[field._id] = field;
|
|
556
476
|
});
|
|
557
477
|
|
|
@@ -602,12 +522,13 @@ var duplicateDocumentPage = exports.duplicateDocumentPage = function duplicateDo
|
|
|
602
522
|
// Generate readable ID using current fields plus already duplicated fields
|
|
603
523
|
var allFields = [].concat((0, _toConsumableArray2["default"])(nextDoc.fields), (0, _toConsumableArray2["default"])(duplicatedFields));
|
|
604
524
|
var duplicateField = _objectSpread(_objectSpread({}, field), {}, {
|
|
605
|
-
_id: (0, _generateReadableId.generateReadableId)({
|
|
525
|
+
_id: useReadableIds ? (0, _generateReadableId.generateReadableId)({
|
|
606
526
|
fields: allFields,
|
|
607
527
|
pages: (_nextDoc$files$fileIn = nextDoc.files[fileIndex]) === null || _nextDoc$files$fileIn === void 0 ? void 0 : _nextDoc$files$fileIn.pages,
|
|
608
528
|
views: (_nextDoc$files$fileIn2 = nextDoc.files[fileIndex]) === null || _nextDoc$files$fileIn2 === void 0 ? void 0 : _nextDoc$files$fileIn2.views
|
|
609
|
-
}, field.type)
|
|
529
|
+
}, field.type) : (0, _generateObjectId["default"])()
|
|
610
530
|
});
|
|
531
|
+
|
|
611
532
|
// Remove formulas property when duplicating
|
|
612
533
|
delete duplicateField.formulas;
|
|
613
534
|
duplicatedFields.push(duplicateField);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@builttocreate/engine-utils",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Utility library for common logic shared across web and mobile",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"@babel/plugin-transform-regenerator": "^7.12.1",
|
|
37
37
|
"@babel/plugin-transform-runtime": "^7.12.10",
|
|
38
38
|
"@babel/preset-env": "^7.12.11",
|
|
39
|
+
"@babel/runtime": "^7.28.6",
|
|
39
40
|
"babel-eslint": "^10.1.0",
|
|
40
41
|
"cross-env": "^7.0.3",
|
|
41
42
|
"eslint": "^7.18.0",
|