@deephaven/iris-grid 1.22.1-alpha-pivot-builder.0 → 1.22.2-alpha-pivot-builder.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 (160) hide show
  1. package/dist/AdvancedFilterCreator.js +65 -102
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorFilterItem.js +22 -37
  4. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.js +37 -63
  6. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValueList.js +29 -59
  8. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  9. package/dist/ColumnHeaderGroup.js +6 -8
  10. package/dist/ColumnHeaderGroup.js.map +1 -1
  11. package/dist/ColumnStatistics.js +22 -28
  12. package/dist/ColumnStatistics.js.map +1 -1
  13. package/dist/CrossColumnSearch.js +20 -29
  14. package/dist/CrossColumnSearch.js.map +1 -1
  15. package/dist/FilterInputField.js +19 -46
  16. package/dist/FilterInputField.js.map +1 -1
  17. package/dist/GotoRow.js +32 -29
  18. package/dist/GotoRow.js.map +1 -1
  19. package/dist/IrisGrid.js +490 -822
  20. package/dist/IrisGrid.js.map +1 -1
  21. package/dist/IrisGridBottomBar.js +10 -11
  22. package/dist/IrisGridBottomBar.js.map +1 -1
  23. package/dist/IrisGridCacheUtils.js +28 -8
  24. package/dist/IrisGridCacheUtils.js.map +1 -1
  25. package/dist/IrisGridCellOverflowModal.js +30 -13
  26. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  27. package/dist/IrisGridCellRendererUtils.js +6 -12
  28. package/dist/IrisGridCellRendererUtils.js.map +1 -1
  29. package/dist/IrisGridCopyHandler.js +28 -47
  30. package/dist/IrisGridCopyHandler.js.map +1 -1
  31. package/dist/IrisGridMetricCalculator.js +28 -51
  32. package/dist/IrisGridMetricCalculator.js.map +1 -1
  33. package/dist/IrisGridModelUpdater.js +32 -30
  34. package/dist/IrisGridModelUpdater.js.map +1 -1
  35. package/dist/IrisGridPartitionSelector.js +28 -62
  36. package/dist/IrisGridPartitionSelector.js.map +1 -1
  37. package/dist/IrisGridProxyModel.js +7 -12
  38. package/dist/IrisGridProxyModel.js.map +1 -1
  39. package/dist/IrisGridRenderer.js +162 -264
  40. package/dist/IrisGridRenderer.js.map +1 -1
  41. package/dist/IrisGridTableModel.js +23 -16
  42. package/dist/IrisGridTableModel.js.map +1 -1
  43. package/dist/IrisGridTableModelTemplate.js +49 -73
  44. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  45. package/dist/IrisGridTestUtils.js +19 -19
  46. package/dist/IrisGridTestUtils.js.map +1 -1
  47. package/dist/IrisGridTextCellRenderer.js +35 -52
  48. package/dist/IrisGridTextCellRenderer.js.map +1 -1
  49. package/dist/IrisGridTheme.js +9 -1
  50. package/dist/IrisGridTheme.js.map +1 -1
  51. package/dist/IrisGridThemeProvider.js +5 -7
  52. package/dist/IrisGridThemeProvider.js.map +1 -1
  53. package/dist/IrisGridTreeTableModel.js +5 -9
  54. package/dist/IrisGridTreeTableModel.js.map +1 -1
  55. package/dist/IrisGridUtils.js +246 -300
  56. package/dist/IrisGridUtils.js.map +1 -1
  57. package/dist/NoPastePermissionModal.js +3 -5
  58. package/dist/NoPastePermissionModal.js.map +1 -1
  59. package/dist/PendingDataBottomBar.js +27 -16
  60. package/dist/PendingDataBottomBar.js.map +1 -1
  61. package/dist/ToastBottomBar.js +16 -8
  62. package/dist/ToastBottomBar.js.map +1 -1
  63. package/dist/format-context-menus/CustomFormatAction.js +11 -24
  64. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  65. package/dist/key-handlers/CopyCellKeyHandler.js +3 -4
  66. package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
  67. package/dist/key-handlers/CopyKeyHandler.js +1 -3
  68. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  69. package/dist/key-handlers/ReverseKeyHandler.js +1 -3
  70. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  71. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +35 -59
  72. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  73. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +13 -29
  74. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  75. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +8 -17
  76. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  77. package/dist/mousehandlers/IrisGridContextMenuHandler.js +96 -199
  78. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  79. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +2 -4
  80. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  81. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +16 -30
  82. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  83. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js +5 -13
  84. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
  85. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +20 -36
  86. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
  87. package/dist/mousehandlers/IrisGridSortMouseHandler.js +3 -5
  88. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  89. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +9 -18
  90. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
  91. package/dist/mousehandlers/PendingMouseHandler.js +10 -18
  92. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  93. package/dist/sidebar/AdvancedSettingsMenu.js +12 -5
  94. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  95. package/dist/sidebar/ChartBuilder.js +45 -102
  96. package/dist/sidebar/ChartBuilder.js.map +1 -1
  97. package/dist/sidebar/CustomColumnBuilder.js +35 -77
  98. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  99. package/dist/sidebar/CustomColumnInput.js +9 -11
  100. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  101. package/dist/sidebar/InputEditor.js +17 -24
  102. package/dist/sidebar/InputEditor.js.map +1 -1
  103. package/dist/sidebar/PluginTableOptionsErrorBoundary.js +6 -11
  104. package/dist/sidebar/PluginTableOptionsErrorBoundary.js.map +1 -1
  105. package/dist/sidebar/RollupRows.js +72 -113
  106. package/dist/sidebar/RollupRows.js.map +1 -1
  107. package/dist/sidebar/SelectDistinctBuilder.js +16 -33
  108. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  109. package/dist/sidebar/TableCsvExporter.js +50 -74
  110. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  111. package/dist/sidebar/TableSaver.js +18 -42
  112. package/dist/sidebar/TableSaver.js.map +1 -1
  113. package/dist/sidebar/aggregations/AggregationEdit.js +25 -18
  114. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  115. package/dist/sidebar/aggregations/AggregationUtils.d.ts.map +1 -1
  116. package/dist/sidebar/aggregations/AggregationUtils.js +3 -4
  117. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  118. package/dist/sidebar/aggregations/Aggregations.js +45 -34
  119. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  120. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +35 -24
  121. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  122. package/dist/sidebar/conditional-formatting/ConditionEditor.js +38 -21
  123. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  124. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +27 -11
  125. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  126. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +9 -11
  127. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  128. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +48 -57
  129. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  130. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +35 -24
  131. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  132. package/dist/sidebar/conditional-formatting/StyleEditor.js +26 -11
  133. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  134. package/dist/sidebar/visibility-ordering-builder/SearchItem.js +5 -7
  135. package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -1
  136. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +24 -18
  137. package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -1
  138. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +166 -256
  139. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  140. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +4 -11
  141. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
  142. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +28 -14
  143. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
  144. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +16 -19
  145. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  146. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +1 -3
  147. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
  148. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +19 -29
  149. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  150. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +39 -52
  151. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -1
  152. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +18 -23
  153. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  154. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +19 -15
  155. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
  156. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +16 -30
  157. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
  158. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +30 -39
  159. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  160. package/package.json +16 -16
@@ -1 +1 @@
1
- {"version":3,"file":"SelectDistinctBuilder.js","names":["React","Component","deepEqual","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","Button","Select","Log","jsx","_jsx","jsxs","_jsxs","log","module","SelectDistinctBuilder","constructor","props","handleAddColumnClick","bind","handleDeleteColumn","handleDropdownChanged","model","selectDistinctColumns","state","inputs","length","columns","originalColumns","componentDidUpdate","prevProps","prevState","onChange","filteredInputs","filter","val","setState","_ref","prevInputs","index","_ref2","input","inputIndex","value","debug","_ref3","renderInputs","map","options","_ref4","name","includes","_ref5","children","className","eventTargetValue","kind","onClick","icon","transform","tooltip","render","disableAddButton","role","disabled","_defineProperty","undefined"],"sources":["../../src/sidebar/SelectDistinctBuilder.tsx"],"sourcesContent":["import React, { Component, type ReactElement } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsTrash } from '@deephaven/icons';\nimport { Button, Select } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type ModelIndex } from '@deephaven/grid';\nimport type IrisGridModel from '../IrisGridModel';\n\nimport './SelectDistinctBuilder.scss';\nimport { type ColumnName } from '../CommonTypes';\n\nconst log = Log.module('SelectDistinctBuilder');\n\ninterface SelectDistinctBuilderProps {\n model: IrisGridModel;\n selectDistinctColumns: readonly ColumnName[];\n onChange: (newStr: readonly string[]) => void;\n}\ninterface SelectDistinctBuilderState {\n inputs: readonly string[];\n columns: readonly dh.Column[];\n}\nclass SelectDistinctBuilder extends Component<\n SelectDistinctBuilderProps,\n SelectDistinctBuilderState\n> {\n static defaultProps = {\n selectDistinctColumns: [],\n onChange: (): void => undefined,\n };\n\n constructor(props: SelectDistinctBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleDropdownChanged = this.handleDropdownChanged.bind(this);\n\n const { model, selectDistinctColumns } = this.props;\n\n this.state = {\n inputs:\n selectDistinctColumns.length > 0 ? [...selectDistinctColumns] : [''],\n columns: model.originalColumns,\n };\n }\n\n componentDidUpdate(\n prevProps: SelectDistinctBuilderProps,\n prevState: SelectDistinctBuilderState\n ): void {\n const { inputs } = this.state;\n const { onChange } = this.props;\n if (prevState.inputs !== inputs) {\n const filteredInputs = inputs.filter(val => val !== '');\n if (\n !deepEqual(\n prevState.inputs.filter(val => val !== ''),\n filteredInputs\n )\n ) {\n onChange(filteredInputs);\n }\n }\n }\n\n handleAddColumnClick(): void {\n this.setState(({ inputs: prevInputs }) => ({\n inputs: [...prevInputs, ''],\n }));\n }\n\n handleDeleteColumn(index: ModelIndex): void {\n this.setState(({ inputs }) => ({\n inputs:\n inputs.length === 1 && index === 0\n ? ['']\n : inputs.filter((input, inputIndex) => index !== inputIndex),\n }));\n }\n\n handleDropdownChanged(index: number, value: string): void {\n log.debug('handleDropdownChanged', index, value);\n this.setState(({ inputs: prevInputs }) => {\n const inputs = [...prevInputs];\n inputs[index] = value;\n return { inputs };\n });\n }\n\n renderInputs(): ReactElement[] {\n const { columns, inputs } = this.state;\n\n return inputs.map((value, index) => {\n const options = columns\n .filter(({ name }) => name === value || !inputs.includes(name))\n .map(({ name }) => (\n <option value={name} key={name}>\n {name}\n </option>\n ));\n return (\n // eslint-disable-next-line react/no-array-index-key\n <div className=\"form-inline px-3 pb-3\" key={index}>\n <Select\n className=\"form-control custom-select col\"\n value={value}\n onChange={(eventTargetValue: string) =>\n this.handleDropdownChanged(index, eventTargetValue)\n }\n >\n <option value=\"\">Select a column</option>\n {options}\n </Select>\n\n {(inputs.length > 1 || value !== '') && (\n <Button\n kind=\"ghost\"\n className=\"ml-1 px-2\"\n onClick={() => {\n this.handleDeleteColumn(index);\n }}\n icon={<FontAwesomeIcon icon={vsTrash} transform=\"grow-3\" />}\n tooltip=\"Delete column\"\n />\n )}\n </div>\n );\n });\n }\n\n render(): React.ReactElement {\n const { columns, inputs } = this.state;\n const disableAddButton = inputs.length >= columns.length;\n return (\n <div\n role=\"presentation\"\n className=\"select-distinct-builder-container h-100\"\n >\n <div className=\"select-distinct-title\">Display Unique Values From</div>\n\n {this.renderInputs()}\n\n <hr />\n\n <div className=\"pt-1 px-3\">\n <Button\n kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n disabled={disableAddButton}\n icon={dhNewCircleLargeFilled}\n >\n Add Additional Column\n </Button>\n </div>\n\n <div className=\"select-distinct-builder-footer\">\n <div className=\"select-distinct-builder-hint\">\n Display only unique values from the selected table columns. Note\n that this will reset any filters and display only the selected\n columns.\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default SelectDistinctBuilder;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SelectDistinctBuilder.js","names":["React","Component","deepEqual","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","Button","Select","Log","jsx","_jsx","jsxs","_jsxs","log","module","SelectDistinctBuilder","constructor","props","handleAddColumnClick","bind","handleDeleteColumn","handleDropdownChanged","_this$props","model","selectDistinctColumns","state","inputs","length","columns","originalColumns","componentDidUpdate","prevProps","prevState","onChange","filteredInputs","filter","val","setState","_ref","prevInputs","index","_ref2","input","inputIndex","value","debug","_ref3","renderInputs","_this$state","map","options","_ref4","name","includes","_ref5","children","className","eventTargetValue","kind","onClick","icon","transform","tooltip","render","_this$state2","disableAddButton","role","disabled","_defineProperty","undefined"],"sources":["../../src/sidebar/SelectDistinctBuilder.tsx"],"sourcesContent":["import React, { Component, type ReactElement } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsTrash } from '@deephaven/icons';\nimport { Button, Select } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type ModelIndex } from '@deephaven/grid';\nimport type IrisGridModel from '../IrisGridModel';\n\nimport './SelectDistinctBuilder.scss';\nimport { type ColumnName } from '../CommonTypes';\n\nconst log = Log.module('SelectDistinctBuilder');\n\ninterface SelectDistinctBuilderProps {\n model: IrisGridModel;\n selectDistinctColumns: readonly ColumnName[];\n onChange: (newStr: readonly string[]) => void;\n}\ninterface SelectDistinctBuilderState {\n inputs: readonly string[];\n columns: readonly dh.Column[];\n}\nclass SelectDistinctBuilder extends Component<\n SelectDistinctBuilderProps,\n SelectDistinctBuilderState\n> {\n static defaultProps = {\n selectDistinctColumns: [],\n onChange: (): void => undefined,\n };\n\n constructor(props: SelectDistinctBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleDropdownChanged = this.handleDropdownChanged.bind(this);\n\n const { model, selectDistinctColumns } = this.props;\n\n this.state = {\n inputs:\n selectDistinctColumns.length > 0 ? [...selectDistinctColumns] : [''],\n columns: model.originalColumns,\n };\n }\n\n componentDidUpdate(\n prevProps: SelectDistinctBuilderProps,\n prevState: SelectDistinctBuilderState\n ): void {\n const { inputs } = this.state;\n const { onChange } = this.props;\n if (prevState.inputs !== inputs) {\n const filteredInputs = inputs.filter(val => val !== '');\n if (\n !deepEqual(\n prevState.inputs.filter(val => val !== ''),\n filteredInputs\n )\n ) {\n onChange(filteredInputs);\n }\n }\n }\n\n handleAddColumnClick(): void {\n this.setState(({ inputs: prevInputs }) => ({\n inputs: [...prevInputs, ''],\n }));\n }\n\n handleDeleteColumn(index: ModelIndex): void {\n this.setState(({ inputs }) => ({\n inputs:\n inputs.length === 1 && index === 0\n ? ['']\n : inputs.filter((input, inputIndex) => index !== inputIndex),\n }));\n }\n\n handleDropdownChanged(index: number, value: string): void {\n log.debug('handleDropdownChanged', index, value);\n this.setState(({ inputs: prevInputs }) => {\n const inputs = [...prevInputs];\n inputs[index] = value;\n return { inputs };\n });\n }\n\n renderInputs(): ReactElement[] {\n const { columns, inputs } = this.state;\n\n return inputs.map((value, index) => {\n const options = columns\n .filter(({ name }) => name === value || !inputs.includes(name))\n .map(({ name }) => (\n <option value={name} key={name}>\n {name}\n </option>\n ));\n return (\n // eslint-disable-next-line react/no-array-index-key\n <div className=\"form-inline px-3 pb-3\" key={index}>\n <Select\n className=\"form-control custom-select col\"\n value={value}\n onChange={(eventTargetValue: string) =>\n this.handleDropdownChanged(index, eventTargetValue)\n }\n >\n <option value=\"\">Select a column</option>\n {options}\n </Select>\n\n {(inputs.length > 1 || value !== '') && (\n <Button\n kind=\"ghost\"\n className=\"ml-1 px-2\"\n onClick={() => {\n this.handleDeleteColumn(index);\n }}\n icon={<FontAwesomeIcon icon={vsTrash} transform=\"grow-3\" />}\n tooltip=\"Delete column\"\n />\n )}\n </div>\n );\n });\n }\n\n render(): React.ReactElement {\n const { columns, inputs } = this.state;\n const disableAddButton = inputs.length >= columns.length;\n return (\n <div\n role=\"presentation\"\n className=\"select-distinct-builder-container h-100\"\n >\n <div className=\"select-distinct-title\">Display Unique Values From</div>\n\n {this.renderInputs()}\n\n <hr />\n\n <div className=\"pt-1 px-3\">\n <Button\n kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n disabled={disableAddButton}\n icon={dhNewCircleLargeFilled}\n >\n Add Additional Column\n </Button>\n </div>\n\n <div className=\"select-distinct-builder-footer\">\n <div className=\"select-distinct-builder-hint\">\n Display only unique values from the selected table columns. Note\n that this will reset any filters and display only the selected\n columns.\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default SelectDistinctBuilder;\n"],"mappings":"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","ignoreList":[]}
@@ -31,10 +31,8 @@ class TableCsvExporter extends Component {
31
31
  this.handleIncludeColumnHeadersChanged = this.handleIncludeColumnHeadersChanged.bind(this);
32
32
  this.handleIncludeHiddenColumnsChanged = this.handleIncludeHiddenColumnsChanged.bind(this);
33
33
  this.handleUseUnformattedValuesChanged = this.handleUseUnformattedValuesChanged.bind(this);
34
- var {
35
- model,
36
- name
37
- } = props;
34
+ var model = props.model,
35
+ name = props.name;
38
36
  this.state = {
39
37
  fileName: "".concat(name, "-").concat(TableCsvExporter.getDateString(model.dh), ".csv"),
40
38
  downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,
@@ -48,19 +46,15 @@ class TableCsvExporter extends Component {
48
46
  };
49
47
  }
50
48
  getSnapshotRanges() {
51
- var {
52
- model,
53
- selectedRanges
54
- } = this.props;
55
- var {
56
- downloadRowOption,
57
- customizedDownloadRowOption,
58
- customizedDownloadRows
59
- } = this.state;
60
- var {
61
- rowCount,
62
- columnCount
63
- } = model;
49
+ var _this$props = this.props,
50
+ model = _this$props.model,
51
+ selectedRanges = _this$props.selectedRanges;
52
+ var _this$state = this.state,
53
+ downloadRowOption = _this$state.downloadRowOption,
54
+ customizedDownloadRowOption = _this$state.customizedDownloadRowOption,
55
+ customizedDownloadRows = _this$state.customizedDownloadRows;
56
+ var rowCount = model.rowCount,
57
+ columnCount = model.columnCount;
64
58
  var snapshotRanges = [];
65
59
  switch (downloadRowOption) {
66
60
  case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS:
@@ -95,13 +89,10 @@ class TableCsvExporter extends Component {
95
89
  return snapshotRanges;
96
90
  }
97
91
  getModelRanges(ranges) {
98
- var {
99
- userColumnWidths,
100
- movedColumns
101
- } = this.props;
102
- var {
103
- includeHiddenColumns
104
- } = this.state;
92
+ var _this$props2 = this.props,
93
+ userColumnWidths = _this$props2.userColumnWidths,
94
+ movedColumns = _this$props2.movedColumns;
95
+ var includeHiddenColumns = this.state.includeHiddenColumns;
105
96
  var hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);
106
97
  var modelRanges = GridUtils.getModelRanges(ranges, movedColumns);
107
98
  if (!includeHiddenColumns && hiddenColumns.length > 0) {
@@ -118,18 +109,16 @@ class TableCsvExporter extends Component {
118
109
  handleDownloadClick() {
119
110
  var _this = this;
120
111
  return _asyncToGenerator(function* () {
121
- var {
122
- model,
123
- isDownloading,
124
- onDownloadStart,
125
- onDownload,
126
- onCancel
127
- } = _this.props;
128
- var {
129
- fileName,
130
- includeColumnHeaders,
131
- useUnformattedValues
132
- } = _this.state;
112
+ var _this$props3 = _this.props,
113
+ model = _this$props3.model,
114
+ isDownloading = _this$props3.isDownloading,
115
+ onDownloadStart = _this$props3.onDownloadStart,
116
+ onDownload = _this$props3.onDownload,
117
+ onCancel = _this$props3.onCancel;
118
+ var _this$state2 = _this.state,
119
+ fileName = _this$state2.fileName,
120
+ includeColumnHeaders = _this$state2.includeColumnHeaders,
121
+ useUnformattedValues = _this$state2.useUnformattedValues;
133
122
  if (isDownloading) {
134
123
  onCancel();
135
124
  return;
@@ -177,9 +166,7 @@ class TableCsvExporter extends Component {
177
166
  }
178
167
  handleIncludeColumnHeadersChanged() {
179
168
  this.setState(_ref => {
180
- var {
181
- includeColumnHeaders
182
- } = _ref;
169
+ var includeColumnHeaders = _ref.includeColumnHeaders;
183
170
  return {
184
171
  includeColumnHeaders: !includeColumnHeaders
185
172
  };
@@ -187,9 +174,7 @@ class TableCsvExporter extends Component {
187
174
  }
188
175
  handleIncludeHiddenColumnsChanged() {
189
176
  this.setState(_ref2 => {
190
- var {
191
- includeHiddenColumns
192
- } = _ref2;
177
+ var includeHiddenColumns = _ref2.includeHiddenColumns;
193
178
  return {
194
179
  includeHiddenColumns: !includeHiddenColumns
195
180
  };
@@ -197,22 +182,17 @@ class TableCsvExporter extends Component {
197
182
  }
198
183
  handleUseUnformattedValuesChanged() {
199
184
  this.setState(_ref3 => {
200
- var {
201
- useUnformattedValues
202
- } = _ref3;
185
+ var useUnformattedValues = _ref3.useUnformattedValues;
203
186
  return {
204
187
  useUnformattedValues: !useUnformattedValues
205
188
  };
206
189
  });
207
190
  }
208
191
  validateOptionInput() {
209
- var {
210
- selectedRanges
211
- } = this.props;
212
- var {
213
- downloadRowOption,
214
- customizedDownloadRows
215
- } = this.state;
192
+ var selectedRanges = this.props.selectedRanges;
193
+ var _this$state3 = this.state,
194
+ downloadRowOption = _this$state3.downloadRowOption,
195
+ customizedDownloadRows = _this$state3.customizedDownloadRows;
216
196
  if (downloadRowOption === TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS && selectedRanges.length === 0) {
217
197
  this.setState({
218
198
  errorMessage: /*#__PURE__*/_jsxs("p", {
@@ -236,28 +216,24 @@ class TableCsvExporter extends Component {
236
216
  return true;
237
217
  }
238
218
  render() {
239
- var {
240
- model,
241
- isDownloading,
242
- tableDownloadProgress,
243
- tableDownloadEstimatedTime,
244
- selectedRanges,
245
- tableDownloadStatus
246
- } = this.props;
247
- var {
248
- fileName,
249
- downloadRowOption,
250
- customizedDownloadRowOption,
251
- customizedDownloadRows,
252
- includeColumnHeaders,
253
- includeHiddenColumns,
254
- useUnformattedValues,
255
- errorMessage,
256
- id
257
- } = this.state;
258
- var {
259
- rowCount
260
- } = model;
219
+ var _this$props4 = this.props,
220
+ model = _this$props4.model,
221
+ isDownloading = _this$props4.isDownloading,
222
+ tableDownloadProgress = _this$props4.tableDownloadProgress,
223
+ tableDownloadEstimatedTime = _this$props4.tableDownloadEstimatedTime,
224
+ selectedRanges = _this$props4.selectedRanges,
225
+ tableDownloadStatus = _this$props4.tableDownloadStatus;
226
+ var _this$state4 = this.state,
227
+ fileName = _this$state4.fileName,
228
+ downloadRowOption = _this$state4.downloadRowOption,
229
+ customizedDownloadRowOption = _this$state4.customizedDownloadRowOption,
230
+ customizedDownloadRows = _this$state4.customizedDownloadRows,
231
+ includeColumnHeaders = _this$state4.includeColumnHeaders,
232
+ includeHiddenColumns = _this$state4.includeHiddenColumns,
233
+ useUnformattedValues = _this$state4.useUnformattedValues,
234
+ errorMessage = _this$state4.errorMessage,
235
+ id = _this$state4.id;
236
+ var rowCount = model.rowCount;
261
237
  return /*#__PURE__*/_jsxs("div", {
262
238
  className: "table-csv-exporter",
263
239
  children: [/*#__PURE__*/_jsx("div", {
@@ -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","selectedRanges","rowCount","columnCount","snapshotRanges","push","SELECTED_ROWS","map","range","_objectSpread","startColumn","endColumn","sort","rangeA","rangeB","startRow","CUSTOMIZED_ROWS","Math","min","LAST","max","getModelRanges","ranges","userColumnWidths","movedColumns","hiddenColumns","getHiddenColumns","modelRanges","length","subtractRanges","makeColumn","subtractRangesFromRanges","resetDownloadState","setState","_this","_asyncToGenerator","isDownloading","onDownloadStart","onDownload","onCancel","validateOptionInput","frozenTable","export","tableSubscription","setViewport","getViewportData","error","children","icon","value","String","_ref","_ref2","_ref3","render","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","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","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":[]}
@@ -80,9 +80,7 @@ export default class TableSaver extends PureComponent {
80
80
  this.useBlobFallback = false;
81
81
  }
82
82
  componentDidMount() {
83
- var {
84
- getDownloadWorker
85
- } = this.props;
83
+ var getDownloadWorker = this.props.getDownloadWorker;
86
84
  getDownloadWorker().then(sw => {
87
85
  log.info('found active service worker');
88
86
  this.sw = sw;
@@ -106,9 +104,7 @@ export default class TableSaver extends PureComponent {
106
104
  if (useBlob) {
107
105
  encode = TextEncoder.prototype.encode.bind(new TextEncoder());
108
106
  }
109
- var {
110
- fileName
111
- } = this;
107
+ var fileName = this.fileName;
112
108
  var streamConfig = {};
113
109
  if (useBlob) {
114
110
  streamConfig.write = chunk => {
@@ -157,9 +153,7 @@ export default class TableSaver extends PureComponent {
157
153
  }
158
154
  startDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues) {
159
155
  // don't trigger another download when a download is ongoing
160
- var {
161
- isDownloading
162
- } = this.props;
156
+ var isDownloading = this.props.isDownloading;
163
157
  if (isDownloading) {
164
158
  return;
165
159
  }
@@ -202,9 +196,7 @@ export default class TableSaver extends PureComponent {
202
196
  if (this.fileWriter) {
203
197
  this.fileWriter.close();
204
198
  }
205
- var {
206
- onDownloadCompleted
207
- } = this.props;
199
+ var onDownloadCompleted = this.props.onDownloadCompleted;
208
200
  onDownloadCompleted();
209
201
  this.resetTableSaver();
210
202
  if (this.downloadStartTime !== undefined) {
@@ -222,9 +214,7 @@ export default class TableSaver extends PureComponent {
222
214
  cancelable.cancel();
223
215
  }
224
216
  });
225
- var {
226
- onDownloadCanceled
227
- } = this.props;
217
+ var onDownloadCanceled = this.props.onDownloadCanceled;
228
218
  onDownloadCanceled();
229
219
  this.resetTableSaver();
230
220
  }
@@ -316,9 +306,7 @@ export default class TableSaver extends PureComponent {
316
306
  }
317
307
  updateDownloadProgress(snapshotIndex) {
318
308
  if (snapshotIndex != null && this.snapshotsTotal != null && this.downloadStartTime != null) {
319
- var {
320
- onDownloadProgressUpdate
321
- } = this.props;
309
+ var onDownloadProgressUpdate = this.props.onDownloadProgressUpdate;
322
310
  var downloadProgress = Math.floor(snapshotIndex * 100 / this.snapshotsTotal);
323
311
  var estimateTime = snapshotIndex > 1 ? Math.floor((Date.now() - this.downloadStartTime) * (this.snapshotsTotal - snapshotIndex) / snapshotIndex / 1000) : null;
324
312
  onDownloadProgressUpdate(downloadProgress, estimateTime);
@@ -327,25 +315,21 @@ export default class TableSaver extends PureComponent {
327
315
  convertSnapshotIntoCsv(snapshot) {
328
316
  var csvString = '';
329
317
  var snapshotIterator = snapshot.added.iterator();
330
- var {
331
- dh,
332
- formatter
333
- } = this.props;
318
+ var _this$props = this.props,
319
+ dh = _this$props.dh,
320
+ formatter = _this$props.formatter;
334
321
  var rows = [];
335
322
  while (snapshotIterator.hasNext()) {
336
323
  rows.push(snapshotIterator.next().value);
337
324
  }
338
325
  assertNotNull(this.columns);
339
- var {
340
- useUnformattedValues
341
- } = this;
326
+ var useUnformattedValues = this.useUnformattedValues;
342
327
  for (var i = 0; i < rows.length; i += 1) {
343
328
  var rowIdx = rows[i];
344
329
  for (var j = 0; j < this.columns.length; j += 1) {
345
- var {
346
- type,
347
- name
348
- } = this.columns[j];
330
+ var _this$columns$j = this.columns[j],
331
+ type = _this$columns$j.type,
332
+ name = _this$columns$j.name;
349
333
  var cellData = null;
350
334
  if (useUnformattedValues) {
351
335
  var _snapshot$getData;
@@ -379,9 +363,7 @@ export default class TableSaver extends PureComponent {
379
363
  if (n <= 0) {
380
364
  return;
381
365
  }
382
- var {
383
- dh
384
- } = this.props;
366
+ var dh = this.props.dh;
385
367
  assertNotNull(this.gridRangeCounter);
386
368
  var i = 0;
387
369
  var currentGridRange = this.gridRanges[this.gridRangeCounter];
@@ -420,20 +402,14 @@ export default class TableSaver extends PureComponent {
420
402
  }
421
403
  }
422
404
  handlePortMessage(_ref) {
423
- var {
424
- data
425
- } = _ref;
426
- var {
427
- download,
428
- readableStreamPulling
429
- } = data;
405
+ var data = _ref.data;
406
+ var download = data.download,
407
+ readableStreamPulling = data.readableStreamPulling;
430
408
  if (this.useBlobFallback) {
431
409
  return;
432
410
  }
433
411
  if (download != null) {
434
- var {
435
- includeColumnHeaders
436
- } = this;
412
+ var includeColumnHeaders = this.includeColumnHeaders;
437
413
  this.makeIframe("".concat(download));
438
414
  this.writeCsvTable(includeColumnHeaders);
439
415
  }