@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.
- package/dist/AdvancedFilterCreator.js +65 -102
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js +22 -37
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +37 -63
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +29 -59
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js +6 -8
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js +22 -28
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CrossColumnSearch.js +20 -29
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js +19 -46
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js +32 -29
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.js +490 -822
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js +10 -11
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCacheUtils.js +28 -8
- package/dist/IrisGridCacheUtils.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js +30 -13
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCellRendererUtils.js +6 -12
- package/dist/IrisGridCellRendererUtils.js.map +1 -1
- package/dist/IrisGridCopyHandler.js +28 -47
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js +28 -51
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModelUpdater.js +32 -30
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js +28 -62
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.js +7 -12
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js +162 -264
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.js +23 -16
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +49 -73
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js +19 -19
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTextCellRenderer.js +35 -52
- package/dist/IrisGridTextCellRenderer.js.map +1 -1
- package/dist/IrisGridTheme.js +9 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridThemeProvider.js +5 -7
- package/dist/IrisGridThemeProvider.js.map +1 -1
- package/dist/IrisGridTreeTableModel.js +5 -9
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.js +246 -300
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/NoPastePermissionModal.js +3 -5
- package/dist/NoPastePermissionModal.js.map +1 -1
- package/dist/PendingDataBottomBar.js +27 -16
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/ToastBottomBar.js +16 -8
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js +11 -24
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/key-handlers/CopyCellKeyHandler.js +3 -4
- package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js +1 -3
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js +1 -3
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +35 -59
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +13 -29
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +8 -17
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +96 -199
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +2 -4
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js +16 -30
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js +5 -13
- package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +20 -36
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js +3 -5
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js +9 -18
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +10 -18
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js +12 -5
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js +45 -102
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +35 -77
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +9 -11
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.js +17 -24
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/PluginTableOptionsErrorBoundary.js +6 -11
- package/dist/sidebar/PluginTableOptionsErrorBoundary.js.map +1 -1
- package/dist/sidebar/RollupRows.js +72 -113
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +16 -33
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +50 -74
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.js +18 -42
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js +25 -18
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.d.ts.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js +3 -4
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js +45 -34
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +35 -24
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js +38 -21
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +27 -11
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +9 -11
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +48 -57
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js +35 -24
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js +26 -11
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js +5 -7
- package/dist/sidebar/visibility-ordering-builder/SearchItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js +24 -18
- package/dist/sidebar/visibility-ordering-builder/SearchWithModal.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +166 -256
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +4 -11
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +28 -14
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +16 -19
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +1 -3
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +19 -29
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js +39 -52
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeDndContext.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +18 -23
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +19 -15
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +16 -30
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +30 -39
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
- 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
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
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":";;;;;;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAA2B,OAAO;AAC3D,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SACEC,MAAM,EACNC,QAAQ,EACRC,cAAc,EACdC,UAAU,EACVC,KAAK,EACLC,WAAW,EACXC,MAAM,EACNC,IAAI,QAEC,uBAAuB;AAC9B,SACEC,SAAS,EACTC,SAAS,QAGJ,iBAAiB;AACxB,SAASC,SAAS,QAAQ,kBAAkB;AAE5C,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,MAAM,QAAQ,QAAQ;AAAC;AAEhC,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAE1BC,aAAa;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAEpB,IAAMC,GAAG,GAAGR,GAAG,CAACS,MAAM,CAAC,kBAAkB,CAAC;AAsC1C,MAAMC,gBAAgB,SAAS1B,SAAS,CAGtC;EAgCA,OAAO2B,aAAaA,CAACC,EAAiB,EAAU;IAC9C,OAAOA,EAAE,CAACC,IAAI,CAACC,cAAc,CAACC,MAAM,CAClCL,gBAAgB,CAACM,oBAAoB,EACrC,IAAIC,IAAI,CAAC,CACX,CAAC;EACH;EAEAC,WAAWA,CAACC,KAA4B,EAAE;IACxC,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACC,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACC,8BAA8B,GACjC,IAAI,CAACA,8BAA8B,CAACD,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACE,wCAAwC,GAC3C,IAAI,CAACA,wCAAwC,CAACF,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACG,mCAAmC,GACtC,IAAI,CAACA,mCAAmC,CAACH,IAAI,CAAC,IAAI,CAAC;IACrD,IAAI,CAACI,iCAAiC,GACpC,IAAI,CAACA,iCAAiC,CAACJ,IAAI,CAAC,IAAI,CAAC;IACnD,IAAI,CAACK,iCAAiC,GACpC,IAAI,CAACA,iCAAiC,CAACL,IAAI,CAAC,IAAI,CAAC;IACnD,IAAI,CAACM,iCAAiC,GACpC,IAAI,CAACA,iCAAiC,CAACN,IAAI,CAAC,IAAI,CAAC;IAEnD,IAAM;MAAEO,KAAK;MAAEC;IAAK,CAAC,GAAGV,KAAK;IAC7B,IAAI,CAACW,KAAK,GAAG;MACXC,QAAQ,KAAAC,MAAA,CAAKH,IAAI,OAAAG,MAAA,CAAItB,gBAAgB,CAACC,aAAa,CAACiB,KAAK,CAAChB,EAAE,CAAC,SAAM;MAEnEqB,iBAAiB,EAAEvB,gBAAgB,CAACwB,oBAAoB,CAACC,QAAQ;MACjEC,2BAA2B,EACzB1B,gBAAgB,CAAC2B,uBAAuB,CAACC,KAAK;MAChDC,sBAAsB,EAAE7B,gBAAgB,CAAC8B,qBAAqB;MAE9DC,oBAAoB,EAAE,IAAI;MAC1BC,oBAAoB,EAAE,KAAK;MAC3BC,oBAAoB,EAAE,KAAK;MAE3BC,YAAY,EAAE,IAAI;MAClBC,EAAE,EAAE9C,MAAM,CAAC;IACb,CAAC;EACH;EAEA+C,iBAAiBA,CAAA,EAAgB;IAC/B,IAAM;MAAElB,KAAK;MAAEmB;IAAe,CAAC,GAAG,IAAI,CAAC5B,KAAK;IAC5C,IAAM;MACJc,iBAAiB;MACjBG,2BAA2B;MAC3BG;IACF,CAAC,GAAG,IAAI,CAACT,KAAK;IACd,IAAM;MAAEkB,QAAQ;MAAEC;IAAY,CAAC,GAAGrB,KAAK;IACvC,IAAIsB,cAAc,GAAG,EAAiB;IACtC,QAAQjB,iBAAiB;MACvB,KAAKvB,gBAAgB,CAACwB,oBAAoB,CAACC,QAAQ;QACjDe,cAAc,CAACC,IAAI,CAAC,IAAIxD,SAAS,CAAC,CAAC,EAAE,CAAC,EAAEsD,WAAW,GAAG,CAAC,EAAED,QAAQ,GAAG,CAAC,CAAC,CAAC;QACvE;MACF,KAAKtC,gBAAgB,CAACwB,oBAAoB,CAACkB,aAAa;QACtDF,cAAc,GAAGH,cAAc,CAC5BM,GAAG,CAACC,KAAK,IAAAC,aAAA,CAAAA,aAAA,KACLD,KAAK;UACRE,WAAW,EAAE,CAAC;UACdC,SAAS,EAAER,WAAW,GAAG;QAAC,EAC1B,CAAC,CACFS,IAAI,CAAC,CAACC,MAAM,EAAEC,MAAM,KAAK;UACxB,IAAID,MAAM,CAACE,QAAQ,IAAI,IAAI,IAAID,MAAM,CAACC,QAAQ,IAAI,IAAI,EAAE;YACtD,OAAOF,MAAM,CAACE,QAAQ,GAAGD,MAAM,CAACC,QAAQ;UAC1C;UACA,OAAO,CAAC;QACV,CAAC,CAAgB;QACnB;MACF,KAAKnD,gBAAgB,CAACwB,oBAAoB,CAAC4B,eAAe;QACxD,QAAQ1B,2BAA2B;UACjC,KAAK1B,gBAAgB,CAAC2B,uBAAuB,CAACC,KAAK;YACjDY,cAAc,CAACC,IAAI,CACjB,IAAIxD,SAAS,CACX,CAAC,EACD,CAAC,EACDsD,WAAW,GAAG,CAAC,EACfc,IAAI,CAACC,GAAG,CAACzB,sBAAsB,GAAG,CAAC,EAAES,QAAQ,GAAG,CAAC,CACnD,CACF,CAAC;YACD;UACF,KAAKtC,gBAAgB,CAAC2B,uBAAuB,CAAC4B,IAAI;YAChDf,cAAc,CAACC,IAAI,CACjB,IAAIxD,SAAS,CACX,CAAC,EACDoE,IAAI,CAACG,GAAG,CAAC,CAAC,EAAElB,QAAQ,GAAGT,sBAAsB,CAAC,EAC9CU,WAAW,GAAG,CAAC,EACfD,QAAQ,GAAG,CACb,CACF,CAAC;YACD;UACF;YACE;QACJ;QACA;MACF;QACE;IACJ;IACA,OAAOE,cAAc;EACvB;EAEAiB,cAAcA,CAACC,MAA4B,EAAe;IACxD,IAAM;MAAEC,gBAAgB;MAAEC;IAAa,CAAC,GAAG,IAAI,CAACnD,KAAK;IACrD,IAAM;MAAEuB;IAAqB,CAAC,GAAG,IAAI,CAACZ,KAAK;IAC3C,IAAMyC,aAAa,GAAGtE,aAAa,CAACuE,gBAAgB,CAACH,gBAAgB,CAAC;IACtE,IAAII,WAAW,GAAG7E,SAAS,CAACuE,cAAc,CAACC,MAAM,EAAEE,YAAY,CAAC;IAChE,IAAI,CAAC5B,oBAAoB,IAAI6B,aAAa,CAACG,MAAM,GAAG,CAAC,EAAE;MACrD,IAAMC,cAAc,GAAGJ,aAAa,CAAClB,GAAG,CAAC1D,SAAS,CAACiF,UAAU,CAAC;MAC9DH,WAAW,GAAG9E,SAAS,CAACkF,wBAAwB,CAC9CJ,WAAW,EACXE,cACF,CAAC;IACH;IACA,OAAOF,WAAW;EACpB;EAEAK,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAACC,QAAQ,CAAC;MAAEnC,YAAY,EAAE;IAAK,CAAC,CAAC;EACvC;EAEMxB,mBAAmBA,CAAA,EAAkB;IAAA,IAAA4D,KAAA;IAAA,OAAAC,iBAAA;MACzC,IAAM;QAAErD,KAAK;QAAEsD,aAAa;QAAEC,eAAe;QAAEC,UAAU;QAAEC;MAAS,CAAC,GACnEL,KAAI,CAAC7D,KAAK;MACZ,IAAM;QAAEY,QAAQ;QAAEU,oBAAoB;QAAEE;MAAqB,CAAC,GAAGqC,KAAI,CAAClD,KAAK;MAE3E,IAAIoD,aAAa,EAAE;QACjBG,QAAQ,CAAC,CAAC;QACV;MACF;MAEAL,KAAI,CAACF,kBAAkB,CAAC,CAAC;MAEzB,IAAM5B,cAAc,GAAG8B,KAAI,CAAClC,iBAAiB,CAAC,CAAC;MAC/C,IAAM2B,WAAW,GAAGO,KAAI,CAACb,cAAc,CAACjB,cAAc,CAAC;MACvD,IAAI8B,KAAI,CAACM,mBAAmB,CAAC,CAAC,EAAE;QAC9BH,eAAe,CAAC,CAAC;QACjB,IAAI;UACF,IAAMI,WAAW,SAAS3D,KAAK,CAAC4D,MAAM,CAAC,CAAC;UACxC,IAAMC,iBAAiB,GAAGF,WAAW,CAACG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;UACvD,MAAMD,iBAAiB,CAACE,eAAe,CAAC,CAAC;UACzCP,UAAU,CACRrD,QAAQ,EACRwD,WAAW,EACXE,iBAAiB,EACjBvC,cAAc,EACduB,WAAW,EACXhC,oBAAoB,EACpBE,oBACF,CAAC;QACH,CAAC,CAAC,OAAOiD,KAAK,EAAE;UACdpF,GAAG,CAACoF,KAAK,CAAC,qBAAqB,EAAEA,KAAK,CAAC;UAEvCZ,KAAI,CAACD,QAAQ,CAAC;YACZnC,YAAY,eACVvC,KAAA;cAAAwF,QAAA,gBACE1F,IAAA,CAACjB,eAAe;gBAAC4G,IAAI,EAAEjG;cAAU,CAAE,CAAC,KAAC,KAAAmC,MAAA,CAAI4D,KAAK;YAAA,CAC7C;UAEP,CAAC,CAAC;UACFP,QAAQ,CAAC,CAAC;QACZ;MACF;IAAC;EACH;EAEA/D,8BAA8BA,CAACyE,KAAa,EAAQ;IAClD,IAAI,CAAChB,QAAQ,CAAC;MAAE9C,iBAAiB,EAAE8D;IAAM,CAAC,CAAC;EAC7C;EAEAxE,wCAAwCA,CAACwE,KAAqB,EAAQ;IACpE,IAAIA,KAAK,KAAK,IAAI,EAAE;MAClB,IAAI,CAAChB,QAAQ,CAAC;QAAE3C,2BAA2B,EAAE4D,MAAM,CAACD,KAAK;MAAE,CAAC,CAAC;IAC/D;EACF;EAEAvE,mCAAmCA,CAACuE,KAAa,EAAQ;IACvD,IAAI,CAAChB,QAAQ,CAAC;MAAExC,sBAAsB,EAAEwD;IAAM,CAAC,CAAC;EAClD;EAEAtE,iCAAiCA,CAAA,EAAS;IACxC,IAAI,CAACsD,QAAQ,CAACkB,IAAA;MAAA,IAAC;QAAExD;MAAqB,CAAC,GAAAwD,IAAA;MAAA,OAAM;QAC3CxD,oBAAoB,EAAE,CAACA;MACzB,CAAC;IAAA,CAAC,CAAC;EACL;EAEAf,iCAAiCA,CAAA,EAAS;IACxC,IAAI,CAACqD,QAAQ,CAACmB,KAAA;MAAA,IAAC;QAAExD;MAAqB,CAAC,GAAAwD,KAAA;MAAA,OAAM;QAC3CxD,oBAAoB,EAAE,CAACA;MACzB,CAAC;IAAA,CAAC,CAAC;EACL;EAEAf,iCAAiCA,CAAA,EAAS;IACxC,IAAI,CAACoD,QAAQ,CAACoB,KAAA;MAAA,IAAC;QAAExD;MAAqB,CAAC,GAAAwD,KAAA;MAAA,OAAM;QAC3CxD,oBAAoB,EAAE,CAACA;MACzB,CAAC;IAAA,CAAC,CAAC;EACL;EAEA2C,mBAAmBA,CAAA,EAAY;IAC7B,IAAM;MAAEvC;IAAe,CAAC,GAAG,IAAI,CAAC5B,KAAK;IACrC,IAAM;MAAEc,iBAAiB;MAAEM;IAAuB,CAAC,GAAG,IAAI,CAACT,KAAK;IAEhE,IACEG,iBAAiB,KACfvB,gBAAgB,CAACwB,oBAAoB,CAACkB,aAAa,IACrDL,cAAc,CAAC2B,MAAM,KAAK,CAAC,EAC3B;MACA,IAAI,CAACK,QAAQ,CAAC;QACZnC,YAAY,eACVvC,KAAA;UAAAwF,QAAA,gBACE1F,IAAA,CAACjB,eAAe;YAAC4G,IAAI,EAAEjG;UAAU,CAAE,CAAC,4DAEtC;QAAA,CAAG;MAEP,CAAC,CAAC;MACF,OAAO,KAAK;IACd;IAEA,IACEoC,iBAAiB,KACfvB,gBAAgB,CAACwB,oBAAoB,CAAC4B,eAAe,IACvDvB,sBAAsB,IAAI,CAAC,EAC3B;MACA,IAAI,CAACwC,QAAQ,CAAC;QACZnC,YAAY,eACVvC,KAAA;UAAAwF,QAAA,gBACE1F,IAAA,CAACjB,eAAe;YAAC4G,IAAI,EAAEjG;UAAU,CAAE,CAAC,oDAEtC;QAAA,CAAG;MAEP,CAAC,CAAC;MACF,OAAO,KAAK;IACd;IACA,OAAO,IAAI;EACb;EAEAuG,MAAMA,CAAA,EAAiB;IACrB,IAAM;MACJxE,KAAK;MACLsD,aAAa;MACbmB,qBAAqB;MACrBC,0BAA0B;MAC1BvD,cAAc;MACdwD;IACF,CAAC,GAAG,IAAI,CAACpF,KAAK;IACd,IAAM;MACJY,QAAQ;MACRE,iBAAiB;MACjBG,2BAA2B;MAC3BG,sBAAsB;MACtBE,oBAAoB;MACpBC,oBAAoB;MACpBC,oBAAoB;MACpBC,YAAY;MACZC;IACF,CAAC,GAAG,IAAI,CAACf,KAAK;IACd,IAAM;MAAEkB;IAAS,CAAC,GAAGpB,KAAK;IAC1B,oBACEvB,KAAA;MAAKmG,SAAS,EAAC,oBAAoB;MAAAX,QAAA,gBACjC1F,IAAA;QAAK0C,EAAE,EAAC,qBAAqB;QAAC2D,SAAS,EAAC,eAAe;QAAAX,QAAA,EAAC;MAExD,CAAK,CAAC,eACN1F,IAAA;QAAKqG,SAAS,EAAC,YAAY;QAAAX,QAAA,eACzBxF,KAAA,CAACf,UAAU;UACT,mBAAgB,qBAAqB;UACrCmH,QAAQ,EAAE,IAAI,CAACnF,8BAA+B;UAC9CyE,KAAK,EAAE9D,iBAAkB;UACzByE,UAAU,EAAExB,aAAc;UAAAW,QAAA,gBAE1BxF,KAAA,CAACd,KAAK;YACJwG,KAAK,EAAErF,gBAAgB,CAACwB,oBAAoB,CAACC,QAAS;YACtD,eAAY,iCAAiC;YAAA0D,QAAA,GAC9C,UAEC,eAAA1F,IAAA;cAAMqG,SAAS,EAAC,iBAAiB;cAAAX,QAAA,MAAA7D,MAAA,CAC1BgB,QAAQ,CACV2D,QAAQ,CAAC,CAAC,CACVC,OAAO,CAAC,yBAAyB,EAAE,KAAK,CAAC;YAAA,CACxC,CAAC;UAAA,CACF,CAAC,eACRvG,KAAA,CAACd,KAAK;YACJwG,KAAK,EAAErF,gBAAgB,CAACwB,oBAAoB,CAACkB,aAAc;YAC3D,eAAY,kCAAkC;YAAAyC,QAAA,GAC/C,oBAEC,eAAA1F,IAAA;cAAMqG,SAAS,EAAC,iBAAiB;cAAAX,QAAA,EAC9B9C,cAAc,CAAC2B,MAAM,GAAG,CAAC,OAAA1C,MAAA,CAClBrC,SAAS,CAACqD,QAAQ,CAACD,cAAc,CAAC,CACnC4D,QAAQ,CAAC,CAAC,CACVC,OAAO,CAAC,yBAAyB,EAAE,KAAK,CAAC,cAC5C;YAAI,CACJ,CAAC;UAAA,CACF,CAAC,eACRvG,KAAA;YAAKmG,SAAS,EAAC,QAAQ;YAAAX,QAAA,gBACrB1F,IAAA,CAACZ,KAAK;cACJwG,KAAK,EAAErF,gBAAgB,CAACwB,oBAAoB,CAAC4B,eAAgB;cAC7D,eAAY,oCAAoC;cAChD+C,MAAM,EAAC,GAAG;cACV,cAAW;YAAkC,CAC9C,CAAC,eACFxG,KAAA;cACEmG,SAAS,EAAC,iBAAiB;cAC3BM,IAAI,EAAC,cAAc;cACnBC,OAAO,EAAEA,CAAA,KAAM;gBACb,IAAI,CAAChC,QAAQ,CAAC;kBACZ9C,iBAAiB,EACfvB,gBAAgB,CAACwB,oBAAoB,CAAC4B;gBAC1C,CAAC,CAAC;cACJ,CAAE;cAAA+B,QAAA,gBAEFxF,KAAA,CAACZ,MAAM;gBACLuH,WAAW,EAAE5E,2BAA4B;gBACzC,eAAY,qCAAqC;gBACjDsE,UAAU,EAAExB,aAAc;gBAC1BuB,QAAQ,EAAE,IAAI,CAAClF,wCAAyC;gBACxD,cAAW,8BAA8B;gBACzC0F,IAAI;gBAAApB,QAAA,gBAEJ1F,IAAA,CAACT,IAAI;kBAAAmG,QAAA,EAAa;gBAAK,GAAb,OAAmB,CAAC,eAC9B1F,IAAA,CAACT,IAAI;kBAAAmG,QAAA,EAAY;gBAAI,GAAX,MAAiB,CAAC;cAAA,CACtB,CAAC,eACT1F,IAAA,CAACX,WAAW;gBACVqD,EAAE,oBAAAb,MAAA,CAAoBa,EAAE,CAAG;gBAC3B,eAAY,oCAAoC;gBAChDhB,IAAI,oBAAAG,MAAA,CAAoBa,EAAE,CAAG;gBAC7BqE,QAAQ,EAAE,CAAE;gBACZC,YAAY,EAAE,GAAI;gBAClBpB,KAAK,EAAExD,sBAAuB;gBAC9B6E,KAAK,EAAC,MAAM;gBACZC,QAAQ,EAAE,CAAE;gBACZX,UAAU,EAAExB,aAAc;gBAC1BuB,QAAQ,EAAE,IAAI,CAACjF,mCAAoC;gBACnD,cAAW,4BAA4B;gBACvCyF,IAAI;cAAA,CACL,CAAC,eACF9G,IAAA;gBAAA0F,QAAA,EAAK;cAAI,CAAK,CAAC;YAAA,CACZ,CAAC;UAAA,CACH,CAAC;QAAA,CACI;MAAC,CACV,CAAC,eACNxF,KAAA;QAAKmG,SAAS,EAAC,YAAY;QAAAX,QAAA,gBACzB1F,IAAA;UAAOmH,OAAO,oBAAAtF,MAAA,CAAoBa,EAAE,CAAG;UAAAgD,QAAA,EAAC;QAAS,CAAO,CAAC,eACzD1F,IAAA;UACEoH,IAAI,EAAC,MAAM;UACXf,SAAS,EAAC,cAAc;UACxB3D,EAAE,cAAAb,MAAA,CAAca,EAAE,CAAG;UACrB,eAAY,8BAA8B;UAC1ChB,IAAI,cAAAG,MAAA,CAAca,EAAE,CAAG;UACvBkD,KAAK,EAAEhE,QAAS;UAChB0E,QAAQ,EAAEe,KAAK,IAAI;YACjB,IAAI,CAACzC,QAAQ,CAAC;cAAEhD,QAAQ,EAAEyF,KAAK,CAACC,MAAM,CAAC1B;YAAM,CAAC,CAAC;UACjD,CAAE;UACF2B,QAAQ,EAAExC;QAAc,CACzB,CAAC;MAAA,CACC,CAAC,eACN7E,KAAA;QAAKmG,SAAS,EAAC,kBAAkB;QAAAX,QAAA,gBAC/B1F,IAAA,CAACf,QAAQ;UACPuI,OAAO,EAAElF,oBAAqB;UAC9BgE,QAAQ,EAAE,IAAI,CAAChF,iCAAkC;UAAAoE,QAAA,EAClD;QAED,CAAU,CAAC,eACX1F,IAAA,CAACf,QAAQ;UACPuI,OAAO,EAAEjF,oBAAqB;UAC9B+D,QAAQ,EAAE,IAAI,CAAC/E,iCAAkC;UAAAmE,QAAA,EAClD;QAED,CAAU,CAAC,eACX1F,IAAA,CAACf,QAAQ;UACPuI,OAAO,EAAEhF,oBAAqB;UAC9B8D,QAAQ,EAAE,IAAI,CAAC9E,iCAAkC;UAAAkE,QAAA,EAClD;QAED,CAAU,CAAC;MAAA,CACR,CAAC,eACNxF,KAAA;QAAKmG,SAAS,EAAC,4BAA4B;QAAAX,QAAA,GACxCjD,YAAY,IAAI,IAAI,iBACnBzC,IAAA;UAAKqG,SAAS,EAAC,eAAe;UAAAX,QAAA,EAAEjD;QAAY,CAAM,CACnD,EACA2D,mBAAmB,iBAClBlG,KAAA;UAAKmG,SAAS,EAAC,iBAAiB;UAAAX,QAAA,GAC7B,CAACU,mBAAmB,KACnB7F,gBAAgB,CAACkH,eAAe,CAACC,WAAW,IAC5CtB,mBAAmB,KACjB7F,gBAAgB,CAACkH,eAAe,CAACE,UAAU,kBAC7CzH,KAAA,CAAAE,SAAA;YAAAsF,QAAA,GACGU,mBAAmB,KAClB7F,gBAAgB,CAACkH,eAAe,CAACE,UAAU,iBAC3C3H,IAAA;cAAKqG,SAAS,EAAC,YAAY;cAAAX,QAAA,EAAC;YAAoB,CAAK,CACtD,EACAU,mBAAmB,KAClB7F,gBAAgB,CAACkH,eAAe,CAACC,WAAW,iBAC5CxH,KAAA;cAAKmG,SAAS,EAAC,2CAA2C;cAAAX,QAAA,gBACxD1F,IAAA;gBAAA0F,QAAA,EACGS,0BAA0B,IAC3BA,0BAA0B,KAAK,CAAC,sBAAAtE,MAAA,CACTlC,SAAS,CAACiI,iBAAiB,CAC5CzB,0BACF,CAAC,IACD;cAAI,CACJ,CAAC,eACPnG,IAAA;gBAAA0F,QAAA,KAAA7D,MAAA,CAAUqE,qBAAqB;cAAA,CAAU,CAAC;YAAA,CACvC,CACN;UAAA,CACD,CACH,EACAE,mBAAmB,KAClB7F,gBAAgB,CAACkH,eAAe,CAACI,QAAQ,iBACzC7H,IAAA;YAAKqG,SAAS,EAAC,uBAAuB;YAAAX,QAAA,EAAC;UAAkB,CAAK,CAC/D,EACAU,mBAAmB,KAClB7F,gBAAgB,CAACkH,eAAe,CAACK,QAAQ,iBACzC9H,IAAA;YAAKqG,SAAS,EAAC,YAAY;YAAAX,QAAA,EAAC;UAAiB,CAAK,CACnD,EAEA,CAACU,mBAAmB,KACnB7F,gBAAgB,CAACkH,eAAe,CAACC,WAAW,IAC5CtB,mBAAmB,KACjB7F,gBAAgB,CAACkH,eAAe,CAACE,UAAU,kBAC7C3H,IAAA;YAAKqG,SAAS,EAAC,UAAU;YAAAX,QAAA,eACvB1F,IAAA;cACEqG,SAAS,EAAC,yDAAyD;cACnE0B,KAAK,EAAE;gBAAEd,KAAK,KAAApF,MAAA,CAAKqE,qBAAqB;cAAI;YAAE,CAC/C;UAAC,CACC,CACN,EACAE,mBAAmB,KAClB7F,gBAAgB,CAACkH,eAAe,CAACI,QAAQ,iBACzC7H,IAAA;YAAKqG,SAAS,EAAC,UAAU;YAAAX,QAAA,eACvB1F,IAAA;cACEqG,SAAS,EAAC,yBAAyB;cACnC0B,KAAK,EAAE;gBAAEd,KAAK,KAAApF,MAAA,CAAKqE,qBAAqB;cAAI;YAAE,CAC/C;UAAC,CACC,CACN;QAAA,CACE,CACN,eACDhG,KAAA,CAAClB,MAAM;UACLgJ,IAAI,EAAC,SAAS;UACd,eAAY,2BAA2B;UACvC3B,SAAS,EAAEvH,UAAU,CAAC,iBAAiB,EAAE;YACvC,4BAA4B,EAAEiG;UAChC,CAAC,CAAE;UACH6B,OAAO,EAAE,IAAI,CAAC3F,mBAAoB;UAAAyE,QAAA,GAEjCX,aAAa,iBACZ7E,KAAA;YAAAwF,QAAA,gBACE1F,IAAA,CAACd,cAAc;cAACmH,SAAS,EAAC;YAAqC,CAAE,CAAC,eAClErG,IAAA;cAAMqG,SAAS,EAAC,oBAAoB;cAAAX,QAAA,EAAC;YAAW,CAAM,CAAC,eACvD1F,IAAA;cAAMqG,SAAS,EAAC,mBAAmB;cAAAX,QAAA,EAAC;YAAM,CAAM,CAAC;UAAA,CAC7C,CACP,EACA,CAACX,aAAa,IAAI,UAAU;QAAA,CACvB,CAAC;MAAA,CACN,CAAC;IAAA,CACH,CAAC;EAEV;AACF;AAACkD,eAAA,CA3eK1H,gBAAgB,0BAIU,mBAAmB;AAAA0H,eAAA,CAJ7C1H,gBAAgB,qBAMK;EACvBoH,UAAU,EAAE,YAAY;EACxBD,WAAW,EAAE,aAAa;EAC1BG,QAAQ,EAAE,UAAU;EACpBC,QAAQ,EAAE;AACZ,CAAC;AAAAG,eAAA,CAXG1H,gBAAgB,0BAaU;EAC5ByB,QAAQ,EAAE,UAAU;EACpBiB,aAAa,EAAE,eAAe;EAC9BU,eAAe,EAAE;AACnB,CAAC;AAAAsE,eAAA,CAjBG1H,gBAAgB,6BAmBa;EAC/B4B,KAAK,EAAE,OAAO;EACd2B,IAAI,EAAE;AACR,CAAC;AAAAmE,eAAA,CAtBG1H,gBAAgB,2BAwBW,GAAG;AAAA0H,eAAA,CAxB9B1H,gBAAgB,kBA0BE;EACpByE,eAAe,EAAEA,CAAA,KAAYkD,SAAS;EACtCnD,aAAa,EAAE,KAAK;EACpBqB,mBAAmB,EAAE,EAAE;EACvBF,qBAAqB,EAAE,CAAC;EACxBC,0BAA0B,EAAE,IAAI;EAChCvD,cAAc,EAAE;AAClB,CAAC;AA4cH,eAAerC,gBAAgB","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
|
-
|
|
425
|
-
|
|
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
|
}
|