@builttocreate/engine-utils 2.9.1-beta.1 → 2.9.1-beta.758

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.
@@ -1,1177 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof3 = require("@babel/runtime/helpers/typeof");
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- 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.getDefaultNumberColumn = exports.getDefaultImageColumn = exports.getDefaultDropdownColumn = exports.getDefaultDateColumn = 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;
9
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
- var _hotFormulaParser = require("@builttocreate/hot-formula-parser");
13
- var _generateObjectId = _interopRequireDefault(require("./generateObjectId"));
14
- var _Table = _interopRequireWildcard(require("./constants/Table"));
15
- var _FieldTypes = _interopRequireDefault(require("./constants/FieldTypes"));
16
- var _FieldTableColumnTypes = _interopRequireDefault(require("./constants/FieldTableColumnTypes"));
17
- var _FieldTableCustomColumnIds = _interopRequireDefault(require("./constants/FieldTableCustomColumnIds"));
18
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
19
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) { if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } } return n["default"] = e, t && t.set(e, n), n; }
20
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
22
- var parser = new _hotFormulaParser.Parser();
23
- var getTableFieldLookupKey = exports.getTableFieldLookupKey = function getTableFieldLookupKey(fieldId, rowIndex, columnId) {
24
- return "".concat(fieldId, "-").concat(rowIndex, "-").concat(columnId);
25
- };
26
- var getDefaultRow = exports.getDefaultRow = function getDefaultRow() {
27
- return {
28
- _id: (0, _generateObjectId["default"])(),
29
- deleted: false,
30
- cells: {}
31
- };
32
- };
33
- var getRows = exports.getRows = function getRows(rows) {
34
- var parsedRows = rows;
35
- if (typeof parsedRows === 'string') {
36
- parsedRows = JSON.parse(parsedRows);
37
- }
38
- return parsedRows ? parsedRows.filter(function (row) {
39
- return !row.deleted;
40
- }) : [];
41
- };
42
-
43
- /**
44
- * Sort rows based on rowOrder
45
- */
46
- var sortRows = exports.sortRows = function sortRows(rows, rowOrder) {
47
- if (!rowOrder) return rows;
48
- var rowLookup = {};
49
- rows.forEach(function (row) {
50
- rowLookup[row._id] = row;
51
- });
52
- var sortedRows = [];
53
- rowOrder.forEach(function (rowId) {
54
- if (rowLookup[rowId]) sortedRows.push(rowLookup[rowId]);
55
- });
56
- return sortedRows;
57
- };
58
-
59
- /**
60
- * Filter table row order by cell values
61
- *
62
- * @param {Array} rowOrder
63
- * @param {Array} rows
64
- * @param {Object} filters //{ colId: value, colId: value, ....}
65
- */
66
- var getFilteredRowOrder = exports.getFilteredRowOrder = function getFilteredRowOrder(rowOrder, rows, filters) {
67
- var filteredColumnIds = filters ? Object.keys(filters) : [];
68
- var validRowOrder = rowOrder;
69
- if (!validRowOrder) {
70
- var validRows = rows ? getRows(rows) : [];
71
- validRowOrder = validRows.map(function (row) {
72
- return row._id;
73
- });
74
- }
75
-
76
- /**
77
- * Remove any duplicate rowIds. We have had instances where
78
- * users encounter duplicate rowIds in the rowOrder.
79
- * See: https://github.com/zionlabs/Issues/issues/1589
80
- */
81
- var cleanedValidRowOrder = [];
82
- validRowOrder.forEach(function (rowId) {
83
- if (cleanedValidRowOrder.indexOf(rowId) === -1) cleanedValidRowOrder.push(rowId);
84
- });
85
- if (filteredColumnIds.length > 0) {
86
- var matchedRows = {};
87
- rows.forEach(function (row) {
88
- if (row.deleted) return;
89
- var rowMatched = true;
90
- filteredColumnIds.forEach(function (columnId) {
91
- /**
92
- * The following logic compares the filter value with the cell value.
93
- *
94
- * 1. For table text columns, the cell value is a string.
95
- * 2. For table number columns, the cell value is a number.
96
- */
97
-
98
- var filter = '';
99
- if (filters[columnId] && typeof filters[columnId] === 'string') {
100
- filter = filters[columnId].toLowerCase();
101
- } else if (filters[columnId] && typeof filters[columnId] === 'number') {
102
- filter = filters[columnId];
103
- }
104
- var value = '';
105
- if (row.cells && row.cells[columnId]) {
106
- if (typeof row.cells[columnId] === 'string') {
107
- value = row.cells[columnId].toLowerCase();
108
- } else if (typeof row.cells[columnId] === 'number') {
109
- value = row.cells[columnId];
110
- }
111
- }
112
- if (filter && typeof value === 'string' && (!value || value.indexOf(filter) === -1)) rowMatched = false;
113
- if (filter && typeof value === 'number' && (!value || value !== filter)) rowMatched = false;
114
- });
115
- if (rowMatched) matchedRows[row._id] = true;
116
- });
117
- return cleanedValidRowOrder.filter(function (rowId) {
118
- return matchedRows[rowId];
119
- });
120
- } else {
121
- return cleanedValidRowOrder;
122
- }
123
- };
124
-
125
- /**
126
- * Create a table row map for simple value lookup
127
- *
128
- * For instance:
129
- * {
130
- * rowId: {columnId: value, columnId: value, ...},
131
- * rowId: {columnId: value, columnId: value, ...},
132
- * rowId: {columnId: value, columnId: value, ...}
133
- * }
134
- *
135
- * @param {Array} rows
136
- * @return {Object}
137
- */
138
- var getRowMap = exports.getRowMap = function getRowMap() {
139
- var rows = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
140
- var items = getRows(rows);
141
- var rowMap = {};
142
- items.forEach(function (row) {
143
- return rowMap[row._id] = row.cells || {};
144
- });
145
- return rowMap;
146
- };
147
-
148
- /**
149
- * Get row order
150
- *
151
- * @param {Array} rows
152
- * @param {Array} rowOrder
153
- *
154
- * @return {Array}
155
- */
156
- var getRowOrder = exports.getRowOrder = function getRowOrder(rowOrder, rows) {
157
- return rowOrder || getRows(rows).map(function (row) {
158
- return row._id;
159
- });
160
- };
161
-
162
- /**
163
- * Get row order for table field. If there isn't a row order set in the
164
- * fieldSettings then it will default to the normal row array Ids.
165
- *
166
- * @param {String} fieldId
167
- * @param {Object} fieldSettings
168
- * @param {Array} rows
169
- *
170
- * @return {Array}
171
- */
172
- var getTableFieldRowOrder = exports.getTableFieldRowOrder = function getTableFieldRowOrder(fieldId, fieldSettings, rows) {
173
- var filteredRows = rows ? getRows(rows) : [];
174
- return fieldSettings && fieldSettings[fieldId] && fieldSettings[fieldId].rowOrder ? (0, _toConsumableArray2["default"])(fieldSettings[fieldId].rowOrder) : filteredRows.map(function (row) {
175
- return row._id;
176
- });
177
- };
178
-
179
- /**
180
- * This method removes the rowIds of the deleted rows (or) any duplicate rowIds
181
- * from the rowOrder there by returning a cleaned rowOrder
182
- * @param {*} rowOrder
183
- * @param {*} rows
184
- *
185
- * @returns {Array}
186
- **/
187
- var getCleanedRowOrder = exports.getCleanedRowOrder = function getCleanedRowOrder(rowOrder, rows) {
188
- var nextRowOrder = [];
189
-
190
- /**
191
- * Step 1: Handle generating or retrieving proper row order.
192
- */
193
- if (rowOrder && rowOrder.length > 0) {
194
- nextRowOrder = rowOrder;
195
- } else if (rows && rows.length > 0) {
196
- rows.forEach(function (row) {
197
- if (!row.deleted) nextRowOrder.push(row._id);
198
- });
199
- }
200
-
201
- /**
202
- * Step 2: Remove row Ids from rowOrder for rows that no longer exist or have been deleted
203
- */
204
- var rowLookup = {};
205
- rows.forEach(function (row) {
206
- return rowLookup[row._id] = row && !row.deleted;
207
- });
208
- nextRowOrder = nextRowOrder.filter(function (rowId) {
209
- return rowLookup[rowId];
210
- });
211
-
212
- /**
213
- * Step 3: Remove any duplicate row Id references in the row order.
214
- */
215
- var filteredNextRowOrder = [];
216
- nextRowOrder.forEach(function (rowId) {
217
- if (rowId && filteredNextRowOrder.indexOf(rowId) === -1) filteredNextRowOrder.push(rowId);
218
- });
219
- return filteredNextRowOrder;
220
- };
221
-
222
- /**
223
- * Handle Move Column Left
224
- *
225
- * @param {Number} columnIndex
226
- * @param {Func} callback
227
- */
228
- var handleMoveColumnLeft = exports.handleMoveColumnLeft = function handleMoveColumnLeft(columnIndex, callback) {
229
- //If first index then ignore
230
- if (columnIndex === 0) return;
231
- var targetIndex = columnIndex - 1;
232
- if (callback) callback({
233
- targetIndex: targetIndex
234
- });
235
- };
236
-
237
- /**
238
- * Handle Move Column Right
239
- *
240
- * @param {Array} columns
241
- * @param {Number} columnIndex
242
- * @param {Func} callback
243
- */
244
- var handleMoveColumnRight = exports.handleMoveColumnRight = function handleMoveColumnRight(columns, columnIndex, callback) {
245
- //If last column index then ignore
246
- if (columnIndex >= columns.length - 1) return;
247
- var targetIndex = columnIndex + 1;
248
- if (callback) callback({
249
- targetIndex: targetIndex
250
- });
251
- };
252
-
253
- /**
254
- * Get default column option
255
- *
256
- * @param {String} value
257
- * @return {Object}
258
- */
259
- var getDefaultColumnOption = exports.getDefaultColumnOption = function getDefaultColumnOption(value) {
260
- return {
261
- _id: (0, _generateObjectId["default"])(),
262
- value: value || 'Option',
263
- deleted: false
264
- };
265
- };
266
-
267
- /**
268
- * Get default text column for table field
269
- *
270
- * @param {Object} defaults //Overwrite any values with this defaults object
271
- *
272
- * @return {Object}
273
- */
274
- var getDefaultTextColumn = exports.getDefaultTextColumn = function getDefaultTextColumn() {
275
- var defaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
276
- return _objectSpread({
277
- _id: (0, _generateObjectId["default"])(),
278
- type: _FieldTableColumnTypes["default"].text,
279
- title: 'Text Column',
280
- width: 200,
281
- deleted: false
282
- }, defaults);
283
- };
284
-
285
- /**
286
- * Get default Number column for table field
287
- *
288
- * @param {Object} defaults //Overwrite any values with this defaults object
289
- *
290
- * @return {Object}
291
- */
292
- var getDefaultNumberColumn = exports.getDefaultNumberColumn = function getDefaultNumberColumn() {
293
- var defaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
294
- return _objectSpread({
295
- _id: (0, _generateObjectId["default"])(),
296
- type: _FieldTableColumnTypes["default"].number,
297
- title: 'Number Column',
298
- deleted: false,
299
- width: 200
300
- }, defaults);
301
- };
302
-
303
- /**
304
- * Get default Number column for table field
305
- *
306
- * @param {Object} defaults //Overwrite any values with this defaults object
307
- *
308
- * @return {Object}
309
- */
310
- var getDefaultDateColumn = exports.getDefaultDateColumn = function getDefaultDateColumn() {
311
- var defaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
312
- return _objectSpread({
313
- _id: (0, _generateObjectId["default"])(),
314
- type: _FieldTableColumnTypes["default"].date,
315
- title: 'Date Column',
316
- deleted: false,
317
- width: 200
318
- }, defaults);
319
- };
320
-
321
- /**
322
- * Get default dropdown column for table field
323
- *
324
- * @param {Object} defaults //Overwrite any values with this defaults object
325
- *
326
- * @return {Object}
327
- */
328
- var getDefaultImageColumn = exports.getDefaultImageColumn = function getDefaultImageColumn() {
329
- var defaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
330
- return _objectSpread({
331
- _id: (0, _generateObjectId["default"])(),
332
- type: _FieldTableColumnTypes["default"].image,
333
- title: 'Image Column',
334
- deleted: false,
335
- width: 200,
336
- maxImageWidth: 190,
337
- maxImageHeight: 120
338
- }, defaults);
339
- };
340
-
341
- /**
342
- * Get default dropdown column for table field
343
- *
344
- * @param {Object} defaults //Overwrite any values with this defaults object
345
- *
346
- * @return {Object}
347
- */
348
- var getDefaultDropdownColumn = exports.getDefaultDropdownColumn = function getDefaultDropdownColumn() {
349
- var defaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
350
- var options = defaults.options || [getDefaultColumnOption('Yes'), getDefaultColumnOption('No'), getDefaultColumnOption('N/A')];
351
- return _objectSpread({
352
- _id: (0, _generateObjectId["default"])(),
353
- type: _FieldTableColumnTypes["default"].dropdown,
354
- title: 'Dropdown Column',
355
- deleted: false,
356
- width: 200,
357
- options: options,
358
- optionOrder: options.map(function (option) {
359
- return option._id;
360
- })
361
- }, defaults);
362
- };
363
-
364
- /**
365
- * Get column order
366
- *
367
- * @param {Array} columns
368
- * @param {Array} columnOrder
369
- *
370
- * @return {Array}
371
- */
372
- var getColumnOrder = exports.getColumnOrder = function getColumnOrder(columnOrder, columns) {
373
- return columnOrder || getColumns(columns).map(function (column) {
374
- return column._id;
375
- });
376
- };
377
-
378
- /**
379
- * This method removes the columnIds of the deleted columns (or) any duplicate columnIds
380
- * from the tableColumnOrder there by returning a cleaned tableColumnOrder
381
- *
382
- * @param {*} tableColumnOrder
383
- * @param {*} tableColumns
384
- *
385
- * @returns {Array}
386
- **/
387
- var getCleanedColumnOrder = exports.getCleanedColumnOrder = function getCleanedColumnOrder(columnOrder, columns) {
388
- var nextColumnOrder = [];
389
-
390
- /**
391
- * Step 1: Handle generating or retrieving proper column order.
392
- */
393
- if (columnOrder && columnOrder.length > 0) {
394
- nextColumnOrder = columnOrder;
395
- } else if (columns && columns.length > 0) {
396
- columns.forEach(function (column) {
397
- if (!column.deleted) nextColumnOrder.push(column._id);
398
- });
399
- }
400
-
401
- /**
402
- * Step 2: Remove column Ids from columnOrder for columns that no longer exist or have been deleted
403
- */
404
- var columnLookup = {};
405
- columns.forEach(function (column) {
406
- return columnLookup[column._id] = column && !column.deleted;
407
- });
408
- nextColumnOrder = nextColumnOrder.filter(function (columnId) {
409
- return columnLookup[columnId];
410
- });
411
-
412
- /**
413
- * Step 3: Remove any duplicate column Id references in the column order.
414
- */
415
- var filteredNextColumnOrder = [];
416
- nextColumnOrder.forEach(function (columnId) {
417
- if (columnId && filteredNextColumnOrder.indexOf(columnId) === -1) filteredNextColumnOrder.push(columnId);
418
- });
419
- return filteredNextColumnOrder;
420
- };
421
-
422
- /**
423
- * Get table columns with added operands. Operands are the A, B, C, etc.
424
- */
425
- var getColumns = exports.getColumns = function getColumns(columns) {
426
- var parsedColumns = columns;
427
- if (typeof parsedColumns === 'string') {
428
- parsedColumns = JSON.parse(parsedColumns);
429
- }
430
- return !parsedColumns ? [] : parsedColumns.filter(function (column) {
431
- return !column.deleted;
432
- }).map(function (column, i) {
433
- var nextColumn = _objectSpread({}, column);
434
- nextColumn.operand = getColumnOperand(i);
435
- return nextColumn;
436
- });
437
- };
438
-
439
- /**
440
- * Sort columns based on columnOrder
441
- */
442
- var sortColumns = exports.sortColumns = function sortColumns(columns, columnOrder) {
443
- if (!columnOrder) return columns;
444
- var columnLookup = {};
445
- columns.forEach(function (col) {
446
- columnLookup[col._id] = col;
447
- });
448
- var sortedColumns = [];
449
- columnOrder.forEach(function (colId) {
450
- if (columnLookup[colId]) sortedColumns.push(columnLookup[colId]);
451
- });
452
- return sortedColumns;
453
- };
454
-
455
- /**
456
- * Get the targetColumn with added operand. Operands are A, B ,C etc...
457
- */
458
- var getTargetColumnWithOperand = exports.getTargetColumnWithOperand = function getTargetColumnWithOperand(columnOrder, columns, columnId) {
459
- var targetColumn = columns.find(function (col) {
460
- return col._id === columnId;
461
- });
462
- var nextTargetColumn = _objectSpread({}, targetColumn);
463
- var targetColumnIndex = columnOrder.findIndex(function (item) {
464
- return item === targetColumn._id;
465
- });
466
- var targetColumnOperand = getColumnOperand(targetColumnIndex);
467
- nextTargetColumn.operand = targetColumnOperand;
468
- return nextTargetColumn;
469
- };
470
-
471
- /**
472
- * Return letter for a column index. For intance: A, B, C
473
- *
474
- * Used to create the table lookup operands: A1, B12, etc.
475
- */
476
- var getColumnOperand = exports.getColumnOperand = function getColumnOperand(index) {
477
- return String.fromCharCode(65 + index);
478
- };
479
-
480
- /**
481
- * Return rowIndex and columnIndex for cellOperand
482
- *
483
- * Operand examples: A1, B12, etc.
484
- *
485
- * @param {String} cellOperand
486
- * @returns {Object}
487
- */
488
- var getIndexesFromTableCellOperand = exports.getIndexesFromTableCellOperand = function getIndexesFromTableCellOperand(cellOperand) {
489
- var letter = cellOperand.match(/[A-Z]*/gi).find(function (value) {
490
- return value;
491
- });
492
- var rowIndex = cellOperand.match(/[0-9]*/gi).find(function (value) {
493
- return value;
494
- });
495
- return {
496
- columnIndex: _Table.operandLetterIndexes[letter],
497
- /**
498
- * Cell operands start at an index of 1. So to get the true
499
- * index for the rowIndex we need to substract 1 so we can
500
- * use a 0 based index.
501
- */
502
- rowIndex: rowIndex - 1
503
- };
504
- };
505
-
506
- /**
507
- * Get operand lookup for all table/inputGroup fields in a template.
508
- *
509
- * For instance: {
510
- * fieldId: { colId: 'A', colId: 'B', ...},
511
- * ....
512
- * }
513
- */
514
- var getTemplateColumnOperandLookup = exports.getTemplateColumnOperandLookup = function getTemplateColumnOperandLookup(template) {
515
- var operandLookup = {};
516
- template.fields.forEach(function (field) {
517
- if (field.type !== _FieldTypes["default"].table && field.type !== _FieldTypes["default"].inputGroup) return;
518
- if (!operandLookup[field._id]) operandLookup[field._id] = {};
519
- var columns = getColumns(field.tableColumns);
520
- columns.forEach(function (col, colIndex) {
521
- operandLookup[field._id][col._id] = getColumnOperand(colIndex);
522
- });
523
- });
524
- return operandLookup;
525
- };
526
-
527
- /**
528
- * Return operand for cell. For intance: A1, B2, C1
529
- *
530
- * @param {String} columnOperand //A, B, C, etc.
531
- * @param {Number} rowIndex
532
- */
533
- var getCellOperand = exports.getCellOperand = function getCellOperand(columnOperand, rowIndex) {
534
- return "".concat(columnOperand).concat(rowIndex);
535
- };
536
-
537
- /**
538
- * Generate table lookup by rowIndex and column operand
539
- *
540
- * For instance:
541
- * {
542
- * rowIndex: {A1: value, B1: value, ...},
543
- * rowIndex: {A2: value, B2: value, ...},
544
- * rowIndex: {A3: value, B3: value, ...},
545
- * ...
546
- * }
547
- *
548
- * @param {Array} rows
549
- * @param {Array} columns
550
- * @param {Object} tableLookup
551
- *
552
- * @return {Object}
553
-
554
- */
555
- var generateRowTableLookup = exports.generateRowTableLookup = function generateRowTableLookup(rows, columns, tableLookup) {
556
- if (!rows || !columns || !tableLookup) return {};
557
- var rowTableLookup = {};
558
- rows.forEach(function (row, rowIndex) {
559
- rowTableLookup[rowIndex] = {};
560
- columns.forEach(function (column, columnIndex) {
561
- var operand = getColumnOperand(columnIndex);
562
- var cellOperand = getCellOperand(operand, rowIndex + 1);
563
- rowTableLookup[rowIndex][cellOperand] = tableLookup[cellOperand];
564
- });
565
- });
566
- return rowTableLookup;
567
- };
568
-
569
- /**
570
- * Generate table lookups for each table field in template. It takes
571
- * all table & inputGroup fields and generates a table lookup object for them.
572
- *
573
- * For instance if you have a template and doc like the ones below:
574
- *
575
- * template: {
576
- * fields: [
577
- * {_id: textFieldId, ...},
578
- * {_id: tableFieldId1, ...},
579
- * {_id: tableFieldId2, ...},
580
- * {_id: numberFieldId, ...},
581
- * ...
582
- * ]
583
- * }
584
- *
585
- * returned object would be: {
586
- * tableFieldId1: { A1: value, B1: value, ...},
587
- * tableFieldId2: { A2: value, B2: value, ...},
588
- * ...
589
- * }
590
- */
591
- var generateTableFieldLookups = exports.generateTableFieldLookups = function generateTableFieldLookups(doc, template) {
592
- var tableFields = template.fields.filter(function (field) {
593
- return (field.type === _FieldTypes["default"].table || field.type === _FieldTypes["default"].inputGroup) && !field.deleted;
594
- });
595
- var tableLookups = {};
596
- tableFields.forEach(function (field) {
597
- var docValue = doc.fields[field._id];
598
- var rows = getRows(docValue);
599
- var columns = getColumns(field.tableColumns);
600
- var docFieldSettings = doc.fieldSettings || {};
601
- var fieldSettings = docFieldSettings[field._id] || {};
602
- var rowOrder = fieldSettings.rowOrder && fieldSettings.rowOrder.length !== 0 ? fieldSettings.rowOrder : rows.map(function (row) {
603
- return row._id;
604
- });
605
- var validRows = sortRows(rows, rowOrder);
606
- tableLookups[field._id] = generateTableLookup(validRows, columns);
607
- });
608
- return tableLookups;
609
- };
610
-
611
- /**
612
- * Organize the table lookup on a row by row basis
613
- * @param {Array} rows
614
- * @param {Array} columns
615
- * @retuns {Object}
616
- *
617
- * Example return object:
618
- * {
619
- * 1: {
620
- * A1: 12,
621
- * B1: 1,
622
- * },
623
- * 2: {
624
- * A2: 10,
625
- * B2: 4,
626
- * },
627
- * ...
628
- * }
629
- *
630
- */
631
- var generateTableLookupForRows = exports.generateTableLookupForRows = function generateTableLookupForRows(rows, columns) {
632
- var tableLookup = generateTableLookup(rows, columns);
633
- var rowLookup = {};
634
- Object.keys(tableLookup).forEach(function (key) {
635
- var rowIndex = key.match(/[0-9]*/gi).find(function (value) {
636
- return value;
637
- });
638
- if (!rowLookup[rowIndex]) rowLookup[rowIndex] = {};
639
- rowLookup[rowIndex][key] = tableLookup[key];
640
- });
641
- return rowLookup;
642
- };
643
-
644
- /**
645
- * Generate Lookup Operand Lookup Table for Table Data. Supports converting
646
- * formula cells to the calculated value.
647
- *
648
- * Operand examples: A1, B12, C25, etc.
649
- *
650
- * @param {Array} rows
651
- * @param {Array} columns
652
- * @retuns {Object}
653
- *
654
- * Example return object:
655
- * {
656
- * A1: 12,
657
- * B1: 1,
658
- * A2: 2,
659
- * B2: 4,
660
- * }
661
- */
662
- var generateTableLookup = exports.generateTableLookup = function generateTableLookup(rows, columns) {
663
- var tableLookup = {};
664
- var columnOptionsLookup = {};
665
- var tableColumns = [];
666
- var filteredColumns = columns.filter(function (column) {
667
- return !column.deleted //Used by both web and mobile
668
- && column._id !== _FieldTableCustomColumnIds["default"].rowMenu //Used on mobile
669
- && column._id !== _FieldTableCustomColumnIds["default"].rowNumber; //Used on mobile
670
- });
671
- filteredColumns.forEach(function (column, i) {
672
- var nextColumn = _objectSpread({}, column);
673
- nextColumn.operand = String.fromCharCode(65 + i);
674
- tableColumns.push(nextColumn);
675
- if (column.type === _FieldTableColumnTypes["default"].dropdown) {
676
- columnOptionsLookup[column._id] = {};
677
- column.options.forEach(function (option) {
678
- columnOptionsLookup[column._id][option._id] = option.value;
679
- });
680
- }
681
- });
682
- var parsedRows = typeof rows === 'string' ? JSON.parse(rows) : rows;
683
- var tableRows = parsedRows.filter(function (row) {
684
- return !row.deleted;
685
- });
686
- var formulaCells = [];
687
- tableRows.forEach(function (row, rowIndex) {
688
- tableColumns.forEach(function (column) {
689
- if (!column.operand) return;
690
- var cellKey = "".concat(column.operand).concat(rowIndex + 1);
691
- var cellRawValue = row.cells[column._id] ? row.cells[column._id] : undefined;
692
- var cellValue;
693
- if (cellRawValue && typeof cellRawValue === 'string') cellValue = cellRawValue.trim();
694
- if (cellRawValue && typeof cellRawValue === 'number') cellValue = cellRawValue.toString();
695
- var formulaCell = cellValue !== undefined && cellValue.charAt(0) === '=';
696
- var containsOperands = cellValue !== undefined && cellValue.match(/[A-Z]([0-9]{1,10})/gi);
697
- if (cellValue && column.type === _FieldTableColumnTypes["default"].dropdown) {
698
- tableLookup[cellKey] = columnOptionsLookup[column._id][cellValue];
699
- } else if ((cellValue || cellRawValue) && column.type === _FieldTableColumnTypes["default"].image) {
700
- tableLookup[cellKey] = cellRawValue;
701
- } else if (cellValue && formulaCell && containsOperands) {
702
- formulaCells.push(cellKey);
703
- tableLookup[cellKey] = cellValue;
704
- } else {
705
- tableLookup[cellKey] = cellValue || '';
706
- }
707
- });
708
- });
709
- formulaCells.forEach(function (sourceOperand) {
710
- var formula = tableLookup[sourceOperand];
711
- var invalidFormulaError = validFormulaString(sourceOperand, formula);
712
- if (invalidFormulaError) return tableLookup[sourceOperand] = invalidFormulaError;
713
- getFormulaResult(sourceOperand, formula, tableLookup);
714
- });
715
- return tableLookup;
716
- };
717
- var getFormulaResult = exports.getFormulaResult = function getFormulaResult(sourceOperand, formula, tableLookup) {
718
- formula = spreadOperandRange(formula);
719
- var invalidFormulaError = validFormulaString(sourceOperand, formula);
720
- if (invalidFormulaError) return tableLookup[sourceOperand] = invalidFormulaError;
721
- var formulaOperands = formula.match(/[A-Z]([0-9]{1,10})/g);
722
- if (!formulaOperands) return tableLookup[sourceOperand] = '*INVALID';
723
- formulaOperands.forEach(function (operand) {
724
- var operandValue = resolveOperandValue(sourceOperand, operand, tableLookup);
725
- formula = formula.replace(operand, operandValue);
726
- });
727
-
728
- /**
729
- * Add leading zeros to decimal numbers. hot-formula-parser throws an
730
- * error if we try to parse non leading decimal numbers. For instace,
731
- * a non leading decimal number is: .7 .001 etc. We convert these
732
- * values to 0.7 & 0.001
733
- */
734
- var noLeadingZeroDecimalMatches = formula.match(/\D\./);
735
- if (noLeadingZeroDecimalMatches && noLeadingZeroDecimalMatches.length > 0) {
736
- noLeadingZeroDecimalMatches.forEach(function (val) {
737
- var splitVals = val.split('');
738
- var prefixCharacter = splitVals[0];
739
- var newValue = "".concat(prefixCharacter, "0.");
740
- formula = formula.replace(val, newValue);
741
- });
742
- }
743
- formula = formula.replace('=', '');
744
- var parsedValue = parser.parse(formula);
745
- if (parsedValue.result) parsedValue.result = Math.round(100 * parsedValue.result) / 100;
746
- tableLookup[sourceOperand] = parsedValue.result ? parsedValue.result.toString() : parsedValue.error;
747
- return parsedValue;
748
- };
749
-
750
- /**
751
- * Resolve operand value
752
- * An operand is A1, B1, etc.
753
- *
754
- * @param sourceOperand //The cell that is requesting the value
755
- * @param targetOperand //The cell you are trying to retrieve a value from
756
- * @param tableLookup //The lookup of values contained in the table;
757
- */
758
- var resolveOperandValue = exports.resolveOperandValue = function resolveOperandValue(sourceOperand, targetOperand, tableLookup) {
759
- var targetValue = tableLookup[targetOperand] && typeof tableLookup[targetOperand] === 'string' ? tableLookup[targetOperand].trim() : tableLookup[targetOperand];
760
- /**
761
- * 1. If tableLookup doesn't have a value (or) if the targetValue
762
- * appears to be an object (image column cell values) return 0.
763
- */
764
- if (!targetValue || (0, _typeof2["default"])(targetValue) === 'object') return 0;
765
-
766
- // 2. If tableLookup is already a number return the number value
767
- if (typeof targetValue === 'number') return targetValue;
768
-
769
- // 3. If targetCell has circular reference return invalid.
770
- //
771
- // A circular reference can occur when C1 reference B1 and B1 references C1.
772
- // It creates and infinite circular loop of trying to resovle a value
773
- // because they both depend on eachother.
774
- if (sourceOperand && hasCircularOperandReference(targetValue, sourceOperand) || targetOperand && hasCircularOperandReference(targetValue, targetOperand)) return '* INVALID - Circular Reference';
775
-
776
- // 4. If targetCell has a formula value
777
- if (targetValue !== undefined && targetValue.charAt(0) === '=') {
778
- var result = getFormulaResult(sourceOperand, targetValue, tableLookup);
779
- return result.result || result.error;
780
- }
781
-
782
- // 5. If targetCell has a normal value or an already resolved
783
- // formula cell then just return the cell value
784
- if (targetValue) return targetValue;
785
- };
786
- var hasCircularOperandReference = exports.hasCircularOperandReference = function hasCircularOperandReference(targetValue, lookupOperand) {
787
- var regExp = new RegExp(lookupOperand, 'gi');
788
- var foundOperandReferences = targetValue.match(regExp);
789
- return !!(foundOperandReferences && foundOperandReferences.length > 0);
790
- };
791
- var hasOperandRange = exports.hasOperandRange = function hasOperandRange(targetValue) {
792
- return /[A-Z]([0-9]{1,10}):[A-Z]([0-9]{1,10})/gi.test(targetValue);
793
- };
794
-
795
- /**
796
- * Check for any invalid patterns inside of the formula string
797
- */
798
- var validFormulaString = exports.validFormulaString = function validFormulaString(sourceOperand, formula) {
799
- if (sourceOperand && hasCircularOperandReference(formula, sourceOperand)) {
800
- return '*INVALID - Circular Reference';
801
- }
802
- var lowercaseOperands = formula.match(/[a-z]/g);
803
- if (lowercaseOperands && lowercaseOperands.length > 0) {
804
- return '*INVALID - Lowercase Letters Not Supported';
805
- }
806
- };
807
-
808
- /**
809
- * Spread the operand range into individual operands.
810
- * For instance: SUM(A1:A4) turns into SUM(A1, A2, A3, A4);
811
- */
812
- var spreadOperandRange = exports.spreadOperandRange = function spreadOperandRange(targetValue) {
813
- if (!hasOperandRange(targetValue)) return targetValue;
814
- var operandRangeMatches = targetValue.match(/[A-Z]([0-9]{1,10}):[A-Z]([0-9]{1,10})/gi);
815
- var operandRange = operandRangeMatches[0];
816
- var operands = operandRange.split(':');
817
- var operandA = operands[0];
818
- var operandALetter = operandA.match(/[A-Z]+/gi) ? operandA.match(/[A-Z]+/gi)[0] : null;
819
- var operandAIndex = operandA.match(/[0-9]+/gi) ? operandA.match(/[0-9]+/gi)[0] : null;
820
- var operandB = operands[1];
821
- var operandBLetter = operandB.match(/[A-Z]+/gi) ? operandB.match(/[A-Z]+/gi)[0] : null;
822
- var operandBIndex = operandB.match(/[0-9]+/gi) ? operandB.match(/[0-9]+/gi)[0] : null;
823
-
824
- // If any values are missing return orignal targetValue
825
- if (!operandALetter || !operandAIndex || !operandBLetter || !operandBIndex) return targetValue;
826
-
827
- // Handle row range.
828
- // For instance: C1:C8
829
- if (operandALetter === operandBLetter) {
830
- var columnOperand = operandALetter;
831
- var startIndex = parseInt(operandAIndex, 10);
832
- var endIndex = parseInt(operandBIndex, 10);
833
- var operandRangeValues = operandA;
834
- var i = startIndex + 1;
835
- while (i <= endIndex) {
836
- operandRangeValues += ",".concat(columnOperand).concat(i);
837
- i++;
838
- }
839
- targetValue = targetValue.replace(/[A-Z](\d{1,10}):[A-Z](\d{1,10})/gi, operandRangeValues);
840
- }
841
-
842
- // Handle column range
843
- // For instance, A1:D1
844
- else {
845
- var _startIndex = parseInt(_Table["default"].operandLetters.indexOf(operandALetter.toUpperCase()), 10);
846
- var _endIndex = parseInt(_Table["default"].operandLetters.indexOf(operandBLetter.toUpperCase()), 10);
847
- var _operandRangeValues = operandA;
848
- var _i = _startIndex + 1;
849
- while (_i <= _endIndex) {
850
- var nextOperandLetter = _Table["default"].operandLetters[_i];
851
- _operandRangeValues += ",".concat(nextOperandLetter).concat(operandAIndex);
852
- _i++;
853
- }
854
- targetValue = targetValue.replace(/[A-Z](\d{1,10}):[A-Z](\d{1,10})/gi, _operandRangeValues);
855
- }
856
- return targetValue;
857
- };
858
-
859
- /**
860
- * Primarily used for Mobile
861
- *
862
- * Get list of input group fields in an array formt.
863
- * This breaks the rows and cells down to a single array.
864
- *
865
- * @param {Object} field
866
- * @param {Array} columns
867
- * @param {Array} rows
868
- *
869
- */
870
- var generateInputGroupFields = exports.generateInputGroupFields = function generateInputGroupFields(field, columns) {
871
- var rows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [getDefaultRow()];
872
- var fieldSettings = arguments.length > 3 ? arguments[3] : undefined;
873
- var activity = arguments.length > 4 ? arguments[4] : undefined;
874
- var tableReferences = [];
875
- var tableColumns = getColumns(columns);
876
- var columnOptionValueLookup = {};
877
- tableColumns.forEach(function (column) {
878
- if (column.type === _FieldTableColumnTypes["default"].dropdown && column.options) {
879
- columnOptionValueLookup[column._id] = {};
880
- column.options.forEach(function (option) {
881
- return columnOptionValueLookup[column._id][option._id] = option.value;
882
- });
883
- }
884
- });
885
- var tableRows = getRows(rows);
886
- var rowOrder = getTableFieldRowOrder(field._id, fieldSettings, tableRows);
887
- var sortedTableRows = sortRows(tableRows, rowOrder);
888
- var cellActivityLookup = {};
889
- if (activity && activity.length > 0) {
890
- activity.forEach(function (act) {
891
- var rowId = act.document.row;
892
- var columnId = act.document.column;
893
- var cellKey = "".concat(field._id).concat(rowId).concat(columnId);
894
- if (!cellActivityLookup[cellKey]) cellActivityLookup[cellKey] = 0;
895
- cellActivityLookup[cellKey] += 1;
896
- });
897
- }
898
- sortedTableRows.forEach(function (row, rowIndex) {
899
- var firstRowIndex = rowIndex === 0;
900
- var lastRowIndex = rowIndex === sortedTableRows.length - 1;
901
-
902
- /**
903
- * Step 1: Add InputGroup Row Header
904
- */
905
- tableReferences.push({
906
- uniqueId: "".concat(field._id).concat(row._id),
907
- _id: field._id,
908
- title: field.title,
909
- type: _Table.inputGroupFieldTypes.inputGroupRowHeader,
910
- rowIndex: rowIndex,
911
- rowId: row._id,
912
- firstRowIndex: firstRowIndex,
913
- lastRowIndex: lastRowIndex,
914
- firstIndex: rowIndex === 0,
915
- lastIndex: false
916
- });
917
-
918
- /**
919
- * Step 2: Add Input Group Row Cells
920
- */
921
- tableColumns.forEach(function (column, columnIndex) {
922
- var lastColumnIndex = columnIndex === tableColumns.length - 1;
923
- var value = row && row.cells ? row.cells[column._id] : '';
924
- var displayValue = column.type === _FieldTableColumnTypes["default"].dropdown ? columnOptionValueLookup[column._id][value] : value;
925
- var cellKey = "".concat(field._id).concat(row._id).concat(column._id);
926
- tableReferences.push({
927
- uniqueId: cellKey,
928
- _id: field._id,
929
- title: column.title,
930
- type: column.type === _FieldTableColumnTypes["default"].dropdown ? _Table.inputGroupFieldTypes.inputGroupDropdownCell : _Table.inputGroupFieldTypes.inputGroupTextCell,
931
- rowIndex: rowIndex,
932
- rowId: row._id,
933
- activity: cellActivityLookup[cellKey] || 0,
934
- columnId: column._id,
935
- columnIndex: columnIndex,
936
- value: value,
937
- displayValue: displayValue,
938
- firstRowIndex: firstRowIndex,
939
- lastRowIndex: lastRowIndex,
940
- firstIndex: false,
941
- lastIndex: lastRowIndex && lastColumnIndex
942
- });
943
- });
944
- });
945
- return tableReferences;
946
- };
947
-
948
- /**
949
- * Populate table rows with values
950
- * - Dropdown cells will have chosen values
951
- * - Formula cells will have the formula result
952
- *
953
- * Note: Columns should already have the options lookup populated before
954
- * being sent into this function
955
- *
956
- * @param {*} columns -
957
- * @param {*} rows
958
- * @returns
959
- */
960
-
961
- var getTableRowLookupWithPopulatedDropdownCells = exports.getTableRowLookupWithPopulatedDropdownCells = function getTableRowLookupWithPopulatedDropdownCells(columns, rows) {
962
- var rowsLookup = {};
963
- var tableLookup = generateTableLookup(rows, columns);
964
- var validRows = getRows(rows);
965
- var validColumns = getColumns(columns);
966
- validRows.forEach(function (row, rowIndex) {
967
- var nextRow = _objectSpread(_objectSpread({}, row), {}, {
968
- cells: _objectSpread({}, row.cells)
969
- });
970
- validColumns.forEach(function (column) {
971
- var cellOperand = getCellOperand(column.operand, rowIndex + 1);
972
- var value = tableLookup[cellOperand];
973
- if (value && column.type === _FieldTableColumnTypes["default"].dropdown) {
974
- nextRow.cells[column._id] = column.optionsLookup[value] ? column.optionsLookup[value].value : value;
975
- } else {
976
- nextRow.cells[column._id] = value;
977
- }
978
- });
979
- rowsLookup[nextRow._id] = nextRow;
980
- });
981
- return rowsLookup;
982
- };
983
-
984
- /**
985
- * Populate inputGroup dropdown questions with chosen value
986
- *
987
- * Note: Columns should already have the options lookup populated before
988
- * being sent into this function
989
- *
990
- * @param {*} columns
991
- * @param {*} rows
992
- * @returns
993
- */
994
-
995
- var getInputGroupRowLookupWithPopulatedDropdownCells = exports.getInputGroupRowLookupWithPopulatedDropdownCells = function getInputGroupRowLookupWithPopulatedDropdownCells(columns, rows) {
996
- var rowsLookup = {};
997
- var validRows = typeof rows === 'string' ? JSON.parse(rows) : rows;
998
- validRows.forEach(function (row) {
999
- var nextRow = _objectSpread(_objectSpread({}, row), {}, {
1000
- cells: _objectSpread({}, row.cells)
1001
- });
1002
- columns.forEach(function (column) {
1003
- var optionId = nextRow.cells[column._id];
1004
- if (optionId && column.type === _FieldTableColumnTypes["default"].dropdown) {
1005
- nextRow.cells[column._id] = column.optionsLookup[optionId] ? column.optionsLookup[optionId].value : optionId;
1006
- }
1007
- });
1008
- rowsLookup[nextRow._id] = nextRow;
1009
- });
1010
- return rowsLookup;
1011
- };
1012
-
1013
- /**
1014
- * Generate row index lookup:
1015
- * @param {*} fieldId
1016
- * @param {*} fieldSettings
1017
- * @param {*} rows
1018
- * @returns
1019
- */
1020
- var getRowIndexLookup = exports.getRowIndexLookup = function getRowIndexLookup(fieldId, fieldSettings, rows) {
1021
- var rowOrder = getTableFieldRowOrder(fieldId, fieldSettings, rows);
1022
- var rowIndexLookup = {};
1023
- rowOrder.forEach(function (rowId, index) {
1024
- rowIndexLookup[rowId] = index;
1025
- });
1026
- return rowIndexLookup;
1027
- };
1028
-
1029
- /**
1030
- * Handle Table Cell Change
1031
- *
1032
- * @param {Array} rows //List of current table rows
1033
- * @param {String} rowId
1034
- * @param {String} columnId
1035
- * @param {String} value
1036
- * @param {Func} callback
1037
- */
1038
- var handleTableCellChange = exports.handleTableCellChange = function handleTableCellChange(rows, rowId, columnId, val, callback) {
1039
- var targetRowIndex = rows.findIndex(function (row) {
1040
- return row._id === rowId;
1041
- });
1042
- var row = rows[targetRowIndex];
1043
- var cells = row ? row.cells : {};
1044
-
1045
- //Only save data if value has changed
1046
- if (cells[columnId] !== val && callback) {
1047
- callback({
1048
- targetRowIndex: targetRowIndex,
1049
- row: {
1050
- _id: rowId,
1051
- cells: (0, _defineProperty2["default"])({}, columnId, val)
1052
- }
1053
- });
1054
- }
1055
- };
1056
-
1057
- /**
1058
- * Handle Insert Table Row
1059
- *
1060
- * @param {Number} rowIndex
1061
- * @param {Func} callback
1062
- */
1063
- var handleInsertTableRow = exports.handleInsertTableRow = function handleInsertTableRow(rowIndex, callback) {
1064
- if (callback) callback({
1065
- targetRowIndex: rowIndex + 1,
1066
- row: getDefaultRow()
1067
- });
1068
- };
1069
-
1070
- /**
1071
- * Handle Create New Table Row
1072
- *
1073
- * @param {Array} rows //List of current table rows
1074
- * @param {Func} callback
1075
- */
1076
- var handleCreateTableRow = exports.handleCreateTableRow = function handleCreateTableRow(rows, callback) {
1077
- var targetRowIndex = rows.length;
1078
- if (callback) callback({
1079
- targetRowIndex: targetRowIndex,
1080
- row: getDefaultRow()
1081
- });
1082
- };
1083
-
1084
- /**
1085
- * Handle Duplicate Table Row
1086
- *
1087
- * @param {Array} rows //List of current table rows
1088
- * @param {String} rowId
1089
- * @param {Number} rowIndex
1090
- * @param {Func} callback
1091
- */
1092
- var handleDuplicateTableRow = exports.handleDuplicateTableRow = function handleDuplicateTableRow(rows, rowId, rowIndex, callback) {
1093
- var duplicateRow = rows.find(function (row) {
1094
- return row._id === rowId;
1095
- });
1096
- var newRow = getDefaultRow();
1097
- newRow.cells = duplicateRow && duplicateRow.cells ? _objectSpread({}, duplicateRow.cells) : {};
1098
- var targetRowIndex = rowIndex + 1;
1099
- if (callback) callback({
1100
- targetRowIndex: targetRowIndex,
1101
- row: newRow
1102
- });
1103
- };
1104
-
1105
- /**
1106
- * Handle Move Table Row Up
1107
- *
1108
- * @param {Number} rowIndex
1109
- * @param {Func} callback
1110
- */
1111
- var handleMoveTableRowUp = exports.handleMoveTableRowUp = function handleMoveTableRowUp(rowIndex, callback) {
1112
- //If first row then ignore
1113
- if (rowIndex === 0) return;
1114
- var targetRowIndex = rowIndex - 1;
1115
- if (callback) callback({
1116
- targetRowIndex: targetRowIndex
1117
- });
1118
- };
1119
-
1120
- /**
1121
- * Handle Move Table Row Down
1122
- *
1123
- * @param {Array} rows
1124
- * @param {Number} rowIndex
1125
- * @param {Func} callback
1126
- */
1127
- var handleMoveTableRowDown = exports.handleMoveTableRowDown = function handleMoveTableRowDown(rows, rowIndex, callback) {
1128
- //If last row then ignore
1129
- if (rowIndex >= rows.length - 1) return;
1130
- var targetRowIndex = rowIndex + 1;
1131
- if (callback) callback({
1132
- targetRowIndex: targetRowIndex
1133
- });
1134
- };
1135
- var _default = exports["default"] = {
1136
- generateTableLookup: generateTableLookup,
1137
- generateTableLookupForRows: generateTableLookupForRows,
1138
- generateInputGroupFields: generateInputGroupFields,
1139
- getTargetColumnWithOperand: getTargetColumnWithOperand,
1140
- getColumnOperand: getColumnOperand,
1141
- getCellOperand: getCellOperand,
1142
- getIndexesFromTableCellOperand: getIndexesFromTableCellOperand,
1143
- getRowOrder: getRowOrder,
1144
- getTableFieldRowOrder: getTableFieldRowOrder,
1145
- getFilteredRowOrder: getFilteredRowOrder,
1146
- getCleanedRowOrder: getCleanedRowOrder,
1147
- getRows: getRows,
1148
- sortRows: sortRows,
1149
- getDefaultRow: getDefaultRow,
1150
- getRowMap: getRowMap,
1151
- getDefaultColumnOption: getDefaultColumnOption,
1152
- getDefaultTextColumn: getDefaultTextColumn,
1153
- getDefaultDropdownColumn: getDefaultDropdownColumn,
1154
- getColumnOrder: getColumnOrder,
1155
- getColumns: getColumns,
1156
- sortColumns: sortColumns,
1157
- getFormulaResult: getFormulaResult,
1158
- resolveOperandValue: resolveOperandValue,
1159
- hasCircularOperandReference: hasCircularOperandReference,
1160
- validFormulaString: validFormulaString,
1161
- hasOperandRange: hasOperandRange,
1162
- spreadOperandRange: spreadOperandRange,
1163
- getTableFieldLookupKey: getTableFieldLookupKey,
1164
- getTableRowLookupWithPopulatedDropdownCells: getTableRowLookupWithPopulatedDropdownCells,
1165
- getInputGroupRowLookupWithPopulatedDropdownCells: getInputGroupRowLookupWithPopulatedDropdownCells,
1166
- getRowIndexLookup: getRowIndexLookup,
1167
- handleMoveColumnLeft: handleMoveColumnLeft,
1168
- handleMoveColumnRight: handleMoveColumnRight,
1169
- handleTableCellChange: handleTableCellChange,
1170
- handleInsertTableRow: handleInsertTableRow,
1171
- handleCreateTableRow: handleCreateTableRow,
1172
- handleDuplicateTableRow: handleDuplicateTableRow,
1173
- handleMoveTableRowUp: handleMoveTableRowUp,
1174
- handleMoveTableRowDown: handleMoveTableRowDown,
1175
- FieldTableColumnTypes: _FieldTableColumnTypes["default"],
1176
- FieldTableCustomColumnIds: _FieldTableCustomColumnIds["default"]
1177
- };