@builttocreate/engine-utils 1.10.0-rc1 → 1.11.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.
@@ -87,6 +87,7 @@ var addDocumentDataToActivities = function addDocumentDataToActivities(activitie
87
87
  }
88
88
 
89
89
  var fieldValues = doc && doc.fields ? doc.fields : null;
90
+ var fieldSettings = doc && doc.fieldSettings ? doc.fieldSettings : {};
90
91
  if (!activities || activities.length < 1 || !templateFieldLookup || !fieldValues) return activities;
91
92
  var fieldRowsLookup = {};
92
93
  var fieldRowIndexLookup = {};
@@ -94,7 +95,7 @@ var addDocumentDataToActivities = function addDocumentDataToActivities(activitie
94
95
  activities.forEach(function (activity) {
95
96
  var nextActivity = _objectSpread({}, activity);
96
97
 
97
- if (activity.document && activity.document._id && activity.document.field) {
98
+ if (activity.document && activity.document.field) {
98
99
  var docFieldValue = fieldValues[activity.document.field];
99
100
  var templateField = templateFieldLookup[activity.document.field];
100
101
  nextActivity.document.title = templateField.title;
@@ -129,7 +130,7 @@ var addDocumentDataToActivities = function addDocumentDataToActivities(activitie
129
130
 
130
131
 
131
132
  if (!fieldRowIndexLookup[templateField._id]) {
132
- fieldRowIndexLookup[templateField._id] = (0, _tableHelper.getRowIndexLookup)(templateField._id, template.fieldSettings, docFieldValue);
133
+ fieldRowIndexLookup[templateField._id] = (0, _tableHelper.getRowIndexLookup)(templateField._id, fieldSettings, docFieldValue);
133
134
  }
134
135
  /**
135
136
  * Table Step 3: Add row and rowIndex to the activity.document object for easy reference.
@@ -138,8 +139,10 @@ var addDocumentDataToActivities = function addDocumentDataToActivities(activitie
138
139
  */
139
140
 
140
141
 
141
- nextActivity.document.value = fieldRowsLookup[activity.document.field][activity.document.row];
142
- nextActivity.document.rowIndex = fieldRowIndexLookup[activity.document.field][activity.document.row];
142
+ if (fieldRowsLookup[activity.document.field] && fieldRowIndexLookup[activity.document.field]) {
143
+ nextActivity.document.value = fieldRowsLookup[activity.document.field][activity.document.row];
144
+ nextActivity.document.rowIndex = fieldRowIndexLookup[activity.document.field][activity.document.row];
145
+ }
143
146
  } else if (docFieldValue && templateField.type === _FieldTypes["default"].inputGroup) {
144
147
  /**
145
148
  * Input Group Step 1: create an easy way to lookup a row with the dropdown cells populated.
@@ -153,7 +156,9 @@ var addDocumentDataToActivities = function addDocumentDataToActivities(activitie
153
156
  * whole row because input group display components are treated like regular field and not like table rows.
154
157
  */
155
158
 
156
- nextActivity.document.value = fieldRowsLookup[activity.document.field][activity.document.row].cells[activity.document.column];
159
+ if (fieldRowsLookup[activity.document.field] && fieldRowsLookup[activity.document.field][activity.document.row] && fieldRowsLookup[activity.document.field][activity.document.row].cells[activity.document.column]) {
160
+ nextActivity.document.value = fieldRowsLookup[activity.document.field][activity.document.row].cells[activity.document.column];
161
+ }
157
162
  } else if (docFieldValue && templateField.type === _FieldTypes["default"].multiSelect) {
158
163
  var parsedDocFieldValue = docFieldValue && typeof docFieldValue === 'string' ? docFieldValue.split(',') : docFieldValue;
159
164
  var _nextDocFieldValue = '';
@@ -161,7 +166,8 @@ var addDocumentDataToActivities = function addDocumentDataToActivities(activitie
161
166
  if (parsedDocFieldValue.length > 0) {
162
167
  parsedDocFieldValue.forEach(function (item) {
163
168
  var option = templateField.optionsLookup[item];
164
- _nextDocFieldValue = _nextDocFieldValue.concat(' ', option.value);
169
+ if (!option) return;
170
+ _nextDocFieldValue = _nextDocFieldValue.concat(option.value, ', ');
165
171
  });
166
172
  }
167
173
 
@@ -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["default"] = exports.getTemplateWithLookups = exports.getImportFieldValues = exports.getDefaultFieldValuesFromTemplate = exports.getMultiSelectFieldValue = exports.getChartFieldValue = void 0;
8
+ exports["default"] = exports.getTemplateWithLookups = exports.getImportFieldValues = exports.getDefaultFieldValuesFromTemplate = exports.handleMultiSelectOptionToggle = exports.getMultiSelectFieldValue = exports.getChartFieldValue = void 0;
9
9
 
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
 
@@ -55,13 +55,44 @@ exports.getChartFieldValue = getChartFieldValue;
55
55
 
56
56
  var getMultiSelectFieldValue = function getMultiSelectFieldValue(value) {
57
57
  if (value && typeof value === 'string') {
58
- return value.split(',');
58
+ return value.replace(/\s/g, '').split(',');
59
59
  } else if (value && (0, _typeof2["default"])(value) === 'object') {
60
60
  return (0, _toConsumableArray2["default"])(value);
61
61
  } else {
62
62
  return [];
63
63
  }
64
64
  };
65
+ /**
66
+ * Update the selected options.
67
+ *
68
+ * @param (Bool) multi
69
+ * @param (Array) selectedOptions //[optionId, optionId, ...]
70
+ * @param (String) optionId //Option that is being toggled
71
+ */
72
+
73
+
74
+ exports.getMultiSelectFieldValue = getMultiSelectFieldValue;
75
+
76
+ var handleMultiSelectOptionToggle = function handleMultiSelectOptionToggle(multi) {
77
+ var selectedOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
78
+ var optionId = arguments.length > 2 ? arguments[2] : undefined;
79
+ var nextSelection = (0, _toConsumableArray2["default"])(selectedOptions);
80
+ var optionIndex = nextSelection.indexOf(optionId);
81
+
82
+ if (optionIndex !== -1) {
83
+ nextSelection.splice(optionIndex, 1);
84
+ } else if (multi) {
85
+ nextSelection.push(optionId);
86
+ } else {
87
+ nextSelection = [optionId];
88
+ }
89
+
90
+ if (multi) {
91
+ return nextSelection;
92
+ } else {
93
+ return nextSelection[0] || '';
94
+ }
95
+ };
65
96
  /**
66
97
  * Get default field values from template
67
98
  *
@@ -70,7 +101,7 @@ var getMultiSelectFieldValue = function getMultiSelectFieldValue(value) {
70
101
  */
71
102
 
72
103
 
73
- exports.getMultiSelectFieldValue = getMultiSelectFieldValue;
104
+ exports.handleMultiSelectOptionToggle = handleMultiSelectOptionToggle;
74
105
 
75
106
  var getDefaultFieldValuesFromTemplate = function getDefaultFieldValuesFromTemplate(template, defaultUserId) {
76
107
  var fields = {};
@@ -231,6 +262,7 @@ exports.getTemplateWithLookups = getTemplateWithLookups;
231
262
  var _default = {
232
263
  getChartFieldValue: getChartFieldValue,
233
264
  getMultiSelectFieldValue: getMultiSelectFieldValue,
265
+ handleMultiSelectOptionToggle: handleMultiSelectOptionToggle,
234
266
  getDefaultFieldValuesFromTemplate: getDefaultFieldValuesFromTemplate,
235
267
  getImportFieldValues: getImportFieldValues,
236
268
  getTemplateWithLookups: getTemplateWithLookups
@@ -15,6 +15,8 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
15
15
 
16
16
  var _shortid = _interopRequireDefault(require("shortid"));
17
17
 
18
+ var _moment = _interopRequireDefault(require("moment"));
19
+
18
20
  var _hotFormulaParser = require("@builttocreate/hot-formula-parser");
19
21
 
20
22
  var _Table = _interopRequireWildcard(require("./constants/Table"));
@@ -39,7 +41,7 @@ exports.getTableFieldLookupKey = getTableFieldLookupKey;
39
41
 
40
42
  var getDefaultRow = function getDefaultRow() {
41
43
  return {
42
- _id: _shortid["default"].generate(),
44
+ _id: "".concat(_shortid["default"].generate()).concat((0, _moment["default"])().valueOf()),
43
45
  deleted: false,
44
46
  cells: {}
45
47
  };
@@ -98,6 +100,17 @@ var getFilteredRowOrder = function getFilteredRowOrder(rowOrder, rows, filters)
98
100
  return row._id;
99
101
  });
100
102
  }
103
+ /**
104
+ * Remove any duplicate rowIds. We have had instances where
105
+ * users encounter duplicate rowIds in the rowOrder.
106
+ * See: https://github.com/zionlabs/Issues/issues/1589
107
+ */
108
+
109
+
110
+ var cleanedValidRowOrder = [];
111
+ validRowOrder.forEach(function (rowId) {
112
+ if (cleanedValidRowOrder.indexOf(rowId) === -1) cleanedValidRowOrder.push(rowId);
113
+ });
101
114
 
102
115
  if (filteredColumnIds.length > 0) {
103
116
  var matchedRows = {};
@@ -111,11 +124,11 @@ var getFilteredRowOrder = function getFilteredRowOrder(rowOrder, rows, filters)
111
124
  });
112
125
  if (rowMatched) matchedRows[row._id] = true;
113
126
  });
114
- return validRowOrder.filter(function (rowId) {
127
+ return cleanedValidRowOrder.filter(function (rowId) {
115
128
  return matchedRows[rowId];
116
129
  });
117
130
  } else {
118
- return validRowOrder;
131
+ return cleanedValidRowOrder;
119
132
  }
120
133
  };
121
134
  /**
@@ -657,7 +670,7 @@ var generateInputGroupFields = function generateInputGroupFields(field, columns)
657
670
  activity.forEach(function (act) {
658
671
  var rowId = act.document.row;
659
672
  var columnId = act.document.column;
660
- var cellKey = "".concat(field._id, "-").concat(rowId, "-").concat(columnId);
673
+ var cellKey = "".concat(field._id).concat(rowId).concat(columnId);
661
674
  if (!cellActivityLookup[cellKey]) cellActivityLookup[cellKey] = 0;
662
675
  cellActivityLookup[cellKey] += 1;
663
676
  });
@@ -671,7 +684,7 @@ var generateInputGroupFields = function generateInputGroupFields(field, columns)
671
684
  */
672
685
 
673
686
  tableReferences.push({
674
- uniqueId: "".concat(field._id, "-").concat(row._id),
687
+ uniqueId: "".concat(field._id).concat(row._id),
675
688
  _id: field._id,
676
689
  title: field.title,
677
690
  type: _Table.inputGroupFieldTypes.inputGroupRowHeader,
@@ -690,7 +703,7 @@ var generateInputGroupFields = function generateInputGroupFields(field, columns)
690
703
  var lastColumnIndex = columnIndex === tableColumns.length - 1;
691
704
  var value = row && row.cells ? row.cells[column._id] : '';
692
705
  var displayValue = column.type === _FieldTableColumnTypes["default"].dropdown ? columnOptionValueLookup[column._id][value] : value;
693
- var cellKey = "".concat(field._id, "-").concat(row._id, "-").concat(column._id);
706
+ var cellKey = "".concat(field._id).concat(row._id).concat(column._id);
694
707
  tableReferences.push({
695
708
  uniqueId: cellKey,
696
709
  _id: field._id,
@@ -768,7 +781,7 @@ exports.getTableRowLookupWithPopulatedDropdownCells = getTableRowLookupWithPopul
768
781
 
769
782
  var getInputGroupRowLookupWithPopulatedDropdownCells = function getInputGroupRowLookupWithPopulatedDropdownCells(columns, rows) {
770
783
  var rowsLookup = {};
771
- var validRows = typeof row === 'string' ? JSON.parse(rows) : rows;
784
+ var validRows = typeof rows === 'string' ? JSON.parse(rows) : rows;
772
785
  validRows.forEach(function (row) {
773
786
  var nextRow = _objectSpread(_objectSpread({}, row), {}, {
774
787
  cells: _objectSpread({}, row.cells)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@builttocreate/engine-utils",
3
- "version": "1.10.0-rc1",
3
+ "version": "1.11.0",
4
4
  "description": "Utility library for common logic shared across web and mobile",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -46,6 +46,7 @@
46
46
  "dependencies": {
47
47
  "@babel/polyfill": "^7.12.1",
48
48
  "@builttocreate/hot-formula-parser": "4.0.1",
49
+ "moment": "^2.29.1",
49
50
  "shortid": "^2.2.16"
50
51
  },
51
52
  "jest": {