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