canvas-datagrid 0.3.21 → 0.3.22

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.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,13 @@ All notable changes to this project will be documented in this file.
7
7
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
8
8
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
 
10
+ ## 0.3.22 - 2021-12-15
11
+
12
+ ### Changed
13
+
14
+ - Resize selected columns simultaneously (mdebrauw, #451)
15
+ - Refactor `cut` and `copy` event handlers (mdebrauw, #450)
16
+
10
17
  ## 0.3.21 - 2021-12-08
11
18
 
12
19
  ### Added
@@ -4084,15 +4084,7 @@ __webpack_require__.r(__webpack_exports__);
4084
4084
  /*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/
4085
4085
 
4086
4086
 
4087
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4088
-
4089
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4090
-
4091
- function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
4092
-
4093
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4094
-
4095
- function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4087
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4096
4088
 
4097
4089
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4098
4090
 
@@ -4834,7 +4826,33 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
4834
4826
  self.ellipsisCache = {};
4835
4827
  };
4836
4828
 
4837
- self.stopDragResize = function () {
4829
+ self.stopDragResize = function (e) {
4830
+ var pos = self.getLayerPos(e);
4831
+ var hasMoved = !!(pos.x - self.dragStart.x);
4832
+ var width = self.resizingStartingWidth + pos.x - self.dragStart.x;
4833
+
4834
+ if (self.dragMode === 'ew-resize') {
4835
+ var selectedColumns = self.selections[0];
4836
+ var dragItemIsSelected = self.isColumnSelected(self.dragItem.columnIndex);
4837
+
4838
+ if (dragItemIsSelected) {
4839
+ var _iterator = _createForOfIteratorHelper(selectedColumns),
4840
+ _step;
4841
+
4842
+ try {
4843
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
4844
+ var selectedColumnIndex = _step.value;
4845
+ var boundColumnIndex = self.getBoundColumnIndexFromViewColumnIndex(selectedColumnIndex);
4846
+ if (hasMoved && dragItemIsSelected && self.isColumnSelected(selectedColumnIndex)) self.sizes.columns[boundColumnIndex] = width;
4847
+ }
4848
+ } catch (err) {
4849
+ _iterator.e(err);
4850
+ } finally {
4851
+ _iterator.f();
4852
+ }
4853
+ }
4854
+ }
4855
+
4838
4856
  self.resize();
4839
4857
  document.body.removeEventListener('mousemove', self.dragResizeColumn, false);
4840
4858
  document.body.removeEventListener('mouseup', self.stopDragResize, false);
@@ -5480,12 +5498,12 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
5480
5498
  }
5481
5499
  }
5482
5500
 
5483
- var _iterator = _createForOfIteratorHelper(self.selections),
5484
- _step;
5501
+ var _iterator2 = _createForOfIteratorHelper(self.selections),
5502
+ _step2;
5485
5503
 
5486
5504
  try {
5487
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
5488
- var selection = _step.value;
5505
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
5506
+ var selection = _step2.value;
5489
5507
 
5490
5508
  if (e.key === 'ArrowRight' && selection) {
5491
5509
  if (x > lastSelectedColumn) {
@@ -5508,9 +5526,9 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
5508
5526
  }
5509
5527
  }
5510
5528
  } catch (err) {
5511
- _iterator.e(err);
5529
+ _iterator2.e(err);
5512
5530
  } finally {
5513
- _iterator.f();
5531
+ _iterator2.f();
5514
5532
  }
5515
5533
 
5516
5534
  self.selectionBounds = self.getSelectionBounds();
@@ -5586,7 +5604,15 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
5586
5604
  }
5587
5605
 
5588
5606
  if (self.currentCell.context === 'ew-resize' && self.currentCell.style === 'columnHeaderCell') {
5589
- self.fitColumnToValues(self.currentCell.header.name);
5607
+ // Check that double-clicked cell is selected or part of selection.
5608
+ var currentCellIsSelected = self.isColumnSelected(self.currentCell.columnIndex);
5609
+
5610
+ if (currentCellIsSelected) {
5611
+ // There might be more
5612
+ self.fitSelectedColumns();
5613
+ } else {
5614
+ self.fitColumnToValues(self.currentCell.header.name);
5615
+ }
5590
5616
  } else if (self.currentCell.context === 'ew-resize' && self.currentCell.style === 'cornerCell') {
5591
5617
  self.autosize();
5592
5618
  } else if (['cell', 'activeCell'].includes(self.currentCell.style) && !self.hovers.onFilterButton) {
@@ -5796,52 +5822,22 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
5796
5822
  };
5797
5823
 
5798
5824
  self.cut = function (e) {
5799
- self.copy(e);
5800
- var schema = self.getSchema();
5801
- var affectedCells = [];
5802
-
5803
- var _iterator2 = _createForOfIteratorHelper(self.selections.entries()),
5804
- _step2;
5805
-
5806
- try {
5807
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
5808
- var _step2$value = _slicedToArray(_step2.value, 2),
5809
- rowIndex = _step2$value[0],
5810
- row = _step2$value[1];
5811
-
5812
- if (!row) continue;
5813
- var boundRowIndex = self.getBoundRowIndexFromViewRowIndex(rowIndex);
5814
-
5815
- var _iterator3 = _createForOfIteratorHelper(row),
5816
- _step3;
5817
-
5818
- try {
5819
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
5820
- var columnIndex = _step3.value;
5821
- var boundColumnIndex = self.getBoundColumnIndexFromViewColumnIndex(columnIndex);
5822
- var colName = schema[boundColumnIndex].name;
5823
- self.viewData[rowIndex][colName] = '';
5824
- affectedCells.push([rowIndex, columnIndex, boundRowIndex, boundColumnIndex]);
5825
- }
5826
- } catch (err) {
5827
- _iterator3.e(err);
5828
- } finally {
5829
- _iterator3.f();
5830
- }
5831
- }
5832
- } catch (err) {
5833
- _iterator2.e(err);
5834
- } finally {
5835
- _iterator2.f();
5836
- }
5837
-
5838
5825
  if (self.dispatchEvent('cut', {
5839
- NativeEvent: e,
5840
- cells: affectedCells
5826
+ NativeEvent: e
5841
5827
  })) {
5842
5828
  return;
5829
+ } // Expecting instance of `ClipboardEvent` with `clipboardData` attribute
5830
+
5831
+
5832
+ if (!self.hasFocus || !e.clipboardData) {
5833
+ return;
5843
5834
  }
5844
5835
 
5836
+ self.copySelectedCellsToClipboard(e.clipboardData);
5837
+ var affectedCells = self.clearSelectedCells();
5838
+ self.dispatchEvent('aftercut', {
5839
+ cells: affectedCells
5840
+ });
5845
5841
  requestAnimationFrame(function () {
5846
5842
  return self.draw();
5847
5843
  });
@@ -5852,82 +5848,15 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
5852
5848
  NativeEvent: e
5853
5849
  })) {
5854
5850
  return;
5855
- }
5851
+ } // Expecting instance of `ClipboardEvent` with `clipboardData` attribute
5852
+
5856
5853
 
5857
5854
  if (!self.hasFocus || !e.clipboardData) {
5858
5855
  return;
5859
5856
  }
5860
5857
 
5861
- var t = '',
5862
- d = '',
5863
- textRows = [],
5864
- sData = self.getSelectedData(),
5865
- s = self.getSchema(),
5866
- sSorted = [],
5867
- firstRowKeys,
5868
- isNeat = true; // Selected like [[0, 1], [0, 1]] of [[0, 3]] is neat; Selected like [[0, 1], [1, 2]] is untidy
5869
-
5870
- function htmlSafe(v) {
5871
- if (typeof v === 'number') return v;
5872
- return v.replace(/</g, '&lt;').replace(/>/g, '&gt;');
5873
- }
5874
-
5875
- s.forEach(function (column, columnIndex) {
5876
- sSorted.push(s[self.orders.columns[columnIndex]]);
5877
- });
5878
-
5879
- if (sData.length > 0) {
5880
- sData.forEach(function (row) {
5881
- if (!row) return;
5882
- var rowKeys = Object.keys(row);
5883
- var textRow = [];
5884
- if (!firstRowKeys) firstRowKeys = Object.keys(row);
5885
- if (isNeat && rowKeys.length !== firstRowKeys.length) isNeat = false;
5886
- sSorted.forEach(function (column, columnIndex) {
5887
- if (rowKeys.indexOf(String(column.name)) < 0) {
5888
- if (firstRowKeys.indexOf(String(column.name)) < 0) {
5889
- return;
5890
- } else if (isNeat) {
5891
- isNeat = false;
5892
- }
5893
- }
5894
-
5895
- textRow.push(row[column.name] || '');
5896
- });
5897
- textRows.push(textRow);
5898
- });
5899
-
5900
- if (isNeat) {
5901
- t = textRows.map(function (row) {
5902
- return row.join('\t');
5903
- }).join('\n');
5904
- /**
5905
- * The html content copied by Excel has not header
5906
- */
5907
-
5908
- d += '<table>';
5909
- d += textRows.map(function (row) {
5910
- return '<tr>' + row.map(function (value) {
5911
- return '<td>' + htmlSafe(value) + '</td>';
5912
- }).join('') + '</tr>';
5913
- }).join('');
5914
- d += '</table>';
5915
- } else {
5916
- t = textRows.map(function (row) {
5917
- return row.join('');
5918
- }).join('');
5919
- d = t;
5920
- }
5921
-
5922
- if (t) {
5923
- e.clipboardData.setData('text/html', d);
5924
- e.clipboardData.setData('text/plain', t);
5925
- e.clipboardData.setData('text/csv', t);
5926
- e.clipboardData.setData('application/json', JSON.stringify(sData));
5927
- }
5928
-
5929
- e.preventDefault();
5930
- }
5858
+ self.copySelectedCellsToClipboard(e.clipboardData);
5859
+ e.preventDefault();
5931
5860
  };
5932
5861
 
5933
5862
  return;
@@ -5940,6 +5869,9 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
5940
5869
  !*** ./lib/events/util.js ***!
5941
5870
  \****************************/
5942
5871
  /*! namespace exports */
5872
+ /*! export createHTMLString [provided] [no usage info] [missing usage info prevents renaming] */
5873
+ /*! export createTextString [provided] [no usage info] [missing usage info prevents renaming] */
5874
+ /*! export htmlSafe [provided] [no usage info] [missing usage info prevents renaming] */
5943
5875
  /*! export isSupportedHtml [provided] [no usage info] [missing usage info prevents renaming] */
5944
5876
  /*! export parseData [provided] [no usage info] [missing usage info prevents renaming] */
5945
5877
  /*! export parseHtmlTable [provided] [no usage info] [missing usage info prevents renaming] */
@@ -5953,12 +5885,15 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
5953
5885
  "use strict";
5954
5886
  __webpack_require__.r(__webpack_exports__);
5955
5887
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
5888
+ /* harmony export */ "createTextString": function() { return /* binding */ createTextString; },
5889
+ /* harmony export */ "createHTMLString": function() { return /* binding */ createHTMLString; },
5956
5890
  /* harmony export */ "isSupportedHtml": function() { return /* binding */ isSupportedHtml; },
5957
- /* harmony export */ "sanitizeElementData": function() { return /* binding */ sanitizeElementData; },
5891
+ /* harmony export */ "htmlSafe": function() { return /* binding */ htmlSafe; },
5958
5892
  /* harmony export */ "parseData": function() { return /* binding */ parseData; },
5959
5893
  /* harmony export */ "parseHtmlTable": function() { return /* binding */ parseHtmlTable; },
5960
5894
  /* harmony export */ "parseHtmlText": function() { return /* binding */ parseHtmlText; },
5961
- /* harmony export */ "parseText": function() { return /* binding */ parseText; }
5895
+ /* harmony export */ "parseText": function() { return /* binding */ parseText; },
5896
+ /* harmony export */ "sanitizeElementData": function() { return /* binding */ sanitizeElementData; }
5962
5897
  /* harmony export */ });
5963
5898
 
5964
5899
 
@@ -6081,6 +6016,36 @@ var parseData = function parseData(data, mimeType) {
6081
6016
  return parseText(data);
6082
6017
  };
6083
6018
 
6019
+ var htmlSafe = function htmlSafe(value) {
6020
+ if (typeof value === 'number') return value;
6021
+ return value.replace(/</g, '&lt;').replace(/>/g, '&gt;');
6022
+ };
6023
+
6024
+ var createTextString = function createTextString(selectedData, isNeat) {
6025
+ // Selected like [[0, 1], [0, 1]] of [[0, 3]] is neat; Selected like [[0, 1], [1, 2]] is untidy.
6026
+ // If not isNeat we just return a simple string of concatenated values.
6027
+ if (!isNeat) return selectedData.map(function (row) {
6028
+ return Object.values(row).join('');
6029
+ }).join(''); // If isNeat, we can create tab separated mutti-line text.
6030
+
6031
+ return selectedData.map(function (row) {
6032
+ return Object.values(row).join('\t');
6033
+ }).join('\n');
6034
+ };
6035
+
6036
+ var createHTMLString = function createHTMLString(selectedData, isNeat) {
6037
+ if (!isNeat) return createTextString(selectedData, isNeat); // If isNeat, we can create a HTML table with the selected data.
6038
+
6039
+ var htmlString = '<table>';
6040
+ htmlString += selectedData.map(function (row) {
6041
+ return '<tr>' + Object.values(row).map(function (value) {
6042
+ return '<td>' + htmlSafe(value) + '</td>';
6043
+ }).join('') + '</tr>';
6044
+ }).join('');
6045
+ htmlString += '</table>';
6046
+ return htmlString;
6047
+ };
6048
+
6084
6049
 
6085
6050
 
6086
6051
  /***/ }),
@@ -6092,7 +6057,7 @@ var parseData = function parseData(data, mimeType) {
6092
6057
  /*! namespace exports */
6093
6058
  /*! export default [provided] [no usage info] [missing usage info prevents renaming] */
6094
6059
  /*! other exports [not provided] [no usage info] */
6095
- /*! runtime requirements: __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */
6060
+ /*! runtime requirements: __webpack_require__, __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */
6096
6061
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
6097
6062
 
6098
6063
  "use strict";
@@ -6100,6 +6065,7 @@ __webpack_require__.r(__webpack_exports__);
6100
6065
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
6101
6066
  /* harmony export */ "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
6102
6067
  /* harmony export */ });
6068
+ /* harmony import */ var _events_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events/util */ "./lib/events/util.js");
6103
6069
  /*jslint browser: true, unparam: true, todo: true*/
6104
6070
 
6105
6071
  /*globals HTMLElement: false, Reflect: false, define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/
@@ -6121,6 +6087,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
6121
6087
 
6122
6088
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
6123
6089
 
6090
+
6124
6091
  /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(self, ctor) {
6125
6092
  self.scale = 1;
6126
6093
  self.orders = {
@@ -6325,9 +6292,11 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6325
6292
  return selectedCells;
6326
6293
  };
6327
6294
 
6328
- self.clearSelectedCells = function () {
6295
+ self.copySelectedCellsToClipboard = function (clipboardData) {
6296
+ var selectedData = [];
6329
6297
  var schema = self.getSchema();
6330
- var affectedCells = [];
6298
+ var firstRowAsString;
6299
+ var isNeat = true; // Selected like [[0, 1], [0, 1]] of [[0, 3]] is neat; Selected like [[0, 1], [1, 2]] is untidy
6331
6300
 
6332
6301
  var _iterator3 = _createForOfIteratorHelper(self.selections.entries()),
6333
6302
  _step3;
@@ -6339,7 +6308,12 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6339
6308
  row = _step3$value[1];
6340
6309
 
6341
6310
  // If no cells are selected for a particular rowIndex the selections array will contain an empty element for that rowIndex.
6342
- if (!row) continue;
6311
+ if (!row) continue; // Convert to string for easy comparison to the first row.
6312
+
6313
+ var rowAsString = row.join(',').toString();
6314
+ var rowDict = {};
6315
+ if (!firstRowAsString) firstRowAsString = row.join(',').toString();
6316
+ if (isNeat && rowAsString !== firstRowAsString) isNeat = false;
6343
6317
  var boundRowIndex = self.getBoundRowIndexFromViewRowIndex(rowIndex);
6344
6318
 
6345
6319
  var _iterator4 = _createForOfIteratorHelper(row),
@@ -6352,14 +6326,16 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6352
6326
  if (columnIndex < 0) continue;
6353
6327
  var boundColumnIndex = self.getBoundColumnIndexFromViewColumnIndex(columnIndex);
6354
6328
  var columnName = schema[boundColumnIndex].name;
6355
- self.viewData[boundRowIndex][columnName] = null;
6356
- affectedCells.push([rowIndex, columnIndex, boundRowIndex, boundColumnIndex]);
6329
+ var value = self.originalData[boundRowIndex][columnName];
6330
+ rowDict[columnName] = value;
6357
6331
  }
6358
6332
  } catch (err) {
6359
6333
  _iterator4.e(err);
6360
6334
  } finally {
6361
6335
  _iterator4.f();
6362
6336
  }
6337
+
6338
+ selectedData.push(rowDict);
6363
6339
  }
6364
6340
  } catch (err) {
6365
6341
  _iterator3.e(err);
@@ -6367,6 +6343,68 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6367
6343
  _iterator3.f();
6368
6344
  }
6369
6345
 
6346
+ if (selectedData.length > 0) {
6347
+ var textString = (0,_events_util__WEBPACK_IMPORTED_MODULE_0__.createTextString)(selectedData, isNeat);
6348
+ var htmlString = (0,_events_util__WEBPACK_IMPORTED_MODULE_0__.createHTMLString)(selectedData, isNeat);
6349
+ var copiedData = {
6350
+ 'text/plain': textString,
6351
+ 'text/html': htmlString,
6352
+ 'text/csv': textString,
6353
+ 'application/json': JSON.stringify(selectedData)
6354
+ };
6355
+
6356
+ for (var _i2 = 0, _Object$entries = Object.entries(copiedData); _i2 < _Object$entries.length; _i2++) {
6357
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),
6358
+ mimeType = _Object$entries$_i[0],
6359
+ data = _Object$entries$_i[1];
6360
+
6361
+ clipboardData.setData(mimeType, data);
6362
+ }
6363
+ }
6364
+ };
6365
+
6366
+ self.clearSelectedCells = function () {
6367
+ var schema = self.getSchema();
6368
+ var affectedCells = [];
6369
+
6370
+ var _iterator5 = _createForOfIteratorHelper(self.selections.entries()),
6371
+ _step5;
6372
+
6373
+ try {
6374
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
6375
+ var _step5$value = _slicedToArray(_step5.value, 2),
6376
+ rowIndex = _step5$value[0],
6377
+ row = _step5$value[1];
6378
+
6379
+ // If no cells are selected for a particular rowIndex the selections array will contain an empty element for that rowIndex.
6380
+ if (!row) continue;
6381
+ var boundRowIndex = self.getBoundRowIndexFromViewRowIndex(rowIndex);
6382
+
6383
+ var _iterator6 = _createForOfIteratorHelper(row),
6384
+ _step6;
6385
+
6386
+ try {
6387
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
6388
+ var columnIndex = _step6.value;
6389
+ // If the whole row is selected the columnIndex for the rowHeader is -1.
6390
+ if (columnIndex < 0) continue;
6391
+ var boundColumnIndex = self.getBoundColumnIndexFromViewColumnIndex(columnIndex);
6392
+ var columnName = schema[boundColumnIndex].name;
6393
+ self.viewData[boundRowIndex][columnName] = '';
6394
+ affectedCells.push([rowIndex, columnIndex, boundRowIndex, boundColumnIndex]);
6395
+ }
6396
+ } catch (err) {
6397
+ _iterator6.e(err);
6398
+ } finally {
6399
+ _iterator6.f();
6400
+ }
6401
+ }
6402
+ } catch (err) {
6403
+ _iterator5.e(err);
6404
+ } finally {
6405
+ _iterator5.f();
6406
+ }
6407
+
6370
6408
  return affectedCells;
6371
6409
  };
6372
6410
 
@@ -6446,6 +6484,30 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6446
6484
  self.orders.rows = fillArray(0, self.originalData.length - 1);
6447
6485
  };
6448
6486
 
6487
+ self.fitSelectedColumns = function () {
6488
+ var selectedColumns = self.selections[0];
6489
+ var schema = self.getSchema();
6490
+
6491
+ var _iterator7 = _createForOfIteratorHelper(selectedColumns),
6492
+ _step7;
6493
+
6494
+ try {
6495
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
6496
+ var selectedColumn = _step7.value;
6497
+
6498
+ // Make sure the column is not the row header and that the whole column has in fact been selected.
6499
+ if (selectedColumn >= 0 && self.isColumnSelected(selectedColumn)) {
6500
+ var column = schema[self.orders.columns[selectedColumn]];
6501
+ self.fitColumnToValues(column.name);
6502
+ }
6503
+ }
6504
+ } catch (err) {
6505
+ _iterator7.e(err);
6506
+ } finally {
6507
+ _iterator7.f();
6508
+ }
6509
+ };
6510
+
6449
6511
  self.getVisibleSchema = function () {
6450
6512
  return self.getSchema().filter(function (col) {
6451
6513
  return !col.hidden;
@@ -6512,9 +6574,9 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6512
6574
  }); // Apply filtering
6513
6575
 
6514
6576
  var _loop = function _loop() {
6515
- var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),
6516
- headerName = _Object$entries$_i[0],
6517
- filterText = _Object$entries$_i[1];
6577
+ var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i3], 2),
6578
+ headerName = _Object$entries2$_i[0],
6579
+ filterText = _Object$entries2$_i[1];
6518
6580
 
6519
6581
  var header = self.getHeaderByName(headerName);
6520
6582
 
@@ -6533,19 +6595,19 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6533
6595
  });
6534
6596
  };
6535
6597
 
6536
- for (var _i2 = 0, _Object$entries = Object.entries(self.columnFilters); _i2 < _Object$entries.length; _i2++) {
6598
+ for (var _i3 = 0, _Object$entries2 = Object.entries(self.columnFilters); _i3 < _Object$entries2.length; _i3++) {
6537
6599
  var _ret = _loop();
6538
6600
 
6539
6601
  if (_ret === "continue") continue;
6540
6602
  } // Apply sorting
6541
6603
 
6542
6604
 
6543
- var _iterator5 = _createForOfIteratorHelper(self.orderings.columns),
6544
- _step5;
6605
+ var _iterator8 = _createForOfIteratorHelper(self.orderings.columns),
6606
+ _step8;
6545
6607
 
6546
6608
  try {
6547
6609
  var _loop2 = function _loop2() {
6548
- var column = _step5.value;
6610
+ var column = _step8.value;
6549
6611
  var sortFn = column.sortFunction(column.orderBy, column.orderDirection);
6550
6612
  newViewData.sort(function (_ref7, _ref8) {
6551
6613
  var _ref9 = _slicedToArray(_ref7, 1),
@@ -6560,13 +6622,13 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6560
6622
  });
6561
6623
  };
6562
6624
 
6563
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
6625
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
6564
6626
  _loop2();
6565
6627
  }
6566
6628
  } catch (err) {
6567
- _iterator5.e(err);
6629
+ _iterator8.e(err);
6568
6630
  } finally {
6569
- _iterator5.f();
6631
+ _iterator8.f();
6570
6632
  }
6571
6633
 
6572
6634
  return {