@deephaven/iris-grid 1.28.1 → 1.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/ColumnStatistics.js +1 -1
  2. package/dist/ColumnStatistics.js.map +1 -1
  3. package/dist/IrisGrid.d.ts +28 -4
  4. package/dist/IrisGrid.d.ts.map +1 -1
  5. package/dist/IrisGrid.js +185 -113
  6. package/dist/IrisGrid.js.map +1 -1
  7. package/dist/IrisGridCopyHandler.d.ts +5 -4
  8. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  9. package/dist/IrisGridCopyHandler.js +36 -29
  10. package/dist/IrisGridCopyHandler.js.map +1 -1
  11. package/dist/IrisGridModel.d.ts +2 -2
  12. package/dist/IrisGridModel.d.ts.map +1 -1
  13. package/dist/IrisGridModel.js +2 -2
  14. package/dist/IrisGridModel.js.map +1 -1
  15. package/dist/IrisGridSelectionUtils.d.ts +26 -0
  16. package/dist/IrisGridSelectionUtils.d.ts.map +1 -0
  17. package/dist/IrisGridSelectionUtils.js +84 -0
  18. package/dist/IrisGridSelectionUtils.js.map +1 -0
  19. package/dist/IrisGridTableModel.d.ts +4 -4
  20. package/dist/IrisGridTableModel.d.ts.map +1 -1
  21. package/dist/IrisGridTableModel.js +8 -8
  22. package/dist/IrisGridTableModel.js.map +1 -1
  23. package/dist/IrisGridTableModelTemplate.d.ts +25 -3
  24. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  25. package/dist/IrisGridTableModelTemplate.js +283 -79
  26. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  27. package/dist/IrisGridTreeTableModel.d.ts +2 -0
  28. package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
  29. package/dist/IrisGridTreeTableModel.js +11 -0
  30. package/dist/IrisGridTreeTableModel.js.map +1 -1
  31. package/dist/KeyedGridModel.d.ts +63 -0
  32. package/dist/KeyedGridModel.d.ts.map +1 -0
  33. package/dist/KeyedGridModel.js +12 -0
  34. package/dist/KeyedGridModel.js.map +1 -0
  35. package/dist/KeyedSelection.d.ts +194 -0
  36. package/dist/KeyedSelection.d.ts.map +1 -0
  37. package/dist/KeyedSelection.js +699 -0
  38. package/dist/KeyedSelection.js.map +1 -0
  39. package/dist/LazyIrisGrid.d.ts +1 -0
  40. package/dist/LazyIrisGrid.d.ts.map +1 -1
  41. package/dist/index.d.ts +3 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +2 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/key-handlers/CopyKeyHandler.d.ts.map +1 -1
  46. package/dist/key-handlers/CopyKeyHandler.js +8 -6
  47. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  48. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +1 -1
  49. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  50. package/dist/mousehandlers/IrisGridContextMenuHandler.js +94 -69
  51. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  52. package/dist/sidebar/TableCsvExporter.d.ts +7 -4
  53. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  54. package/dist/sidebar/TableCsvExporter.js +86 -38
  55. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  56. package/package.json +9 -9
@@ -1,6 +1,6 @@
1
1
  import React, { Component, type ReactElement } from 'react';
2
2
  import { type ItemKey } from '@deephaven/components';
3
- import { GridRange, type ModelSizeMap, type MoveOperation } from '@deephaven/grid';
3
+ import { GridRange, type ModelSizeMap, type MoveOperation, type Selection } from '@deephaven/grid';
4
4
  import type { dh as DhType } from '@deephaven/jsapi-types';
5
5
  import './TableCsvExporter.scss';
6
6
  import type IrisGridModel from '../IrisGridModel';
@@ -16,7 +16,7 @@ interface TableCsvExporterProps {
16
16
  onDownloadStart: () => void;
17
17
  onDownload: (fileName: string, frozenTable: DhType.Table, tableSubscription: DhType.TableViewportSubscription, snapshotRanges: readonly GridRange[], modelRanges: readonly GridRange[], includeColumnHeaders: boolean, useUnformattedValues: boolean) => void;
18
18
  onCancel: () => void;
19
- selectedRanges: readonly GridRange[];
19
+ selection: Selection | null;
20
20
  }
21
21
  interface TableCsvExporterState {
22
22
  fileName: string;
@@ -53,11 +53,14 @@ declare class TableCsvExporter extends Component<TableCsvExporterProps, TableCsv
53
53
  tableDownloadStatus: string;
54
54
  tableDownloadProgress: number;
55
55
  tableDownloadEstimatedTime: null;
56
- selectedRanges: never[];
56
+ selection: null;
57
57
  };
58
+ static formatRowCount(count: number): string;
58
59
  static getDateString(dh: typeof DhType): string;
59
60
  constructor(props: TableCsvExporterProps);
60
- getSnapshotRanges(): GridRange[];
61
+ /** Returns the exact selected row count when known, or null for unknown-size keyed selections. */
62
+ get selectedRowCount(): number | null;
63
+ getSnapshotRanges(keyedTableSize: number): GridRange[];
61
64
  getModelRanges(ranges: readonly GridRange[]): GridRange[];
62
65
  resetDownloadState(): void;
63
66
  handleDownloadClick(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"TableCsvExporter.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableCsvExporter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAG5D,OAAO,EASL,KAAK,OAAO,EACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,SAAS,EAET,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAG3D,OAAO,yBAAyB,CAAC;AAEjC,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAIlD,UAAU,qBAAqB;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,YAAY,CAAC;IAC/B,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,0BAA0B,EAAE,MAAM,CAAC;IACnC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,UAAU,EAAE,CACV,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,CAAC,KAAK,EACzB,iBAAiB,EAAE,MAAM,CAAC,yBAAyB,EACnD,cAAc,EAAE,SAAS,SAAS,EAAE,EACpC,WAAW,EAAE,SAAS,SAAS,EAAE,EACjC,oBAAoB,EAAE,OAAO,EAC7B,oBAAoB,EAAE,OAAO,KAC1B,IAAI,CAAC;IACV,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,EAAE,SAAS,SAAS,EAAE,CAAC;CACtC;AAED,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IAEjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2BAA2B,EAAE,MAAM,CAAC;IACpC,sBAAsB,EAAE,MAAM,CAAC;IAE/B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAE9B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAC;CACZ;AACD,cAAM,gBAAiB,SAAQ,SAAS,CACtC,qBAAqB,EACrB,qBAAqB,CACtB;IACC,MAAM,CAAC,oBAAoB,SAAuB;IAElD,MAAM,CAAC,eAAe;;;;;MAKpB;IAEF,MAAM,CAAC,oBAAoB;;;;MAIzB;IAEF,MAAM,CAAC,uBAAuB;;;MAG5B;IAEF,MAAM,CAAC,qBAAqB,SAAO;IAEnC,MAAM,CAAC,YAAY;+BACI,IAAI;;;;;;MAMzB;IAEF,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,MAAM,GAAG,MAAM;gBAOnC,KAAK,EAAE,qBAAqB;IAmCxC,iBAAiB,IAAI,SAAS,EAAE;IA2DhC,cAAc,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE;IAezD,kBAAkB,IAAI,IAAI;IAIpB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C1C,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInD,wCAAwC,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI;IAMrE,mCAAmC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIxD,iCAAiC,IAAI,IAAI;IAMzC,iCAAiC,IAAI,IAAI;IAMzC,iCAAiC,IAAI,IAAI;IAMzC,mBAAmB,IAAI,OAAO;IAsC9B,MAAM,IAAI,YAAY;CA8NvB;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"TableCsvExporter.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableCsvExporter.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,5 @@
1
1
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
2
2
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
3
- 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; }
4
- 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) { _defineProperty(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; }
5
3
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
6
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
7
5
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
@@ -9,16 +7,21 @@ import React, { Component } from 'react';
9
7
  import ClassNames from 'classnames';
10
8
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
11
9
  import { Button, Checkbox, LoadingSpinner, RadioGroup, Radio, NumberField, Picker, Item } from '@deephaven/components';
12
- import { GridRange, GridUtils } from '@deephaven/grid';
10
+ import { GridRange, GridUtils, isRangedSelection } from '@deephaven/grid';
13
11
  import { vsWarning } from '@deephaven/icons';
14
12
  import { TimeUtils } from '@deephaven/utils';
15
13
  import { nanoid } from 'nanoid';
16
14
  import "./TableCsvExporter.css";
17
15
  import Log from '@deephaven/log';
18
16
  import IrisGridUtils from "../IrisGridUtils.js";
17
+ import { KeyedSelection } from "../KeyedSelection.js";
18
+ import { isKeyedGridModel } from "../KeyedGridModel.js";
19
19
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
20
20
  var log = Log.module('TableCsvExporter');
21
21
  class TableCsvExporter extends Component {
22
+ static formatRowCount(count) {
23
+ return count.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
24
+ }
22
25
  static getDateString(dh) {
23
26
  return dh.i18n.DateTimeFormat.format(TableCsvExporter.FILENAME_DATE_FORMAT, new Date());
24
27
  }
@@ -45,10 +48,22 @@ class TableCsvExporter extends Component {
45
48
  id: nanoid()
46
49
  };
47
50
  }
48
- getSnapshotRanges() {
51
+
52
+ /** Returns the exact selected row count when known, or null for unknown-size keyed selections. */
53
+ get selectedRowCount() {
54
+ var selection = this.props.selection;
55
+ if (selection != null && isRangedSelection(selection) && !selection.isEmpty()) {
56
+ return GridRange.rowCount(selection.toRanges());
57
+ }
58
+ if (selection instanceof KeyedSelection) {
59
+ return selection.getUniqueRowCount();
60
+ }
61
+ return null;
62
+ }
63
+ getSnapshotRanges(keyedTableSize) {
49
64
  var _this$props = this.props,
50
65
  model = _this$props.model,
51
- selectedRanges = _this$props.selectedRanges;
66
+ selection = _this$props.selection;
52
67
  var _this$state = this.state,
53
68
  downloadRowOption = _this$state.downloadRowOption,
54
69
  customizedDownloadRowOption = _this$state.customizedDownloadRowOption,
@@ -61,15 +76,22 @@ class TableCsvExporter extends Component {
61
76
  snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));
62
77
  break;
63
78
  case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:
64
- snapshotRanges = selectedRanges.map(range => _objectSpread(_objectSpread({}, range), {}, {
65
- startColumn: 0,
66
- endColumn: columnCount - 1
67
- })).sort((rangeA, rangeB) => {
68
- if (rangeA.startRow != null && rangeB.startRow != null) {
69
- return rangeA.startRow - rangeB.startRow;
79
+ if (selection != null && isRangedSelection(selection)) {
80
+ snapshotRanges.push(...selection.toRanges().map(range => new GridRange(0, range.startRow, columnCount - 1, range.endRow)).sort((a, b) => {
81
+ if (a.startRow != null && b.startRow != null) {
82
+ return a.startRow - b.startRow;
83
+ }
84
+ return 0;
85
+ }));
86
+ } else if (selection instanceof KeyedSelection) {
87
+ // keyed: the frozenTable is already filtered; snapshot all its rows.
88
+ // Guard against zero — a ticking table can remove all selected rows before export.
89
+ if (keyedTableSize > 0) {
90
+ snapshotRanges.push(new GridRange(0, 0, columnCount - 1, keyedTableSize - 1));
70
91
  }
71
- return 0;
72
- });
92
+ } else {
93
+ throw new Error('Unsupported selection type for snapshot ranges.');
94
+ }
73
95
  break;
74
96
  case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:
75
97
  switch (customizedDownloadRowOption) {
@@ -111,6 +133,7 @@ class TableCsvExporter extends Component {
111
133
  return _asyncToGenerator(function* () {
112
134
  var _this$props3 = _this.props,
113
135
  model = _this$props3.model,
136
+ selection = _this$props3.selection,
114
137
  isDownloading = _this$props3.isDownloading,
115
138
  onDownloadStart = _this$props3.onDownloadStart,
116
139
  onDownload = _this$props3.onDownload,
@@ -118,31 +141,57 @@ class TableCsvExporter extends Component {
118
141
  var _this$state2 = _this.state,
119
142
  fileName = _this$state2.fileName,
120
143
  includeColumnHeaders = _this$state2.includeColumnHeaders,
121
- useUnformattedValues = _this$state2.useUnformattedValues;
144
+ useUnformattedValues = _this$state2.useUnformattedValues,
145
+ downloadRowOption = _this$state2.downloadRowOption;
122
146
  if (isDownloading) {
123
147
  onCancel();
124
148
  return;
125
149
  }
126
150
  _this.resetDownloadState();
127
- var snapshotRanges = _this.getSnapshotRanges();
128
- var modelRanges = _this.getModelRanges(snapshotRanges);
129
- if (_this.validateOptionInput()) {
130
- onDownloadStart();
131
- try {
132
- var frozenTable = yield model.export();
133
- var tableSubscription = frozenTable.setViewport(0, 0);
134
- yield tableSubscription.getViewportData();
135
- onDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);
136
- } catch (error) {
137
- log.error('CSV download failed', error);
138
- _this.setState({
139
- errorMessage: /*#__PURE__*/_jsxs("p", {
140
- children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
141
- icon: vsWarning
142
- }), " ", "".concat(error)]
143
- })
144
- });
151
+ if (!_this.validateOptionInput()) return;
152
+ var isKeyedSelectedRows = downloadRowOption === TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS && selection instanceof KeyedSelection && isKeyedGridModel(model);
153
+ onDownloadStart();
154
+ var filteredTable = null;
155
+ var frozenTable = null;
156
+ var handedOff = false;
157
+ try {
158
+ if (isKeyedSelectedRows) {
159
+ filteredTable = yield model.createFilteredByKeysTable(selection.selectedKeyValues, selection.invertedSelection);
160
+ // freeze to static snapshot; TableSaver closes frozenTable in finishDownload/cancelDownload
161
+ frozenTable = yield filteredTable.freeze();
162
+ } else {
163
+ frozenTable = yield model.export();
164
+ }
165
+ var snapshotRanges = _this.getSnapshotRanges(frozenTable.size);
166
+ if (snapshotRanges.length === 0) {
167
+ // All selected rows were removed from the ticking table before export.
145
168
  onCancel();
169
+ return;
170
+ }
171
+ var modelRanges = _this.getModelRanges(snapshotRanges);
172
+ var tableSubscription = frozenTable.setViewport(0, 0);
173
+ yield tableSubscription.getViewportData();
174
+ onDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);
175
+ handedOff = true;
176
+ } catch (error) {
177
+ log.error('CSV download failed', error);
178
+ _this.setState({
179
+ errorMessage: /*#__PURE__*/_jsxs("p", {
180
+ children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
181
+ icon: vsWarning
182
+ }), " ", "".concat(error)]
183
+ })
184
+ });
185
+ onCancel();
186
+ } finally {
187
+ var _filteredTable;
188
+ // filteredTable is only a staging table used to produce frozenTable; always close it.
189
+ (_filteredTable = filteredTable) === null || _filteredTable === void 0 || _filteredTable.close();
190
+ // frozenTable is owned by TableSaver only after onDownload runs; close on early
191
+ // return or any throw before handoff.
192
+ if (!handedOff) {
193
+ var _frozenTable;
194
+ (_frozenTable = frozenTable) === null || _frozenTable === void 0 || _frozenTable.close();
146
195
  }
147
196
  }
148
197
  })();
@@ -189,11 +238,11 @@ class TableCsvExporter extends Component {
189
238
  });
190
239
  }
191
240
  validateOptionInput() {
192
- var selectedRanges = this.props.selectedRanges;
241
+ var selection = this.props.selection;
193
242
  var _this$state3 = this.state,
194
243
  downloadRowOption = _this$state3.downloadRowOption,
195
244
  customizedDownloadRows = _this$state3.customizedDownloadRows;
196
- if (downloadRowOption === TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS && selectedRanges.length === 0) {
245
+ if (downloadRowOption === TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS && (selection == null || selection.isEmpty())) {
197
246
  this.setState({
198
247
  errorMessage: /*#__PURE__*/_jsxs("p", {
199
248
  children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
@@ -221,7 +270,6 @@ class TableCsvExporter extends Component {
221
270
  isDownloading = _this$props4.isDownloading,
222
271
  tableDownloadProgress = _this$props4.tableDownloadProgress,
223
272
  tableDownloadEstimatedTime = _this$props4.tableDownloadEstimatedTime,
224
- selectedRanges = _this$props4.selectedRanges,
225
273
  tableDownloadStatus = _this$props4.tableDownloadStatus;
226
274
  var _this$state4 = this.state,
227
275
  fileName = _this$state4.fileName,
@@ -252,14 +300,14 @@ class TableCsvExporter extends Component {
252
300
  "data-testid": "radio-csv-exporter-download-all",
253
301
  children: ["All Rows", /*#__PURE__*/_jsx("span", {
254
302
  className: "text-muted ml-2",
255
- children: "(".concat(rowCount.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,'), " rows)")
303
+ children: "(".concat(TableCsvExporter.formatRowCount(rowCount), " rows)")
256
304
  })]
257
305
  }), /*#__PURE__*/_jsxs(Radio, {
258
306
  value: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS,
259
307
  "data-testid": "radio-csv-exporter-only-selected",
260
308
  children: ["Only Selected Rows", /*#__PURE__*/_jsx("span", {
261
309
  className: "text-muted ml-2",
262
- children: selectedRanges.length > 0 ? "(".concat(GridRange.rowCount(selectedRanges).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,'), " rows)") : null
310
+ children: this.selectedRowCount != null ? "(".concat(TableCsvExporter.formatRowCount(this.selectedRowCount), " rows)") : null
263
311
  })]
264
312
  }), /*#__PURE__*/_jsxs("div", {
265
313
  className: "d-flex",
@@ -429,7 +477,7 @@ _defineProperty(TableCsvExporter, "defaultProps", {
429
477
  tableDownloadStatus: '',
430
478
  tableDownloadProgress: 0,
431
479
  tableDownloadEstimatedTime: null,
432
- selectedRanges: []
480
+ selection: null
433
481
  });
434
482
  export default TableCsvExporter;
435
483
  //# sourceMappingURL=TableCsvExporter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableCsvExporter.js","names":["React","Component","ClassNames","FontAwesomeIcon","Button","Checkbox","LoadingSpinner","RadioGroup","Radio","NumberField","Picker","Item","GridRange","GridUtils","vsWarning","TimeUtils","nanoid","Log","IrisGridUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","TableCsvExporter","getDateString","dh","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadRowOptionChanged","handleCustomizedDownloadRowOptionChanged","handleCustomizedDownloadRowsChanged","handleIncludeColumnHeadersChanged","handleIncludeHiddenColumnsChanged","handleUseUnformattedValuesChanged","model","name","state","fileName","concat","downloadRowOption","DOWNLOAD_ROW_OPTIONS","ALL_ROWS","customizedDownloadRowOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","includeColumnHeaders","includeHiddenColumns","useUnformattedValues","errorMessage","id","getSnapshotRanges","_this$props","selectedRanges","_this$state","rowCount","columnCount","snapshotRanges","push","SELECTED_ROWS","map","range","_objectSpread","startColumn","endColumn","sort","rangeA","rangeB","startRow","CUSTOMIZED_ROWS","Math","min","LAST","max","getModelRanges","ranges","_this$props2","userColumnWidths","movedColumns","hiddenColumns","getHiddenColumns","modelRanges","length","subtractRanges","makeColumn","subtractRangesFromRanges","resetDownloadState","setState","_this","_asyncToGenerator","_this$props3","isDownloading","onDownloadStart","onDownload","onCancel","_this$state2","validateOptionInput","frozenTable","export","tableSubscription","setViewport","getViewportData","error","children","icon","value","String","_ref","_ref2","_ref3","_this$state3","render","_this$props4","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","_this$state4","className","onChange","isDisabled","toString","replace","margin","role","onClick","selectedKey","flex","minValue","defaultValue","width","minWidth","htmlFor","type","event","target","disabled","checked","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","style","kind","_defineProperty","undefined"],"sources":["../../src/sidebar/TableCsvExporter.tsx"],"sourcesContent":["import React, { Component, type ReactElement } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n Checkbox,\n LoadingSpinner,\n RadioGroup,\n Radio,\n NumberField,\n Picker,\n Item,\n type ItemKey,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n type ModelSizeMap,\n type MoveOperation,\n} from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { TimeUtils } from '@deephaven/utils';\nimport { nanoid } from 'nanoid';\nimport './TableCsvExporter.scss';\nimport Log from '@deephaven/log';\nimport type IrisGridModel from '../IrisGridModel';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableCsvExporter');\ninterface TableCsvExporterProps {\n model: IrisGridModel;\n name: string;\n userColumnWidths: ModelSizeMap;\n movedColumns: readonly MoveOperation[];\n isDownloading: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number;\n onDownloadStart: () => void;\n onDownload: (\n fileName: string,\n frozenTable: DhType.Table,\n tableSubscription: DhType.TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ) => void;\n onCancel: () => void;\n selectedRanges: readonly GridRange[];\n}\n\ninterface TableCsvExporterState {\n fileName: string;\n\n downloadRowOption: string;\n customizedDownloadRowOption: string;\n customizedDownloadRows: number;\n\n includeColumnHeaders: boolean;\n includeHiddenColumns: boolean;\n useUnformattedValues: boolean;\n\n errorMessage: React.ReactNode;\n id: string;\n}\nclass TableCsvExporter extends Component<\n TableCsvExporterProps,\n TableCsvExporterState\n> {\n static FILENAME_DATE_FORMAT = 'yyyy-MM-dd-HHmmss';\n\n static DOWNLOAD_STATUS = {\n INITIATING: 'INITIATING',\n DOWNLOADING: 'DOWNLOADING',\n FINISHED: 'FINISHED',\n CANCELED: 'CANCELED',\n };\n\n static DOWNLOAD_ROW_OPTIONS = {\n ALL_ROWS: 'ALL_ROWS',\n SELECTED_ROWS: 'SELECTED_ROWS',\n CUSTOMIZED_ROWS: 'CUSTOMIZED_ROWS',\n };\n\n static CUSTOMIZED_ROWS_OPTIONS = {\n FIRST: 'FIRST',\n LAST: 'LAST',\n };\n\n static DEFAULT_DOWNLOAD_ROWS = 100;\n\n static defaultProps = {\n onDownloadStart: (): void => undefined,\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selectedRanges: [],\n };\n\n static getDateString(dh: typeof DhType): string {\n return dh.i18n.DateTimeFormat.format(\n TableCsvExporter.FILENAME_DATE_FORMAT,\n new Date()\n );\n }\n\n constructor(props: TableCsvExporterProps) {\n super(props);\n\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadRowOptionChanged =\n this.handleDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowOptionChanged =\n this.handleCustomizedDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowsChanged =\n this.handleCustomizedDownloadRowsChanged.bind(this);\n this.handleIncludeColumnHeadersChanged =\n this.handleIncludeColumnHeadersChanged.bind(this);\n this.handleIncludeHiddenColumnsChanged =\n this.handleIncludeHiddenColumnsChanged.bind(this);\n this.handleUseUnformattedValuesChanged =\n this.handleUseUnformattedValuesChanged.bind(this);\n\n const { model, name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString(model.dh)}.csv`,\n\n downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,\n customizedDownloadRowOption:\n TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n includeColumnHeaders: true,\n includeHiddenColumns: false,\n useUnformattedValues: false,\n\n errorMessage: null,\n id: nanoid(),\n };\n }\n\n getSnapshotRanges(): GridRange[] {\n const { model, selectedRanges } = this.props;\n const {\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount, columnCount } = model;\n let snapshotRanges = [] as GridRange[];\n switch (downloadRowOption) {\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:\n snapshotRanges = selectedRanges\n .map(range => ({\n ...range,\n startColumn: 0,\n endColumn: columnCount - 1,\n }))\n .sort((rangeA, rangeB) => {\n if (rangeA.startRow != null && rangeB.startRow != null) {\n return rangeA.startRow - rangeB.startRow;\n }\n return 0;\n }) as GridRange[];\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadRowOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n 0,\n 0,\n columnCount - 1,\n Math.min(customizedDownloadRows - 1, rowCount - 1)\n )\n );\n break;\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.LAST:\n snapshotRanges.push(\n new GridRange(\n 0,\n Math.max(0, rowCount - customizedDownloadRows),\n columnCount - 1,\n rowCount - 1\n )\n );\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n return snapshotRanges;\n }\n\n getModelRanges(ranges: readonly GridRange[]): GridRange[] {\n const { userColumnWidths, movedColumns } = this.props;\n const { includeHiddenColumns } = this.state;\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (!includeHiddenColumns && hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n return modelRanges;\n }\n\n resetDownloadState(): void {\n this.setState({ errorMessage: null });\n }\n\n async handleDownloadClick(): Promise<void> {\n const { model, isDownloading, onDownloadStart, onDownload, onCancel } =\n this.props;\n const { fileName, includeColumnHeaders, useUnformattedValues } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n\n const snapshotRanges = this.getSnapshotRanges();\n const modelRanges = this.getModelRanges(snapshotRanges);\n if (this.validateOptionInput()) {\n onDownloadStart();\n try {\n const frozenTable = await model.export();\n const tableSubscription = frozenTable.setViewport(0, 0);\n await tableSubscription.getViewportData();\n onDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n } catch (error) {\n log.error('CSV download failed', error);\n\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> {`${error}`}\n </p>\n ),\n });\n onCancel();\n }\n }\n }\n\n handleDownloadRowOptionChanged(value: string): void {\n this.setState({ downloadRowOption: value });\n }\n\n handleCustomizedDownloadRowOptionChanged(value: ItemKey | null): void {\n if (value !== null) {\n this.setState({ customizedDownloadRowOption: String(value) });\n }\n }\n\n handleCustomizedDownloadRowsChanged(value: number): void {\n this.setState({ customizedDownloadRows: value });\n }\n\n handleIncludeColumnHeadersChanged(): void {\n this.setState(({ includeColumnHeaders }) => ({\n includeColumnHeaders: !includeColumnHeaders,\n }));\n }\n\n handleIncludeHiddenColumnsChanged(): void {\n this.setState(({ includeHiddenColumns }) => ({\n includeHiddenColumns: !includeHiddenColumns,\n }));\n }\n\n handleUseUnformattedValuesChanged(): void {\n this.setState(({ useUnformattedValues }) => ({\n useUnformattedValues: !useUnformattedValues,\n }));\n }\n\n validateOptionInput(): boolean {\n const { selectedRanges } = this.props;\n const { downloadRowOption, customizedDownloadRows } = this.state;\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&\n selectedRanges.length === 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> No rows selected. Please select\n some rows in the table.\n </p>\n ),\n });\n return false;\n }\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS &&\n customizedDownloadRows <= 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Number of rows to output must\n be greater than 0\n </p>\n ),\n });\n return false;\n }\n return true;\n }\n\n render(): ReactElement {\n const {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n selectedRanges,\n tableDownloadStatus,\n } = this.props;\n const {\n fileName,\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n includeColumnHeaders,\n includeHiddenColumns,\n useUnformattedValues,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div id=\"download-rows-label\" className=\"section-title\">\n Download Rows\n </div>\n <div className=\"form-group\">\n <RadioGroup\n aria-labelledby=\"download-rows-label\"\n onChange={this.handleDownloadRowOptionChanged}\n value={downloadRowOption}\n isDisabled={isDownloading}\n >\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS}\n data-testid=\"radio-csv-exporter-download-all\"\n >\n All Rows\n <span className=\"text-muted ml-2\">\n {`(${rowCount\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`}\n </span>\n </Radio>\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS}\n data-testid=\"radio-csv-exporter-only-selected\"\n >\n Only Selected Rows\n <span className=\"text-muted ml-2\">\n {selectedRanges.length > 0\n ? `(${GridRange.rowCount(selectedRanges)\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`\n : null}\n </span>\n </Radio>\n <div className=\"d-flex\">\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n margin=\"0\"\n aria-label=\"Download a custom number of rows\"\n />\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadRowOption:\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <Picker\n selectedKey={customizedDownloadRowOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n isDisabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowOptionChanged}\n aria-label=\"First or last number of rows\"\n flex\n >\n <Item key=\"FIRST\">First</Item>\n <Item key=\"LAST\">Last</Item>\n </Picker>\n <NumberField\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n minValue={1}\n defaultValue={100}\n value={customizedDownloadRows}\n width=\"100%\"\n minWidth={0}\n isDisabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n aria-label=\"Number of rows to download\"\n flex\n />\n <div>Rows</div>\n </div>\n </div>\n </RadioGroup>\n </div>\n <div className=\"form-group\">\n <label htmlFor={`customizedRows-${id}`}>File Name</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`filename-${id}`}\n data-testid=\"input-csv-exporter-file-name\"\n name={`filename-${id}`}\n value={fileName}\n onChange={event => {\n this.setState({ fileName: event.target.value });\n }}\n disabled={isDownloading}\n />\n </div>\n <div className=\"checkbox-options\">\n <Checkbox\n checked={includeColumnHeaders}\n onChange={this.handleIncludeColumnHeadersChanged}\n >\n Include column headers\n </Checkbox>\n <Checkbox\n checked={includeHiddenColumns}\n onChange={this.handleIncludeHiddenColumnsChanged}\n >\n Include hidden columns\n </Checkbox>\n <Checkbox\n checked={useUnformattedValues}\n onChange={this.handleUseUnformattedValuesChanged}\n >\n Use unformatted values\n </Checkbox>\n </div>\n <div className=\"section-footer flex-column\">\n {errorMessage != null && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n {tableDownloadStatus && (\n <div className=\"download-status\">\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <>\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING && (\n <div className=\"text-muted\">Starting Download...</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING && (\n <div className=\"text-muted d-flex justify-content-between\">\n <span>\n {tableDownloadEstimatedTime ||\n tableDownloadEstimatedTime === 0\n ? `Estimated time: ${TimeUtils.formatElapsedTime(\n tableDownloadEstimatedTime\n )}`\n : null}\n </span>\n <span>{`${tableDownloadProgress}%`}</span>\n </div>\n )}\n </>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"text-muted text-right\">Download Completed</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.CANCELED && (\n <div className=\"text-muted\">Download Canceled</div>\n )}\n\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <div className=\"progress\">\n <div\n className=\"progress-bar progress-bar-striped progress-bar-animated\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-success\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n </div>\n )}\n <Button\n kind=\"primary\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner className=\"mr-2 loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Downloading</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isDownloading && 'Download'}\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default TableCsvExporter;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"TableCsvExporter.js","names":["React","Component","ClassNames","FontAwesomeIcon","Button","Checkbox","LoadingSpinner","RadioGroup","Radio","NumberField","Picker","Item","GridRange","GridUtils","isRangedSelection","vsWarning","TimeUtils","nanoid","Log","IrisGridUtils","KeyedSelection","isKeyedGridModel","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","TableCsvExporter","formatRowCount","count","toString","replace","getDateString","dh","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadRowOptionChanged","handleCustomizedDownloadRowOptionChanged","handleCustomizedDownloadRowsChanged","handleIncludeColumnHeadersChanged","handleIncludeHiddenColumnsChanged","handleUseUnformattedValuesChanged","model","name","state","fileName","concat","downloadRowOption","DOWNLOAD_ROW_OPTIONS","ALL_ROWS","customizedDownloadRowOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","includeColumnHeaders","includeHiddenColumns","useUnformattedValues","errorMessage","id","selectedRowCount","selection","isEmpty","rowCount","toRanges","getUniqueRowCount","getSnapshotRanges","keyedTableSize","_this$props","_this$state","columnCount","snapshotRanges","push","SELECTED_ROWS","map","range","startRow","endRow","sort","a","b","Error","CUSTOMIZED_ROWS","Math","min","LAST","max","getModelRanges","ranges","_this$props2","userColumnWidths","movedColumns","hiddenColumns","getHiddenColumns","modelRanges","length","subtractRanges","makeColumn","subtractRangesFromRanges","resetDownloadState","setState","_this","_asyncToGenerator","_this$props3","isDownloading","onDownloadStart","onDownload","onCancel","_this$state2","validateOptionInput","isKeyedSelectedRows","filteredTable","frozenTable","handedOff","createFilteredByKeysTable","selectedKeyValues","invertedSelection","freeze","export","size","tableSubscription","setViewport","getViewportData","error","children","icon","_filteredTable","close","_frozenTable","value","String","_ref","_ref2","_ref3","_this$state3","render","_this$props4","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","_this$state4","className","onChange","isDisabled","margin","role","onClick","selectedKey","flex","minValue","defaultValue","width","minWidth","htmlFor","type","event","target","disabled","checked","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","style","kind","_defineProperty","undefined"],"sources":["../../src/sidebar/TableCsvExporter.tsx"],"sourcesContent":["import React, { Component, type ReactElement } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n Checkbox,\n LoadingSpinner,\n RadioGroup,\n Radio,\n NumberField,\n Picker,\n Item,\n type ItemKey,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n isRangedSelection,\n type ModelSizeMap,\n type MoveOperation,\n type Selection,\n} from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { TimeUtils } from '@deephaven/utils';\nimport { nanoid } from 'nanoid';\nimport './TableCsvExporter.scss';\nimport Log from '@deephaven/log';\nimport type IrisGridModel from '../IrisGridModel';\nimport IrisGridUtils from '../IrisGridUtils';\nimport { KeyedSelection } from '../KeyedSelection';\nimport { isKeyedGridModel } from '../KeyedGridModel';\n\nconst log = Log.module('TableCsvExporter');\ninterface TableCsvExporterProps {\n model: IrisGridModel;\n name: string;\n userColumnWidths: ModelSizeMap;\n movedColumns: readonly MoveOperation[];\n isDownloading: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number;\n onDownloadStart: () => void;\n onDownload: (\n fileName: string,\n frozenTable: DhType.Table,\n tableSubscription: DhType.TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ) => void;\n onCancel: () => void;\n selection: Selection | null;\n}\n\ninterface TableCsvExporterState {\n fileName: string;\n\n downloadRowOption: string;\n customizedDownloadRowOption: string;\n customizedDownloadRows: number;\n\n includeColumnHeaders: boolean;\n includeHiddenColumns: boolean;\n useUnformattedValues: boolean;\n\n errorMessage: React.ReactNode;\n id: string;\n}\nclass TableCsvExporter extends Component<\n TableCsvExporterProps,\n TableCsvExporterState\n> {\n static FILENAME_DATE_FORMAT = 'yyyy-MM-dd-HHmmss';\n\n static DOWNLOAD_STATUS = {\n INITIATING: 'INITIATING',\n DOWNLOADING: 'DOWNLOADING',\n FINISHED: 'FINISHED',\n CANCELED: 'CANCELED',\n };\n\n static DOWNLOAD_ROW_OPTIONS = {\n ALL_ROWS: 'ALL_ROWS',\n SELECTED_ROWS: 'SELECTED_ROWS',\n CUSTOMIZED_ROWS: 'CUSTOMIZED_ROWS',\n };\n\n static CUSTOMIZED_ROWS_OPTIONS = {\n FIRST: 'FIRST',\n LAST: 'LAST',\n };\n\n static DEFAULT_DOWNLOAD_ROWS = 100;\n\n static defaultProps = {\n onDownloadStart: (): void => undefined,\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selection: null,\n };\n\n static formatRowCount(count: number): string {\n return count.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,');\n }\n\n static getDateString(dh: typeof DhType): string {\n return dh.i18n.DateTimeFormat.format(\n TableCsvExporter.FILENAME_DATE_FORMAT,\n new Date()\n );\n }\n\n constructor(props: TableCsvExporterProps) {\n super(props);\n\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadRowOptionChanged =\n this.handleDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowOptionChanged =\n this.handleCustomizedDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowsChanged =\n this.handleCustomizedDownloadRowsChanged.bind(this);\n this.handleIncludeColumnHeadersChanged =\n this.handleIncludeColumnHeadersChanged.bind(this);\n this.handleIncludeHiddenColumnsChanged =\n this.handleIncludeHiddenColumnsChanged.bind(this);\n this.handleUseUnformattedValuesChanged =\n this.handleUseUnformattedValuesChanged.bind(this);\n\n const { model, name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString(model.dh)}.csv`,\n\n downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,\n customizedDownloadRowOption:\n TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n includeColumnHeaders: true,\n includeHiddenColumns: false,\n useUnformattedValues: false,\n\n errorMessage: null,\n id: nanoid(),\n };\n }\n\n /** Returns the exact selected row count when known, or null for unknown-size keyed selections. */\n get selectedRowCount(): number | null {\n const { selection } = this.props;\n if (\n selection != null &&\n isRangedSelection(selection) &&\n !selection.isEmpty()\n ) {\n return GridRange.rowCount(selection.toRanges());\n }\n if (selection instanceof KeyedSelection) {\n return selection.getUniqueRowCount();\n }\n return null;\n }\n\n getSnapshotRanges(keyedTableSize: number): GridRange[] {\n const { model, selection } = this.props;\n const {\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount, columnCount } = model;\n const snapshotRanges: GridRange[] = [];\n switch (downloadRowOption) {\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:\n if (selection != null && isRangedSelection(selection)) {\n snapshotRanges.push(\n ...selection\n .toRanges()\n .map(\n range =>\n new GridRange(\n 0,\n range.startRow,\n columnCount - 1,\n range.endRow\n )\n )\n .sort((a, b) => {\n if (a.startRow != null && b.startRow != null) {\n return a.startRow - b.startRow;\n }\n return 0;\n })\n );\n } else if (selection instanceof KeyedSelection) {\n // keyed: the frozenTable is already filtered; snapshot all its rows.\n // Guard against zero — a ticking table can remove all selected rows before export.\n if (keyedTableSize > 0) {\n snapshotRanges.push(\n new GridRange(0, 0, columnCount - 1, keyedTableSize - 1)\n );\n }\n } else {\n throw new Error('Unsupported selection type for snapshot ranges.');\n }\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadRowOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n 0,\n 0,\n columnCount - 1,\n Math.min(customizedDownloadRows - 1, rowCount - 1)\n )\n );\n break;\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.LAST:\n snapshotRanges.push(\n new GridRange(\n 0,\n Math.max(0, rowCount - customizedDownloadRows),\n columnCount - 1,\n rowCount - 1\n )\n );\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n return snapshotRanges;\n }\n\n getModelRanges(ranges: readonly GridRange[]): GridRange[] {\n const { userColumnWidths, movedColumns } = this.props;\n const { includeHiddenColumns } = this.state;\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (!includeHiddenColumns && hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n return modelRanges;\n }\n\n resetDownloadState(): void {\n this.setState({ errorMessage: null });\n }\n\n async handleDownloadClick(): Promise<void> {\n const {\n model,\n selection,\n isDownloading,\n onDownloadStart,\n onDownload,\n onCancel,\n } = this.props;\n const {\n fileName,\n includeColumnHeaders,\n useUnformattedValues,\n downloadRowOption,\n } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n if (!this.validateOptionInput()) return;\n\n const isKeyedSelectedRows =\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&\n selection instanceof KeyedSelection &&\n isKeyedGridModel(model);\n\n onDownloadStart();\n let filteredTable: DhType.Table | null = null;\n let frozenTable: DhType.Table | null = null;\n let handedOff = false;\n try {\n if (isKeyedSelectedRows) {\n filteredTable = await model.createFilteredByKeysTable(\n selection.selectedKeyValues,\n selection.invertedSelection\n );\n // freeze to static snapshot; TableSaver closes frozenTable in finishDownload/cancelDownload\n frozenTable = await filteredTable.freeze();\n } else {\n frozenTable = await model.export();\n }\n const snapshotRanges = this.getSnapshotRanges(frozenTable.size);\n if (snapshotRanges.length === 0) {\n // All selected rows were removed from the ticking table before export.\n onCancel();\n return;\n }\n const modelRanges = this.getModelRanges(snapshotRanges);\n const tableSubscription = frozenTable.setViewport(0, 0);\n await tableSubscription.getViewportData();\n onDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n handedOff = true;\n } catch (error) {\n log.error('CSV download failed', error);\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> {`${error}`}\n </p>\n ),\n });\n onCancel();\n } finally {\n // filteredTable is only a staging table used to produce frozenTable; always close it.\n filteredTable?.close();\n // frozenTable is owned by TableSaver only after onDownload runs; close on early\n // return or any throw before handoff.\n if (!handedOff) {\n frozenTable?.close();\n }\n }\n }\n\n handleDownloadRowOptionChanged(value: string): void {\n this.setState({ downloadRowOption: value });\n }\n\n handleCustomizedDownloadRowOptionChanged(value: ItemKey | null): void {\n if (value !== null) {\n this.setState({ customizedDownloadRowOption: String(value) });\n }\n }\n\n handleCustomizedDownloadRowsChanged(value: number): void {\n this.setState({ customizedDownloadRows: value });\n }\n\n handleIncludeColumnHeadersChanged(): void {\n this.setState(({ includeColumnHeaders }) => ({\n includeColumnHeaders: !includeColumnHeaders,\n }));\n }\n\n handleIncludeHiddenColumnsChanged(): void {\n this.setState(({ includeHiddenColumns }) => ({\n includeHiddenColumns: !includeHiddenColumns,\n }));\n }\n\n handleUseUnformattedValuesChanged(): void {\n this.setState(({ useUnformattedValues }) => ({\n useUnformattedValues: !useUnformattedValues,\n }));\n }\n\n validateOptionInput(): boolean {\n const { selection } = this.props;\n const { downloadRowOption, customizedDownloadRows } = this.state;\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&\n (selection == null || selection.isEmpty())\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> No rows selected. Please select\n some rows in the table.\n </p>\n ),\n });\n return false;\n }\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS &&\n customizedDownloadRows <= 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Number of rows to output must\n be greater than 0\n </p>\n ),\n });\n return false;\n }\n return true;\n }\n\n render(): ReactElement {\n const {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n tableDownloadStatus,\n } = this.props;\n const {\n fileName,\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n includeColumnHeaders,\n includeHiddenColumns,\n useUnformattedValues,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div id=\"download-rows-label\" className=\"section-title\">\n Download Rows\n </div>\n <div className=\"form-group\">\n <RadioGroup\n aria-labelledby=\"download-rows-label\"\n onChange={this.handleDownloadRowOptionChanged}\n value={downloadRowOption}\n isDisabled={isDownloading}\n >\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS}\n data-testid=\"radio-csv-exporter-download-all\"\n >\n All Rows\n <span className=\"text-muted ml-2\">\n {`(${TableCsvExporter.formatRowCount(rowCount)} rows)`}\n </span>\n </Radio>\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS}\n data-testid=\"radio-csv-exporter-only-selected\"\n >\n Only Selected Rows\n <span className=\"text-muted ml-2\">\n {this.selectedRowCount != null\n ? `(${TableCsvExporter.formatRowCount(\n this.selectedRowCount\n )} rows)`\n : null}\n </span>\n </Radio>\n <div className=\"d-flex\">\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n margin=\"0\"\n aria-label=\"Download a custom number of rows\"\n />\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadRowOption:\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <Picker\n selectedKey={customizedDownloadRowOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n isDisabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowOptionChanged}\n aria-label=\"First or last number of rows\"\n flex\n >\n <Item key=\"FIRST\">First</Item>\n <Item key=\"LAST\">Last</Item>\n </Picker>\n <NumberField\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n minValue={1}\n defaultValue={100}\n value={customizedDownloadRows}\n width=\"100%\"\n minWidth={0}\n isDisabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n aria-label=\"Number of rows to download\"\n flex\n />\n <div>Rows</div>\n </div>\n </div>\n </RadioGroup>\n </div>\n <div className=\"form-group\">\n <label htmlFor={`customizedRows-${id}`}>File Name</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`filename-${id}`}\n data-testid=\"input-csv-exporter-file-name\"\n name={`filename-${id}`}\n value={fileName}\n onChange={event => {\n this.setState({ fileName: event.target.value });\n }}\n disabled={isDownloading}\n />\n </div>\n <div className=\"checkbox-options\">\n <Checkbox\n checked={includeColumnHeaders}\n onChange={this.handleIncludeColumnHeadersChanged}\n >\n Include column headers\n </Checkbox>\n <Checkbox\n checked={includeHiddenColumns}\n onChange={this.handleIncludeHiddenColumnsChanged}\n >\n Include hidden columns\n </Checkbox>\n <Checkbox\n checked={useUnformattedValues}\n onChange={this.handleUseUnformattedValuesChanged}\n >\n Use unformatted values\n </Checkbox>\n </div>\n <div className=\"section-footer flex-column\">\n {errorMessage != null && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n {tableDownloadStatus && (\n <div className=\"download-status\">\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <>\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING && (\n <div className=\"text-muted\">Starting Download...</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING && (\n <div className=\"text-muted d-flex justify-content-between\">\n <span>\n {tableDownloadEstimatedTime ||\n tableDownloadEstimatedTime === 0\n ? `Estimated time: ${TimeUtils.formatElapsedTime(\n tableDownloadEstimatedTime\n )}`\n : null}\n </span>\n <span>{`${tableDownloadProgress}%`}</span>\n </div>\n )}\n </>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"text-muted text-right\">Download Completed</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.CANCELED && (\n <div className=\"text-muted\">Download Canceled</div>\n )}\n\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <div className=\"progress\">\n <div\n className=\"progress-bar progress-bar-striped progress-bar-animated\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-success\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n </div>\n )}\n <Button\n kind=\"primary\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner className=\"mr-2 loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Downloading</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isDownloading && 'Download'}\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default TableCsvExporter;\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/iris-grid",
3
- "version": "1.28.1",
3
+ "version": "1.29.0",
4
4
  "description": "Deephaven Iris Grid",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -31,18 +31,18 @@
31
31
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
32
32
  },
33
33
  "dependencies": {
34
- "@deephaven/components": "^1.28.1",
35
- "@deephaven/console": "^1.28.1",
34
+ "@deephaven/components": "^1.29.0",
35
+ "@deephaven/console": "^1.29.0",
36
36
  "@deephaven/filters": "^1.1.0",
37
- "@deephaven/grid": "^1.25.0",
37
+ "@deephaven/grid": "^1.29.0",
38
38
  "@deephaven/icons": "^1.2.0",
39
- "@deephaven/jsapi-components": "^1.28.1",
39
+ "@deephaven/jsapi-components": "^1.29.0",
40
40
  "@deephaven/jsapi-types": "^1.0.0-dev0.40.4",
41
- "@deephaven/jsapi-utils": "^1.23.0",
41
+ "@deephaven/jsapi-utils": "^1.29.0",
42
42
  "@deephaven/log": "^1.8.0",
43
- "@deephaven/react-hooks": "^1.21.1",
43
+ "@deephaven/react-hooks": "^1.29.0",
44
44
  "@deephaven/storage": "^1.8.0",
45
- "@deephaven/utils": "^1.10.0",
45
+ "@deephaven/utils": "^1.29.0",
46
46
  "@dnd-kit/core": "^6.1.0",
47
47
  "@dnd-kit/modifiers": "^9.0.0",
48
48
  "@dnd-kit/sortable": "^10.0.0",
@@ -81,5 +81,5 @@
81
81
  "publishConfig": {
82
82
  "access": "public"
83
83
  },
84
- "gitHead": "38cf064150db72681de850cb5b1350755ac9bb5e"
84
+ "gitHead": "ad3cce03a83989bc2ac6bc4f1847ab40a5cca760"
85
85
  }