@builttocreate/engine-utils 2.6.0-beta.23 → 2.6.0-beta.24

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.
@@ -824,8 +824,7 @@ var formatTableFieldPositions = function formatTableFieldPositions(fieldPosition
824
824
  * We use these lookups because multiple table fieldPositions belonging to the same table
825
825
  * field will all use the same table value calculated lookup.
826
826
  */
827
- var tableFieldLookups = {};
828
- var tableFieldColumnLookups = {};
827
+ var tableFieldLookup = {};
829
828
  var nextFieldPositions = [];
830
829
  (0, _toConsumableArray2["default"])(fieldPositions).forEach(function (fieldPosition) {
831
830
  var nextFieldPosition = _objectSpread({}, fieldPosition);
@@ -839,37 +838,57 @@ var formatTableFieldPositions = function formatTableFieldPositions(fieldPosition
839
838
  rowOrder = fieldPosition.rowOrder,
840
839
  tableColumnOrder = fieldPosition.tableColumnOrder;
841
840
  /**
842
- * Value will include deleted rows as well. We are removing the deleted rows
843
- * since we want to compute the cellValue and calculatedCellValue only
844
- * with undeleted table rows
841
+ * Step 1: Generate rows, rowOrder, tableColumns, etc. lookups for associated field. We only have to
842
+ * do this once per-field. This increases performance if there are multiple form positions associated
843
+ * with the same form.
845
844
  */
846
845
 
847
- var rows = (0, _tableHelper.getRows)(value);
848
- var nextRowOrder = (0, _tableHelper.getRowOrder)(rowOrder, value);
846
+ if (!tableFieldLookup[field]) {
847
+ /**
848
+ * Step 1.1 Handle rows
849
+ */
850
+ var nextRows = (0, _tableHelper.getRows)(value);
851
+ var nextRowOrder = (0, _tableHelper.getCleanedRowOrder)(rowOrder, nextRows);
852
+ var nextSortedRows = (0, _tableHelper.sortRows)(nextRows, nextRowOrder);
853
+ /**
854
+ * Step 1.2 Handle columns
855
+ */
849
856
 
850
- if (!tableFieldColumnLookups[field]) {
851
- var fieldColumnLookup = {};
852
- (0, _tableHelper.getColumns)((0, _tableHelper.sortColumns)(tableColumns, tableColumnOrder)).forEach(function (column) {
853
- return fieldColumnLookup[column._id] = column;
857
+ var nextTableColumnOrder = (0, _tableHelper.getCleanedColumnOrder)(tableColumnOrder, tableColumns);
858
+ var nextSortedTableColumns = (0, _tableHelper.sortColumns)(tableColumns, nextTableColumnOrder);
859
+ var nextTableColumns = (0, _tableHelper.getColumns)(nextSortedTableColumns);
860
+ var nextTableColumnLookup = {};
861
+ nextTableColumns.forEach(function (column) {
862
+ return nextTableColumnLookup[column._id] = column;
854
863
  });
855
- tableFieldColumnLookups[field] = fieldColumnLookup;
856
- }
864
+ /**
865
+ * Step 1.3 Handle cell calculations
866
+ */
857
867
 
858
- if (!tableFieldLookups[field]) {
859
- var fieldTableLookup = (0, _tableHelper.generateTableLookup)(rows, (0, _tableHelper.sortColumns)(tableColumns, tableColumnOrder));
860
- tableFieldLookups[field] = fieldTableLookup;
868
+ var calculatedValue = (0, _tableHelper.generateTableLookup)(nextSortedRows, nextSortedTableColumns);
869
+ tableFieldLookup[field] = {
870
+ value: nextSortedRows,
871
+ rowOrder: nextRowOrder,
872
+ tableColumns: nextTableColumns,
873
+ tableColumnOrder: nextTableColumnOrder,
874
+ tableColumnLookup: nextTableColumnLookup,
875
+ calculatedValue: calculatedValue
876
+ };
861
877
  }
862
878
  /**
863
- * Ensure each table field has a properly formatted rowOrder
879
+ * Ensure each table field has a properly formatted properties
864
880
  */
865
881
 
866
882
 
867
- if (!nextFieldPosition.rowOrder) nextFieldPosition.rowOrder = nextRowOrder;
883
+ nextFieldPosition.value = tableFieldLookup[field].value;
884
+ nextFieldPosition.rowOrder = tableFieldLookup[field].rowOrder;
885
+ nextFieldPosition.tableColumns = tableFieldLookup[field].tableColumns;
886
+ nextFieldPosition.tableColumnOrder = tableFieldLookup[field].tableColumnOrder;
868
887
  /**
869
888
  * Add calculated value lookup. For instance, { A1: '', B1: '', C1: '', ... }
870
889
  */
871
890
 
872
- if (!nextFieldPosition.calculatedValue) nextFieldPosition.calculatedValue = tableFieldLookups[field];
891
+ nextFieldPosition.calculatedValue = tableFieldLookup[field].calculatedValue;
873
892
  /**
874
893
  * Individual Table Cell vs Entire Table
875
894
  *
@@ -891,8 +910,8 @@ var formatTableFieldPositions = function formatTableFieldPositions(fieldPosition
891
910
  * with it (ie rows[rowIndex] is undefined) it means that particular row is deleted
892
911
  */
893
912
 
894
- if (tableFieldLookups[field] && column && typeof rowIndex === 'number') {
895
- var _rows$targetRowIndex;
913
+ if (tableFieldLookup[field] && column && typeof rowIndex === 'number') {
914
+ var _tableFieldLookup$fie;
896
915
 
897
916
  /**
898
917
  * What is the difference between rowIndex and targetRowIndex?
@@ -905,10 +924,10 @@ var formatTableFieldPositions = function formatTableFieldPositions(fieldPosition
905
924
  * order. The rowOrder is updated when users insert rows, move rows up or down, etc. it manages where rows
906
925
  * are at in the list and how they should be rendered. This is why the rowIndex uses the rowOrder.
907
926
  */
908
- var targetColumn = tableFieldColumnLookups[field][column];
909
- var targetRowId = nextRowOrder[rowIndex];
910
- var targetRowIndex = rows.findIndex(function (row) {
911
- return row._id === targetRowId;
927
+ var targetColumn = tableFieldLookup[field].tableColumnLookup[column];
928
+ var targetRowId = tableFieldLookup[field].rowOrder[rowIndex];
929
+ var targetRowIndex = tableFieldLookup[field].value.findIndex(function (row) {
930
+ return (row === null || row === void 0 ? void 0 : row._id) === targetRowId;
912
931
  });
913
932
  /**
914
933
  * Add proper rowId to the field position so that it can be used
@@ -921,10 +940,14 @@ var formatTableFieldPositions = function formatTableFieldPositions(fieldPosition
921
940
  * at the particular rowIndex was deleted
922
941
  */
923
942
 
924
- nextFieldPosition.cellValue = ((_rows$targetRowIndex = rows[targetRowIndex]) === null || _rows$targetRowIndex === void 0 ? void 0 : _rows$targetRowIndex.cells[column]) || ''; //targetColumn will appear as undefined if a column is deleted
943
+ nextFieldPosition.cellValue = ((_tableFieldLookup$fie = tableFieldLookup[field].value[targetRowIndex]) === null || _tableFieldLookup$fie === void 0 ? void 0 : _tableFieldLookup$fie.cells[column]) || '';
944
+ /**
945
+ * Skip any individual field position that is associated with a deleted column.
946
+ * targetColumn will appear as undefined if a column is deleted
947
+ */
925
948
 
926
949
  if (targetColumn) {
927
- nextFieldPosition.calculatedCellValue = tableFieldLookups[field]["".concat(targetColumn.operand).concat(targetRowIndex + 1)];
950
+ nextFieldPosition.calculatedCellValue = tableFieldLookup[field].calculatedValue["".concat(targetColumn.operand).concat(targetRowIndex + 1)];
928
951
  nextFieldPosition.columnType = targetColumn.type;
929
952
  nextFieldPosition.options = targetColumn.options;
930
953
  nextFieldPosition.columnIdentifier = targetColumn.identifier;
@@ -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.getColumnOrder = getColumnOrder;
442
+ exports.getCleanedColumnOrder = getCleanedColumnOrder;
395
443
 
396
444
  var getColumns = function getColumns(columns) {
397
445
  var parsedColumns = columns;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@builttocreate/engine-utils",
3
- "version": "2.6.0-beta.23",
3
+ "version": "2.6.0-beta.24",
4
4
  "description": "Utility library for common logic shared across web and mobile",
5
5
  "main": "dist/index.js",
6
6
  "files": [