vxe-table 3.14.0-beta.0 → 3.14.0-beta.2

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.
Files changed (83) hide show
  1. package/es/grid/src/grid.js +60 -75
  2. package/es/style.css +1 -1
  3. package/es/table/module/custom/panel.js +25 -27
  4. package/es/table/module/edit/mixin.js +1 -1
  5. package/es/table/module/export/export-panel.js +22 -24
  6. package/es/table/module/export/import-panel.js +14 -16
  7. package/es/table/module/export/mixin.js +15 -31
  8. package/es/table/module/keyboard/mixin.js +3 -2
  9. package/es/table/module/validator/mixin.js +1 -3
  10. package/es/table/render/index.js +2 -4
  11. package/es/table/src/body.js +2 -2
  12. package/es/table/src/column.js +2 -2
  13. package/es/table/src/columnInfo.js +30 -32
  14. package/es/table/src/group.js +2 -2
  15. package/es/table/src/methods.js +128 -97
  16. package/es/table/src/table.js +17 -19
  17. package/es/table/src/util.js +5 -7
  18. package/es/toolbar/src/toolbar.js +20 -28
  19. package/es/ui/index.js +1 -1
  20. package/es/ui/src/log.js +1 -1
  21. package/lib/grid/src/grid.js +61 -88
  22. package/lib/grid/src/grid.min.js +1 -1
  23. package/lib/index.umd.js +372 -380
  24. package/lib/index.umd.min.js +1 -1
  25. package/lib/style.css +1 -1
  26. package/lib/table/module/custom/panel.js +31 -33
  27. package/lib/table/module/custom/panel.min.js +1 -1
  28. package/lib/table/module/edit/mixin.js +1 -1
  29. package/lib/table/module/edit/mixin.min.js +1 -1
  30. package/lib/table/module/export/export-panel.js +22 -24
  31. package/lib/table/module/export/export-panel.min.js +1 -1
  32. package/lib/table/module/export/import-panel.js +14 -16
  33. package/lib/table/module/export/import-panel.min.js +1 -1
  34. package/lib/table/module/export/mixin.js +15 -31
  35. package/lib/table/module/export/mixin.min.js +1 -1
  36. package/lib/table/module/keyboard/mixin.js +3 -2
  37. package/lib/table/module/keyboard/mixin.min.js +1 -1
  38. package/lib/table/module/validator/mixin.js +1 -3
  39. package/lib/table/module/validator/mixin.min.js +1 -1
  40. package/lib/table/render/index.js +2 -4
  41. package/lib/table/render/index.min.js +1 -1
  42. package/lib/table/src/body.js +2 -1
  43. package/lib/table/src/body.min.js +1 -1
  44. package/lib/table/src/column.js +3 -2
  45. package/lib/table/src/columnInfo.js +32 -34
  46. package/lib/table/src/columnInfo.min.js +1 -1
  47. package/lib/table/src/group.js +3 -2
  48. package/lib/table/src/methods.js +138 -94
  49. package/lib/table/src/methods.min.js +1 -1
  50. package/lib/table/src/table.js +14 -16
  51. package/lib/table/src/table.min.js +1 -1
  52. package/lib/table/src/util.js +4 -6
  53. package/lib/table/src/util.min.js +1 -1
  54. package/lib/toolbar/src/toolbar.js +21 -28
  55. package/lib/toolbar/src/toolbar.min.js +1 -1
  56. package/lib/ui/index.js +1 -1
  57. package/lib/ui/index.min.js +1 -1
  58. package/lib/ui/src/log.js +1 -1
  59. package/lib/ui/src/log.min.js +1 -1
  60. package/package.json +2 -2
  61. package/packages/grid/src/grid.ts +62 -75
  62. package/packages/table/module/custom/panel.ts +25 -27
  63. package/packages/table/module/edit/mixin.ts +1 -1
  64. package/packages/table/module/export/export-panel.ts +22 -24
  65. package/packages/table/module/export/import-panel.ts +14 -16
  66. package/packages/table/module/export/mixin.ts +15 -31
  67. package/packages/table/module/keyboard/mixin.ts +6 -2
  68. package/packages/table/module/validator/mixin.ts +1 -3
  69. package/packages/table/render/index.ts +2 -4
  70. package/packages/table/src/body.ts +2 -2
  71. package/packages/table/src/column.ts +2 -2
  72. package/packages/table/src/columnInfo.ts +30 -32
  73. package/packages/table/src/group.ts +2 -2
  74. package/packages/table/src/methods.ts +140 -104
  75. package/packages/table/src/table.ts +14 -16
  76. package/packages/table/src/util.ts +4 -6
  77. package/packages/toolbar/src/toolbar.ts +20 -28
  78. /package/es/{iconfont.1740732119954.ttf → iconfont.1741079977180.ttf} +0 -0
  79. /package/es/{iconfont.1740732119954.woff → iconfont.1741079977180.woff} +0 -0
  80. /package/es/{iconfont.1740732119954.woff2 → iconfont.1741079977180.woff2} +0 -0
  81. /package/lib/{iconfont.1740732119954.ttf → iconfont.1741079977180.ttf} +0 -0
  82. /package/lib/{iconfont.1740732119954.woff → iconfont.1741079977180.woff} +0 -0
  83. /package/lib/{iconfont.1740732119954.woff2 → iconfont.1741079977180.woff2} +0 -0
@@ -276,7 +276,7 @@ function handleInsertChildRowAt($xeTable, records, parentRow, targetRow, isInser
276
276
  return handleInsertRowAt($xeTable, records.map((item) => Object.assign({}, item, { [parentField]: parentRow[rowField] })), targetRow, isInsertNextRow);
277
277
  }
278
278
  else {
279
- errLog('vxe.error.errProp', ['tree-config.treeConfig=false', 'tree-config.treeConfig=true']);
279
+ errLog('vxe.error.errProp', ['tree-config.transform=false', 'tree-config.transform=true']);
280
280
  }
281
281
  return Promise.resolve({ row: null, rows: [] });
282
282
  }
@@ -53,30 +53,28 @@ export default {
53
53
  },
54
54
  created() {
55
55
  const $xeTableExportPanel = this;
56
- if (process.env.NODE_ENV === 'development') {
57
- const VxeUIModalComponent = VxeUI.getComponent('VxeModal');
58
- const VxeUIButtonComponent = VxeUI.getComponent('VxeButton');
59
- const VxeUISelectComponent = VxeUI.getComponent('VxeSelect');
60
- const VxeUIInputComponent = VxeUI.getComponent('VxeInput');
61
- const VxeUICheckboxComponent = VxeUI.getComponent('VxeCheckbox');
62
- $xeTableExportPanel.$nextTick(() => {
63
- if (!VxeUIModalComponent) {
64
- errLog('vxe.error.reqComp', ['vxe-modal']);
65
- }
66
- if (!VxeUIButtonComponent) {
67
- errLog('vxe.error.reqComp', ['vxe-button']);
68
- }
69
- if (!VxeUISelectComponent) {
70
- errLog('vxe.error.reqComp', ['vxe-select']);
71
- }
72
- if (!VxeUIInputComponent) {
73
- errLog('vxe.error.reqComp', ['vxe-input']);
74
- }
75
- if (!VxeUICheckboxComponent) {
76
- errLog('vxe.error.reqComp', ['vxe-checkbox']);
77
- }
78
- });
79
- }
56
+ const VxeUIModalComponent = VxeUI.getComponent('VxeModal');
57
+ const VxeUIButtonComponent = VxeUI.getComponent('VxeButton');
58
+ const VxeUISelectComponent = VxeUI.getComponent('VxeSelect');
59
+ const VxeUIInputComponent = VxeUI.getComponent('VxeInput');
60
+ const VxeUICheckboxComponent = VxeUI.getComponent('VxeCheckbox');
61
+ $xeTableExportPanel.$nextTick(() => {
62
+ if (!VxeUIModalComponent) {
63
+ errLog('vxe.error.reqComp', ['vxe-modal']);
64
+ }
65
+ if (!VxeUIButtonComponent) {
66
+ errLog('vxe.error.reqComp', ['vxe-button']);
67
+ }
68
+ if (!VxeUISelectComponent) {
69
+ errLog('vxe.error.reqComp', ['vxe-select']);
70
+ }
71
+ if (!VxeUIInputComponent) {
72
+ errLog('vxe.error.reqComp', ['vxe-input']);
73
+ }
74
+ if (!VxeUICheckboxComponent) {
75
+ errLog('vxe.error.reqComp', ['vxe-checkbox']);
76
+ }
77
+ });
80
78
  },
81
79
  render(h) {
82
80
  const $xeTable = this.$xeTable;
@@ -45,22 +45,20 @@ export default {
45
45
  },
46
46
  created() {
47
47
  const $xeTableImportPanel = this;
48
- if (process.env.NODE_ENV === 'development') {
49
- const VxeUIModalComponent = VxeUI.getComponent('VxeModal');
50
- const VxeUIButtonComponent = VxeUI.getComponent('VxeButton');
51
- const VxeUISelectComponent = VxeUI.getComponent('VxeSelect');
52
- $xeTableImportPanel.$nextTick(() => {
53
- if (!VxeUIModalComponent) {
54
- errLog('vxe.error.reqComp', ['vxe-modal']);
55
- }
56
- if (!VxeUIButtonComponent) {
57
- errLog('vxe.error.reqComp', ['vxe-button']);
58
- }
59
- if (!VxeUISelectComponent) {
60
- errLog('vxe.error.reqComp', ['vxe-select']);
61
- }
62
- });
63
- }
48
+ const VxeUIModalComponent = VxeUI.getComponent('VxeModal');
49
+ const VxeUIButtonComponent = VxeUI.getComponent('VxeButton');
50
+ const VxeUISelectComponent = VxeUI.getComponent('VxeSelect');
51
+ $xeTableImportPanel.$nextTick(() => {
52
+ if (!VxeUIModalComponent) {
53
+ errLog('vxe.error.reqComp', ['vxe-modal']);
54
+ }
55
+ if (!VxeUIButtonComponent) {
56
+ errLog('vxe.error.reqComp', ['vxe-button']);
57
+ }
58
+ if (!VxeUISelectComponent) {
59
+ errLog('vxe.error.reqComp', ['vxe-select']);
60
+ }
61
+ });
64
62
  },
65
63
  render(h) {
66
64
  const $xeTable = this.$xeTable;
@@ -568,10 +568,8 @@ function downloadFile($xetable, opts, content) {
568
568
  saveLocalFile({ filename, type, content }).then(() => {
569
569
  if (opts.message !== false) {
570
570
  // 检测弹窗模块
571
- if (process.env.NODE_ENV === 'development') {
572
- if (!VxeUI.modal) {
573
- errLog('vxe.error.reqModule', ['Modal']);
574
- }
571
+ if (!VxeUI.modal) {
572
+ errLog('vxe.error.reqModule', ['Modal']);
575
573
  }
576
574
  VxeUI.modal.message({ content: getI18n('vxe.table.expSuccess'), status: 'success' });
577
575
  }
@@ -800,10 +798,8 @@ function handleImport($xeTable, content, opts) {
800
798
  }
801
799
  if (opts.message !== false) {
802
800
  // 检测弹窗模块
803
- if (process.env.NODE_ENV === 'development') {
804
- if (!VxeUI.modal) {
805
- errLog('vxe.error.reqModule', ['Modal']);
806
- }
801
+ if (!VxeUI.modal) {
802
+ errLog('vxe.error.reqModule', ['Modal']);
807
803
  }
808
804
  VxeUI.modal.message({ content: getI18n('vxe.table.impSuccess', [rows.length]), status: 'success' });
809
805
  }
@@ -816,10 +812,8 @@ function handleImport($xeTable, content, opts) {
816
812
  }
817
813
  else if (opts.message !== false) {
818
814
  // 检测弹窗模块
819
- if (process.env.NODE_ENV === 'development') {
820
- if (!VxeUI.modal) {
821
- errLog('vxe.error.reqModule', ['Modal']);
822
- }
815
+ if (!VxeUI.modal) {
816
+ errLog('vxe.error.reqModule', ['Modal']);
823
817
  }
824
818
  VxeUI.modal.message({ content: getI18n('vxe.error.impFields'), status: 'error' });
825
819
  if (_importReject) {
@@ -835,10 +829,8 @@ function handleFileImport($xetable, file, opts) {
835
829
  if (!importMethod && !XEUtils.includes(XEUtils.keys(importOpts._typeMaps), type)) {
836
830
  if (opts.message !== false) {
837
831
  // 检测弹窗模块
838
- if (process.env.NODE_ENV === 'development') {
839
- if (!VxeUI.modal) {
840
- errLog('vxe.error.reqModule', ['Modal']);
841
- }
832
+ if (!VxeUI.modal) {
833
+ errLog('vxe.error.reqModule', ['Modal']);
842
834
  }
843
835
  VxeUI.modal.message({ content: getI18n('vxe.error.notType', [type]), status: 'error' });
844
836
  }
@@ -888,9 +880,7 @@ function handleFileImport($xetable, file, opts) {
888
880
  }
889
881
  else {
890
882
  // 不支持的浏览器
891
- if (process.env.NODE_ENV === 'development') {
892
- errLog('vxe.error.notExp');
893
- }
883
+ errLog('vxe.error.notExp');
894
884
  _importResolve({ status: true });
895
885
  }
896
886
  });
@@ -950,10 +940,8 @@ export function readLocalFile(options = {}) {
950
940
  else {
951
941
  if (options.message !== false) {
952
942
  // 检测弹窗模块
953
- if (process.env.NODE_ENV === 'development') {
954
- if (!VxeUI.modal) {
955
- errLog('vxe.error.reqModule', ['Modal']);
956
- }
943
+ if (!VxeUI.modal) {
944
+ errLog('vxe.error.reqModule', ['Modal']);
957
945
  }
958
946
  VxeUI.modal.message({ content: getI18n('vxe.error.notType', [errType]), status: 'error' });
959
947
  }
@@ -1618,20 +1606,16 @@ export default {
1618
1606
  _closeExport: handleCloseExport,
1619
1607
  _openExport(options) {
1620
1608
  const { exportOpts } = this;
1621
- if (process.env.NODE_ENV === 'development') {
1622
- if (!this.exportConfig) {
1623
- errLog('vxe.error.reqProp', ['export-config']);
1624
- }
1609
+ if (!this.exportConfig) {
1610
+ errLog('vxe.error.reqProp', ['export-config']);
1625
1611
  }
1626
1612
  return handleExportAndPrint(this, Object.assign({}, exportOpts, options));
1627
1613
  },
1628
1614
  _closePrint: handleCloseExport,
1629
1615
  _openPrint(options) {
1630
1616
  const { printOpts } = this;
1631
- if (process.env.NODE_ENV === 'development') {
1632
- if (!this.printConfig) {
1633
- errLog('vxe.error.reqProp', ['print-config']);
1634
- }
1617
+ if (!this.printConfig) {
1618
+ errLog('vxe.error.reqProp', ['print-config']);
1635
1619
  }
1636
1620
  return handleExportAndPrint(this, Object.assign({}, printOpts, options), true);
1637
1621
  }
@@ -231,9 +231,10 @@ export default {
231
231
  });
232
232
  },
233
233
  handleCellMousedownEvent(evnt, params) {
234
+ const $xeTable = this;
234
235
  const { editConfig, editOpts, handleSelected, checkboxConfig, checkboxOpts, mouseConfig, mouseOpts } = this;
235
- if (mouseConfig && mouseOpts.area && this.handleMousedownCellAreaEvent) {
236
- return this.handleMousedownCellAreaEvent(evnt, params);
236
+ if (mouseConfig && mouseOpts.area && $xeTable.handleCellAreaMousedownEvent) {
237
+ return $xeTable.handleCellAreaMousedownEvent(evnt, params);
237
238
  }
238
239
  else {
239
240
  if (checkboxConfig && checkboxOpts.range) {
@@ -355,9 +355,7 @@ export default {
355
355
  }
356
356
  }
357
357
  else {
358
- if (process.env.NODE_ENV === 'development') {
359
- errLog('vxe.error.notValidators', [validator]);
360
- }
358
+ errLog('vxe.error.notValidators', [validator]);
361
359
  }
362
360
  }
363
361
  else {
@@ -151,10 +151,8 @@ function getComponentOns(renderOpts, params, eFns) {
151
151
  const ons = {};
152
152
  XEUtils.objectEach(events, (func, key) => {
153
153
  ons[getOnName(key)] = function (...args) {
154
- if (process.env.NODE_ENV === 'development') {
155
- if (!XEUtils.isFunction(func)) {
156
- errLog('vxe.error.errFunc', [func]);
157
- }
154
+ if (!XEUtils.isFunction(func)) {
155
+ errLog('vxe.error.errFunc', [func]);
158
156
  }
159
157
  func(params, ...args);
160
158
  };
@@ -64,7 +64,7 @@ function renderTdColumn(h, _vm, seq, rowid, fixedType, isOptimizeMode, rowLevel,
64
64
  const tableReactData = $xeTable;
65
65
  const tableInternalData = $xeTable;
66
66
  const { fullAllDataRowIdData } = tableInternalData;
67
- const { columnKey, resizable: allResizable, border, height, cellClassName: allCellClassName, cellStyle, align: allAlign, spanMethod, mouseConfig, editConfig, editRules, tooltipConfig, padding: allPadding } = tableProps;
67
+ const { columnKey, resizable: allResizable, showOverflow: allShowOverflow, border, height, cellClassName: allCellClassName, cellStyle, align: allAlign, spanMethod, mouseConfig, editConfig, editRules, tooltipConfig, padding: allPadding } = tableProps;
68
68
  const { tableData, dragRow, overflowX, currentColumn, scrollXLoad, scrollYLoad, calcCellHeightFlag, resizeHeightFlag, mergeList, editStore, isAllOverflow, validErrorMaps } = tableReactData;
69
69
  const { afterFullData, scrollXStore, scrollYStore } = tableInternalData;
70
70
  const cellOpts = $xeTable.computeCellOpts;
@@ -98,7 +98,7 @@ function renderTdColumn(h, _vm, seq, rowid, fixedType, isOptimizeMode, rowLevel,
98
98
  const resizeHeight = resizeHeightFlag ? rowRest.resizeHeight : 0;
99
99
  let fixedHiddenColumn = fixedType ? column.fixed !== fixedType : column.fixed && overflowX;
100
100
  const isCellPadding = XEUtils.eqNull(padding) ? (allPadding === null ? cellOpts.padding : allPadding) : padding;
101
- const cellOverflow = XEUtils.eqNull(showOverflow) ? isAllOverflow : showOverflow;
101
+ const cellOverflow = XEUtils.eqNull(showOverflow) ? allShowOverflow : showOverflow;
102
102
  const showEllipsis = cellOverflow === 'ellipsis';
103
103
  const showTitle = cellOverflow === 'title';
104
104
  const showTooltip = cellOverflow === true || cellOverflow === 'tooltip';
@@ -143,7 +143,7 @@ Object.keys(columnProps).forEach(name => {
143
143
  }
144
144
  };
145
145
  });
146
- export default defineVxeComponent({
146
+ export default {
147
147
  name: 'VxeColumn',
148
148
  props: columnProps,
149
149
  provide() {
@@ -175,4 +175,4 @@ export default defineVxeComponent({
175
175
  return h('div', this.$slots.default);
176
176
  },
177
177
  methods: Cell
178
- });
178
+ };
@@ -12,41 +12,39 @@ export class ColumnInfo {
12
12
  const formatter = _vm.formatter;
13
13
  const visible = XEUtils.isBoolean(_vm.visible) ? _vm.visible : true;
14
14
  const tableProps = $xetable;
15
- if (process.env.NODE_ENV === 'development') {
16
- const types = ['seq', 'checkbox', 'radio', 'expand', 'html'];
17
- if (_vm.type && types.indexOf(_vm.type) === -1) {
18
- warnLog('vxe.error.errProp', [`type=${_vm.type}`, types.join(', ')]);
19
- }
20
- if (XEUtils.isBoolean(_vm.cellRender) || (_vm.cellRender && !XEUtils.isObject(_vm.cellRender))) {
21
- warnLog('vxe.error.errProp', [`column.cell-render=${_vm.cellRender}`, 'column.cell-render={}']);
22
- }
23
- if (XEUtils.isBoolean(_vm.editRender) || (_vm.editRender && !XEUtils.isObject(_vm.editRender))) {
24
- warnLog('vxe.error.errProp', [`column.edit-render=${_vm.editRender}`, 'column.edit-render={}']);
15
+ const types = ['seq', 'checkbox', 'radio', 'expand', 'html'];
16
+ if (_vm.type && types.indexOf(_vm.type) === -1) {
17
+ warnLog('vxe.error.errProp', [`type=${_vm.type}`, types.join(', ')]);
18
+ }
19
+ if (XEUtils.isBoolean(_vm.cellRender) || (_vm.cellRender && !XEUtils.isObject(_vm.cellRender))) {
20
+ warnLog('vxe.error.errProp', [`column.cell-render=${_vm.cellRender}`, 'column.cell-render={}']);
21
+ }
22
+ if (XEUtils.isBoolean(_vm.editRender) || (_vm.editRender && !XEUtils.isObject(_vm.editRender))) {
23
+ warnLog('vxe.error.errProp', [`column.edit-render=${_vm.editRender}`, 'column.edit-render={}']);
24
+ }
25
+ if (_vm.type === 'expand') {
26
+ const { treeConfig } = tableProps;
27
+ if (treeConfig && ($xetable.treeOpts.showLine || $xetable.treeOpts.line)) {
28
+ errLog('vxe.error.errConflicts', ['tree-config.line', 'column.type=expand']);
25
29
  }
26
- if (_vm.type === 'expand') {
27
- const { treeConfig } = tableProps;
28
- if (treeConfig && ($xetable.treeOpts.showLine || $xetable.treeOpts.line)) {
29
- errLog('vxe.error.errConflicts', ['tree-config.line', 'column.type=expand']);
30
+ }
31
+ if (_vm.remoteSort) {
32
+ warnLog('vxe.error.delProp', ['column.remote-sort', 'sort-config.remote']);
33
+ }
34
+ if (_vm.sortMethod) {
35
+ warnLog('vxe.error.delProp', ['column.sort-method', 'sort-config.sortMethod']);
36
+ }
37
+ if (formatter) {
38
+ if (XEUtils.isString(formatter)) {
39
+ const gFormatOpts = formats.get(formatter) || XEUtils[formatter];
40
+ if (!gFormatOpts || !XEUtils.isFunction(gFormatOpts.tableCellFormatMethod || gFormatOpts.cellFormatMethod)) {
41
+ errLog('vxe.error.notFormats', [formatter]);
30
42
  }
31
43
  }
32
- if (_vm.remoteSort) {
33
- warnLog('vxe.error.delProp', ['column.remote-sort', 'sort-config.remote']);
34
- }
35
- if (_vm.sortMethod) {
36
- warnLog('vxe.error.delProp', ['column.sort-method', 'sort-config.sortMethod']);
37
- }
38
- if (formatter) {
39
- if (XEUtils.isString(formatter)) {
40
- const gFormatOpts = formats.get(formatter) || XEUtils[formatter];
41
- if (!gFormatOpts || !XEUtils.isFunction(gFormatOpts.tableCellFormatMethod || gFormatOpts.cellFormatMethod)) {
42
- errLog('vxe.error.notFormats', [formatter]);
43
- }
44
- }
45
- else if (XEUtils.isArray(formatter)) {
46
- const gFormatOpts = formats.get(formatter[0]) || XEUtils[formatter[0]];
47
- if (!gFormatOpts || !XEUtils.isFunction(gFormatOpts.tableCellFormatMethod || gFormatOpts.cellFormatMethod)) {
48
- errLog('vxe.error.notFormats', [formatter[0]]);
49
- }
44
+ else if (XEUtils.isArray(formatter)) {
45
+ const gFormatOpts = formats.get(formatter[0]) || XEUtils[formatter[0]];
46
+ if (!gFormatOpts || !XEUtils.isFunction(gFormatOpts.tableCellFormatMethod || gFormatOpts.cellFormatMethod)) {
47
+ errLog('vxe.error.notFormats', [formatter[0]]);
50
48
  }
51
49
  }
52
50
  }
@@ -2,7 +2,7 @@ import Cell from './cell';
2
2
  import { defineVxeComponent } from '../../ui/src/comp';
3
3
  import { assembleColumn, destroyColumn } from './util';
4
4
  import { columnProps, columnWatch } from './column';
5
- export default defineVxeComponent({
5
+ export default {
6
6
  name: 'VxeColgroup',
7
7
  props: columnProps,
8
8
  provide() {
@@ -39,4 +39,4 @@ export default defineVxeComponent({
39
39
  return h('div', this.$slots.default);
40
40
  },
41
41
  methods: Cell
42
- });
42
+ };