@deephaven/iris-grid 0.13.3-beta.0 → 0.14.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.d.ts +69 -63
- package/dist/AdvancedFilterCreator.d.ts.map +1 -1
- package/dist/AdvancedFilterCreator.js +79 -73
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.d.ts +45 -45
- package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +32 -36
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts +47 -52
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +24 -39
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnStatistics.d.ts +34 -22
- package/dist/ColumnStatistics.d.ts.map +1 -1
- package/dist/ColumnStatistics.js +8 -12
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CommonTypes.d.ts +58 -0
- package/dist/CommonTypes.d.ts.map +1 -0
- package/dist/CommonTypes.js +2 -0
- package/dist/CommonTypes.js.map +1 -0
- package/dist/CrossColumnSearch.d.ts +26 -24
- package/dist/CrossColumnSearch.d.ts.map +1 -1
- package/dist/CrossColumnSearch.js +9 -13
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.d.ts +48 -51
- package/dist/FilterInputField.d.ts.map +1 -1
- package/dist/FilterInputField.js +30 -27
- package/dist/FilterInputField.js.map +1 -1
- package/dist/IrisGrid.d.ts +409 -453
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +514 -449
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.d.ts +1 -1
- package/dist/IrisGridCellOverflowModal.d.ts.map +1 -1
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCopyHandler.d.ts +52 -46
- package/dist/IrisGridCopyHandler.d.ts.map +1 -1
- package/dist/IrisGridCopyHandler.js +22 -38
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.d.ts +5 -4
- package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
- package/dist/IrisGridMetricCalculator.js +5 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.d.ts +37 -35
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +19 -3
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.d.ts +7 -5
- package/dist/IrisGridModelFactory.d.ts.map +1 -1
- package/dist/IrisGridModelFactory.js +5 -5
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.d.ts +13 -11
- package/dist/IrisGridModelUpdater.d.ts.map +1 -1
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.d.ts +38 -39
- package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
- package/dist/IrisGridPartitionSelector.js +18 -24
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.d.ts +111 -32
- package/dist/IrisGridProxyModel.d.ts.map +1 -1
- package/dist/IrisGridProxyModel.js +212 -170
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.d.ts +59 -31
- package/dist/IrisGridRenderer.d.ts.map +1 -1
- package/dist/IrisGridRenderer.js +92 -46
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.d.ts +48 -147
- package/dist/IrisGridTableModel.d.ts.map +1 -1
- package/dist/IrisGridTableModel.js +58 -1381
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts +219 -0
- package/dist/IrisGridTableModelTemplate.d.ts.map +1 -0
- package/dist/IrisGridTableModelTemplate.js +1623 -0
- package/dist/IrisGridTableModelTemplate.js.map +1 -0
- package/dist/IrisGridTestUtils.d.ts +18 -14
- package/dist/IrisGridTestUtils.d.ts.map +1 -1
- package/dist/IrisGridTestUtils.js +29 -1
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTheme.d.ts +35 -3
- package/dist/IrisGridTheme.d.ts.map +1 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridTreeTableModel.d.ts +26 -7
- package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
- package/dist/IrisGridTreeTableModel.js +24 -14
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.d.ts +257 -162
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +132 -95
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/MissingKeyError.d.ts +5 -3
- package/dist/MissingKeyError.d.ts.map +1 -1
- package/dist/MissingKeyError.js.map +1 -1
- package/dist/PartitionSelectorSearch.d.ts +61 -40
- package/dist/PartitionSelectorSearch.d.ts.map +1 -1
- package/dist/PartitionSelectorSearch.js +25 -15
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.d.ts +3 -6
- package/dist/PendingDataBottomBar.d.ts.map +1 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/TableViewportUpdater.d.ts +39 -55
- package/dist/TableViewportUpdater.d.ts.map +1 -1
- package/dist/TableViewportUpdater.js +42 -64
- package/dist/TableViewportUpdater.js.map +1 -1
- package/dist/TreeTableViewportUpdater.d.ts +29 -37
- package/dist/TreeTableViewportUpdater.d.ts.map +1 -1
- package/dist/TreeTableViewportUpdater.js +39 -50
- package/dist/TreeTableViewportUpdater.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +2 -0
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +41 -130
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +426 -317
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js +2 -2
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.d.ts +8 -4
- package/dist/mousehandlers/PendingMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +4 -5
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/sidebar/ChartBuilder.d.ts +48 -33
- package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
- package/dist/sidebar/ChartBuilder.js +28 -27
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.d.ts +51 -41
- package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +22 -18
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.d.ts +26 -36
- package/dist/sidebar/CustomColumnInput.d.ts.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +11 -20
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.d.ts +34 -35
- package/dist/sidebar/InputEditor.d.ts.map +1 -1
- package/dist/sidebar/InputEditor.js +43 -24
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/RollupRows.d.ts +67 -52
- package/dist/sidebar/RollupRows.d.ts.map +1 -1
- package/dist/sidebar/RollupRows.js +51 -53
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.d.ts +27 -21
- package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +6 -10
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.d.ts +42 -39
- package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +12 -20
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.d.ts +59 -60
- package/dist/sidebar/TableSaver.d.ts.map +1 -1
- package/dist/sidebar/TableSaver.js +154 -68
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.d.ts +56 -45
- package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.js +34 -29
- package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +2 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +6 -5
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +5 -0
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/icons/index.d.ts +7 -7
- package/dist/sidebar/icons/index.d.ts.map +1 -1
- package/dist/sidebar/icons/index.js.map +1 -1
- package/dist/sidebar/index.d.ts +12 -12
- package/dist/sidebar/index.d.ts.map +1 -1
- package/dist/sidebar/index.js.map +1 -1
- package/package.json +17 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sidebar/SelectDistinctBuilder.jsx"],"names":["React","Component","PropTypes","deepEqual","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","Tooltip","Log","IrisGridModel","log","module","SelectDistinctBuilder","constructor","props","handleAddColumnClick","bind","handleDeleteColumn","handleDropdownChanged","model","selectDistinctColumns","state","inputs","length","columns","originalColumns","componentDidUpdate","prevProps","prevState","onChange","filteredInputs","filter","val","setState","prevInputs","index","input","inputIndex","event","debug","value","target","renderInputs","map","options","name","includes","render","disableAddButton","propTypes","instanceOf","isRequired","arrayOf","string","func","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport deepEqual from 'deep-equal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsTrash } from '@deephaven/icons';\nimport { Tooltip } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport IrisGridModel from '../IrisGridModel';\n\nimport './SelectDistinctBuilder.scss';\n\nconst log = Log.module('SelectDistinctBuilder');\n\nclass SelectDistinctBuilder extends Component {\n constructor(props) {\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(prevProps, prevState) {\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() {\n this.setState(({ inputs: prevInputs }) => ({\n inputs: [...prevInputs, ''],\n }));\n }\n\n handleDeleteColumn(index) {\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, event) {\n log.debug('handleDropdownChanged', index, event);\n const { value } = event.target;\n this.setState(({ inputs: prevInputs }) => {\n const inputs = [...prevInputs];\n inputs[index] = value;\n return { inputs };\n });\n }\n\n renderInputs() {\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={event => this.handleDropdownChanged(index, event)}\n >\n <option value=\"\">Select a column</option>\n {options}\n </select>\n\n {(inputs.length > 1 || value !== '') && (\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon ml-1 px-2\"\n onClick={() => {\n this.handleDeleteColumn(index);\n }}\n >\n <Tooltip>Delete column</Tooltip>\n <FontAwesomeIcon icon={vsTrash} transform=\"grow-3\" />\n </button>\n )}\n </div>\n );\n });\n }\n\n render() {\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 type=\"button\"\n className=\"btn btn-link btn-add-column\"\n onClick={this.handleAddColumnClick}\n disabled={disableAddButton}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Additional Column\n </button>\n </div>\n\n <div className=\"select-distinct-builder-footer\">\n <div className=\"select-distinct-builder-hint\">\n Modifies a table to show unique value from a column, same as{' '}\n <span className=\"inline-code-snippet\">\n selectDistinct("Column")\n </span>\n . Filters will be reset and the resulting table will contain only\n the selected columns above.\n </div>\n </div>\n </div>\n );\n }\n}\n\nSelectDistinctBuilder.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n selectDistinctColumns: PropTypes.arrayOf(PropTypes.string),\n onChange: PropTypes.func,\n};\n\nSelectDistinctBuilder.defaultProps = {\n selectDistinctColumns: [],\n onChange: () => {},\n};\n\nexport default SelectDistinctBuilder;\n"],"file":"SelectDistinctBuilder.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/sidebar/SelectDistinctBuilder.tsx"],"names":["React","Component","deepEqual","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","Tooltip","Log","log","module","SelectDistinctBuilder","constructor","props","handleAddColumnClick","bind","handleDeleteColumn","handleDropdownChanged","model","selectDistinctColumns","state","inputs","length","columns","originalColumns","componentDidUpdate","prevProps","prevState","onChange","filteredInputs","filter","val","setState","prevInputs","index","input","inputIndex","event","debug","value","target","renderInputs","map","options","name","includes","render","disableAddButton","undefined"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAA+C,OAA/C;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,sBAAT,EAAiCC,OAAjC,QAAgD,kBAAhD;AACA,SAASC,OAAT,QAAwB,uBAAxB;AACA,OAAOC,GAAP,MAAgB,gBAAhB;;AAQA,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAJ,CAAW,uBAAX,CAAZ;;AAWA,MAAMC,qBAAN,SAAoCT,SAApC,CAGE;AAMAU,EAAAA,WAAW,CAACC,KAAD,EAAoC;AAC7C,UAAMA,KAAN;AAEA,SAAKC,oBAAL,GAA4B,KAAKA,oBAAL,CAA0BC,IAA1B,CAA+B,IAA/B,CAA5B;AACA,SAAKC,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBD,IAAxB,CAA6B,IAA7B,CAA1B;AACA,SAAKE,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BF,IAA3B,CAAgC,IAAhC,CAA7B;AAEA,QAAM;AAAEG,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAAmC,KAAKN,KAA9C;AAEA,SAAKO,KAAL,GAAa;AACXC,MAAAA,MAAM,EACJF,qBAAqB,CAACG,MAAtB,GAA+B,CAA/B,GAAmC,CAAC,GAAGH,qBAAJ,CAAnC,GAAgE,CAAC,EAAD,CAFvD;AAGXI,MAAAA,OAAO,EAAEL,KAAK,CAACM;AAHJ,KAAb;AAKD;;AAEDC,EAAAA,kBAAkB,CAChBC,SADgB,EAEhBC,SAFgB,EAGV;AACN,QAAM;AAAEN,MAAAA;AAAF,QAAa,KAAKD,KAAxB;AACA,QAAM;AAAEQ,MAAAA;AAAF,QAAe,KAAKf,KAA1B;;AACA,QAAIc,SAAS,CAACN,MAAV,KAAqBA,MAAzB,EAAiC;AAC/B,UAAMQ,cAAc,GAAGR,MAAM,CAACS,MAAP,CAAcC,GAAG,IAAIA,GAAG,KAAK,EAA7B,CAAvB;;AACA,UACE,CAAC5B,SAAS,CACRwB,SAAS,CAACN,MAAV,CAAiBS,MAAjB,CAAwBC,GAAG,IAAIA,GAAG,KAAK,EAAvC,CADQ,EAERF,cAFQ,CADZ,EAKE;AACAD,QAAAA,QAAQ,CAACC,cAAD,CAAR;AACD;AACF;AACF;;AAEDf,EAAAA,oBAAoB,GAAS;AAC3B,SAAKkB,QAAL,CAAc;AAAA,UAAC;AAAEX,QAAAA,MAAM,EAAEY;AAAV,OAAD;AAAA,aAA6B;AACzCZ,QAAAA,MAAM,EAAE,CAAC,GAAGY,UAAJ,EAAgB,EAAhB;AADiC,OAA7B;AAAA,KAAd;AAGD;;AAEDjB,EAAAA,kBAAkB,CAACkB,KAAD,EAA0B;AAC1C,SAAKF,QAAL,CAAc;AAAA,UAAC;AAAEX,QAAAA;AAAF,OAAD;AAAA,aAAiB;AAC7BA,QAAAA,MAAM,EACJA,MAAM,CAACC,MAAP,KAAkB,CAAlB,IAAuBY,KAAK,KAAK,CAAjC,GACI,CAAC,EAAD,CADJ,GAEIb,MAAM,CAACS,MAAP,CAAc,CAACK,KAAD,EAAQC,UAAR,KAAuBF,KAAK,KAAKE,UAA/C;AAJuB,OAAjB;AAAA,KAAd;AAMD;;AAEDnB,EAAAA,qBAAqB,CACnBiB,KADmB,EAEnBG,KAFmB,EAGb;AACN5B,IAAAA,GAAG,CAAC6B,KAAJ,CAAU,uBAAV,EAAmCJ,KAAnC,EAA0CG,KAA1C;AACA,QAAM;AAAEE,MAAAA;AAAF,QAAYF,KAAK,CAACG,MAAxB;AACA,SAAKR,QAAL,CAAc,SAA4B;AAAA,UAA3B;AAAEX,QAAAA,MAAM,EAAEY;AAAV,OAA2B;AACxC,UAAMZ,MAAM,GAAG,CAAC,GAAGY,UAAJ,CAAf;AACAZ,MAAAA,MAAM,CAACa,KAAD,CAAN,GAAgBK,KAAhB;AACA,aAAO;AAAElB,QAAAA;AAAF,OAAP;AACD,KAJD;AAKD;;AAEDoB,EAAAA,YAAY,GAAmB;AAC7B,QAAM;AAAElB,MAAAA,OAAF;AAAWF,MAAAA;AAAX,QAAsB,KAAKD,KAAjC;AAEA,WAAOC,MAAM,CAACqB,GAAP,CAAW,CAACH,KAAD,EAAQL,KAAR,KAAkB;AAClC,UAAMS,OAAO,GAAGpB,OAAO,CACpBO,MADa,CACN;AAAA,YAAC;AAAEc,UAAAA;AAAF,SAAD;AAAA,eAAcA,IAAI,KAAKL,KAAT,IAAkB,CAAClB,MAAM,CAACwB,QAAP,CAAgBD,IAAhB,CAAjC;AAAA,OADM,EAEbF,GAFa,CAET;AAAA,YAAC;AAAEE,UAAAA;AAAF,SAAD;AAAA,4BACH;AAAQ,UAAA,KAAK,EAAEA,IAAf;AAAqB,UAAA,GAAG,EAAEA;AAA1B,WACGA,IADH,CADG;AAAA,OAFS,CAAhB;AAOA;AAAA;AACE;AACA;AAAK,UAAA,SAAS,EAAC,uBAAf;AAAuC,UAAA,GAAG,EAAEV;AAA5C,wBACE;AACE,UAAA,SAAS,EAAC,gCADZ;AAEE,UAAA,KAAK,EAAEK,KAFT;AAGE,UAAA,QAAQ,EAAEF,KAAK,IAAI,KAAKpB,qBAAL,CAA2BiB,KAA3B,EAAkCG,KAAlC;AAHrB,wBAKE;AAAQ,UAAA,KAAK,EAAC;AAAd,6BALF,EAMGM,OANH,CADF,EAUG,CAACtB,MAAM,CAACC,MAAP,GAAgB,CAAhB,IAAqBiB,KAAK,KAAK,EAAhC,kBACC;AACE,UAAA,IAAI,EAAC,QADP;AAEE,UAAA,SAAS,EAAC,sCAFZ;AAGE,UAAA,OAAO,EAAE,MAAM;AACb,iBAAKvB,kBAAL,CAAwBkB,KAAxB;AACD;AALH,wBAOE,oBAAC,OAAD,wBAPF,eAQE,oBAAC,eAAD;AAAiB,UAAA,IAAI,EAAE5B,OAAvB;AAAgC,UAAA,SAAS,EAAC;AAA1C,UARF,CAXJ;AAFF;AA0BD,KAlCM,CAAP;AAmCD;;AAEDwC,EAAAA,MAAM,GAAuB;AAC3B,QAAM;AAAEvB,MAAAA,OAAF;AAAWF,MAAAA;AAAX,QAAsB,KAAKD,KAAjC;AACA,QAAM2B,gBAAgB,GAAG1B,MAAM,CAACC,MAAP,IAAiBC,OAAO,CAACD,MAAlD;AACA,wBACE;AACE,MAAA,IAAI,EAAC,cADP;AAEE,MAAA,SAAS,EAAC;AAFZ,oBAIE;AAAK,MAAA,SAAS,EAAC;AAAf,oCAJF,EAMG,KAAKmB,YAAL,EANH,eAQE,+BARF,eAUE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,6BAFZ;AAGE,MAAA,OAAO,EAAE,KAAK3B,oBAHhB;AAIE,MAAA,QAAQ,EAAEiC;AAJZ,oBAME,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAE1C;AAAvB,MANF,0BADF,CAVF,eAsBE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AAAK,MAAA,SAAS,EAAC;AAAf,uEAC+D,GAD/D,eAEE;AAAM,MAAA,SAAS,EAAC;AAAhB,oCAFF,kGADF,CAtBF,CADF;AAmCD;;AAnJD;;gBAHIM,qB,kBAIkB;AACpBQ,EAAAA,qBAAqB,EAAE,EADH;AAEpBS,EAAAA,QAAQ,EAAE,MAAYoB;AAFF,C;;AAqJxB,eAAerC,qBAAf","sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport deepEqual from 'deep-equal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsTrash } from '@deephaven/icons';\nimport { Tooltip } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { Column } from '@deephaven/jsapi-shim';\nimport { ModelIndex } from '@deephaven/grid';\nimport IrisGridModel from '../IrisGridModel';\n\nimport './SelectDistinctBuilder.scss';\nimport { ColumnName } from '../CommonTypes';\n\nconst log = Log.module('SelectDistinctBuilder');\n\ninterface SelectDistinctBuilderProps {\n model: IrisGridModel;\n selectDistinctColumns: ColumnName[];\n onChange: (newStr: string[]) => void;\n}\ninterface SelectDistinctBuilderState {\n inputs: string[];\n columns: 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(\n index: number,\n event: React.ChangeEvent<HTMLSelectElement>\n ): void {\n log.debug('handleDropdownChanged', index, event);\n const { value } = event.target;\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={event => this.handleDropdownChanged(index, event)}\n >\n <option value=\"\">Select a column</option>\n {options}\n </select>\n\n {(inputs.length > 1 || value !== '') && (\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon ml-1 px-2\"\n onClick={() => {\n this.handleDeleteColumn(index);\n }}\n >\n <Tooltip>Delete column</Tooltip>\n <FontAwesomeIcon icon={vsTrash} transform=\"grow-3\" />\n </button>\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 type=\"button\"\n className=\"btn btn-link btn-add-column\"\n onClick={this.handleAddColumnClick}\n disabled={disableAddButton}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Additional Column\n </button>\n </div>\n\n <div className=\"select-distinct-builder-footer\">\n <div className=\"select-distinct-builder-hint\">\n Modifies a table to show unique value from a column, same as{' '}\n <span className=\"inline-code-snippet\">\n selectDistinct("Column")\n </span>\n . Filters will be reset and the resulting table will contain only\n the selected columns above.\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default SelectDistinctBuilder;\n"],"file":"SelectDistinctBuilder.js"}
|
|
@@ -1,5 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import React, { Component, ReactElement } from 'react';
|
|
2
|
+
import { GridRange } from '@deephaven/grid';
|
|
3
|
+
import { Table, TableViewportSubscription } from '@deephaven/jsapi-shim';
|
|
4
|
+
import './TableCsvExporter.scss';
|
|
5
|
+
import IrisGridModel from '../IrisGridModel';
|
|
6
|
+
interface TableCsvExporterProps {
|
|
7
|
+
model: IrisGridModel;
|
|
8
|
+
name: string;
|
|
9
|
+
isDownloading: boolean;
|
|
10
|
+
tableDownloadStatus: string;
|
|
11
|
+
tableDownloadProgress: number;
|
|
12
|
+
tableDownloadEstimatedTime: number;
|
|
13
|
+
onDownloadStart: () => void;
|
|
14
|
+
onDownload: (fileName: string, frozenTable: Table, tableSubscription: TableViewportSubscription, snapshotRanges: GridRange[]) => void;
|
|
15
|
+
onCancel: () => void;
|
|
16
|
+
selectedRanges: GridRange[];
|
|
17
|
+
}
|
|
18
|
+
interface TableCsvExporterState {
|
|
19
|
+
fileName: string;
|
|
20
|
+
downloadOption: string;
|
|
21
|
+
customizedDownloadOption: string;
|
|
22
|
+
customizedDownloadRows: number;
|
|
23
|
+
errorMessage: React.ReactNode;
|
|
24
|
+
id: string;
|
|
25
|
+
}
|
|
26
|
+
declare class TableCsvExporter extends Component<TableCsvExporterProps, TableCsvExporterState> {
|
|
3
27
|
static FILENAME_DATE_FORMAT: string;
|
|
4
28
|
static DOWNLOAD_STATUS: {
|
|
5
29
|
INITIATING: string;
|
|
@@ -17,45 +41,24 @@ declare class TableCsvExporter extends React.Component<any, any, any> {
|
|
|
17
41
|
LAST: string;
|
|
18
42
|
};
|
|
19
43
|
static DEFAULT_DOWNLOAD_ROWS: number;
|
|
44
|
+
static defaultProps: {
|
|
45
|
+
onDownloadStart: () => void;
|
|
46
|
+
isDownloading: boolean;
|
|
47
|
+
tableDownloadStatus: string;
|
|
48
|
+
tableDownloadProgress: number;
|
|
49
|
+
tableDownloadEstimatedTime: null;
|
|
50
|
+
selectedRanges: never[];
|
|
51
|
+
};
|
|
20
52
|
static getDateString(): string;
|
|
21
|
-
constructor(props:
|
|
22
|
-
|
|
23
|
-
handleDownloadOptionChanged(event: any): void;
|
|
24
|
-
handleCustomizedDownloadOptionChanged(event: any): void;
|
|
25
|
-
handleCustomizedDownloadRowsChanged(event: any): void;
|
|
26
|
-
getSnapshotRanges(): any[];
|
|
53
|
+
constructor(props: TableCsvExporterProps);
|
|
54
|
+
getSnapshotRanges(): GridRange[];
|
|
27
55
|
resetDownloadState(): void;
|
|
56
|
+
handleDownloadClick(): void;
|
|
57
|
+
handleDownloadOptionChanged(event: React.ChangeEvent<HTMLInputElement>): void;
|
|
58
|
+
handleCustomizedDownloadOptionChanged(event: React.ChangeEvent<HTMLSelectElement>): void;
|
|
59
|
+
handleCustomizedDownloadRowsChanged(event: React.ChangeEvent<HTMLInputElement>): void;
|
|
28
60
|
validateOptionInput(): boolean;
|
|
61
|
+
render(): ReactElement;
|
|
29
62
|
}
|
|
30
|
-
|
|
31
|
-
namespace propTypes {
|
|
32
|
-
const model: PropTypes.Validator<any>;
|
|
33
|
-
const name: PropTypes.Validator<string>;
|
|
34
|
-
const isDownloading: PropTypes.Requireable<boolean>;
|
|
35
|
-
const tableDownloadStatus: PropTypes.Requireable<string>;
|
|
36
|
-
const tableDownloadProgress: PropTypes.Requireable<number>;
|
|
37
|
-
const tableDownloadEstimatedTime: PropTypes.Requireable<number>;
|
|
38
|
-
const onDownloadStart: PropTypes.Requireable<(...args: any[]) => any>;
|
|
39
|
-
const onDownload: PropTypes.Validator<(...args: any[]) => any>;
|
|
40
|
-
const onCancel: PropTypes.Validator<(...args: any[]) => any>;
|
|
41
|
-
const selectedRanges: PropTypes.Requireable<(GridRange | null | undefined)[]>;
|
|
42
|
-
}
|
|
43
|
-
namespace defaultProps {
|
|
44
|
-
export function onDownloadStart_1(): void;
|
|
45
|
-
export { onDownloadStart_1 as onDownloadStart };
|
|
46
|
-
const isDownloading_1: boolean;
|
|
47
|
-
export { isDownloading_1 as isDownloading };
|
|
48
|
-
const tableDownloadStatus_1: string;
|
|
49
|
-
export { tableDownloadStatus_1 as tableDownloadStatus };
|
|
50
|
-
const tableDownloadProgress_1: number;
|
|
51
|
-
export { tableDownloadProgress_1 as tableDownloadProgress };
|
|
52
|
-
const tableDownloadEstimatedTime_1: null;
|
|
53
|
-
export { tableDownloadEstimatedTime_1 as tableDownloadEstimatedTime };
|
|
54
|
-
const selectedRanges_1: never[];
|
|
55
|
-
export { selectedRanges_1 as selectedRanges };
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
import React from "react";
|
|
59
|
-
import PropTypes from "prop-types";
|
|
60
|
-
import { GridRange } from "packages/grid/src/GridRange";
|
|
63
|
+
export default TableCsvExporter;
|
|
61
64
|
//# sourceMappingURL=TableCsvExporter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableCsvExporter.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableCsvExporter.
|
|
1
|
+
{"version":3,"file":"TableCsvExporter.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableCsvExporter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAIvD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAW,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAG7E,OAAO,yBAAyB,CAAC;AACjC,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAE7C,UAAU,qBAAqB;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,0BAA0B,EAAE,MAAM,CAAC;IACnC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,UAAU,EAAE,CACV,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,KAAK,EAClB,iBAAiB,EAAE,yBAAyB,EAC5C,cAAc,EAAE,SAAS,EAAE,KACxB,IAAI,CAAC;IACV,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,EAAE,SAAS,EAAE,CAAC;CAC7B;AAED,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IAEjB,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,MAAM,CAAC;IACjC,sBAAsB,EAAE,MAAM,CAAC;IAE/B,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAC;CACZ;AACD,cAAM,gBAAiB,SAAQ,SAAS,CACtC,qBAAqB,EACrB,qBAAqB,CACtB;IACC,MAAM,CAAC,oBAAoB,SAAuB;IAElD,MAAM,CAAC,eAAe;;;;;MAKpB;IAEF,MAAM,CAAC,gBAAgB;;;;MAIrB;IAEF,MAAM,CAAC,uBAAuB;;;MAG5B;IAEF,MAAM,CAAC,qBAAqB,SAAO;IAEnC,MAAM,CAAC,YAAY;+BACI,IAAI;;;;;;MAMzB;IAEF,MAAM,CAAC,aAAa,IAAI,MAAM;gBAOlB,KAAK,EAAE,qBAAqB;IA2BxC,iBAAiB,IAAI,SAAS,EAAE;IAqDhC,kBAAkB,IAAI,IAAI;IAI1B,mBAAmB,IAAI,IAAI;IA6B3B,2BAA2B,CACzB,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GACzC,IAAI;IAIP,qCAAqC,CACnC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAC1C,IAAI;IAIP,mCAAmC,CACjC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GACzC,IAAI;IAIP,mBAAmB,IAAI,OAAO;IAoC9B,MAAM,IAAI,YAAY;CA2LvB;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
2
|
|
|
3
3
|
import React, { Component } from 'react';
|
|
4
|
-
import PropTypes from 'prop-types';
|
|
5
4
|
import ClassNames from 'classnames';
|
|
6
5
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
7
6
|
import { LoadingSpinner, RadioGroup, RadioItem } from '@deephaven/components';
|
|
@@ -10,7 +9,6 @@ import { vsWarning } from '@deephaven/icons';
|
|
|
10
9
|
import dh from '@deephaven/jsapi-shim';
|
|
11
10
|
import { TimeUtils } from '@deephaven/utils';
|
|
12
11
|
import shortid from 'shortid';
|
|
13
|
-
import IrisGridModel from "../IrisGridModel.js";
|
|
14
12
|
import "./TableCsvExporter.css";
|
|
15
13
|
|
|
16
14
|
class TableCsvExporter extends Component {
|
|
@@ -58,7 +56,13 @@ class TableCsvExporter extends Component {
|
|
|
58
56
|
break;
|
|
59
57
|
|
|
60
58
|
case TableCsvExporter.DOWNLOAD_OPTIONS.SELECTED_ROWS:
|
|
61
|
-
snapshotRanges = [...selectedRanges].sort((rangeA, rangeB) =>
|
|
59
|
+
snapshotRanges = [...selectedRanges].sort((rangeA, rangeB) => {
|
|
60
|
+
if (rangeA.startRow && rangeB.startRow) {
|
|
61
|
+
return rangeA.startRow - rangeB.startRow;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return 0;
|
|
65
|
+
});
|
|
62
66
|
break;
|
|
63
67
|
|
|
64
68
|
case TableCsvExporter.DOWNLOAD_OPTIONS.CUSTOMIZED_ROWS:
|
|
@@ -135,7 +139,7 @@ class TableCsvExporter extends Component {
|
|
|
135
139
|
|
|
136
140
|
handleCustomizedDownloadRowsChanged(event) {
|
|
137
141
|
this.setState({
|
|
138
|
-
customizedDownloadRows: event.target.value
|
|
142
|
+
customizedDownloadRows: parseInt(event.target.value, 10)
|
|
139
143
|
});
|
|
140
144
|
}
|
|
141
145
|
|
|
@@ -221,7 +225,6 @@ class TableCsvExporter extends Component {
|
|
|
221
225
|
});
|
|
222
226
|
}
|
|
223
227
|
}, /*#__PURE__*/React.createElement("select", {
|
|
224
|
-
defaultValue: TableCsvExporter.DOWNLOAD_OPTIONS.FIRST,
|
|
225
228
|
value: customizedDownloadOption,
|
|
226
229
|
"data-testid": "select-csv-exporter-customized-rows",
|
|
227
230
|
className: "custom-select",
|
|
@@ -324,25 +327,14 @@ _defineProperty(TableCsvExporter, "CUSTOMIZED_ROWS_OPTIONS", {
|
|
|
324
327
|
|
|
325
328
|
_defineProperty(TableCsvExporter, "DEFAULT_DOWNLOAD_ROWS", 100);
|
|
326
329
|
|
|
327
|
-
TableCsvExporter
|
|
328
|
-
|
|
329
|
-
name: PropTypes.string.isRequired,
|
|
330
|
-
isDownloading: PropTypes.bool,
|
|
331
|
-
tableDownloadStatus: PropTypes.string,
|
|
332
|
-
tableDownloadProgress: PropTypes.number,
|
|
333
|
-
tableDownloadEstimatedTime: PropTypes.number,
|
|
334
|
-
onDownloadStart: PropTypes.func,
|
|
335
|
-
onDownload: PropTypes.func.isRequired,
|
|
336
|
-
onCancel: PropTypes.func.isRequired,
|
|
337
|
-
selectedRanges: PropTypes.arrayOf(PropTypes.instanceOf(GridRange))
|
|
338
|
-
};
|
|
339
|
-
TableCsvExporter.defaultProps = {
|
|
340
|
-
onDownloadStart: () => {},
|
|
330
|
+
_defineProperty(TableCsvExporter, "defaultProps", {
|
|
331
|
+
onDownloadStart: () => undefined,
|
|
341
332
|
isDownloading: false,
|
|
342
333
|
tableDownloadStatus: '',
|
|
343
334
|
tableDownloadProgress: 0,
|
|
344
335
|
tableDownloadEstimatedTime: null,
|
|
345
336
|
selectedRanges: []
|
|
346
|
-
};
|
|
337
|
+
});
|
|
338
|
+
|
|
347
339
|
export default TableCsvExporter;
|
|
348
340
|
//# sourceMappingURL=TableCsvExporter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sidebar/TableCsvExporter.jsx"],"names":["React","Component","PropTypes","ClassNames","FontAwesomeIcon","LoadingSpinner","RadioGroup","RadioItem","GridRange","vsWarning","dh","TimeUtils","shortid","IrisGridModel","TableCsvExporter","getDateString","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadOptionChanged","handleCustomizedDownloadOptionChanged","handleCustomizedDownloadRowsChanged","name","state","fileName","downloadOption","DOWNLOAD_OPTIONS","ALL_ROWS","customizedDownloadOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","errorMessage","id","generate","getSnapshotRanges","model","selectedRanges","rowCount","snapshotRanges","push","SELECTED_ROWS","sort","rangeA","rangeB","startRow","CUSTOMIZED_ROWS","Math","min","LAST","max","resetDownloadState","setState","isDownloading","onDownloadStart","onDownload","onCancel","validateOptionInput","export","then","frozenTable","tableSubscription","setViewport","getViewportData","event","target","value","length","render","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","toString","replace","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","width","propTypes","instanceOf","isRequired","string","bool","number","func","arrayOf","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { LoadingSpinner, RadioGroup, RadioItem } from '@deephaven/components';\nimport { GridRange } from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport dh from '@deephaven/jsapi-shim';\nimport { TimeUtils } from '@deephaven/utils';\nimport shortid from 'shortid';\nimport IrisGridModel from '../IrisGridModel';\nimport './TableCsvExporter.scss';\n\nclass TableCsvExporter extends Component {\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_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 getDateString() {\n return dh.i18n.DateTimeFormat.format(\n TableCsvExporter.FILENAME_DATE_FORMAT,\n new Date()\n );\n }\n\n constructor(props) {\n super(props);\n\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadOptionChanged = this.handleDownloadOptionChanged.bind(\n this\n );\n this.handleCustomizedDownloadOptionChanged = this.handleCustomizedDownloadOptionChanged.bind(\n this\n );\n this.handleCustomizedDownloadRowsChanged = this.handleCustomizedDownloadRowsChanged.bind(\n this\n );\n\n const { name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString()}.csv`,\n\n downloadOption: TableCsvExporter.DOWNLOAD_OPTIONS.ALL_ROWS,\n customizedDownloadOption: TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n errorMessage: null,\n id: shortid.generate(),\n };\n }\n\n getSnapshotRanges() {\n const { model, selectedRanges } = this.props;\n const {\n downloadOption,\n customizedDownloadOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount } = model;\n let snapshotRanges = [];\n switch (downloadOption) {\n case TableCsvExporter.DOWNLOAD_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(null, 0, null, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_OPTIONS.SELECTED_ROWS:\n snapshotRanges = [...selectedRanges].sort(\n (rangeA, rangeB) => rangeA.startRow - rangeB.startRow\n );\n break;\n case TableCsvExporter.DOWNLOAD_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n null,\n 0,\n null,\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 null,\n Math.max(0, rowCount - customizedDownloadRows),\n null,\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 resetDownloadState() {\n this.setState({ errorMessage: null });\n }\n\n handleDownloadClick() {\n const {\n model,\n isDownloading,\n onDownloadStart,\n onDownload,\n onCancel,\n } = this.props;\n const { fileName } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n\n const snapshotRanges = this.getSnapshotRanges();\n if (this.validateOptionInput()) {\n onDownloadStart();\n model.export().then(frozenTable => {\n const tableSubscription = frozenTable.setViewport(0, 0);\n tableSubscription.getViewportData().then(() => {\n onDownload(fileName, frozenTable, tableSubscription, snapshotRanges);\n });\n });\n }\n }\n\n handleDownloadOptionChanged(event) {\n this.setState({ downloadOption: event.target.value });\n }\n\n handleCustomizedDownloadOptionChanged(event) {\n this.setState({ customizedDownloadOption: event.target.value });\n }\n\n handleCustomizedDownloadRowsChanged(event) {\n this.setState({ customizedDownloadRows: event.target.value });\n }\n\n validateOptionInput() {\n const { selectedRanges } = this.props;\n const { downloadOption, customizedDownloadRows } = this.state;\n\n if (\n downloadOption === TableCsvExporter.DOWNLOAD_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 downloadOption === TableCsvExporter.DOWNLOAD_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() {\n const {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n selectedRanges,\n tableDownloadStatus,\n } = this.props;\n const {\n fileName,\n downloadOption,\n customizedDownloadOption,\n customizedDownloadRows,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div className=\"section-title\">Download Rows</div>\n <div className=\"form-group\">\n <RadioGroup\n onChange={this.handleDownloadOptionChanged}\n value={downloadOption}\n disabled={isDownloading}\n >\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_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 </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_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 </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n >\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadOption:\n TableCsvExporter.DOWNLOAD_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <select\n defaultValue={TableCsvExporter.DOWNLOAD_OPTIONS.FIRST}\n value={customizedDownloadOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n className=\"custom-select\"\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadOptionChanged}\n >\n <option value=\"FIRST\">First</option>\n <option value=\"LAST\">Last</option>\n </select>\n <input\n type=\"number\"\n className=\"form-control\"\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n placeholder=\"100\"\n value={customizedDownloadRows}\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n />\n <div>Rows</div>\n </div>\n </RadioItem>\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=\"section-footer flex-column\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\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 type=\"button\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn btn-primary btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner />\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\nTableCsvExporter.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n name: PropTypes.string.isRequired,\n isDownloading: PropTypes.bool,\n tableDownloadStatus: PropTypes.string,\n tableDownloadProgress: PropTypes.number,\n tableDownloadEstimatedTime: PropTypes.number,\n onDownloadStart: PropTypes.func,\n onDownload: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n selectedRanges: PropTypes.arrayOf(PropTypes.instanceOf(GridRange)),\n};\n\nTableCsvExporter.defaultProps = {\n onDownloadStart: () => {},\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selectedRanges: [],\n};\nexport default TableCsvExporter;\n"],"file":"TableCsvExporter.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/sidebar/TableCsvExporter.tsx"],"names":["React","Component","ClassNames","FontAwesomeIcon","LoadingSpinner","RadioGroup","RadioItem","GridRange","vsWarning","dh","TimeUtils","shortid","TableCsvExporter","getDateString","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadOptionChanged","handleCustomizedDownloadOptionChanged","handleCustomizedDownloadRowsChanged","name","state","fileName","downloadOption","DOWNLOAD_OPTIONS","ALL_ROWS","customizedDownloadOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","errorMessage","id","generate","getSnapshotRanges","model","selectedRanges","rowCount","snapshotRanges","push","SELECTED_ROWS","sort","rangeA","rangeB","startRow","CUSTOMIZED_ROWS","Math","min","LAST","max","resetDownloadState","setState","isDownloading","onDownloadStart","onDownload","onCancel","validateOptionInput","export","then","frozenTable","tableSubscription","setViewport","getViewportData","event","target","value","parseInt","length","render","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","toString","replace","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","width","undefined"],"mappings":"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","sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { LoadingSpinner, RadioGroup, RadioItem } from '@deephaven/components';\nimport { GridRange } from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport dh, { Table, TableViewportSubscription } from '@deephaven/jsapi-shim';\nimport { TimeUtils } from '@deephaven/utils';\nimport shortid from 'shortid';\nimport './TableCsvExporter.scss';\nimport IrisGridModel from '../IrisGridModel';\n\ninterface TableCsvExporterProps {\n model: IrisGridModel;\n name: string;\n isDownloading: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number;\n onDownloadStart: () => void;\n onDownload: (\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n snapshotRanges: GridRange[]\n ) => void;\n onCancel: () => void;\n selectedRanges: GridRange[];\n}\n\ninterface TableCsvExporterState {\n fileName: string;\n\n downloadOption: string;\n customizedDownloadOption: string;\n customizedDownloadRows: number;\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_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(): 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.handleDownloadOptionChanged = this.handleDownloadOptionChanged.bind(\n this\n );\n this.handleCustomizedDownloadOptionChanged = this.handleCustomizedDownloadOptionChanged.bind(\n this\n );\n this.handleCustomizedDownloadRowsChanged = this.handleCustomizedDownloadRowsChanged.bind(\n this\n );\n\n const { name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString()}.csv`,\n\n downloadOption: TableCsvExporter.DOWNLOAD_OPTIONS.ALL_ROWS,\n customizedDownloadOption: TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n errorMessage: null,\n id: shortid.generate(),\n };\n }\n\n getSnapshotRanges(): GridRange[] {\n const { model, selectedRanges } = this.props;\n const {\n downloadOption,\n customizedDownloadOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount } = model;\n let snapshotRanges = [] as GridRange[];\n switch (downloadOption) {\n case TableCsvExporter.DOWNLOAD_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(null, 0, null, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_OPTIONS.SELECTED_ROWS:\n snapshotRanges = [...selectedRanges].sort((rangeA, rangeB) => {\n if (rangeA.startRow && rangeB.startRow) {\n return rangeA.startRow - rangeB.startRow;\n }\n return 0;\n });\n break;\n case TableCsvExporter.DOWNLOAD_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n null,\n 0,\n null,\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 null,\n Math.max(0, rowCount - customizedDownloadRows),\n null,\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 resetDownloadState(): void {\n this.setState({ errorMessage: null });\n }\n\n handleDownloadClick(): void {\n const {\n model,\n isDownloading,\n onDownloadStart,\n onDownload,\n onCancel,\n } = this.props;\n const { fileName } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n\n const snapshotRanges = this.getSnapshotRanges();\n if (this.validateOptionInput()) {\n onDownloadStart();\n model.export().then(frozenTable => {\n const tableSubscription = frozenTable.setViewport(0, 0);\n tableSubscription.getViewportData().then(() => {\n onDownload(fileName, frozenTable, tableSubscription, snapshotRanges);\n });\n });\n }\n }\n\n handleDownloadOptionChanged(\n event: React.ChangeEvent<HTMLInputElement>\n ): void {\n this.setState({ downloadOption: event.target.value });\n }\n\n handleCustomizedDownloadOptionChanged(\n event: React.ChangeEvent<HTMLSelectElement>\n ): void {\n this.setState({ customizedDownloadOption: event.target.value });\n }\n\n handleCustomizedDownloadRowsChanged(\n event: React.ChangeEvent<HTMLInputElement>\n ): void {\n this.setState({ customizedDownloadRows: parseInt(event.target.value, 10) });\n }\n\n validateOptionInput(): boolean {\n const { selectedRanges } = this.props;\n const { downloadOption, customizedDownloadRows } = this.state;\n\n if (\n downloadOption === TableCsvExporter.DOWNLOAD_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 downloadOption === TableCsvExporter.DOWNLOAD_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 downloadOption,\n customizedDownloadOption,\n customizedDownloadRows,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div className=\"section-title\">Download Rows</div>\n <div className=\"form-group\">\n <RadioGroup\n onChange={this.handleDownloadOptionChanged}\n value={downloadOption}\n disabled={isDownloading}\n >\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_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 </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_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 </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n >\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadOption:\n TableCsvExporter.DOWNLOAD_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <select\n value={customizedDownloadOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n className=\"custom-select\"\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadOptionChanged}\n >\n <option value=\"FIRST\">First</option>\n <option value=\"LAST\">Last</option>\n </select>\n <input\n type=\"number\"\n className=\"form-control\"\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n placeholder=\"100\"\n value={customizedDownloadRows}\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n />\n <div>Rows</div>\n </div>\n </RadioItem>\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=\"section-footer flex-column\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\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 type=\"button\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn btn-primary btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner />\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"],"file":"TableCsvExporter.js"}
|
|
@@ -1,82 +1,81 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="memoizee" />
|
|
2
|
+
import { PureComponent } from 'react';
|
|
3
|
+
import { Column, Table, TableViewportSubscription, UpdateEventData } from '@deephaven/jsapi-shim';
|
|
4
|
+
import { GridRange, GridRangeIndex } from '@deephaven/grid';
|
|
5
|
+
import { Formatter, FormatterUtils } from '@deephaven/jsapi-utils';
|
|
6
|
+
import { CancelablePromise } from '@deephaven/utils';
|
|
7
|
+
interface TableSaverProps {
|
|
8
|
+
getDownloadWorker: () => Promise<ServiceWorker>;
|
|
9
|
+
isDownloading: boolean;
|
|
10
|
+
onDownloadCompleted: () => void;
|
|
11
|
+
onDownloadCanceled: () => void;
|
|
12
|
+
onDownloadProgressUpdate: (progress: number, estimatedTime: number | null) => void;
|
|
13
|
+
formatter: Formatter;
|
|
14
|
+
}
|
|
15
|
+
export default class TableSaver extends PureComponent<TableSaverProps, Record<string, never>> {
|
|
2
16
|
static DOWNLOAD_CELL_CHUNK: number;
|
|
3
17
|
static SNAPSHOT_BUFFER_SIZE: number;
|
|
4
18
|
static STREAM_TIMEOUT: number;
|
|
5
19
|
static SNAPSHOT_HANDLER_TIMEOUT: number;
|
|
6
|
-
static
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
static defaultProps: {
|
|
21
|
+
getDownloadWorker: () => Promise<never>;
|
|
22
|
+
isDownloading: boolean;
|
|
23
|
+
onDownloadCompleted: () => void;
|
|
24
|
+
onDownloadCanceled: () => void;
|
|
25
|
+
onDownloadProgressUpdate: () => void;
|
|
26
|
+
};
|
|
27
|
+
static csvEscapeString(str: string): string;
|
|
28
|
+
constructor(props: TableSaverProps);
|
|
29
|
+
componentDidMount(): void;
|
|
30
|
+
componentWillUnmount(): void;
|
|
31
|
+
sw?: ServiceWorker;
|
|
32
|
+
port?: MessagePort;
|
|
33
|
+
fileWriter?: WritableStreamDefaultWriter<unknown>;
|
|
34
|
+
table?: Table;
|
|
35
|
+
tableSubscription?: TableViewportSubscription;
|
|
36
|
+
columns?: Column[];
|
|
37
|
+
fileName?: string;
|
|
38
|
+
chunkRows?: number;
|
|
39
|
+
gridRanges: GridRange[];
|
|
40
|
+
gridRangeCounter?: number;
|
|
41
|
+
rangedSnapshotsTotal: number[];
|
|
42
|
+
rangedSnapshotCounter?: number;
|
|
25
43
|
snapshotsTotal: number;
|
|
26
44
|
snapshotCounter: number;
|
|
27
|
-
snapshotsBuffer: Map<
|
|
45
|
+
snapshotsBuffer: Map<number, UpdateEventData>;
|
|
28
46
|
currentSnapshotIndex: number;
|
|
29
47
|
snapshotPending: number;
|
|
30
|
-
cancelableSnapshots:
|
|
48
|
+
cancelableSnapshots: (CancelablePromise<unknown> | null)[];
|
|
31
49
|
WritableStream: {
|
|
32
50
|
new <W = any>(underlyingSink?: UnderlyingSink<W> | undefined, strategy?: QueuingStrategy<W> | undefined): WritableStream<W>;
|
|
33
51
|
prototype: WritableStream<any>;
|
|
34
52
|
};
|
|
35
|
-
streamTimeout
|
|
36
|
-
snapshotHandlerTimeout
|
|
37
|
-
downloadStartTime
|
|
38
|
-
iframes:
|
|
53
|
+
streamTimeout?: ReturnType<typeof setTimeout>;
|
|
54
|
+
snapshotHandlerTimeout?: ReturnType<typeof setTimeout>;
|
|
55
|
+
downloadStartTime?: number;
|
|
56
|
+
iframes: HTMLIFrameElement[];
|
|
39
57
|
useBlobFallback: boolean;
|
|
40
58
|
getCachedCustomColumnFormatFlag: typeof FormatterUtils.isCustomColumnFormatDefined & import("memoizee").Memoized<typeof FormatterUtils.isCustomColumnFormatDefined>;
|
|
41
|
-
createWriterStream(port:
|
|
42
|
-
startDownload(fileName:
|
|
59
|
+
createWriterStream(port: MessagePort): WritableStream<ServiceWorker>;
|
|
60
|
+
startDownload(fileName: string, frozenTable: Table, tableSubscription: TableViewportSubscription, gridRanges: GridRange[]): void;
|
|
43
61
|
finishDownload(): void;
|
|
44
62
|
cancelDownload(): void;
|
|
45
63
|
resetTableSaver(): void;
|
|
64
|
+
handleDownloadTimeout(): void;
|
|
46
65
|
writeTableHeader(): void;
|
|
47
66
|
startWriteTableBody(): void;
|
|
48
67
|
writeCsvTable(): void;
|
|
49
|
-
writeSnapshot(snapshotIndex:
|
|
50
|
-
updateDownloadProgress(snapshotIndex:
|
|
51
|
-
convertSnapshotIntoCsv(snapshot:
|
|
52
|
-
makeSnapshot(n:
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const onDownloadCanceled: PropTypes.Requireable<(...args: any[]) => any>;
|
|
61
|
-
const onDownloadProgressUpdate: PropTypes.Requireable<(...args: any[]) => any>;
|
|
62
|
-
const formatter: PropTypes.Validator<Formatter>;
|
|
63
|
-
}
|
|
64
|
-
namespace defaultProps {
|
|
65
|
-
export function getDownloadWorker_1(): Promise<never>;
|
|
66
|
-
export { getDownloadWorker_1 as getDownloadWorker };
|
|
67
|
-
const isDownloading_1: boolean;
|
|
68
|
-
export { isDownloading_1 as isDownloading };
|
|
69
|
-
export function onDownloadCompleted_1(): void;
|
|
70
|
-
export { onDownloadCompleted_1 as onDownloadCompleted };
|
|
71
|
-
export function onDownloadCanceled_1(): void;
|
|
72
|
-
export { onDownloadCanceled_1 as onDownloadCanceled };
|
|
73
|
-
export function onDownloadProgressUpdate_1(): void;
|
|
74
|
-
export { onDownloadProgressUpdate_1 as onDownloadProgressUpdate };
|
|
75
|
-
}
|
|
68
|
+
writeSnapshot(snapshotIndex: number, snapshotStartRow: GridRangeIndex, snapshotEndRow: GridRangeIndex): void;
|
|
69
|
+
updateDownloadProgress(snapshotIndex: GridRangeIndex): void;
|
|
70
|
+
convertSnapshotIntoCsv(snapshot: UpdateEventData): string;
|
|
71
|
+
makeSnapshot(n: number): void;
|
|
72
|
+
handlePortMessage({ data, }: MessageEvent<{
|
|
73
|
+
download: unknown;
|
|
74
|
+
readableStreamPulling: unknown;
|
|
75
|
+
}>): void;
|
|
76
|
+
handleSnapshotResolved(snapshot: UpdateEventData, snapshotIndex: number, snapshotStartRow: GridRangeIndex, snapshotEndRow: GridRangeIndex): void;
|
|
77
|
+
makeIframe(src: string): void;
|
|
78
|
+
render(): null;
|
|
76
79
|
}
|
|
77
|
-
export
|
|
78
|
-
import { PureComponent } from "react";
|
|
79
|
-
import { FormatterUtils } from "packages/jsapi-utils/src/FormatterUtils";
|
|
80
|
-
import PropTypes from "prop-types";
|
|
81
|
-
import { Formatter } from "packages/jsapi-utils/src/Formatter";
|
|
80
|
+
export {};
|
|
82
81
|
//# sourceMappingURL=TableSaver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableSaver.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableSaver.
|
|
1
|
+
{"version":3,"file":"TableSaver.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableSaver.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAW,EACT,MAAM,EACN,KAAK,EAEL,yBAAyB,EACzB,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAgB,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EACL,iBAAiB,EAGlB,MAAM,kBAAkB,CAAC;AAI1B,UAAU,eAAe;IACvB,iBAAiB,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAChD,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,wBAAwB,EAAE,CACxB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GAAG,IAAI,KACzB,IAAI,CAAC;IACV,SAAS,EAAE,SAAS,CAAC;CACtB;AAcD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,aAAa,CACnD,eAAe,EACf,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,mBAAmB,SAAQ;IAElC,MAAM,CAAC,oBAAoB,SAAK;IAEhC,MAAM,CAAC,cAAc,SAAQ;IAE7B,MAAM,CAAC,wBAAwB,SAAK;IAEpC,MAAM,CAAC,YAAY;iCACM,QAAQ,KAAK,CAAC;;mCAGZ,IAAI;kCACL,IAAI;wCACE,IAAI;MAClC;IAEF,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;gBAI/B,KAAK,EAAE,eAAe;IAmClC,iBAAiB,IAAI,IAAI;IAezB,oBAAoB,IAAI,IAAI;IAU5B,EAAE,CAAC,EAAE,aAAa,CAAC;IAEnB,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB,UAAU,CAAC,EAAE,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAElD,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;IAE9C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,UAAU,EAAE,SAAS,EAAE,CAAC;IAExB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAE/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,cAAc,EAAE,MAAM,CAAC;IAEvB,eAAe,EAAE,MAAM,CAAC;IAExB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAE9C,oBAAoB,EAAE,MAAM,CAAC;IAE7B,eAAe,EAAE,MAAM,CAAC;IAExB,mBAAmB,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAG3D,cAAc;;;MAAmD;IAMjE,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAE9C,sBAAsB,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAEvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAE7B,eAAe,EAAE,OAAO,CAAC;IAEzB,+BAA+B,qIAG7B;IAEF,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,cAAc,CAAC,aAAa,CAAC;IAoDpE,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,KAAK,EAClB,iBAAiB,EAAE,yBAAyB,EAC5C,UAAU,EAAE,SAAS,EAAE,GACtB,IAAI;IAsCP,cAAc,IAAI,IAAI;IAwBtB,cAAc,IAAI,IAAI;IAsBtB,eAAe,IAAI,IAAI;IA8BvB,qBAAqB,IAAI,IAAI;IAK7B,gBAAgB,IAAI,IAAI;IAWxB,mBAAmB,IAAI,IAAI;IAyB3B,aAAa,IAAI,IAAI;IAKrB,aAAa,CACX,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,cAAc,EAChC,cAAc,EAAE,cAAc,GAC7B,IAAI;IAqDP,sBAAsB,CAAC,aAAa,EAAE,cAAc,GAAG,IAAI;IAwB3D,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM;IAiDzD,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAmE7B,iBAAiB,CAAC,EAChB,IAAI,GACL,EAAE,YAAY,CAAC;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,qBAAqB,EAAE,OAAO,CAAC;KAChC,CAAC,GAAG,IAAI;IAsBT,sBAAsB,CACpB,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,cAAc,EAChC,cAAc,EAAE,cAAc,GAC7B,IAAI;IAUP,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAU7B,MAAM,IAAI,IAAI;CAGf"}
|