@builttocreate/engine-utils 2.7.0-beta.9 → 2.8.0-beta.1
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/README.md +1 -0
- package/dist/constants/FormStyleOptions.js +24 -0
- package/dist/constants/PageTypes.js +17 -0
- package/dist/joyDocHelper.js +370 -25
- package/dist/tableHelper.js +53 -3
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var _default = {
|
|
8
|
+
displayInline: 'inline',
|
|
9
|
+
displayNone: 'none',
|
|
10
|
+
textTransformUpperCase: 'uppercase',
|
|
11
|
+
textTransformNone: 'none',
|
|
12
|
+
fontWeightBold: 'bold',
|
|
13
|
+
fontWeightNormal: 'normal',
|
|
14
|
+
fontStyleItalic: 'italic',
|
|
15
|
+
fontStyleNormal: 'normal',
|
|
16
|
+
textDecorationUnderline: 'underline',
|
|
17
|
+
textDecorationNone: 'none',
|
|
18
|
+
textOverflowEllipsis: 'ellipsis',
|
|
19
|
+
textOverflowNone: '',
|
|
20
|
+
textAlignLeft: 'left',
|
|
21
|
+
textAlignCenter: 'center',
|
|
22
|
+
textAlignRight: 'right'
|
|
23
|
+
};
|
|
24
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Page Types
|
|
10
|
+
*/
|
|
11
|
+
var PageTypes = {
|
|
12
|
+
desktop: 'desktop',
|
|
13
|
+
mobile: 'mobile',
|
|
14
|
+
pdf: 'pdf'
|
|
15
|
+
};
|
|
16
|
+
var _default = PageTypes;
|
|
17
|
+
exports["default"] = _default;
|
package/dist/joyDocHelper.js
CHANGED
|
@@ -5,7 +5,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
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;
|
|
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
|
+
|
|
10
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
11
|
|
|
10
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
13
|
|
|
@@ -19,8 +21,16 @@ var _FieldPresentationModes = _interopRequireDefault(require("./constants/FieldP
|
|
|
19
21
|
|
|
20
22
|
var _DocumentTypes = _interopRequireDefault(require("./constants/DocumentTypes"));
|
|
21
23
|
|
|
24
|
+
var _PageTypes = _interopRequireDefault(require("./constants/PageTypes"));
|
|
25
|
+
|
|
22
26
|
var _FieldTypes = _interopRequireDefault(require("./constants/FieldTypes"));
|
|
23
27
|
|
|
28
|
+
var _FieldDisplayTypes = _interopRequireDefault(require("./constants/FieldDisplayTypes"));
|
|
29
|
+
|
|
30
|
+
var _FileViews = _interopRequireDefault(require("./constants/FileViews"));
|
|
31
|
+
|
|
32
|
+
var _FormStyleOptions = _interopRequireDefault(require("./constants/FormStyleOptions"));
|
|
33
|
+
|
|
24
34
|
var _tableHelper = require("./tableHelper");
|
|
25
35
|
|
|
26
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; }
|
|
@@ -464,29 +474,6 @@ var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId)
|
|
|
464
474
|
var duplicateField = _objectSpread(_objectSpread({}, field), {}, {
|
|
465
475
|
_id: (0, _generateObjectId["default"])()
|
|
466
476
|
});
|
|
467
|
-
/**
|
|
468
|
-
* Logic to make the table field blank if blockImport is true for the column
|
|
469
|
-
*/
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
if ((duplicateField.type === _FieldTypes["default"].table || duplicateField.type === _FieldTypes["default"].inputGroup) && duplicateField.tableColumns.length > 0 && duplicateField.tableColumns.filter(function (column) {
|
|
473
|
-
return column.blockImport;
|
|
474
|
-
}).length > 0) {
|
|
475
|
-
var columnsWithBlockImport = duplicateField.tableColumns.filter(function (column) {
|
|
476
|
-
return column.blockImport;
|
|
477
|
-
});
|
|
478
|
-
var nextFieldValue = JSON.parse(JSON.stringify(duplicateField.value));
|
|
479
|
-
columnsWithBlockImport.forEach(function (column) {
|
|
480
|
-
nextFieldValue.forEach(function (row) {
|
|
481
|
-
row.cells[column._id] = '';
|
|
482
|
-
});
|
|
483
|
-
});
|
|
484
|
-
duplicateField.value = nextFieldValue;
|
|
485
|
-
} else if (duplicateField.blockImport && (duplicateField.type === _FieldTypes["default"].chart || duplicateField.type === _FieldTypes["default"].multiSelect || duplicateField.type === _FieldTypes["default"].image)) {
|
|
486
|
-
duplicateField.value = [];
|
|
487
|
-
} else if (duplicateField.blockImport) {
|
|
488
|
-
duplicateField.value = '';
|
|
489
|
-
}
|
|
490
477
|
|
|
491
478
|
duplicatedFields.push(duplicateField);
|
|
492
479
|
/**
|
|
@@ -633,8 +620,360 @@ var duplicateDocumentPage = function duplicateDocumentPage(doc, fileId, pageId)
|
|
|
633
620
|
doc: nextDoc
|
|
634
621
|
};
|
|
635
622
|
};
|
|
623
|
+
/**
|
|
624
|
+
* Generate the mobile view and add specific mobile view properties
|
|
625
|
+
*
|
|
626
|
+
* @param {Object} file //Full file object
|
|
627
|
+
* @returns {Object}
|
|
628
|
+
*/
|
|
629
|
+
|
|
636
630
|
|
|
637
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) {
|
|
637
|
+
return view.type === _FileViews["default"].mobile;
|
|
638
|
+
}) : -1;
|
|
639
|
+
|
|
640
|
+
if (mobileViewIndex !== -1) {
|
|
641
|
+
/**
|
|
642
|
+
* Why do we do this? Early versions of alternative views did not contain pageOrder so
|
|
643
|
+
* we ensure it's populated here.
|
|
644
|
+
*/
|
|
645
|
+
var mobileView = file.views[mobileViewIndex];
|
|
646
|
+
var mobileViewPageOrder = cleanPageOrder(getPageOrder(mobileView.pageOrder, mobileView.pages), mobileView.pages);
|
|
647
|
+
return _objectSpread(_objectSpread({}, mobileView), {}, {
|
|
648
|
+
pageOrder: mobileViewPageOrder
|
|
649
|
+
});
|
|
650
|
+
} else {
|
|
651
|
+
return generateMobileViewFromFile(file);
|
|
652
|
+
}
|
|
653
|
+
};
|
|
654
|
+
/**
|
|
655
|
+
* Generates the alternative mobile view from the default file view.
|
|
656
|
+
*
|
|
657
|
+
* @param {Object} file //Full file object
|
|
658
|
+
* @returns {Object}
|
|
659
|
+
*/
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
exports.getMobileViewFromFile = getMobileViewFromFile;
|
|
663
|
+
|
|
664
|
+
var generateMobileViewFromFile = function generateMobileViewFromFile(file) {
|
|
665
|
+
var pages = file.pages || [];
|
|
666
|
+
var pageOrder = cleanPageOrder(getPageOrder(file.pageOrder, file.pages), file.pages);
|
|
667
|
+
return {
|
|
668
|
+
_id: (0, _generateObjectId["default"])(),
|
|
669
|
+
type: _FileViews["default"].mobile,
|
|
670
|
+
pages: (0, _toConsumableArray2["default"])(pages).map(function (page) {
|
|
671
|
+
var _id = page._id,
|
|
672
|
+
name = page.name,
|
|
673
|
+
identifier = page.identifier,
|
|
674
|
+
fieldPositions = page.fieldPositions;
|
|
675
|
+
return generateMobilePage({
|
|
676
|
+
_id: _id,
|
|
677
|
+
identifier: identifier,
|
|
678
|
+
name: name,
|
|
679
|
+
fieldPositions: fieldPositions
|
|
680
|
+
});
|
|
681
|
+
}),
|
|
682
|
+
pageOrder: (0, _toConsumableArray2["default"])(pageOrder)
|
|
683
|
+
};
|
|
684
|
+
};
|
|
685
|
+
/**
|
|
686
|
+
* Apply the pr
|
|
687
|
+
*
|
|
688
|
+
* @param {Object} page
|
|
689
|
+
* @returns {Objectg}
|
|
690
|
+
*/
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
exports.generateMobileViewFromFile = generateMobileViewFromFile;
|
|
694
|
+
|
|
695
|
+
var generateMobilePage = function generateMobilePage(page) {
|
|
696
|
+
return _objectSpread(_objectSpread({}, page), {}, {
|
|
697
|
+
fieldPositions: page.fieldPositions ? generateMobilePageFieldPositions(page.fieldPositions, page.rowHeight) : [],
|
|
698
|
+
type: _PageTypes["default"].mobile,
|
|
699
|
+
rowHeight: 1,
|
|
700
|
+
cols: 1,
|
|
701
|
+
padding: 12,
|
|
702
|
+
width: 816,
|
|
703
|
+
height: 1056,
|
|
704
|
+
layout: _PageLayoutModes["default"].grid,
|
|
705
|
+
presentation: _FieldPresentationModes["default"].normal
|
|
706
|
+
});
|
|
707
|
+
};
|
|
708
|
+
|
|
709
|
+
exports.generateMobilePage = generateMobilePage;
|
|
710
|
+
|
|
711
|
+
var generateMobilePageFieldPositions = function generateMobilePageFieldPositions(fieldPositions, originalRowHeight) {
|
|
712
|
+
var mobileFieldPositions = [];
|
|
713
|
+
/**
|
|
714
|
+
* Step 1: Sort fieldPositions
|
|
715
|
+
*/
|
|
716
|
+
|
|
717
|
+
var sortedFieldPositions = sortFieldPositionsByXAndYCoordinates(fieldPositions);
|
|
718
|
+
sortedFieldPositions.forEach(function (joySpecFieldPosition) {
|
|
719
|
+
var mobileFieldPositionData = _objectSpread(_objectSpread({}, joySpecFieldPosition), {}, {
|
|
720
|
+
titleDisplay: _FormStyleOptions["default"].displayInline,
|
|
721
|
+
displayType: _FieldDisplayTypes["default"].original,
|
|
722
|
+
height: joySpecFieldPosition.height * (originalRowHeight || 1),
|
|
723
|
+
width: 1,
|
|
724
|
+
x: 0
|
|
725
|
+
});
|
|
726
|
+
/**
|
|
727
|
+
* Step 1.2 Hide chart lines on mobile
|
|
728
|
+
*/
|
|
729
|
+
|
|
730
|
+
|
|
731
|
+
if (joySpecFieldPosition.type === _FieldTypes["default"].chart) mobileFieldPositionData.primaryDisplayOnly = true;
|
|
732
|
+
mobileFieldPositions.push(mobileFieldPositionData);
|
|
733
|
+
});
|
|
734
|
+
return mergeAssoicatedFieldPositionsForMobilePage(mobileFieldPositions);
|
|
735
|
+
};
|
|
736
|
+
/**
|
|
737
|
+
* Merge Field Positions assoicated with the same Field.
|
|
738
|
+
*
|
|
739
|
+
* Why do duplicate fields get created from fieldPositions
|
|
740
|
+
*
|
|
741
|
+
* The same field can get added twice because we may have multiple fieldPositions belonging
|
|
742
|
+
* to the same field. This can happen with dropdown, multiSelect, and table fields.
|
|
743
|
+
*
|
|
744
|
+
* Since the fields get generated by looping over the fieldPositions and not regular fields
|
|
745
|
+
* we may encounter the the same field multiple times because it has multiple fieldPositions.
|
|
746
|
+
*
|
|
747
|
+
* @param {Array} fields
|
|
748
|
+
* @returns {Array}
|
|
749
|
+
*/
|
|
750
|
+
|
|
751
|
+
|
|
752
|
+
exports.generateMobilePageFieldPositions = generateMobilePageFieldPositions;
|
|
753
|
+
|
|
754
|
+
var mergeAssoicatedFieldPositionsForMobilePage = function mergeAssoicatedFieldPositionsForMobilePage(fieldPositions) {
|
|
755
|
+
var filteredFieldPositions = [];
|
|
756
|
+
fieldPositions === null || fieldPositions === void 0 ? void 0 : fieldPositions.forEach(function (fieldPosition) {
|
|
757
|
+
var fieldPositionIndex = filteredFieldPositions.findIndex(function (filtered) {
|
|
758
|
+
var _filtered$field, _fieldPosition$field;
|
|
759
|
+
|
|
760
|
+
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());
|
|
761
|
+
}); //Only add field to the list if it hasn't already been added
|
|
762
|
+
|
|
763
|
+
if (fieldPositionIndex === -1) filteredFieldPositions.push(fieldPosition);
|
|
764
|
+
});
|
|
765
|
+
return filteredFieldPositions;
|
|
766
|
+
};
|
|
767
|
+
/**
|
|
768
|
+
* Sort fields by their y and x coordinates
|
|
769
|
+
*
|
|
770
|
+
* For example:
|
|
771
|
+
* [
|
|
772
|
+
* { "y": 3, "x": 4 },
|
|
773
|
+
* { "y": 3, "x": 1 },
|
|
774
|
+
* { "y": 2, "x": 0 },
|
|
775
|
+
* { "y": 1, "x": 5.22 },
|
|
776
|
+
* { "y": 1, "x": 10 },
|
|
777
|
+
* { "y": 1, "x": 0 },
|
|
778
|
+
* ]
|
|
779
|
+
* will become the following after sort
|
|
780
|
+
* [
|
|
781
|
+
* { "y": 1, "x": 0 },
|
|
782
|
+
* { "y": 1, "x": 5.22 },
|
|
783
|
+
* { "y": 1, "x": 10 },
|
|
784
|
+
* { "y": 2, "x": 0 },
|
|
785
|
+
* { "y": 3, "x": 1 },
|
|
786
|
+
* { "y": 3, "x": 4 }
|
|
787
|
+
* ];
|
|
788
|
+
*
|
|
789
|
+
* @param {Array} fieldPositions
|
|
790
|
+
* @returns {Array}
|
|
791
|
+
*/
|
|
792
|
+
|
|
793
|
+
|
|
794
|
+
exports.mergeAssoicatedFieldPositionsForMobilePage = mergeAssoicatedFieldPositionsForMobilePage;
|
|
795
|
+
|
|
796
|
+
var sortFieldPositionsByXAndYCoordinates = function sortFieldPositionsByXAndYCoordinates(fieldPositions) {
|
|
797
|
+
var sortedFieldPositions = (0, _toConsumableArray2["default"])(fieldPositions);
|
|
798
|
+
sortedFieldPositions.sort(function (a, b) {
|
|
799
|
+
if (a.y === b.y) {
|
|
800
|
+
return a.x - b.x;
|
|
801
|
+
} else if (a.y > b.y) {
|
|
802
|
+
return 1;
|
|
803
|
+
} else if (a.y < b.y) {
|
|
804
|
+
return -1;
|
|
805
|
+
} else {
|
|
806
|
+
return 0;
|
|
807
|
+
}
|
|
808
|
+
});
|
|
809
|
+
return sortedFieldPositions;
|
|
810
|
+
};
|
|
811
|
+
/**
|
|
812
|
+
* Formats individual table cell field positions that have already been merged with their associated field.
|
|
813
|
+
* This additional information is added and used for rendering the fieldPositions on the form.
|
|
814
|
+
*
|
|
815
|
+
* For instance, adds properties like columnType, calculatedCellValue, options, etc.
|
|
816
|
+
*
|
|
817
|
+
* @param {Array} fieldPositions
|
|
818
|
+
* @returns {Array}
|
|
819
|
+
*/
|
|
820
|
+
|
|
821
|
+
|
|
822
|
+
exports.sortFieldPositionsByXAndYCoordinates = sortFieldPositionsByXAndYCoordinates;
|
|
823
|
+
|
|
824
|
+
var formatTableFieldPositions = function formatTableFieldPositions(fieldPositions) {
|
|
825
|
+
/**
|
|
826
|
+
* We only want to generate the table value calculated lookup for each table field once.
|
|
827
|
+
* We use these lookups because multiple table fieldPositions belonging to the same table
|
|
828
|
+
* field will all use the same table value calculated lookup.
|
|
829
|
+
*/
|
|
830
|
+
var tableFieldLookup = {};
|
|
831
|
+
var nextFieldPositions = [];
|
|
832
|
+
(0, _toConsumableArray2["default"])(fieldPositions).forEach(function (fieldPosition) {
|
|
833
|
+
var nextFieldPosition = _objectSpread({}, fieldPosition);
|
|
834
|
+
|
|
835
|
+
if (fieldPosition.type === _FieldTypes["default"].table) {
|
|
836
|
+
var field = fieldPosition.field,
|
|
837
|
+
column = fieldPosition.column,
|
|
838
|
+
rowIndex = fieldPosition.rowIndex,
|
|
839
|
+
tableColumns = fieldPosition.tableColumns,
|
|
840
|
+
value = fieldPosition.value,
|
|
841
|
+
rowOrder = fieldPosition.rowOrder,
|
|
842
|
+
tableColumnOrder = fieldPosition.tableColumnOrder;
|
|
843
|
+
/**
|
|
844
|
+
* Step 1: Generate rows, rowOrder, tableColumns, etc. lookups for associated field. We only have to
|
|
845
|
+
* do this once per-field. This increases performance if there are multiple form positions associated
|
|
846
|
+
* with the same form.
|
|
847
|
+
*/
|
|
848
|
+
|
|
849
|
+
if (!tableFieldLookup[field]) {
|
|
850
|
+
/**
|
|
851
|
+
* Step 1.1 Handle rows
|
|
852
|
+
*/
|
|
853
|
+
var nextRows = (0, _tableHelper.getRows)(value);
|
|
854
|
+
var nextRowOrder = (0, _tableHelper.getCleanedRowOrder)(rowOrder, nextRows);
|
|
855
|
+
var nextSortedRows = (0, _tableHelper.sortRows)(nextRows, nextRowOrder);
|
|
856
|
+
/**
|
|
857
|
+
* Step 1.2 Handle columns
|
|
858
|
+
*/
|
|
859
|
+
|
|
860
|
+
var nextTableColumnOrder = (0, _tableHelper.getCleanedColumnOrder)(tableColumnOrder, tableColumns);
|
|
861
|
+
var nextSortedTableColumns = (0, _tableHelper.sortColumns)(tableColumns, nextTableColumnOrder);
|
|
862
|
+
var nextTableColumns = (0, _tableHelper.getColumns)(nextSortedTableColumns);
|
|
863
|
+
var nextTableColumnLookup = {};
|
|
864
|
+
nextTableColumns.forEach(function (column) {
|
|
865
|
+
return nextTableColumnLookup[column._id] = column;
|
|
866
|
+
});
|
|
867
|
+
/**
|
|
868
|
+
* Step 1.3 Handle cell calculations
|
|
869
|
+
*/
|
|
870
|
+
|
|
871
|
+
var calculatedValue = (0, _tableHelper.generateTableLookup)(nextSortedRows, nextSortedTableColumns);
|
|
872
|
+
tableFieldLookup[field] = {
|
|
873
|
+
value: nextSortedRows,
|
|
874
|
+
rowOrder: nextRowOrder,
|
|
875
|
+
tableColumns: nextTableColumns,
|
|
876
|
+
tableColumnOrder: nextTableColumnOrder,
|
|
877
|
+
tableColumnLookup: nextTableColumnLookup,
|
|
878
|
+
calculatedValue: calculatedValue
|
|
879
|
+
};
|
|
880
|
+
}
|
|
881
|
+
/**
|
|
882
|
+
* Ensure each table field has a properly formatted properties
|
|
883
|
+
*/
|
|
884
|
+
|
|
885
|
+
|
|
886
|
+
nextFieldPosition.value = tableFieldLookup[field].value;
|
|
887
|
+
nextFieldPosition.rowOrder = tableFieldLookup[field].rowOrder;
|
|
888
|
+
nextFieldPosition.tableColumns = tableFieldLookup[field].tableColumns;
|
|
889
|
+
nextFieldPosition.tableColumnOrder = tableFieldLookup[field].tableColumnOrder;
|
|
890
|
+
/**
|
|
891
|
+
* Add calculated value lookup. For instance, { A1: '', B1: '', C1: '', ... }
|
|
892
|
+
*/
|
|
893
|
+
|
|
894
|
+
nextFieldPosition.calculatedValue = tableFieldLookup[field].calculatedValue;
|
|
895
|
+
/**
|
|
896
|
+
* Individual Table Cell vs Entire Table
|
|
897
|
+
*
|
|
898
|
+
* Only add cellValue, calculatedCellValue, columnType, and column options to
|
|
899
|
+
* individually mapped table cell fieldPositions. Regular table fields (entire table)
|
|
900
|
+
* just simply use the fieldPositions.value parameter so we don't need the calculated
|
|
901
|
+
* values, etc.
|
|
902
|
+
*
|
|
903
|
+
* We determine an individual table cell fieldPosition vs an entire table
|
|
904
|
+
* fieldPosition by checking for column and rowIndex. Individual cells have
|
|
905
|
+
* column and rowIndex but regular tables do not.
|
|
906
|
+
*
|
|
907
|
+
* Note:
|
|
908
|
+
* rowIndex + 1 is used while calculating cell value since column operands
|
|
909
|
+
* start from 1 instead of zero in the table lookups
|
|
910
|
+
* (ie: [A1:{}, B1:{}] instead of [A0:{}, B0:{}])
|
|
911
|
+
*
|
|
912
|
+
* If tableRowIndex associated with a cell doesn't have a table row associated
|
|
913
|
+
* with it (ie rows[rowIndex] is undefined) it means that particular row is deleted
|
|
914
|
+
*/
|
|
915
|
+
|
|
916
|
+
if (tableFieldLookup[field] && column && typeof rowIndex === 'number') {
|
|
917
|
+
var _tableFieldLookup$fie;
|
|
918
|
+
|
|
919
|
+
/**
|
|
920
|
+
* What is the difference between rowIndex and targetRowIndex?
|
|
921
|
+
*
|
|
922
|
+
* - The rowIndex on the fieldPosition is the saved index of where the rowId lives inside of the rowOrder.
|
|
923
|
+
* - The targetRowIndex is the actual index of the row object inside the value (array of row data) of the field.
|
|
924
|
+
*
|
|
925
|
+
* We use the fieldPosition.rowIndex to get the rowId from the rowOrder. Then we use the rowId to locate
|
|
926
|
+
* the assoicated row object data in the value property. The rowOrder and value (rows) do not follow the same
|
|
927
|
+
* order. The rowOrder is updated when users insert rows, move rows up or down, etc. it manages where rows
|
|
928
|
+
* are at in the list and how they should be rendered. This is why the rowIndex uses the rowOrder.
|
|
929
|
+
*/
|
|
930
|
+
var targetColumn = tableFieldLookup[field].tableColumnLookup[column];
|
|
931
|
+
var targetRowId = tableFieldLookup[field].rowOrder[rowIndex];
|
|
932
|
+
var targetRowIndex = tableFieldLookup[field].value.findIndex(function (row) {
|
|
933
|
+
return (row === null || row === void 0 ? void 0 : row._id) === targetRowId;
|
|
934
|
+
});
|
|
935
|
+
/**
|
|
936
|
+
* Add proper rowId to the field position so that it can be used
|
|
937
|
+
* inside the element for change handlers;
|
|
938
|
+
*/
|
|
939
|
+
|
|
940
|
+
nextFieldPosition.rowId = targetRowId;
|
|
941
|
+
/**
|
|
942
|
+
* If rows[rowIndex] is undefined, it means the row that was present
|
|
943
|
+
* at the particular rowIndex was deleted
|
|
944
|
+
*/
|
|
945
|
+
|
|
946
|
+
nextFieldPosition.cellValue = ((_tableFieldLookup$fie = tableFieldLookup[field].value[targetRowIndex]) === null || _tableFieldLookup$fie === void 0 ? void 0 : _tableFieldLookup$fie.cells[column]) || '';
|
|
947
|
+
/**
|
|
948
|
+
* Skip any individual field position that is associated with a deleted column.
|
|
949
|
+
* targetColumn will appear as undefined if a column is deleted
|
|
950
|
+
*/
|
|
951
|
+
|
|
952
|
+
if (targetColumn) {
|
|
953
|
+
nextFieldPosition.calculatedCellValue = tableFieldLookup[field].calculatedValue["".concat(targetColumn.operand).concat(targetRowIndex + 1)];
|
|
954
|
+
nextFieldPosition.columnType = targetColumn.type;
|
|
955
|
+
nextFieldPosition.options = targetColumn.options;
|
|
956
|
+
nextFieldPosition.columnIdentifier = targetColumn.identifier;
|
|
957
|
+
/**
|
|
958
|
+
* IMPORTANT NOTE: We only add individual table cell field position into
|
|
959
|
+
* the fieldPosition list if the associated column is not deleted.
|
|
960
|
+
*/
|
|
961
|
+
|
|
962
|
+
nextFieldPositions.push(nextFieldPosition);
|
|
963
|
+
}
|
|
964
|
+
} else {
|
|
965
|
+
//Push table fields with original display type
|
|
966
|
+
nextFieldPositions.push(nextFieldPosition);
|
|
967
|
+
}
|
|
968
|
+
} else {
|
|
969
|
+
//Push other fields
|
|
970
|
+
nextFieldPositions.push(nextFieldPosition);
|
|
971
|
+
}
|
|
972
|
+
});
|
|
973
|
+
return nextFieldPositions;
|
|
974
|
+
};
|
|
975
|
+
|
|
976
|
+
exports.formatTableFieldPositions = formatTableFieldPositions;
|
|
638
977
|
var _default = {
|
|
639
978
|
getDefaultJoyDocPage: getDefaultJoyDocPage,
|
|
640
979
|
getDefaultJoyDocFile: getDefaultJoyDocFile,
|
|
@@ -647,6 +986,12 @@ var _default = {
|
|
|
647
986
|
duplicate: duplicate,
|
|
648
987
|
duplicateDocumentPage: duplicateDocumentPage,
|
|
649
988
|
getPageOrder: getPageOrder,
|
|
650
|
-
sortPages: sortPages
|
|
989
|
+
sortPages: sortPages,
|
|
990
|
+
sortFieldPositionsByXAndYCoordinates: sortFieldPositionsByXAndYCoordinates,
|
|
991
|
+
mergeAssoicatedFieldPositionsForMobilePage: mergeAssoicatedFieldPositionsForMobilePage,
|
|
992
|
+
generateMobileViewFromFile: generateMobileViewFromFile,
|
|
993
|
+
generateMobilePage: generateMobilePage,
|
|
994
|
+
generateMobilePageFieldPositions: generateMobilePageFieldPositions,
|
|
995
|
+
formatTableFieldPositions: formatTableFieldPositions
|
|
651
996
|
};
|
|
652
997
|
exports["default"] = _default;
|
package/dist/tableHelper.js
CHANGED
|
@@ -7,7 +7,7 @@ var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
|
7
7
|
Object.defineProperty(exports, "__esModule", {
|
|
8
8
|
value: true
|
|
9
9
|
});
|
|
10
|
-
exports.validFormulaString = exports.spreadOperandRange = exports.sortRows = exports.sortColumns = exports.resolveOperandValue = exports.hasOperandRange = exports.hasCircularOperandReference = exports.handleTableCellChange = exports.handleMoveTableRowUp = exports.handleMoveTableRowDown = exports.handleMoveColumnRight = exports.handleMoveColumnLeft = exports.handleInsertTableRow = exports.handleDuplicateTableRow = exports.handleCreateTableRow = exports.getTemplateColumnOperandLookup = exports.getTargetColumnWithOperand = exports.getTableRowLookupWithPopulatedDropdownCells = exports.getTableFieldRowOrder = exports.getTableFieldLookupKey = exports.getRows = exports.getRowOrder = exports.getRowMap = exports.getRowIndexLookup = exports.getInputGroupRowLookupWithPopulatedDropdownCells = exports.getIndexesFromTableCellOperand = exports.getFormulaResult = exports.getFilteredRowOrder = exports.getDefaultTextColumn = exports.getDefaultRow = exports.getDefaultImageColumn = exports.getDefaultDropdownColumn = exports.getDefaultColumnOption = exports.getColumns = exports.getColumnOrder = exports.getColumnOperand = exports.getCleanedRowOrder = exports.getCellOperand = exports.generateTableLookupForRows = exports.generateTableLookup = exports.generateTableFieldLookups = exports.generateRowTableLookup = exports.generateInputGroupFields = exports["default"] = void 0;
|
|
10
|
+
exports.validFormulaString = exports.spreadOperandRange = exports.sortRows = exports.sortColumns = exports.resolveOperandValue = exports.hasOperandRange = exports.hasCircularOperandReference = exports.handleTableCellChange = exports.handleMoveTableRowUp = exports.handleMoveTableRowDown = exports.handleMoveColumnRight = exports.handleMoveColumnLeft = exports.handleInsertTableRow = exports.handleDuplicateTableRow = exports.handleCreateTableRow = exports.getTemplateColumnOperandLookup = exports.getTargetColumnWithOperand = exports.getTableRowLookupWithPopulatedDropdownCells = exports.getTableFieldRowOrder = exports.getTableFieldLookupKey = exports.getRows = exports.getRowOrder = exports.getRowMap = exports.getRowIndexLookup = exports.getInputGroupRowLookupWithPopulatedDropdownCells = exports.getIndexesFromTableCellOperand = exports.getFormulaResult = exports.getFilteredRowOrder = exports.getDefaultTextColumn = exports.getDefaultRow = exports.getDefaultImageColumn = exports.getDefaultDropdownColumn = exports.getDefaultColumnOption = exports.getColumns = exports.getColumnOrder = exports.getColumnOperand = exports.getCleanedRowOrder = exports.getCleanedColumnOrder = exports.getCellOperand = exports.generateTableLookupForRows = exports.generateTableLookup = exports.generateTableFieldLookups = exports.generateRowTableLookup = exports.generateInputGroupFields = exports["default"] = void 0;
|
|
11
11
|
|
|
12
12
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
13
13
|
|
|
@@ -386,12 +386,60 @@ var getColumnOrder = function getColumnOrder(columnOrder, columns) {
|
|
|
386
386
|
return column._id;
|
|
387
387
|
});
|
|
388
388
|
};
|
|
389
|
+
/**
|
|
390
|
+
* This method removes the columnIds of the deleted columns (or) any duplicate columnIds
|
|
391
|
+
* from the tableColumnOrder there by returning a cleaned tableColumnOrder
|
|
392
|
+
*
|
|
393
|
+
* @param {*} tableColumnOrder
|
|
394
|
+
* @param {*} tableColumns
|
|
395
|
+
*
|
|
396
|
+
* @returns {Array}
|
|
397
|
+
**/
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
exports.getColumnOrder = getColumnOrder;
|
|
401
|
+
|
|
402
|
+
var getCleanedColumnOrder = function getCleanedColumnOrder(columnOrder, columns) {
|
|
403
|
+
var nextColumnOrder = [];
|
|
404
|
+
/**
|
|
405
|
+
* Step 1: Handle generating or retrieving proper column order.
|
|
406
|
+
*/
|
|
407
|
+
|
|
408
|
+
if (columnOrder && columnOrder.length > 0) {
|
|
409
|
+
nextColumnOrder = columnOrder;
|
|
410
|
+
} else if (columns && columns.length > 0) {
|
|
411
|
+
columns.forEach(function (column) {
|
|
412
|
+
if (!column.deleted) nextColumnOrder.push(column._id);
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Step 2: Remove column Ids from columnOrder for columns that no longer exist or have been deleted
|
|
417
|
+
*/
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
var columnLookup = {};
|
|
421
|
+
columns.forEach(function (column) {
|
|
422
|
+
return columnLookup[column._id] = column && !column.deleted;
|
|
423
|
+
});
|
|
424
|
+
nextColumnOrder = nextColumnOrder.filter(function (columnId) {
|
|
425
|
+
return columnLookup[columnId];
|
|
426
|
+
});
|
|
427
|
+
/**
|
|
428
|
+
* Step 3: Remove any duplicate column Id references in the column order.
|
|
429
|
+
*/
|
|
430
|
+
|
|
431
|
+
var filteredNextColumnOrder = [];
|
|
432
|
+
nextColumnOrder.forEach(function (columnId) {
|
|
433
|
+
if (columnId && filteredNextColumnOrder.indexOf(columnId) === -1) filteredNextColumnOrder.push(columnId);
|
|
434
|
+
});
|
|
435
|
+
return filteredNextColumnOrder;
|
|
436
|
+
};
|
|
389
437
|
/**
|
|
390
438
|
* Get table columns with added operands. Operands are the A, B, C, etc.
|
|
391
439
|
*/
|
|
392
440
|
|
|
393
441
|
|
|
394
|
-
exports.
|
|
442
|
+
exports.getCleanedColumnOrder = getCleanedColumnOrder;
|
|
395
443
|
|
|
396
444
|
var getColumns = function getColumns(columns) {
|
|
397
445
|
var parsedColumns = columns;
|
|
@@ -698,7 +746,9 @@ var generateTableLookup = function generateTableLookup(rows, columns) {
|
|
|
698
746
|
if (!column.operand) return;
|
|
699
747
|
var cellKey = "".concat(column.operand).concat(rowIndex + 1);
|
|
700
748
|
var cellRawValue = row.cells[column._id] ? row.cells[column._id] : undefined;
|
|
701
|
-
var cellValue
|
|
749
|
+
var cellValue;
|
|
750
|
+
if (cellRawValue && typeof cellRawValue === 'string') cellValue = cellRawValue.trim();
|
|
751
|
+
if (cellRawValue && typeof cellRawValue === 'number') cellValue = cellRawValue.toString();
|
|
702
752
|
var formulaCell = cellValue !== undefined && cellValue.charAt(0) === '=';
|
|
703
753
|
var containsOperands = cellValue !== undefined && cellValue.match(/[A-Z]([0-9]{1,10})/gi);
|
|
704
754
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@builttocreate/engine-utils",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.0-beta.1",
|
|
4
4
|
"description": "Utility library for common logic shared across web and mobile",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"type": "git",
|
|
24
24
|
"url": "git+https://github.com/zionlabs/engine-utils.git"
|
|
25
25
|
},
|
|
26
|
-
"author": "
|
|
26
|
+
"author": "Joyfill Team",
|
|
27
27
|
"license": "ISC",
|
|
28
28
|
"bugs": {
|
|
29
29
|
"url": "https://github.com/zionlabs/engine-utils/issues"
|