@deephaven/iris-grid 0.12.1-beta.5 → 0.13.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 +2 -2
- package/dist/AdvancedFilterCreator.d.ts.map +1 -1
- package/dist/AdvancedFilterCreator.js +2 -3
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.d.ts +5 -11
- package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js +21 -121
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.d.ts +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +1 -2
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/CrossColumnSearch.js +1 -1
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +1 -4
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js +1 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.d.ts +1 -1
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.d.ts +1 -1
- package/dist/IrisGridModelFactory.js +1 -1
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.d.ts +1 -2
- package/dist/IrisGridModelUpdater.d.ts.map +1 -1
- package/dist/IrisGridModelUpdater.js +1 -1
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridProxyModel.d.ts +1 -1
- package/dist/IrisGridProxyModel.d.ts.map +1 -1
- package/dist/IrisGridProxyModel.js +1 -2
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js +1 -1
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.d.ts +2 -2
- package/dist/IrisGridTableModel.d.ts.map +1 -1
- package/dist/IrisGridTableModel.js +1 -3
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTestUtils.d.ts +1 -1
- package/dist/IrisGridTestUtils.js +1 -1
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +1 -2
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/format-context-menus/DateTimeFormatContextMenu.d.ts +1 -2
- package/dist/format-context-menus/DateTimeFormatContextMenu.d.ts.map +1 -1
- package/dist/format-context-menus/DateTimeFormatContextMenu.js +1 -2
- package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.d.ts +1 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.d.ts.map +1 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.js +1 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.d.ts +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.d.ts.map +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.d.ts +1 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.d.ts.map +1 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.js +1 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
- package/dist/index.d.ts +1 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -5
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +1 -2
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/sidebar/RollupRows.js +1 -1
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/TableSaver.d.ts +2 -2
- package/dist/sidebar/TableSaver.d.ts.map +1 -1
- package/dist/sidebar/TableSaver.js +1 -2
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/index.d.ts +2 -1
- package/dist/sidebar/index.js +2 -1
- package/dist/sidebar/index.js.map +1 -1
- package/package.json +15 -14
- package/dist/DateUtils.d.ts +0 -82
- package/dist/DateUtils.d.ts.map +0 -1
- package/dist/DateUtils.js +0 -285
- package/dist/DateUtils.js.map +0 -1
- package/dist/Formatter.d.ts +0 -65
- package/dist/Formatter.d.ts.map +0 -1
- package/dist/Formatter.js +0 -169
- package/dist/Formatter.js.map +0 -1
- package/dist/FormatterUtils.d.ts +0 -24
- package/dist/FormatterUtils.d.ts.map +0 -1
- package/dist/FormatterUtils.js +0 -42
- package/dist/FormatterUtils.js.map +0 -1
- package/dist/TableUtils.d.ts +0 -191
- package/dist/TableUtils.d.ts.map +0 -1
- package/dist/TableUtils.js +0 -1326
- package/dist/TableUtils.js.map +0 -1
- package/dist/filters/FilterOperator.d.ts +0 -3
- package/dist/filters/FilterOperator.d.ts.map +0 -1
- package/dist/filters/FilterOperator.js +0 -2
- package/dist/filters/FilterOperator.js.map +0 -1
- package/dist/filters/FilterType.d.ts +0 -3
- package/dist/filters/FilterType.d.ts.map +0 -1
- package/dist/filters/FilterType.js +0 -2
- package/dist/filters/FilterType.js.map +0 -1
- package/dist/filters/index.d.ts +0 -3
- package/dist/filters/index.d.ts.map +0 -1
- package/dist/filters/index.js +0 -3
- package/dist/filters/index.js.map +0 -1
- package/dist/formatters/BooleanColumnFormatter.d.ts +0 -7
- package/dist/formatters/BooleanColumnFormatter.d.ts.map +0 -1
- package/dist/formatters/BooleanColumnFormatter.js +0 -26
- package/dist/formatters/BooleanColumnFormatter.js.map +0 -1
- package/dist/formatters/CharColumnFormatter.d.ts +0 -7
- package/dist/formatters/CharColumnFormatter.d.ts.map +0 -1
- package/dist/formatters/CharColumnFormatter.js +0 -15
- package/dist/formatters/CharColumnFormatter.js.map +0 -1
- package/dist/formatters/DateTimeColumnFormatter.d.ts +0 -40
- package/dist/formatters/DateTimeColumnFormatter.d.ts.map +0 -1
- package/dist/formatters/DateTimeColumnFormatter.js +0 -123
- package/dist/formatters/DateTimeColumnFormatter.js.map +0 -1
- package/dist/formatters/DecimalColumnFormatter.d.ts +0 -64
- package/dist/formatters/DecimalColumnFormatter.d.ts.map +0 -1
- package/dist/formatters/DecimalColumnFormatter.js +0 -128
- package/dist/formatters/DecimalColumnFormatter.js.map +0 -1
- package/dist/formatters/DefaultColumnFormatter.d.ts +0 -6
- package/dist/formatters/DefaultColumnFormatter.d.ts.map +0 -1
- package/dist/formatters/DefaultColumnFormatter.js +0 -14
- package/dist/formatters/DefaultColumnFormatter.js.map +0 -1
- package/dist/formatters/IntegerColumnFormatter.d.ts +0 -60
- package/dist/formatters/IntegerColumnFormatter.d.ts.map +0 -1
- package/dist/formatters/IntegerColumnFormatter.js +0 -121
- package/dist/formatters/IntegerColumnFormatter.js.map +0 -1
- package/dist/formatters/StringColumnFormatter.d.ts +0 -7
- package/dist/formatters/StringColumnFormatter.d.ts.map +0 -1
- package/dist/formatters/StringColumnFormatter.js +0 -13
- package/dist/formatters/StringColumnFormatter.js.map +0 -1
- package/dist/formatters/TableColumnFormatter.d.ts +0 -44
- package/dist/formatters/TableColumnFormatter.d.ts.map +0 -1
- package/dist/formatters/TableColumnFormatter.js +0 -65
- package/dist/formatters/TableColumnFormatter.js.map +0 -1
- package/dist/formatters/index.d.ts +0 -9
- package/dist/formatters/index.d.ts.map +0 -1
- package/dist/formatters/index.js +0 -9
- package/dist/formatters/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sidebar/RollupRows.jsx"],"names":["React","Component","classNames","PropTypes","FontAwesomeIcon","DragDropContext","Droppable","ButtonOld","Checkbox","DraggableItemList","DragUtils","SearchInput","Tooltip","vsTrash","dhSortAlphaDown","dhSortAlphaUp","memoize","debounce","Log","IrisGridModel","TableUtils","log","module","DEBOUNCE_SEARCH","GROUPED_LIST_ID","UNGROUPED_LIST_ID","RollupRows","renderColumn","item","isClone","selectedCount","text","name","badgeText","className","renderTextItem","addGroupings","currentGroupings","newGroupings","index","length","insertIndex","groupings","filter","grouping","i","includes","splice","isGroupable","column","isDecimalType","type","constructor","props","columns","groupedColumns","find","sort","sortColumns","SORT","ASCENDING","search","bind","handleDeleteClicked","handleSearchChange","handleUngroupedSelect","handleUngroupedSelectionChange","handleDragStart","handleDragEnd","handleGroupedSelectionChange","handleShowConstituentsChange","handleShowNonAggregatedColumnsChange","handleSortAscending","handleSortDescending","renderGroupedItem","ungroupedList","createRef","groupedList","config","showConstituents","showNonAggregatedColumns","state","ungroupedSelectedRanges","groupedSelectedRanges","searchFilter","dragSource","componentDidUpdate","prevProps","prevState","updateFromConfig","sendChange","componentWillUnmount","cancel","event","target","value","setState","resetSelection","DESCENDING","getSortedUngroupedColumns","selectedRanges","focusIndex","toLowerCase","push","current","scrollToItem","e","debug","document","documentElement","classList","add","source","remove","destination","droppableId","newColumns","reorder","isSameList","destinationIndex","sourceItems","map","c","sourceRanges","draggedItems","adjustDestinationIndex","newSelectedRanges","itemIndex","debug2","stateUngroupedSelectedRanges","stateGroupedSelectedRanges","slice","onChange","getUngroupedColumns","model","originalColumns","getCachedUngroupedColumns","getCachedSortedColumns","indent","repeat","render","ungroupedColumns","groupListHeight","DEFAULT_ROW_HEIGHT","ungroupMaxListHeight","ungroupMinListHeight","Math","min","provided","snapshot","draggingFromThisWith","isDraggingOver","draggingOverWith","innerRef","droppableProps","height","active","maxHeight","minHeight","Object","freeze","propTypes","instanceOf","isRequired","func","shape","arrayOf","string","bool","defaultProps"],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DragDropContext, Droppable } from 'react-beautiful-dnd';\nimport {\n ButtonOld,\n Checkbox,\n DraggableItemList,\n DragUtils,\n SearchInput,\n Tooltip,\n} from '@deephaven/components';\nimport { vsTrash, dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport './RollupRows.scss';\nimport IrisGridModel from '../IrisGridModel';\nimport TableUtils from '../TableUtils';\n\nconst log = Log.module('RollupRows');\nconst DEBOUNCE_SEARCH = 150;\nconst GROUPED_LIST_ID = 'grouped-rollup-rows';\nconst UNGROUPED_LIST_ID = 'ungrouped-rollup-rows';\n\nclass RollupRows extends Component {\n static SORT = Object.freeze({\n ASCENDING: 'ASCENDING',\n DESCENDING: 'DESCENDING',\n });\n\n static renderColumn({ item, isClone, selectedCount }) {\n const text = item && item.name;\n const badgeText = isClone ? `${selectedCount}` : null;\n const className = isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static addGroupings(\n currentGroupings,\n newGroupings,\n index = currentGroupings.length\n ) {\n if (newGroupings == null || newGroupings.length === 0) {\n return currentGroupings;\n }\n\n let insertIndex = index;\n const groupings = currentGroupings.filter((grouping, i) => {\n if (newGroupings.includes(grouping)) {\n if (i < insertIndex) {\n insertIndex -= 1;\n }\n return false;\n }\n return true;\n });\n groupings.splice(insertIndex, 0, ...newGroupings);\n return groupings;\n }\n\n static isGroupable(column) {\n return !TableUtils.isDecimalType(column.type);\n }\n\n constructor(props) {\n super(props);\n\n this.search = debounce(this.search.bind(this), DEBOUNCE_SEARCH);\n\n this.handleDeleteClicked = this.handleDeleteClicked.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUngroupedSelect = this.handleUngroupedSelect.bind(this);\n this.handleUngroupedSelectionChange = this.handleUngroupedSelectionChange.bind(\n this\n );\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleGroupedSelectionChange = this.handleGroupedSelectionChange.bind(\n this\n );\n this.handleShowConstituentsChange = this.handleShowConstituentsChange.bind(\n this\n );\n this.handleShowNonAggregatedColumnsChange = this.handleShowNonAggregatedColumnsChange.bind(\n this\n );\n this.handleSortAscending = this.handleSortAscending.bind(this);\n this.handleSortDescending = this.handleSortDescending.bind(this);\n this.renderGroupedItem = this.renderGroupedItem.bind(this);\n\n this.ungroupedList = React.createRef();\n this.groupedList = React.createRef();\n\n const { config } = props;\n const {\n columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true,\n } = config ?? {};\n\n this.state = {\n ungroupedSelectedRanges: [],\n columns,\n groupedSelectedRanges: [],\n searchFilter: '',\n showConstituents,\n showNonAggregatedColumns,\n dragSource: null,\n sort: null,\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { config } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n if (config !== prevProps.config) {\n this.updateFromConfig();\n } else if (\n columns !== prevState.columns ||\n showConstituents !== prevState.showConstituents ||\n showNonAggregatedColumns !== prevState.showNonAggregatedColumns\n ) {\n if (\n config == null ||\n columns !== config.columns ||\n showConstituents !== config.showConstituents ||\n showNonAggregatedColumns !== config.showNonAggregatedColumns\n ) {\n this.sendChange();\n }\n }\n }\n\n componentWillUnmount() {\n this.search.cancel();\n }\n\n handleSearchChange(event) {\n const searchFilter = event.target.value;\n this.setState({ searchFilter });\n if (!searchFilter) {\n this.search.cancel();\n this.resetSelection();\n return;\n }\n this.search(searchFilter);\n }\n\n handleSortAscending() {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.ASCENDING ? null : RollupRows.SORT.ASCENDING,\n }));\n }\n\n handleSortDescending() {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.DESCENDING ? null : RollupRows.SORT.DESCENDING,\n }));\n }\n\n resetSelection() {\n this.setState({ ungroupedSelectedRanges: [], groupedSelectedRanges: [] });\n }\n\n search(searchFilter) {\n const columns = this.getSortedUngroupedColumns();\n const selectedRanges = [];\n let focusIndex = null;\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n if (column.name.toLowerCase().includes(searchFilter.toLowerCase())) {\n if (focusIndex == null) {\n focusIndex = i;\n }\n selectedRanges.push([i, i]);\n }\n }\n this.setState({ ungroupedSelectedRanges: selectedRanges });\n\n if (selectedRanges.length > 0 && this.ungroupedList.current) {\n this.ungroupedList.current.scrollToItem(focusIndex);\n }\n }\n\n handleDragStart(e) {\n log.debug('handleDragStart', e);\n\n document.documentElement.classList.add('drag-pointer-events-none');\n\n this.setState({ dragSource: e.source });\n }\n\n handleDragEnd(e) {\n log.debug('handleDragEnd', e);\n\n document.documentElement.classList.remove('drag-pointer-events-none');\n\n this.setState({ dragSource: null });\n\n const { destination, source } = e;\n if (destination == null || source == null) {\n return;\n }\n\n // We don't allow dragging within the ungrouped list, so if we're dragging into the ungrouped list,\n // it must have came from the grouped list. Remove those grouped columns.\n if (destination.droppableId === UNGROUPED_LIST_ID) {\n this.setState(({ groupedSelectedRanges, columns }) => {\n const newColumns = [...columns];\n DragUtils.reorder(newColumns, groupedSelectedRanges, [], 0);\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: [],\n };\n });\n return;\n }\n\n // Otherwise, it must be dropping into the grouped list, so we just need to check the source\n const isSameList = source.droppableId === GROUPED_LIST_ID;\n let destinationIndex = destination.index;\n if (isSameList && source.index < destination.index) {\n // react-beautiful-dnd adjusts the index when dragging within a list already, however that only supports single selection\n // We need to change it back to the index we actually want it to drop at before adjusting for the removed source index, as\n // we adjust the index based on all the selected ranges, not just the source.index.\n destinationIndex += 1;\n }\n this.setState(\n ({ columns, ungroupedSelectedRanges, groupedSelectedRanges }) => {\n const newColumns = [...columns];\n const sourceItems = isSameList\n ? newColumns\n : this.getSortedUngroupedColumns().map(c => c.name);\n const sourceRanges = isSameList\n ? groupedSelectedRanges\n : ungroupedSelectedRanges;\n const draggedItems = DragUtils.reorder(\n sourceItems,\n sourceRanges,\n newColumns,\n destinationIndex\n );\n\n // Select the newly dropped items\n const insertIndex = isSameList\n ? DragUtils.adjustDestinationIndex(\n destinationIndex,\n groupedSelectedRanges\n )\n : destinationIndex;\n const newSelectedRanges = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: newSelectedRanges,\n };\n }\n );\n this.resetSelection();\n }\n\n handleUngroupedSelect(itemIndex) {\n log.debug('handleUngroupedSelect');\n\n this.setState(({ columns }) => ({\n columns: RollupRows.addGroupings(columns, [\n this.getSortedUngroupedColumns()[itemIndex].name,\n ]),\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: [],\n }));\n }\n\n handleUngroupedSelectionChange(ungroupedSelectedRanges) {\n log.debug2('handleUngroupedSelectionChange', ungroupedSelectedRanges);\n this.setState(\n ({ ungroupedSelectedRanges: stateUngroupedSelectedRanges }) => {\n if (ungroupedSelectedRanges === stateUngroupedSelectedRanges) {\n return null;\n }\n\n return { ungroupedSelectedRanges, groupedSelectedRanges: [] };\n }\n );\n }\n\n handleGroupedSelectionChange(groupedSelectedRanges) {\n log.debug2('handleGroupedSelectedRanges', groupedSelectedRanges);\n this.setState(({ groupedSelectedRanges: stateGroupedSelectedRanges }) => {\n if (groupedSelectedRanges === stateGroupedSelectedRanges) {\n return null;\n }\n\n return { groupedSelectedRanges, ungroupedSelectedRanges: [] };\n });\n }\n\n handleDeleteClicked(index) {\n this.setState(({ columns }) => {\n const newColumns = columns.slice();\n newColumns.splice(index, 1);\n return { columns: newColumns };\n });\n }\n\n handleShowConstituentsChange() {\n this.setState(({ showConstituents }) => ({\n showConstituents: !showConstituents,\n }));\n }\n\n handleShowNonAggregatedColumnsChange() {\n this.setState(({ showNonAggregatedColumns }) => ({\n showNonAggregatedColumns: !showNonAggregatedColumns,\n }));\n }\n\n updateFromConfig() {\n const { config } = this.props;\n const {\n columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true,\n } = config ?? {};\n this.setState({ columns, showConstituents, showNonAggregatedColumns });\n }\n\n sendChange() {\n const { onChange } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n onChange({\n columns,\n showConstituents,\n showNonAggregatedColumns,\n });\n }\n\n getCachedUngroupedColumns = memoize((columns, groupedColumns) =>\n columns.filter(\n column =>\n RollupRows.isGroupable(column) &&\n !groupedColumns.find(name => name === column.name)\n )\n );\n\n getCachedSortedColumns = memoize((columns, sort) =>\n sort == null\n ? [...columns]\n : TableUtils.sortColumns(columns, sort === RollupRows.SORT.ASCENDING)\n );\n\n getUngroupedColumns() {\n const { model } = this.props;\n const { columns, searchFilter } = this.state;\n const { originalColumns } = model;\n\n return this.getCachedUngroupedColumns(\n originalColumns,\n columns,\n searchFilter\n );\n }\n\n getSortedUngroupedColumns() {\n const { sort } = this.state;\n const columns = this.getUngroupedColumns();\n return this.getCachedSortedColumns(columns, sort);\n }\n\n renderGroupedItem({ item, itemIndex, isClone, selectedCount }) {\n const indent = isClone ? '' : '\\u00A0\\u00A0'.repeat(itemIndex);\n const text = `${indent}${item}`;\n const badgeText = isClone ? `${selectedCount}` : null;\n const className = isClone ? 'item-list-item-clone' : '';\n return (\n <>\n {DraggableItemList.renderTextItem({ text, badgeText, className })}\n {!isClone && (\n <ButtonOld\n className=\"btn btn-link btn-link-icon btn-delete-grouping float-right\"\n onClick={() => this.handleDeleteClicked(itemIndex)}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </ButtonOld>\n )}\n </>\n );\n }\n\n render() {\n const {\n columns,\n dragSource,\n searchFilter,\n groupedSelectedRanges,\n ungroupedSelectedRanges,\n showConstituents,\n showNonAggregatedColumns,\n sort,\n } = this.state;\n\n const ungroupedColumns = this.getSortedUngroupedColumns();\n let groupListHeight = columns.length * DraggableItemList.DEFAULT_ROW_HEIGHT;\n if (dragSource?.droppableId === UNGROUPED_LIST_ID) {\n groupListHeight += DraggableItemList.DEFAULT_ROW_HEIGHT;\n }\n const ungroupMaxListHeight =\n ungroupedColumns.length * DraggableItemList.DEFAULT_ROW_HEIGHT + 10;\n const ungroupMinListHeight = Math.min(\n 3 * DraggableItemList.DEFAULT_ROW_HEIGHT,\n ungroupMaxListHeight\n );\n\n return (\n <div\n role=\"menu\"\n className={classNames('rollup-rows', {\n 'is-dragging': dragSource != null,\n })}\n tabIndex=\"0\"\n >\n <DragDropContext\n onDragEnd={this.handleDragEnd}\n onDragStart={this.handleDragStart}\n >\n <div className=\"rollup-rows-group-by\">\n <div className=\"section-title\">Group By</div>\n {columns.length === 0 && (\n <Droppable isDragDisabled droppableId=\"placeholder\">\n {(provided, snapshot) => (\n <div\n className={classNames('placeholder', 'text-muted', {\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n Create rollup by dragging columns here, from the available\n columns list below.\n </div>\n )}\n </Droppable>\n )}\n {columns.length > 0 && (\n <DraggableItemList\n draggingItemClassName=\"rollup-rows-dragging-grouped-item\"\n draggablePrefix={GROUPED_LIST_ID}\n droppableId={GROUPED_LIST_ID}\n itemCount={columns.length}\n items={columns}\n offset={0}\n onSelectionChange={this.handleGroupedSelectionChange}\n ref={this.groupedList}\n renderItem={this.renderGroupedItem}\n selectedRanges={groupedSelectedRanges}\n style={{ height: groupListHeight }}\n isMultiSelect\n />\n )}\n </div>\n <div className=\"rollup-rows-available-columns\">\n <div className=\"section-title\">Available Grouping Columns</div>\n <div className=\"top-menu\">\n <SearchInput\n className=\"w-100\"\n value={searchFilter}\n matchCount={\n searchFilter ? ungroupedSelectedRanges.length : null\n }\n placeholder=\"Find column...\"\n onChange={this.handleSearchChange}\n />\n <ButtonOld\n className={classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.ASCENDING,\n })}\n onClick={this.handleSortAscending}\n >\n <FontAwesomeIcon icon={dhSortAlphaDown} />\n <Tooltip>Sort ascending</Tooltip>\n </ButtonOld>\n <ButtonOld\n className={classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.DESCENDING,\n })}\n onClick={this.handleSortDescending}\n >\n <FontAwesomeIcon icon={dhSortAlphaUp} />\n <Tooltip>Sort descending</Tooltip>\n </ButtonOld>\n </div>\n <DraggableItemList\n className=\"rollup-available-grouping-columns\"\n draggablePrefix={UNGROUPED_LIST_ID}\n droppableId={UNGROUPED_LIST_ID}\n itemCount={ungroupedColumns.length}\n items={ungroupedColumns}\n renderItem={RollupRows.renderColumn}\n offset={0}\n onSelect={this.handleUngroupedSelect}\n onSelectionChange={this.handleUngroupedSelectionChange}\n ref={this.ungroupedList}\n selectedRanges={ungroupedSelectedRanges}\n style={{\n maxHeight: ungroupMaxListHeight,\n minHeight: ungroupMinListHeight,\n }}\n isDropDisabled={dragSource?.droppableId !== GROUPED_LIST_ID}\n isMultiSelect\n />\n <div className=\"bottom-menu\">\n <div className=\"label\">Show:</div>\n <Checkbox\n checked={showConstituents}\n onChange={this.handleShowConstituentsChange}\n >\n Constituents\n </Checkbox>\n <Checkbox\n checked={showNonAggregatedColumns}\n onChange={this.handleShowNonAggregatedColumnsChange}\n >\n Non-Aggregated Columns\n </Checkbox>\n </div>\n </div>\n </DragDropContext>\n </div>\n );\n }\n}\n\nRollupRows.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n onChange: PropTypes.func,\n config: PropTypes.shape({\n columns: PropTypes.arrayOf(PropTypes.string),\n showConstituents: PropTypes.bool,\n showNonAggregatedColumns: PropTypes.bool,\n }),\n};\n\nRollupRows.defaultProps = {\n config: null,\n onChange: () => {},\n};\n\nexport default RollupRows;\n"],"file":"RollupRows.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/sidebar/RollupRows.jsx"],"names":["React","Component","classNames","PropTypes","FontAwesomeIcon","DragDropContext","Droppable","ButtonOld","Checkbox","DraggableItemList","DragUtils","SearchInput","Tooltip","vsTrash","dhSortAlphaDown","dhSortAlphaUp","TableUtils","memoize","debounce","Log","IrisGridModel","log","module","DEBOUNCE_SEARCH","GROUPED_LIST_ID","UNGROUPED_LIST_ID","RollupRows","renderColumn","item","isClone","selectedCount","text","name","badgeText","className","renderTextItem","addGroupings","currentGroupings","newGroupings","index","length","insertIndex","groupings","filter","grouping","i","includes","splice","isGroupable","column","isDecimalType","type","constructor","props","columns","groupedColumns","find","sort","sortColumns","SORT","ASCENDING","search","bind","handleDeleteClicked","handleSearchChange","handleUngroupedSelect","handleUngroupedSelectionChange","handleDragStart","handleDragEnd","handleGroupedSelectionChange","handleShowConstituentsChange","handleShowNonAggregatedColumnsChange","handleSortAscending","handleSortDescending","renderGroupedItem","ungroupedList","createRef","groupedList","config","showConstituents","showNonAggregatedColumns","state","ungroupedSelectedRanges","groupedSelectedRanges","searchFilter","dragSource","componentDidUpdate","prevProps","prevState","updateFromConfig","sendChange","componentWillUnmount","cancel","event","target","value","setState","resetSelection","DESCENDING","getSortedUngroupedColumns","selectedRanges","focusIndex","toLowerCase","push","current","scrollToItem","e","debug","document","documentElement","classList","add","source","remove","destination","droppableId","newColumns","reorder","isSameList","destinationIndex","sourceItems","map","c","sourceRanges","draggedItems","adjustDestinationIndex","newSelectedRanges","itemIndex","debug2","stateUngroupedSelectedRanges","stateGroupedSelectedRanges","slice","onChange","getUngroupedColumns","model","originalColumns","getCachedUngroupedColumns","getCachedSortedColumns","indent","repeat","render","ungroupedColumns","groupListHeight","DEFAULT_ROW_HEIGHT","ungroupMaxListHeight","ungroupMinListHeight","Math","min","provided","snapshot","draggingFromThisWith","isDraggingOver","draggingOverWith","innerRef","droppableProps","height","active","maxHeight","minHeight","Object","freeze","propTypes","instanceOf","isRequired","func","shape","arrayOf","string","bool","defaultProps"],"mappings":"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","sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DragDropContext, Droppable } from 'react-beautiful-dnd';\nimport {\n ButtonOld,\n Checkbox,\n DraggableItemList,\n DragUtils,\n SearchInput,\n Tooltip,\n} from '@deephaven/components';\nimport { vsTrash, dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport './RollupRows.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('RollupRows');\nconst DEBOUNCE_SEARCH = 150;\nconst GROUPED_LIST_ID = 'grouped-rollup-rows';\nconst UNGROUPED_LIST_ID = 'ungrouped-rollup-rows';\n\nclass RollupRows extends Component {\n static SORT = Object.freeze({\n ASCENDING: 'ASCENDING',\n DESCENDING: 'DESCENDING',\n });\n\n static renderColumn({ item, isClone, selectedCount }) {\n const text = item && item.name;\n const badgeText = isClone ? `${selectedCount}` : null;\n const className = isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static addGroupings(\n currentGroupings,\n newGroupings,\n index = currentGroupings.length\n ) {\n if (newGroupings == null || newGroupings.length === 0) {\n return currentGroupings;\n }\n\n let insertIndex = index;\n const groupings = currentGroupings.filter((grouping, i) => {\n if (newGroupings.includes(grouping)) {\n if (i < insertIndex) {\n insertIndex -= 1;\n }\n return false;\n }\n return true;\n });\n groupings.splice(insertIndex, 0, ...newGroupings);\n return groupings;\n }\n\n static isGroupable(column) {\n return !TableUtils.isDecimalType(column.type);\n }\n\n constructor(props) {\n super(props);\n\n this.search = debounce(this.search.bind(this), DEBOUNCE_SEARCH);\n\n this.handleDeleteClicked = this.handleDeleteClicked.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUngroupedSelect = this.handleUngroupedSelect.bind(this);\n this.handleUngroupedSelectionChange = this.handleUngroupedSelectionChange.bind(\n this\n );\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleGroupedSelectionChange = this.handleGroupedSelectionChange.bind(\n this\n );\n this.handleShowConstituentsChange = this.handleShowConstituentsChange.bind(\n this\n );\n this.handleShowNonAggregatedColumnsChange = this.handleShowNonAggregatedColumnsChange.bind(\n this\n );\n this.handleSortAscending = this.handleSortAscending.bind(this);\n this.handleSortDescending = this.handleSortDescending.bind(this);\n this.renderGroupedItem = this.renderGroupedItem.bind(this);\n\n this.ungroupedList = React.createRef();\n this.groupedList = React.createRef();\n\n const { config } = props;\n const {\n columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true,\n } = config ?? {};\n\n this.state = {\n ungroupedSelectedRanges: [],\n columns,\n groupedSelectedRanges: [],\n searchFilter: '',\n showConstituents,\n showNonAggregatedColumns,\n dragSource: null,\n sort: null,\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { config } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n if (config !== prevProps.config) {\n this.updateFromConfig();\n } else if (\n columns !== prevState.columns ||\n showConstituents !== prevState.showConstituents ||\n showNonAggregatedColumns !== prevState.showNonAggregatedColumns\n ) {\n if (\n config == null ||\n columns !== config.columns ||\n showConstituents !== config.showConstituents ||\n showNonAggregatedColumns !== config.showNonAggregatedColumns\n ) {\n this.sendChange();\n }\n }\n }\n\n componentWillUnmount() {\n this.search.cancel();\n }\n\n handleSearchChange(event) {\n const searchFilter = event.target.value;\n this.setState({ searchFilter });\n if (!searchFilter) {\n this.search.cancel();\n this.resetSelection();\n return;\n }\n this.search(searchFilter);\n }\n\n handleSortAscending() {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.ASCENDING ? null : RollupRows.SORT.ASCENDING,\n }));\n }\n\n handleSortDescending() {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.DESCENDING ? null : RollupRows.SORT.DESCENDING,\n }));\n }\n\n resetSelection() {\n this.setState({ ungroupedSelectedRanges: [], groupedSelectedRanges: [] });\n }\n\n search(searchFilter) {\n const columns = this.getSortedUngroupedColumns();\n const selectedRanges = [];\n let focusIndex = null;\n for (let i = 0; i < columns.length; i += 1) {\n const column = columns[i];\n if (column.name.toLowerCase().includes(searchFilter.toLowerCase())) {\n if (focusIndex == null) {\n focusIndex = i;\n }\n selectedRanges.push([i, i]);\n }\n }\n this.setState({ ungroupedSelectedRanges: selectedRanges });\n\n if (selectedRanges.length > 0 && this.ungroupedList.current) {\n this.ungroupedList.current.scrollToItem(focusIndex);\n }\n }\n\n handleDragStart(e) {\n log.debug('handleDragStart', e);\n\n document.documentElement.classList.add('drag-pointer-events-none');\n\n this.setState({ dragSource: e.source });\n }\n\n handleDragEnd(e) {\n log.debug('handleDragEnd', e);\n\n document.documentElement.classList.remove('drag-pointer-events-none');\n\n this.setState({ dragSource: null });\n\n const { destination, source } = e;\n if (destination == null || source == null) {\n return;\n }\n\n // We don't allow dragging within the ungrouped list, so if we're dragging into the ungrouped list,\n // it must have came from the grouped list. Remove those grouped columns.\n if (destination.droppableId === UNGROUPED_LIST_ID) {\n this.setState(({ groupedSelectedRanges, columns }) => {\n const newColumns = [...columns];\n DragUtils.reorder(newColumns, groupedSelectedRanges, [], 0);\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: [],\n };\n });\n return;\n }\n\n // Otherwise, it must be dropping into the grouped list, so we just need to check the source\n const isSameList = source.droppableId === GROUPED_LIST_ID;\n let destinationIndex = destination.index;\n if (isSameList && source.index < destination.index) {\n // react-beautiful-dnd adjusts the index when dragging within a list already, however that only supports single selection\n // We need to change it back to the index we actually want it to drop at before adjusting for the removed source index, as\n // we adjust the index based on all the selected ranges, not just the source.index.\n destinationIndex += 1;\n }\n this.setState(\n ({ columns, ungroupedSelectedRanges, groupedSelectedRanges }) => {\n const newColumns = [...columns];\n const sourceItems = isSameList\n ? newColumns\n : this.getSortedUngroupedColumns().map(c => c.name);\n const sourceRanges = isSameList\n ? groupedSelectedRanges\n : ungroupedSelectedRanges;\n const draggedItems = DragUtils.reorder(\n sourceItems,\n sourceRanges,\n newColumns,\n destinationIndex\n );\n\n // Select the newly dropped items\n const insertIndex = isSameList\n ? DragUtils.adjustDestinationIndex(\n destinationIndex,\n groupedSelectedRanges\n )\n : destinationIndex;\n const newSelectedRanges = [\n [insertIndex, insertIndex + draggedItems.length - 1],\n ];\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: newSelectedRanges,\n };\n }\n );\n this.resetSelection();\n }\n\n handleUngroupedSelect(itemIndex) {\n log.debug('handleUngroupedSelect');\n\n this.setState(({ columns }) => ({\n columns: RollupRows.addGroupings(columns, [\n this.getSortedUngroupedColumns()[itemIndex].name,\n ]),\n ungroupedSelectedRanges: [],\n groupedSelectedRanges: [],\n }));\n }\n\n handleUngroupedSelectionChange(ungroupedSelectedRanges) {\n log.debug2('handleUngroupedSelectionChange', ungroupedSelectedRanges);\n this.setState(\n ({ ungroupedSelectedRanges: stateUngroupedSelectedRanges }) => {\n if (ungroupedSelectedRanges === stateUngroupedSelectedRanges) {\n return null;\n }\n\n return { ungroupedSelectedRanges, groupedSelectedRanges: [] };\n }\n );\n }\n\n handleGroupedSelectionChange(groupedSelectedRanges) {\n log.debug2('handleGroupedSelectedRanges', groupedSelectedRanges);\n this.setState(({ groupedSelectedRanges: stateGroupedSelectedRanges }) => {\n if (groupedSelectedRanges === stateGroupedSelectedRanges) {\n return null;\n }\n\n return { groupedSelectedRanges, ungroupedSelectedRanges: [] };\n });\n }\n\n handleDeleteClicked(index) {\n this.setState(({ columns }) => {\n const newColumns = columns.slice();\n newColumns.splice(index, 1);\n return { columns: newColumns };\n });\n }\n\n handleShowConstituentsChange() {\n this.setState(({ showConstituents }) => ({\n showConstituents: !showConstituents,\n }));\n }\n\n handleShowNonAggregatedColumnsChange() {\n this.setState(({ showNonAggregatedColumns }) => ({\n showNonAggregatedColumns: !showNonAggregatedColumns,\n }));\n }\n\n updateFromConfig() {\n const { config } = this.props;\n const {\n columns = [],\n showConstituents = true,\n showNonAggregatedColumns = true,\n } = config ?? {};\n this.setState({ columns, showConstituents, showNonAggregatedColumns });\n }\n\n sendChange() {\n const { onChange } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n onChange({\n columns,\n showConstituents,\n showNonAggregatedColumns,\n });\n }\n\n getCachedUngroupedColumns = memoize((columns, groupedColumns) =>\n columns.filter(\n column =>\n RollupRows.isGroupable(column) &&\n !groupedColumns.find(name => name === column.name)\n )\n );\n\n getCachedSortedColumns = memoize((columns, sort) =>\n sort == null\n ? [...columns]\n : TableUtils.sortColumns(columns, sort === RollupRows.SORT.ASCENDING)\n );\n\n getUngroupedColumns() {\n const { model } = this.props;\n const { columns, searchFilter } = this.state;\n const { originalColumns } = model;\n\n return this.getCachedUngroupedColumns(\n originalColumns,\n columns,\n searchFilter\n );\n }\n\n getSortedUngroupedColumns() {\n const { sort } = this.state;\n const columns = this.getUngroupedColumns();\n return this.getCachedSortedColumns(columns, sort);\n }\n\n renderGroupedItem({ item, itemIndex, isClone, selectedCount }) {\n const indent = isClone ? '' : '\\u00A0\\u00A0'.repeat(itemIndex);\n const text = `${indent}${item}`;\n const badgeText = isClone ? `${selectedCount}` : null;\n const className = isClone ? 'item-list-item-clone' : '';\n return (\n <>\n {DraggableItemList.renderTextItem({ text, badgeText, className })}\n {!isClone && (\n <ButtonOld\n className=\"btn btn-link btn-link-icon btn-delete-grouping float-right\"\n onClick={() => this.handleDeleteClicked(itemIndex)}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </ButtonOld>\n )}\n </>\n );\n }\n\n render() {\n const {\n columns,\n dragSource,\n searchFilter,\n groupedSelectedRanges,\n ungroupedSelectedRanges,\n showConstituents,\n showNonAggregatedColumns,\n sort,\n } = this.state;\n\n const ungroupedColumns = this.getSortedUngroupedColumns();\n let groupListHeight = columns.length * DraggableItemList.DEFAULT_ROW_HEIGHT;\n if (dragSource?.droppableId === UNGROUPED_LIST_ID) {\n groupListHeight += DraggableItemList.DEFAULT_ROW_HEIGHT;\n }\n const ungroupMaxListHeight =\n ungroupedColumns.length * DraggableItemList.DEFAULT_ROW_HEIGHT + 10;\n const ungroupMinListHeight = Math.min(\n 3 * DraggableItemList.DEFAULT_ROW_HEIGHT,\n ungroupMaxListHeight\n );\n\n return (\n <div\n role=\"menu\"\n className={classNames('rollup-rows', {\n 'is-dragging': dragSource != null,\n })}\n tabIndex=\"0\"\n >\n <DragDropContext\n onDragEnd={this.handleDragEnd}\n onDragStart={this.handleDragStart}\n >\n <div className=\"rollup-rows-group-by\">\n <div className=\"section-title\">Group By</div>\n {columns.length === 0 && (\n <Droppable isDragDisabled droppableId=\"placeholder\">\n {(provided, snapshot) => (\n <div\n className={classNames('placeholder', 'text-muted', {\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n Create rollup by dragging columns here, from the available\n columns list below.\n </div>\n )}\n </Droppable>\n )}\n {columns.length > 0 && (\n <DraggableItemList\n draggingItemClassName=\"rollup-rows-dragging-grouped-item\"\n draggablePrefix={GROUPED_LIST_ID}\n droppableId={GROUPED_LIST_ID}\n itemCount={columns.length}\n items={columns}\n offset={0}\n onSelectionChange={this.handleGroupedSelectionChange}\n ref={this.groupedList}\n renderItem={this.renderGroupedItem}\n selectedRanges={groupedSelectedRanges}\n style={{ height: groupListHeight }}\n isMultiSelect\n />\n )}\n </div>\n <div className=\"rollup-rows-available-columns\">\n <div className=\"section-title\">Available Grouping Columns</div>\n <div className=\"top-menu\">\n <SearchInput\n className=\"w-100\"\n value={searchFilter}\n matchCount={\n searchFilter ? ungroupedSelectedRanges.length : null\n }\n placeholder=\"Find column...\"\n onChange={this.handleSearchChange}\n />\n <ButtonOld\n className={classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.ASCENDING,\n })}\n onClick={this.handleSortAscending}\n >\n <FontAwesomeIcon icon={dhSortAlphaDown} />\n <Tooltip>Sort ascending</Tooltip>\n </ButtonOld>\n <ButtonOld\n className={classNames('btn-link btn-link-icon', {\n active: sort === RollupRows.SORT.DESCENDING,\n })}\n onClick={this.handleSortDescending}\n >\n <FontAwesomeIcon icon={dhSortAlphaUp} />\n <Tooltip>Sort descending</Tooltip>\n </ButtonOld>\n </div>\n <DraggableItemList\n className=\"rollup-available-grouping-columns\"\n draggablePrefix={UNGROUPED_LIST_ID}\n droppableId={UNGROUPED_LIST_ID}\n itemCount={ungroupedColumns.length}\n items={ungroupedColumns}\n renderItem={RollupRows.renderColumn}\n offset={0}\n onSelect={this.handleUngroupedSelect}\n onSelectionChange={this.handleUngroupedSelectionChange}\n ref={this.ungroupedList}\n selectedRanges={ungroupedSelectedRanges}\n style={{\n maxHeight: ungroupMaxListHeight,\n minHeight: ungroupMinListHeight,\n }}\n isDropDisabled={dragSource?.droppableId !== GROUPED_LIST_ID}\n isMultiSelect\n />\n <div className=\"bottom-menu\">\n <div className=\"label\">Show:</div>\n <Checkbox\n checked={showConstituents}\n onChange={this.handleShowConstituentsChange}\n >\n Constituents\n </Checkbox>\n <Checkbox\n checked={showNonAggregatedColumns}\n onChange={this.handleShowNonAggregatedColumnsChange}\n >\n Non-Aggregated Columns\n </Checkbox>\n </div>\n </div>\n </DragDropContext>\n </div>\n );\n }\n}\n\nRollupRows.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n onChange: PropTypes.func,\n config: PropTypes.shape({\n columns: PropTypes.arrayOf(PropTypes.string),\n showConstituents: PropTypes.bool,\n showNonAggregatedColumns: PropTypes.bool,\n }),\n};\n\nRollupRows.defaultProps = {\n config: null,\n onChange: () => {},\n};\n\nexport default RollupRows;\n"],"file":"RollupRows.js"}
|
|
@@ -76,7 +76,7 @@ declare namespace TableSaver {
|
|
|
76
76
|
}
|
|
77
77
|
export default TableSaver;
|
|
78
78
|
import { PureComponent } from "react";
|
|
79
|
-
import FormatterUtils from "
|
|
79
|
+
import { FormatterUtils } from "packages/jsapi-utils/src/FormatterUtils";
|
|
80
80
|
import PropTypes from "prop-types";
|
|
81
|
-
import Formatter from "
|
|
81
|
+
import { Formatter } from "packages/jsapi-utils/src/Formatter";
|
|
82
82
|
//# sourceMappingURL=TableSaver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableSaver.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableSaver.jsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TableSaver.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableSaver.jsx"],"names":[],"mappings":"AAWA;IACE,mCAAkC;IAElC,oCAAgC;IAEhC,8BAA6B;IAE7B,wCAAoC;IAEpC,yCAEC;IAED,wBAkDC;IA+XD;;aAmBC;IAED,4GAaC;IAzOD,8BAGC;IApOC,QAAc;IACd,yBAAgB;IAChB,oDAAsB;IAEtB,WAAiB;IACjB,uBAA6B;IAC7B,aAAmB;IAEnB,cAAoB;IAEpB,yBAAqB;IAErB,kBAAoB;IACpB,yBAAyB;IACzB,4BAA8B;IAC9B,8BAA8B;IAE9B,uBAAuB;IACvB,wBAAwB;IACxB,+BAAgC;IAEhC,6BAA6B;IAC7B,wBAAwB;IACxB,2BAA6B;IAG7B;;;MAAqE;IAMrE,qCAAyB;IAEzB,8CAAkC;IAElC,iCAA6B;IAE7B,eAAiB;IAEjB,yBAAsC;IA4BxC,oKAGE;IAEF,mDA2CC;IAED,8FAoCC;IAED,uBAoBC;IAED,uBAoBC;IAED,wBAuBC;IAOD,yBAOC;IAED,4BAiBC;IAED,sBAGC;IAED,oFA8CC;IAED,iDAgBC;IAED,8CAoCC;IAED,2BAuDC;IAsCD,2BAiBC;CAKF;;;;;;;;;;;QAYoB,sDACwC;;;;QAEtC,8CAAQ;;QACT,6CAAQ;;QACF,mDAAQ"}
|
|
@@ -4,11 +4,10 @@ import { PureComponent } from 'react';
|
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
import { WritableStream as ponyfillWritableStream } from 'web-streams-polyfill/dist/ponyfill.js';
|
|
6
6
|
import dh from '@deephaven/jsapi-shim';
|
|
7
|
+
import { Formatter, FormatterUtils } from '@deephaven/jsapi-utils';
|
|
7
8
|
import Log from '@deephaven/log';
|
|
8
9
|
import { memoizeClear } from '@deephaven/grid';
|
|
9
10
|
import { PromiseUtils } from '@deephaven/utils';
|
|
10
|
-
import Formatter from "../Formatter.js";
|
|
11
|
-
import FormatterUtils from "../FormatterUtils.js";
|
|
12
11
|
var log = Log.module('TableSaver');
|
|
13
12
|
export default class TableSaver extends PureComponent {
|
|
14
13
|
static csvEscapeString(str) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/sidebar/TableSaver.jsx"],"names":["PureComponent","PropTypes","WritableStream","ponyfillWritableStream","dh","Log","memoizeClear","PromiseUtils","Formatter","FormatterUtils","log","module","TableSaver","csvEscapeString","str","replace","constructor","props","isCustomColumnFormatDefined","max","handlePortMessage","bind","handleSnapshotResolved","handleDownloadTimeout","state","sw","port","fileWriter","table","tableSubscription","columns","fileName","chunkRows","gridRanges","gridRangeCounter","rangedSnapshotsTotal","rangedSnapshotCounter","snapshotsTotal","snapshotCounter","snapshotsBuffer","Map","currentSnapshotIndex","snapshotPending","cancelableSnapshots","window","streamTimeout","snapshotHandlerTimeout","downloadStartTime","iframes","useBlobFallback","safari","componentDidMount","getDownloadWorker","then","info","postMessage","catch","error","warn","componentWillUnmount","length","forEach","iframe","remove","clearTimeout","createWriterStream","useBlob","chunks","encode","TextEncoder","prototype","streamConfig","write","chunk","push","rows","close","blob","Blob","type","link","document","createElement","href","URL","createObjectURL","download","click","abort","cancel","end","startDownload","frozenTable","isDownloading","Date","now","encodedFileName","encodeURIComponent","escape","messageChannel","MessageChannel","port1","getWriter","writeCsvTable","port2","onmessage","finishDownload","onDownloadCompleted","resetTableSaver","cancelDownload","cancelable","onDownloadCanceled","writeTableHeader","headerString","i","name","header","startWriteTableBody","Math","floor","DOWNLOAD_CELL_CHUNK","map","range","ceil","endRow","startRow","reduce","total","snapshotCount","makeSnapshot","min","SNAPSHOT_BUFFER_SIZE","writeSnapshot","snapshotIndex","snapshotStartRow","snapshotEndRow","has","convertSnapshotIntoCsv","get","delete","updateDownloadProgress","debug2","size","onDownloadProgressUpdate","downloadProgress","estimateTime","snapshot","csvString","snapshotIterator","added","iterator","formatter","hasNext","next","value","rowIdx","j","hasCustomColumnFormat","getCachedCustomColumnFormatFlag","formatOverride","cellFormat","getFormat","formatString","cellData","getFormattedString","getData","n","currentGridRange","makeCancelable","RangeSet","ofRange","err","val","data","readableStreamPulling","makeIframe","setTimeout","STREAM_TIMEOUT","set","SNAPSHOT_HANDLER_TIMEOUT","src","hidden","loaded","isIframe","addEventListener","body","appendChild","render","propTypes","func","bool","instanceOf","isRequired","defaultProps","Promise","reject","Error"],"mappings":";;AAAA,SAASA,aAAT,QAA8B,OAA9B;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,cAAc,IAAIC,sBAA3B,QAAyD,uCAAzD;AACA,OAAOC,EAAP,MAAe,uBAAf;AACA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,SAASC,YAAT,QAA6B,iBAA7B;AACA,SAASC,YAAT,QAA6B,kBAA7B;OACOC,S;OACAC,c;AAEP,IAAMC,GAAG,GAAGL,GAAG,CAACM,MAAJ,CAAW,YAAX,CAAZ;AAEA,eAAe,MAAMC,UAAN,SAAyBZ,aAAzB,CAAuC;AAS9B,SAAfa,eAAe,CAACC,GAAD,EAAM;AAC1B,uBAAWA,GAAG,CAACC,OAAJ,CAAY,IAAZ,EAAkB,IAAlB,CAAX;AACD;;AAEDC,EAAAA,WAAW,CAACC,KAAD,EAAQ;AACjB,UAAMA,KAAN;;AADiB,6DA6EeX,YAAY,CAC5CG,cAAc,CAACS,2BAD6B,EAE5C;AAAEC,MAAAA,GAAG,EAAE;AAAP,KAF4C,CA7E3B;;AAGjB,SAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBC,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKC,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BD,IAA5B,CAAiC,IAAjC,CAA9B;AACA,SAAKE,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BF,IAA3B,CAAgC,IAAhC,CAA7B;AAEA,SAAKG,KAAL,GAAa,EAAb;AAEA,SAAKC,EAAL,GAAU,IAAV;AACA,SAAKC,IAAL,GAAY,IAAZ;AACA,SAAKC,UAAL,GAAkB,IAAlB;AAEA,SAAKC,KAAL,GAAa,IAAb;AACA,SAAKC,iBAAL,GAAyB,IAAzB;AACA,SAAKC,OAAL,GAAe,IAAf;AAEA,SAAKC,QAAL,GAAgB,IAAhB;AAEA,SAAKC,SAAL,GAAiB,IAAjB;AAEA,SAAKC,UAAL,GAAkB,EAAlB;AACA,SAAKC,gBAAL,GAAwB,CAAxB;AACA,SAAKC,oBAAL,GAA4B,EAA5B;AACA,SAAKC,qBAAL,GAA6B,CAA7B;AAEA,SAAKC,cAAL,GAAsB,CAAtB;AACA,SAAKC,eAAL,GAAuB,CAAvB;AACA,SAAKC,eAAL,GAAuB,IAAIC,GAAJ,EAAvB;AAEA,SAAKC,oBAAL,GAA4B,CAA5B;AACA,SAAKC,eAAL,GAAuB,CAAvB;AACA,SAAKC,mBAAL,GAA2B,EAA3B,CAhCiB,CAkCjB;;AACA,SAAKzC,cAAL,GAAsB0C,MAAM,CAAC1C,cAAP,IAAyBC,sBAA/C,CAnCiB,CAqCjB;AACA;AACA;AACA;;AACA,SAAK0C,aAAL,GAAqB,IAArB;AAEA,SAAKC,sBAAL,GAA8B,IAA9B;AAEA,SAAKC,iBAAL,GAAyB,IAAzB;AAEA,SAAKC,OAAL,GAAe,EAAf;AAEA,SAAKC,eAAL,GAAuB,CAAC,CAACL,MAAM,CAACM,MAAhC;AACD;;AAEDC,EAAAA,iBAAiB,GAAG;AAClB,QAAM;AAAEC,MAAAA;AAAF,QAAwB,KAAKnC,KAAnC;AACAmC,IAAAA,iBAAiB,GACdC,IADH,CACQ5B,EAAE,IAAI;AACVf,MAAAA,GAAG,CAAC4C,IAAJ,CAAS,6BAAT;AACA,WAAK7B,EAAL,GAAUA,EAAV;AACA,WAAKA,EAAL,CAAQ8B,WAAR,CAAoB,MAApB,EAHU,CAGmB;AAC9B,KALH,EAMGC,KANH,CAMSC,KAAK,IAAI;AACd;AACA/C,MAAAA,GAAG,CAACgD,IAAJ,CAAS,gCAAT,EAA2CD,KAA3C;AACA,WAAKR,eAAL,GAAuB,IAAvB;AACD,KAVH;AAWD;;AAEDU,EAAAA,oBAAoB,GAAG;AACrB,QAAI,KAAKX,OAAL,CAAaY,MAAb,GAAsB,CAA1B,EAA6B;AAC3B,WAAKZ,OAAL,CAAaa,OAAb,CAAqBC,MAAM,IAAI;AAC7BA,QAAAA,MAAM,CAACC,MAAP;AACD,OAFD;AAGD;;AACDC,IAAAA,YAAY,CAAC,KAAKnB,aAAN,CAAZ;AACAmB,IAAAA,YAAY,CAAC,KAAKlB,sBAAN,CAAZ;AACD;;AAODmB,EAAAA,kBAAkB,CAACvC,IAAD,EAAO;AACvB;AACA,QAAMwC,OAAO,GAAG,KAAKjB,eAArB;AACA,QAAMkB,MAAM,GAAG,EAAf;AACA,QAAIC,MAAM,GAAG,IAAb;;AACA,QAAIF,OAAJ,EAAa;AACXE,MAAAA,MAAM,GAAGC,WAAW,CAACC,SAAZ,CAAsBF,MAAtB,CAA6B/C,IAA7B,CAAkC,IAAIgD,WAAJ,EAAlC,CAAT;AACD;;AACD,QAAM;AAAEtC,MAAAA;AAAF,QAAe,IAArB;AAEA,QAAMwC,YAAY,GAAG,EAArB;;AACA,QAAIL,OAAJ,EAAa;AACXK,MAAAA,YAAY,CAACC,KAAb,GAAqBC,KAAK,IAAI;AAC5BN,QAAAA,MAAM,CAACO,IAAP,CAAYN,MAAM,CAACK,KAAK,CAACE,IAAP,CAAlB;AACD,OAFD;;AAGAJ,MAAAA,YAAY,CAACK,KAAb,GAAqB,MAAM;AACzB,YAAMC,IAAI,GAAG,IAAIC,IAAJ,CAASX,MAAT,EAAiB;AAC5BY,UAAAA,IAAI,EAAE;AADsB,SAAjB,CAAb;AAGA,YAAMC,IAAI,GAAGC,QAAQ,CAACC,aAAT,CAAuB,GAAvB,CAAb;AACAF,QAAAA,IAAI,CAACG,IAAL,GAAYC,GAAG,CAACC,eAAJ,CAAoBR,IAApB,CAAZ;AACAG,QAAAA,IAAI,CAACM,QAAL,GAAgBvD,QAAhB;AACAiD,QAAAA,IAAI,CAACO,KAAL;AACD,OARD;;AASAhB,MAAAA,YAAY,CAACiB,KAAb,GAAqB,MAAM;AACzB9D,QAAAA,IAAI,CAAC6B,WAAL,CAAiB;AAAEkC,UAAAA,MAAM,EAAE;AAAV,SAAjB;AACA/D,QAAAA,IAAI,CAACkD,KAAL;AACD,OAHD;AAID,KAjBD,MAiBO;AACLL,MAAAA,YAAY,CAACC,KAAb,GAAqBC,KAAK,IAAI;AAC5B/C,QAAAA,IAAI,CAAC6B,WAAL,CAAiBkB,KAAjB;AACD,OAFD;;AAGAF,MAAAA,YAAY,CAACK,KAAb,GAAqB,MAAM;AACzBlD,QAAAA,IAAI,CAAC6B,WAAL,CAAiB;AAAEmC,UAAAA,GAAG,EAAE;AAAP,SAAjB;AACAhE,QAAAA,IAAI,CAACkD,KAAL;AACD,OAHD;;AAIAL,MAAAA,YAAY,CAACiB,KAAb,GAAqB,MAAM;AACzB9D,QAAAA,IAAI,CAAC6B,WAAL,CAAiB;AAAEkC,UAAAA,MAAM,EAAE;AAAV,SAAjB;AACA/D,QAAAA,IAAI,CAACkD,KAAL;AACD,OAHD;AAID;;AAED,WAAO,IAAI,KAAK1E,cAAT,CAAwBqE,YAAxB,CAAP;AACD;;AAEDoB,EAAAA,aAAa,CAAC5D,QAAD,EAAW6D,WAAX,EAAwB/D,iBAAxB,EAA2CI,UAA3C,EAAuD;AAClE;AACA,QAAM;AAAE4D,MAAAA;AAAF,QAAoB,KAAK5E,KAA/B;;AACA,QAAI4E,aAAJ,EAAmB;AACjB;AACD;;AAED,SAAK9C,iBAAL,GAAyB+C,IAAI,CAACC,GAAL,EAAzB;AACArF,IAAAA,GAAG,CAAC4C,IAAJ,6BAA8BvB,QAA9B;AAEA,SAAKH,KAAL,GAAagE,WAAb;AACA,SAAK9D,OAAL,GAAe8D,WAAW,CAAC9D,OAA3B;AACA,SAAKD,iBAAL,GAAyBA,iBAAzB;AACA,SAAKI,UAAL,GAAkBA,UAAlB,CAbkE,CAelE;;AACA,QAAM+D,eAAe,GAAGC,kBAAkB,CAAClE,QAAQ,CAAChB,OAAT,CAAiB,KAAjB,EAAwB,GAAxB,CAAD,CAAlB,CACrBA,OADqB,CACb,QADa,EACHmF,MADG,EAErBnF,OAFqB,CAEb,KAFa,EAEN,KAFM,CAAxB;AAIA,QAAMoF,cAAc,GAAG,IAAIC,cAAJ,EAAvB;AACA,SAAK1E,IAAL,GAAYyE,cAAc,CAACE,KAA3B;AACA,SAAKtE,QAAL,GAAgBA,QAAhB;AACA,SAAKJ,UAAL,GAAkB,KAAKsC,kBAAL,CAAwB,KAAKvC,IAA7B,EAAmC4E,SAAnC,EAAlB,CAvBkE,CAyBlE;;AACA,QAAI,KAAKrD,eAAT,EAA0B;AACxB,WAAKsD,aAAL;AACA;AACD;;AAED,QAAI,KAAK9E,EAAT,EAAa;AACX;AACA,WAAKA,EAAL,CAAQ8B,WAAR,CAAoB;AAAEyC,QAAAA;AAAF,OAApB,EAAyC,CAACG,cAAc,CAACK,KAAhB,CAAzC;AACD;;AACD,SAAK9E,IAAL,CAAU+E,SAAV,GAAsB,KAAKrF,iBAA3B;AACD;;AAEDsF,EAAAA,cAAc,GAAG;AACf,QAAI,KAAK9E,KAAT,EAAgB;AACd,WAAKA,KAAL,CAAWgD,KAAX;AACD;;AACD,QAAI,KAAK/C,iBAAT,EAA4B;AAC1B,WAAKA,iBAAL,CAAuB+C,KAAvB;AACD;;AACD,QAAI,KAAKjD,UAAT,EAAqB;AACnB,WAAKA,UAAL,CAAgBiD,KAAhB;AACD;;AAED,QAAM;AAAE+B,MAAAA;AAAF,QAA0B,KAAK1F,KAArC;AACA0F,IAAAA,mBAAmB;AACnB,SAAKC,eAAL;AAEAlG,IAAAA,GAAG,CAAC4C,IAAJ,iDAEI,CAACwC,IAAI,CAACC,GAAL,KAAa,KAAKhD,iBAAnB,IAAwC,IAF5C;AAKD;;AAED8D,EAAAA,cAAc,GAAG;AACf,QAAI,KAAKjF,KAAT,EAAgB;AACd,WAAKA,KAAL,CAAWgD,KAAX;AACD;;AACD,QAAI,KAAK/C,iBAAT,EAA4B;AAC1B,WAAKA,iBAAL,CAAuB+C,KAAvB;AACD;;AACD,QAAI,KAAKjD,UAAT,EAAqB;AACnB,WAAKA,UAAL,CAAgB6D,KAAhB;AACD;;AAED,SAAK7C,mBAAL,CAAyBkB,OAAzB,CAAiCiD,UAAU,IAAI;AAC7C,UAAIA,UAAJ,EAAgB;AACdA,QAAAA,UAAU,CAACtD,KAAX,CAAiB,MAAM,CAAE,CAAzB;AACAsD,QAAAA,UAAU,CAACrB,MAAX;AACD;AACF,KALD;AAMA,QAAM;AAAEsB,MAAAA;AAAF,QAAyB,KAAK9F,KAApC;AACA8F,IAAAA,kBAAkB;AAClB,SAAKH,eAAL;AACD;;AAEDA,EAAAA,eAAe,GAAG;AAChB,SAAKhF,KAAL,GAAa,IAAb;AACA,SAAKC,iBAAL,GAAyB,IAAzB;AACA,SAAKC,OAAL,GAAe,IAAf;AACA,SAAKE,SAAL,GAAiB,IAAjB;AAEA,SAAKC,UAAL,GAAkB,EAAlB;AACA,SAAKC,gBAAL,GAAwB,CAAxB;AACA,SAAKC,oBAAL,GAA4B,EAA5B;AACA,SAAKC,qBAAL,GAA6B,CAA7B;AAEA,SAAKC,cAAL,GAAsB,CAAtB;AACA,SAAKC,eAAL,GAAuB,CAAvB;AACA,SAAKC,eAAL,GAAuB,IAAIC,GAAJ,EAAvB;AAEA,SAAKC,oBAAL,GAA4B,CAA5B;AACA,SAAKC,eAAL,GAAuB,CAAvB;AACA,SAAKC,mBAAL,GAA2B,EAA3B;AAEAqB,IAAAA,YAAY,CAAC,KAAKnB,aAAN,CAAZ;AACAmB,IAAAA,YAAY,CAAC,KAAKlB,sBAAN,CAAZ;AACA,SAAKD,aAAL,GAAqB,IAArB;AACA,SAAKC,sBAAL,GAA8B,IAA9B;AACD;;AAEDvB,EAAAA,qBAAqB,GAAG;AACtBb,IAAAA,GAAG,CAAC4C,IAAJ,CAAS,mBAAT;AACA,SAAKuD,cAAL;AACD;;AAEDG,EAAAA,gBAAgB,GAAG;AACjB,QAAIC,YAAY,GAAG,EAAnB;;AACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKpF,OAAL,CAAa8B,MAAjC,EAAyCsD,CAAC,IAAI,CAA9C,EAAiD;AAC/CD,MAAAA,YAAY,IAAI,KAAKnF,OAAL,CAAaoF,CAAb,EAAgBC,IAAhC;AACAF,MAAAA,YAAY,IAAIC,CAAC,KAAK,KAAKpF,OAAL,CAAa8B,MAAb,GAAsB,CAA5B,GAAgC,IAAhC,GAAuC,GAAvD;AACD;;AACD,SAAKjC,UAAL,CAAgB6C,KAAhB,CAAsB;AAAE4C,MAAAA,MAAM,EAAEH;AAAV,KAAtB,EAAgD5D,IAAhD,CAAqD,MAAM,CAAE,CAA7D;AACD;;AAEDgE,EAAAA,mBAAmB,GAAG;AACpB,SAAKrF,SAAL,GAAiBsF,IAAI,CAACC,KAAL,CACf3G,UAAU,CAAC4G,mBAAX,GAAiC,KAAK1F,OAAL,CAAa8B,MAD/B,CAAjB;AAIA,SAAKzB,oBAAL,GAA4B,KAAKF,UAAL,CAAgBwF,GAAhB,CAAoBC,KAAK,IACnDJ,IAAI,CAACK,IAAL,CAAU,CAACD,KAAK,CAACE,MAAN,GAAeF,KAAK,CAACG,QAArB,GAAgC,CAAjC,IAAsC,KAAK7F,SAArD,CAD0B,CAA5B;AAGA,SAAKK,cAAL,GAAsB,KAAKF,oBAAL,CAA0B2F,MAA1B,CACpB,CAACC,KAAD,EAAQC,aAAR,KAA0BD,KAAK,GAAGC,aADd,CAAtB;AAIAtH,IAAAA,GAAG,CAAC4C,IAAJ,2CAAmD,KAAKjB,cAAxD;AAEA,SAAK4F,YAAL,CACEX,IAAI,CAACY,GAAL,CAAStH,UAAU,CAACuH,oBAApB,EAA0C,KAAK9F,cAA/C,CADF;AAGD;;AAEDkE,EAAAA,aAAa,GAAG;AACd,SAAKS,gBAAL;AACA,SAAKK,mBAAL;AACD;;AAEDe,EAAAA,aAAa,CAACC,aAAD,EAAgBC,gBAAhB,EAAkCC,cAAlC,EAAkD;AAC7D,QAAI,KAAK9F,oBAAL,KAA8B4F,aAA9B,IAA+C,KAAK1G,UAAxD,EAAoE;AAClE,aAAO,KAAKY,eAAL,CAAqBiG,GAArB,CAAyB,KAAK/F,oBAA9B,CAAP,EAA4D;AAC1D,aAAKd,UAAL,CAAgB6C,KAAhB,CAAsB;AACpBG,UAAAA,IAAI,EAAE,KAAK8D,sBAAL,CACJ,KAAKlG,eAAL,CAAqBmG,GAArB,CAAyB,KAAKjG,oBAA9B,CADI,EAEJ6F,gBAFI,EAGJC,cAHI;AADc,SAAtB;AAOA,aAAKhG,eAAL,CAAqBoG,MAArB,CAA4B,KAAKlG,oBAAjC;AACA,aAAKA,oBAAL,IAA6B,CAA7B;AAEA,aAAKmG,sBAAL,CAA4BP,aAA5B;AACD;;AACD,UAAI,KAAK5F,oBAAL,IAA6B,KAAKJ,cAAtC,EAAsD;AACpD,aAAKqE,cAAL;AACA;AACD;AACF;;AAED,QAAI,KAAKpE,eAAL,GAAuB,KAAKD,cAAhC,EAAgD;AAC9C3B,MAAAA,GAAG,CAACmI,MAAJ,0CAEyB,KAAK3G,gBAF9B,+CAG0B,KAAKI,eAH/B,sDAIiC,KAAKF,qBAJtC,0CAKqB,KAAKM,eAL1B,kCAMa,KAAKH,eAAL,CAAqBuG,IANlC,8BAOWxB,IAAI,CAACY,GAAL,CACPtH,UAAU,CAACuH,oBAAX,GACE,KAAK5F,eAAL,CAAqBuG,IADvB,GAEE,KAAKpG,eAHA,EAIP,KAAKL,cAAL,GAAsB,KAAKC,eAJpB,CAPX;AAeA,WAAK2F,YAAL,CACEX,IAAI,CAACY,GAAL,CACEtH,UAAU,CAACuH,oBAAX,GACE,KAAK5F,eAAL,CAAqBuG,IADvB,GAEE,KAAKpG,eAHT,EAIE,KAAKL,cAAL,GAAsB,KAAKC,eAJ7B,CADF;AAQD;AACF;;AAEDsG,EAAAA,sBAAsB,CAACP,aAAD,EAAgB;AACpC,QAAM;AAAEU,MAAAA;AAAF,QAA+B,KAAK9H,KAA1C;AACA,QAAM+H,gBAAgB,GAAG1B,IAAI,CAACC,KAAL,CACtBc,aAAa,GAAG,GAAjB,GAAwB,KAAKhG,cADN,CAAzB;AAGA,QAAM4G,YAAY,GAChBZ,aAAa,GAAG,CAAhB,GACIf,IAAI,CAACC,KAAL,CACG,CAACzB,IAAI,CAACC,GAAL,KAAa,KAAKhD,iBAAnB,KACE,KAAKV,cAAL,GAAsBgG,aADxB,CAAD,GAEEA,aAFF,GAGE,IAJJ,CADJ,GAOI,IARN;AAUAU,IAAAA,wBAAwB,CAACC,gBAAD,EAAmBC,YAAnB,CAAxB;AACD;;AAEDR,EAAAA,sBAAsB,CAACS,QAAD,EAAW;AAC/B,QAAIC,SAAS,GAAG,EAAhB;AACA,QAAMC,gBAAgB,GAAGF,QAAQ,CAACG,KAAT,CAAeC,QAAf,EAAzB;AACA,QAAM;AAAEC,MAAAA;AAAF,QAAgB,KAAKtI,KAA3B;AAEA,QAAM0D,IAAI,GAAG,EAAb;;AACA,WAAOyE,gBAAgB,CAACI,OAAjB,EAAP,EAAmC;AACjC7E,MAAAA,IAAI,CAACD,IAAL,CAAU0E,gBAAgB,CAACK,IAAjB,GAAwBC,KAAlC;AACD;;AAED,SAAK,IAAIxC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGvC,IAAI,CAACf,MAAzB,EAAiCsD,CAAC,IAAI,CAAtC,EAAyC;AACvC,UAAMyC,MAAM,GAAGhF,IAAI,CAACuC,CAAD,CAAnB;;AACA,WAAK,IAAI0C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,OAAL,CAAa8B,MAAjC,EAAyCgG,CAAC,IAAI,CAA9C,EAAiD;AAC/C,YAAM;AAAE7E,UAAAA,IAAF;AAAQoC,UAAAA;AAAR,YAAiB,KAAKrF,OAAL,CAAa8H,CAAb,CAAvB;AACA,YAAMC,qBAAqB,GAAG,KAAKC,+BAAL,CAC5BP,SAD4B,EAE5BpC,IAF4B,EAG5BpC,IAH4B,CAA9B;AAKA,YAAIgF,cAAc,GAAG,IAArB;;AACA,YAAI,CAACF,qBAAL,EAA4B;AAC1B,cAAMG,UAAU,GAAGd,QAAQ,CAACe,SAAT,CAAmBN,MAAnB,EAA2B,KAAK7H,OAAL,CAAa8H,CAAb,CAA3B,CAAnB;AACAG,UAAAA,cAAc,GAAG,CAAAC,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEE,YAAZ,KAA4B,IAA5B,GAAmCF,UAAnC,GAAgD,IAAjE;AACD;;AACD,YAAMG,QAAQ,GAAGZ,SAAS,CAACa,kBAAV,CACflB,QAAQ,CAACmB,OAAT,CAAiBV,MAAjB,EAAyB,KAAK7H,OAAL,CAAa8H,CAAb,CAAzB,CADe,EAEf7E,IAFe,EAGfoC,IAHe,EAIf4C,cAJe,CAAjB;AAMAZ,QAAAA,SAAS,IAAIvI,UAAU,CAACC,eAAX,CAA2BsJ,QAA3B,CAAb;AACAhB,QAAAA,SAAS,IAAIS,CAAC,KAAK,KAAK9H,OAAL,CAAa8B,MAAb,GAAsB,CAA5B,GAAgC,IAAhC,GAAuC,GAApD;AACD;AACF;;AAED,WAAOuF,SAAP;AACD;;AAEDlB,EAAAA,YAAY,CAACqC,CAAD,EAAI;AAAA;;AACd,QAAIA,CAAC,IAAI,CAAT,EAAY;AACV;AACD;;AACD,QAAIpD,CAAC,GAAG,CAAR;AACA,QAAIqD,gBAAgB,GAAG,KAAKtI,UAAL,CAAgB,KAAKC,gBAArB,CAAvB;;AALc;AAOZ,UAAMoG,gBAAgB,GACpBiC,gBAAgB,CAAC1C,QAAjB,GAA4B,KAAI,CAACzF,qBAAL,GAA6B,KAAI,CAACJ,SADhE;AAEA,UAAMuG,cAAc,GAAGjB,IAAI,CAACY,GAAL,CACrBI,gBAAgB,GAAG,KAAI,CAACtG,SAAxB,GAAoC,CADf,EAErBuI,gBAAgB,CAAC3C,MAFI,CAAvB;AAKA,UAAMS,aAAa,GAAG,KAAI,CAAC/F,eAA3B;;AACA,MAAA,KAAI,CAACK,mBAAL,CAAyB+B,IAAzB,CACEnE,YAAY,CAACiK,cAAb,CACE,KAAI,CAAC3I,iBAAL,CACGqH,QADH,CAEI9I,EAAE,CAACqK,QAAH,CAAYC,OAAZ,CAAoBpC,gBAApB,EAAsCC,cAAtC,CAFJ,EAGI,KAAI,CAACzG,OAHT,EAKGuB,IALH,CAKQ6F,QAAQ,IAAI;AAChB,QAAA,KAAI,CAAC5H,sBAAL,CACE4H,QADF,EAEEb,aAFF,EAGEC,gBAHF,EAIEC,cAJF;;AAOA,eAAOF,aAAP;AACD,OAdH,EAeG7E,KAfH,CAeSmH,GAAG,IAAI;AACZjK,QAAAA,GAAG,CAAC+C,KAAJ,CAAUkH,GAAV;AACD,OAjBH,CADF,EAmBEC,GAAG,IAAI;AACLlK,QAAAA,GAAG,CAAC4C,IAAJ,oBAAqBsH,GAArB;AACD,OArBH,CADF;;AA0BA,MAAA,KAAI,CAACxI,qBAAL,IAA8B,CAA9B;AACA,MAAA,KAAI,CAACE,eAAL,IAAwB,CAAxB;AACA,MAAA,KAAI,CAACI,eAAL,IAAwB,CAAxB;;AAEA,UACE,KAAI,CAACN,qBAAL,IACA,KAAI,CAACD,oBAAL,CAA0B,KAAI,CAACD,gBAA/B,CAFF,EAGE;AACA,QAAA,KAAI,CAACA,gBAAL,IAAyB,CAAzB;AACA,QAAA,KAAI,CAACE,qBAAL,GAA6B,CAA7B;AACAmI,QAAAA,gBAAgB,GAAG,KAAI,CAACtI,UAAL,CAAgB,KAAI,CAACC,gBAArB,CAAnB;AACD;;AACDgF,MAAAA,CAAC,IAAI,CAAL;AArDY;;AAMd,WAAOA,CAAC,GAAGoD,CAAX,EAAc;AAAA;AAgDb;AACF;;AAEDlJ,EAAAA,iBAAiB,OAAW;AAAA,QAAV;AAAEyJ,MAAAA;AAAF,KAAU;AAC1B,QAAM;AAAEvF,MAAAA,QAAF;AAAYwF,MAAAA;AAAZ,QAAsCD,IAA5C;;AACA,QAAI,KAAK5H,eAAT,EAA0B;AACxB;AACD;;AACD,QAAIqC,QAAJ,EAAc;AACZ,WAAKyF,UAAL,WAAmBzF,QAAnB;AACA,WAAKiB,aAAL;AACD;;AACD,QAAIuE,qBAAJ,EAA2B;AACzB,UAAI,CAAC,KAAK7H,eAAV,EAA2B;AACzBe,QAAAA,YAAY,CAAC,KAAKnB,aAAN,CAAZ;AAEA,aAAKA,aAAL,GAAqBmI,UAAU,CAC7B,KAAKzJ,qBADwB,EAE7BX,UAAU,CAACqK,cAFkB,CAA/B;AAID;AACF;AACF;;AAED3J,EAAAA,sBAAsB,CACpB4H,QADoB,EAEpBb,aAFoB,EAGpBC,gBAHoB,EAIpBC,cAJoB,EAKpB;AACA;AACA,SAAKzF,sBAAL,GAA8BkI,UAAU,CAAC,MAAM;AAC7C,WAAKzI,eAAL,CAAqB2I,GAArB,CAAyB7C,aAAzB,EAAwCa,QAAxC;AACA,WAAKxG,eAAL,IAAwB,CAAxB;AACA,WAAK0F,aAAL,CAAmBC,aAAnB,EAAkCC,gBAAlC,EAAoDC,cAApD;AACA,WAAK5F,mBAAL,CAAyB0F,aAAzB,IAA0C,IAA1C;AACD,KALuC,EAKrCzH,UAAU,CAACuK,wBAL0B,CAAxC;AAMD;;AAEDJ,EAAAA,UAAU,CAACK,GAAD,EAAM;AACd;AACA,QAAMtH,MAAM,GAAGmB,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAf;AACApB,IAAAA,MAAM,CAACuH,MAAP,GAAgB,IAAhB;AACAvH,IAAAA,MAAM,CAACsH,GAAP,sBAAyBA,GAAzB;AACAtH,IAAAA,MAAM,CAACwH,MAAP,GAAgB,KAAhB;AACAxH,IAAAA,MAAM,CAACqD,IAAP,GAAc,QAAd;AACArD,IAAAA,MAAM,CAACyH,QAAP,GAAkB,IAAlB;AACAzH,IAAAA,MAAM,CAAC0H,gBAAP,CACE,MADF,EAEE,MAAM;AACJ1H,MAAAA,MAAM,CAACwH,MAAP,GAAgB,IAAhB;AACD,KAJH,EAKE,KALF;AAOArG,IAAAA,QAAQ,CAACwG,IAAT,CAAcC,WAAd,CAA0B5H,MAA1B;AACA,SAAKd,OAAL,CAAa0B,IAAb,CAAkBZ,MAAlB;AACD;;AAED6H,EAAAA,MAAM,GAAG;AACP,WAAO,IAAP;AACD;;AAvfmD;;gBAAjC/K,U,yBACU,I;;gBADVA,U,0BAGW,C;;gBAHXA,U,oBAKK,I;;gBALLA,U,8BAOe,C;;AAmfpCA,UAAU,CAACgL,SAAX,GAAuB;AACrBxI,EAAAA,iBAAiB,EAAEnD,SAAS,CAAC4L,IADR;AAErBhG,EAAAA,aAAa,EAAE5F,SAAS,CAAC6L,IAFJ;AAGrBnF,EAAAA,mBAAmB,EAAE1G,SAAS,CAAC4L,IAHV;AAIrB9E,EAAAA,kBAAkB,EAAE9G,SAAS,CAAC4L,IAJT;AAKrB9C,EAAAA,wBAAwB,EAAE9I,SAAS,CAAC4L,IALf;AAMrBtC,EAAAA,SAAS,EAAEtJ,SAAS,CAAC8L,UAAV,CAAqBvL,SAArB,EAAgCwL;AANtB,CAAvB;AASApL,UAAU,CAACqL,YAAX,GAA0B;AACxB7I,EAAAA,iBAAiB,EAAE,MACjB8I,OAAO,CAACC,MAAR,CAAe,IAAIC,KAAJ,CAAU,8BAAV,CAAf,CAFsB;AAGxBvG,EAAAA,aAAa,EAAE,KAHS;AAIxBc,EAAAA,mBAAmB,EAAE,MAAM,CAAE,CAJL;AAKxBI,EAAAA,kBAAkB,EAAE,MAAM,CAAE,CALJ;AAMxBgC,EAAAA,wBAAwB,EAAE,MAAM,CAAE;AANV,CAA1B","sourcesContent":["import { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { WritableStream as ponyfillWritableStream } from 'web-streams-polyfill/dist/ponyfill.js';\nimport dh from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { memoizeClear } from '@deephaven/grid';\nimport { PromiseUtils } from '@deephaven/utils';\nimport Formatter from '../Formatter';\nimport FormatterUtils from '../FormatterUtils';\n\nconst log = Log.module('TableSaver');\n\nexport default class TableSaver extends PureComponent {\n static DOWNLOAD_CELL_CHUNK = 6000;\n\n static SNAPSHOT_BUFFER_SIZE = 5;\n\n static STREAM_TIMEOUT = 8000;\n\n static SNAPSHOT_HANDLER_TIMEOUT = 5;\n\n static csvEscapeString(str) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n\n constructor(props) {\n super(props);\n\n this.handlePortMessage = this.handlePortMessage.bind(this);\n this.handleSnapshotResolved = this.handleSnapshotResolved.bind(this);\n this.handleDownloadTimeout = this.handleDownloadTimeout.bind(this);\n\n this.state = {};\n\n this.sw = null;\n this.port = null;\n this.fileWriter = null;\n\n this.table = null;\n this.tableSubscription = null;\n this.columns = null;\n\n this.fileName = null;\n\n this.chunkRows = null;\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n // WritableStream is not supported in Firefox (also IE) yet. use ponyfillWritableStream instead\n this.WritableStream = window.WritableStream || ponyfillWritableStream;\n\n // Due to an open issue in Chromium, readableStream.cancel() is never called when a user cancel the stream from Chromium's UI and the stream goes on even it's canceled.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n this.streamTimeout = null;\n\n this.snapshotHandlerTimeout = null;\n\n this.downloadStartTime = null;\n\n this.iframes = [];\n\n this.useBlobFallback = !!window.safari;\n }\n\n componentDidMount() {\n const { getDownloadWorker } = this.props;\n getDownloadWorker()\n .then(sw => {\n log.info('found active service worker');\n this.sw = sw;\n this.sw.postMessage('ping'); // just to activate the service worker\n })\n .catch(error => {\n // if service worker is not available, use blob as fallback to download table csv\n log.warn('Download csv is not optimized.', error);\n this.useBlobFallback = true;\n });\n }\n\n componentWillUnmount() {\n if (this.iframes.length > 0) {\n this.iframes.forEach(iframe => {\n iframe.remove();\n });\n }\n clearTimeout(this.streamTimeout);\n clearTimeout(this.snapshotHandlerTimeout);\n }\n\n getCachedCustomColumnFormatFlag = memoizeClear(\n FormatterUtils.isCustomColumnFormatDefined,\n { max: 10000 }\n );\n\n createWriterStream(port) {\n // use blob fall back if it's safari\n const useBlob = this.useBlobFallback;\n const chunks = [];\n let encode = null;\n if (useBlob) {\n encode = TextEncoder.prototype.encode.bind(new TextEncoder());\n }\n const { fileName } = this;\n\n const streamConfig = {};\n if (useBlob) {\n streamConfig.write = chunk => {\n chunks.push(encode(chunk.rows));\n };\n streamConfig.close = () => {\n const blob = new Blob(chunks, {\n type: 'application/octet-stream; charset=utf-8',\n });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n } else {\n streamConfig.write = chunk => {\n port.postMessage(chunk);\n };\n streamConfig.close = () => {\n port.postMessage({ end: true });\n port.close();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n }\n\n return new this.WritableStream(streamConfig);\n }\n\n startDownload(fileName, frozenTable, tableSubscription, gridRanges) {\n // don't trigger another download when a download is ongoing\n const { isDownloading } = this.props;\n if (isDownloading) {\n return;\n }\n\n this.downloadStartTime = Date.now();\n log.info(`start downloading ${fileName}`);\n\n this.table = frozenTable;\n this.columns = frozenTable.columns;\n this.tableSubscription = tableSubscription;\n this.gridRanges = gridRanges;\n\n // Make filename RFC5987 compatible\n const encodedFileName = encodeURIComponent(fileName.replace(/\\//g, ':'))\n .replace(/['()]/g, escape)\n .replace(/\\*/g, '%2A');\n\n const messageChannel = new MessageChannel();\n this.port = messageChannel.port1;\n this.fileName = fileName;\n this.fileWriter = this.createWriterStream(this.port).getWriter();\n\n // if the browser doesn't support stream or there's no active service worker, use blobs for table download\n if (this.useBlobFallback) {\n this.writeCsvTable();\n return;\n }\n\n if (this.sw) {\n // send file name and port to service worker\n this.sw.postMessage({ encodedFileName }, [messageChannel.port2]);\n }\n this.port.onmessage = this.handlePortMessage;\n }\n\n finishDownload() {\n if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.close();\n }\n\n const { onDownloadCompleted } = this.props;\n onDownloadCompleted();\n this.resetTableSaver();\n\n log.info(\n `download finished, total elapsed time ${\n (Date.now() - this.downloadStartTime) / 1000\n } seconds`\n );\n }\n\n cancelDownload() {\n if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.abort();\n }\n\n this.cancelableSnapshots.forEach(cancelable => {\n if (cancelable) {\n cancelable.catch(() => {});\n cancelable.cancel();\n }\n });\n const { onDownloadCanceled } = this.props;\n onDownloadCanceled();\n this.resetTableSaver();\n }\n\n resetTableSaver() {\n this.table = null;\n this.tableSubscription = null;\n this.columns = null;\n this.chunkRows = null;\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n clearTimeout(this.streamTimeout);\n clearTimeout(this.snapshotHandlerTimeout);\n this.streamTimeout = null;\n this.snapshotHandlerTimeout = null;\n }\n\n handleDownloadTimeout() {\n log.info('download canceled');\n this.cancelDownload();\n }\n\n writeTableHeader() {\n let headerString = '';\n for (let i = 0; i < this.columns.length; i += 1) {\n headerString += this.columns[i].name;\n headerString += i === this.columns.length - 1 ? '\\n' : ',';\n }\n this.fileWriter.write({ header: headerString }).then(() => {});\n }\n\n startWriteTableBody() {\n this.chunkRows = Math.floor(\n TableSaver.DOWNLOAD_CELL_CHUNK / this.columns.length\n );\n\n this.rangedSnapshotsTotal = this.gridRanges.map(range =>\n Math.ceil((range.endRow - range.startRow + 1) / this.chunkRows)\n );\n this.snapshotsTotal = this.rangedSnapshotsTotal.reduce(\n (total, snapshotCount) => total + snapshotCount\n );\n\n log.info(`start writing table, total snapshots: `, this.snapshotsTotal);\n\n this.makeSnapshot(\n Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE, this.snapshotsTotal)\n );\n }\n\n writeCsvTable() {\n this.writeTableHeader();\n this.startWriteTableBody();\n }\n\n writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow) {\n if (this.currentSnapshotIndex === snapshotIndex && this.fileWriter) {\n while (this.snapshotsBuffer.has(this.currentSnapshotIndex)) {\n this.fileWriter.write({\n rows: this.convertSnapshotIntoCsv(\n this.snapshotsBuffer.get(this.currentSnapshotIndex),\n snapshotStartRow,\n snapshotEndRow\n ),\n });\n this.snapshotsBuffer.delete(this.currentSnapshotIndex);\n this.currentSnapshotIndex += 1;\n\n this.updateDownloadProgress(snapshotIndex);\n }\n if (this.currentSnapshotIndex >= this.snapshotsTotal) {\n this.finishDownload();\n return;\n }\n }\n\n if (this.snapshotCounter < this.snapshotsTotal) {\n log.debug2(\n `\n current range index: ${this.gridRangeCounter}, \n snapshotIndexCounter: ${this.snapshotCounter}, \n currentRangedSnapshotIndex : ${this.rangedSnapshotCounter}, \n snapshotpending: ${this.snapshotPending}, \n buffered ${this.snapshotsBuffer.size}\n making ${Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )} more snapshots\n `\n );\n this.makeSnapshot(\n Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )\n );\n }\n }\n\n updateDownloadProgress(snapshotIndex) {\n const { onDownloadProgressUpdate } = this.props;\n const downloadProgress = Math.floor(\n (snapshotIndex * 100) / this.snapshotsTotal\n );\n const estimateTime =\n snapshotIndex > 1\n ? Math.floor(\n ((Date.now() - this.downloadStartTime) *\n (this.snapshotsTotal - snapshotIndex)) /\n snapshotIndex /\n 1000\n )\n : null;\n\n onDownloadProgressUpdate(downloadProgress, estimateTime);\n }\n\n convertSnapshotIntoCsv(snapshot) {\n let csvString = '';\n const snapshotIterator = snapshot.added.iterator();\n const { formatter } = this.props;\n\n const rows = [];\n while (snapshotIterator.hasNext()) {\n rows.push(snapshotIterator.next().value);\n }\n\n for (let i = 0; i < rows.length; i += 1) {\n const rowIdx = rows[i];\n for (let j = 0; j < this.columns.length; j += 1) {\n const { type, name } = this.columns[j];\n const hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(\n formatter,\n name,\n type\n );\n let formatOverride = null;\n if (!hasCustomColumnFormat) {\n const cellFormat = snapshot.getFormat(rowIdx, this.columns[j]);\n formatOverride = cellFormat?.formatString != null ? cellFormat : null;\n }\n const cellData = formatter.getFormattedString(\n snapshot.getData(rowIdx, this.columns[j]),\n type,\n name,\n formatOverride\n );\n csvString += TableSaver.csvEscapeString(cellData);\n csvString += j === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n\n return csvString;\n }\n\n makeSnapshot(n) {\n if (n <= 0) {\n return;\n }\n let i = 0;\n let currentGridRange = this.gridRanges[this.gridRangeCounter];\n while (i < n) {\n const snapshotStartRow =\n currentGridRange.startRow + this.rangedSnapshotCounter * this.chunkRows;\n const snapshotEndRow = Math.min(\n snapshotStartRow + this.chunkRows - 1,\n currentGridRange.endRow\n );\n\n const snapshotIndex = this.snapshotCounter;\n this.cancelableSnapshots.push(\n PromiseUtils.makeCancelable(\n this.tableSubscription\n .snapshot(\n dh.RangeSet.ofRange(snapshotStartRow, snapshotEndRow),\n this.columns\n )\n .then(snapshot => {\n this.handleSnapshotResolved(\n snapshot,\n snapshotIndex,\n snapshotStartRow,\n snapshotEndRow\n );\n\n return snapshotIndex;\n })\n .catch(err => {\n log.error(err);\n }),\n val => {\n log.info(`snapshot ${val} has been canceled`);\n }\n )\n );\n\n this.rangedSnapshotCounter += 1;\n this.snapshotCounter += 1;\n this.snapshotPending += 1;\n\n if (\n this.rangedSnapshotCounter >=\n this.rangedSnapshotsTotal[this.gridRangeCounter]\n ) {\n this.gridRangeCounter += 1;\n this.rangedSnapshotCounter = 0;\n currentGridRange = this.gridRanges[this.gridRangeCounter];\n }\n i += 1;\n }\n }\n\n handlePortMessage({ data }) {\n const { download, readableStreamPulling } = data;\n if (this.useBlobFallback) {\n return;\n }\n if (download) {\n this.makeIframe(`${download}`);\n this.writeCsvTable();\n }\n if (readableStreamPulling) {\n if (!this.useBlobFallback) {\n clearTimeout(this.streamTimeout);\n\n this.streamTimeout = setTimeout(\n this.handleDownloadTimeout,\n TableSaver.STREAM_TIMEOUT\n );\n }\n }\n }\n\n handleSnapshotResolved(\n snapshot,\n snapshotIndex,\n snapshotStartRow,\n snapshotEndRow\n ) {\n // use time out to break writeSnapshot into an individual task in browser with timeout, so there's window for the browser to update table in needed.\n this.snapshotHandlerTimeout = setTimeout(() => {\n this.snapshotsBuffer.set(snapshotIndex, snapshot);\n this.snapshotPending -= 1;\n this.writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow);\n this.cancelableSnapshots[snapshotIndex] = null;\n }, TableSaver.SNAPSHOT_HANDLER_TIMEOUT);\n }\n\n makeIframe(src) {\n // make a return value and make it static method\n const iframe = document.createElement('iframe');\n iframe.hidden = true;\n iframe.src = `download/${src}`;\n iframe.loaded = false;\n iframe.name = 'iframe';\n iframe.isIframe = true;\n iframe.addEventListener(\n 'load',\n () => {\n iframe.loaded = true;\n },\n false\n );\n document.body.appendChild(iframe);\n this.iframes.push(iframe);\n }\n\n render() {\n return null;\n }\n}\n\nTableSaver.propTypes = {\n getDownloadWorker: PropTypes.func,\n isDownloading: PropTypes.bool,\n onDownloadCompleted: PropTypes.func,\n onDownloadCanceled: PropTypes.func,\n onDownloadProgressUpdate: PropTypes.func,\n formatter: PropTypes.instanceOf(Formatter).isRequired,\n};\n\nTableSaver.defaultProps = {\n getDownloadWorker: () =>\n Promise.reject(new Error('Download worker not provided')),\n isDownloading: false,\n onDownloadCompleted: () => {},\n onDownloadCanceled: () => {},\n onDownloadProgressUpdate: () => {},\n};\n"],"file":"TableSaver.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/sidebar/TableSaver.jsx"],"names":["PureComponent","PropTypes","WritableStream","ponyfillWritableStream","dh","Formatter","FormatterUtils","Log","memoizeClear","PromiseUtils","log","module","TableSaver","csvEscapeString","str","replace","constructor","props","isCustomColumnFormatDefined","max","handlePortMessage","bind","handleSnapshotResolved","handleDownloadTimeout","state","sw","port","fileWriter","table","tableSubscription","columns","fileName","chunkRows","gridRanges","gridRangeCounter","rangedSnapshotsTotal","rangedSnapshotCounter","snapshotsTotal","snapshotCounter","snapshotsBuffer","Map","currentSnapshotIndex","snapshotPending","cancelableSnapshots","window","streamTimeout","snapshotHandlerTimeout","downloadStartTime","iframes","useBlobFallback","safari","componentDidMount","getDownloadWorker","then","info","postMessage","catch","error","warn","componentWillUnmount","length","forEach","iframe","remove","clearTimeout","createWriterStream","useBlob","chunks","encode","TextEncoder","prototype","streamConfig","write","chunk","push","rows","close","blob","Blob","type","link","document","createElement","href","URL","createObjectURL","download","click","abort","cancel","end","startDownload","frozenTable","isDownloading","Date","now","encodedFileName","encodeURIComponent","escape","messageChannel","MessageChannel","port1","getWriter","writeCsvTable","port2","onmessage","finishDownload","onDownloadCompleted","resetTableSaver","cancelDownload","cancelable","onDownloadCanceled","writeTableHeader","headerString","i","name","header","startWriteTableBody","Math","floor","DOWNLOAD_CELL_CHUNK","map","range","ceil","endRow","startRow","reduce","total","snapshotCount","makeSnapshot","min","SNAPSHOT_BUFFER_SIZE","writeSnapshot","snapshotIndex","snapshotStartRow","snapshotEndRow","has","convertSnapshotIntoCsv","get","delete","updateDownloadProgress","debug2","size","onDownloadProgressUpdate","downloadProgress","estimateTime","snapshot","csvString","snapshotIterator","added","iterator","formatter","hasNext","next","value","rowIdx","j","hasCustomColumnFormat","getCachedCustomColumnFormatFlag","formatOverride","cellFormat","getFormat","formatString","cellData","getFormattedString","getData","n","currentGridRange","makeCancelable","RangeSet","ofRange","err","val","data","readableStreamPulling","makeIframe","setTimeout","STREAM_TIMEOUT","set","SNAPSHOT_HANDLER_TIMEOUT","src","hidden","loaded","isIframe","addEventListener","body","appendChild","render","propTypes","func","bool","instanceOf","isRequired","defaultProps","Promise","reject","Error"],"mappings":";;AAAA,SAASA,aAAT,QAA8B,OAA9B;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,cAAc,IAAIC,sBAA3B,QAAyD,uCAAzD;AACA,OAAOC,EAAP,MAAe,uBAAf;AACA,SAASC,SAAT,EAAoBC,cAApB,QAA0C,wBAA1C;AACA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,SAASC,YAAT,QAA6B,iBAA7B;AACA,SAASC,YAAT,QAA6B,kBAA7B;AAEA,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAJ,CAAW,YAAX,CAAZ;AAEA,eAAe,MAAMC,UAAN,SAAyBZ,aAAzB,CAAuC;AAS9B,SAAfa,eAAe,CAACC,GAAD,EAAM;AAC1B,uBAAWA,GAAG,CAACC,OAAJ,CAAY,IAAZ,EAAkB,IAAlB,CAAX;AACD;;AAEDC,EAAAA,WAAW,CAACC,KAAD,EAAQ;AACjB,UAAMA,KAAN;;AADiB,6DA6EeT,YAAY,CAC5CF,cAAc,CAACY,2BAD6B,EAE5C;AAAEC,MAAAA,GAAG,EAAE;AAAP,KAF4C,CA7E3B;;AAGjB,SAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBC,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKC,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BD,IAA5B,CAAiC,IAAjC,CAA9B;AACA,SAAKE,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BF,IAA3B,CAAgC,IAAhC,CAA7B;AAEA,SAAKG,KAAL,GAAa,EAAb;AAEA,SAAKC,EAAL,GAAU,IAAV;AACA,SAAKC,IAAL,GAAY,IAAZ;AACA,SAAKC,UAAL,GAAkB,IAAlB;AAEA,SAAKC,KAAL,GAAa,IAAb;AACA,SAAKC,iBAAL,GAAyB,IAAzB;AACA,SAAKC,OAAL,GAAe,IAAf;AAEA,SAAKC,QAAL,GAAgB,IAAhB;AAEA,SAAKC,SAAL,GAAiB,IAAjB;AAEA,SAAKC,UAAL,GAAkB,EAAlB;AACA,SAAKC,gBAAL,GAAwB,CAAxB;AACA,SAAKC,oBAAL,GAA4B,EAA5B;AACA,SAAKC,qBAAL,GAA6B,CAA7B;AAEA,SAAKC,cAAL,GAAsB,CAAtB;AACA,SAAKC,eAAL,GAAuB,CAAvB;AACA,SAAKC,eAAL,GAAuB,IAAIC,GAAJ,EAAvB;AAEA,SAAKC,oBAAL,GAA4B,CAA5B;AACA,SAAKC,eAAL,GAAuB,CAAvB;AACA,SAAKC,mBAAL,GAA2B,EAA3B,CAhCiB,CAkCjB;;AACA,SAAKzC,cAAL,GAAsB0C,MAAM,CAAC1C,cAAP,IAAyBC,sBAA/C,CAnCiB,CAqCjB;AACA;AACA;AACA;;AACA,SAAK0C,aAAL,GAAqB,IAArB;AAEA,SAAKC,sBAAL,GAA8B,IAA9B;AAEA,SAAKC,iBAAL,GAAyB,IAAzB;AAEA,SAAKC,OAAL,GAAe,EAAf;AAEA,SAAKC,eAAL,GAAuB,CAAC,CAACL,MAAM,CAACM,MAAhC;AACD;;AAEDC,EAAAA,iBAAiB,GAAG;AAClB,QAAM;AAAEC,MAAAA;AAAF,QAAwB,KAAKnC,KAAnC;AACAmC,IAAAA,iBAAiB,GACdC,IADH,CACQ5B,EAAE,IAAI;AACVf,MAAAA,GAAG,CAAC4C,IAAJ,CAAS,6BAAT;AACA,WAAK7B,EAAL,GAAUA,EAAV;AACA,WAAKA,EAAL,CAAQ8B,WAAR,CAAoB,MAApB,EAHU,CAGmB;AAC9B,KALH,EAMGC,KANH,CAMSC,KAAK,IAAI;AACd;AACA/C,MAAAA,GAAG,CAACgD,IAAJ,CAAS,gCAAT,EAA2CD,KAA3C;AACA,WAAKR,eAAL,GAAuB,IAAvB;AACD,KAVH;AAWD;;AAEDU,EAAAA,oBAAoB,GAAG;AACrB,QAAI,KAAKX,OAAL,CAAaY,MAAb,GAAsB,CAA1B,EAA6B;AAC3B,WAAKZ,OAAL,CAAaa,OAAb,CAAqBC,MAAM,IAAI;AAC7BA,QAAAA,MAAM,CAACC,MAAP;AACD,OAFD;AAGD;;AACDC,IAAAA,YAAY,CAAC,KAAKnB,aAAN,CAAZ;AACAmB,IAAAA,YAAY,CAAC,KAAKlB,sBAAN,CAAZ;AACD;;AAODmB,EAAAA,kBAAkB,CAACvC,IAAD,EAAO;AACvB;AACA,QAAMwC,OAAO,GAAG,KAAKjB,eAArB;AACA,QAAMkB,MAAM,GAAG,EAAf;AACA,QAAIC,MAAM,GAAG,IAAb;;AACA,QAAIF,OAAJ,EAAa;AACXE,MAAAA,MAAM,GAAGC,WAAW,CAACC,SAAZ,CAAsBF,MAAtB,CAA6B/C,IAA7B,CAAkC,IAAIgD,WAAJ,EAAlC,CAAT;AACD;;AACD,QAAM;AAAEtC,MAAAA;AAAF,QAAe,IAArB;AAEA,QAAMwC,YAAY,GAAG,EAArB;;AACA,QAAIL,OAAJ,EAAa;AACXK,MAAAA,YAAY,CAACC,KAAb,GAAqBC,KAAK,IAAI;AAC5BN,QAAAA,MAAM,CAACO,IAAP,CAAYN,MAAM,CAACK,KAAK,CAACE,IAAP,CAAlB;AACD,OAFD;;AAGAJ,MAAAA,YAAY,CAACK,KAAb,GAAqB,MAAM;AACzB,YAAMC,IAAI,GAAG,IAAIC,IAAJ,CAASX,MAAT,EAAiB;AAC5BY,UAAAA,IAAI,EAAE;AADsB,SAAjB,CAAb;AAGA,YAAMC,IAAI,GAAGC,QAAQ,CAACC,aAAT,CAAuB,GAAvB,CAAb;AACAF,QAAAA,IAAI,CAACG,IAAL,GAAYC,GAAG,CAACC,eAAJ,CAAoBR,IAApB,CAAZ;AACAG,QAAAA,IAAI,CAACM,QAAL,GAAgBvD,QAAhB;AACAiD,QAAAA,IAAI,CAACO,KAAL;AACD,OARD;;AASAhB,MAAAA,YAAY,CAACiB,KAAb,GAAqB,MAAM;AACzB9D,QAAAA,IAAI,CAAC6B,WAAL,CAAiB;AAAEkC,UAAAA,MAAM,EAAE;AAAV,SAAjB;AACA/D,QAAAA,IAAI,CAACkD,KAAL;AACD,OAHD;AAID,KAjBD,MAiBO;AACLL,MAAAA,YAAY,CAACC,KAAb,GAAqBC,KAAK,IAAI;AAC5B/C,QAAAA,IAAI,CAAC6B,WAAL,CAAiBkB,KAAjB;AACD,OAFD;;AAGAF,MAAAA,YAAY,CAACK,KAAb,GAAqB,MAAM;AACzBlD,QAAAA,IAAI,CAAC6B,WAAL,CAAiB;AAAEmC,UAAAA,GAAG,EAAE;AAAP,SAAjB;AACAhE,QAAAA,IAAI,CAACkD,KAAL;AACD,OAHD;;AAIAL,MAAAA,YAAY,CAACiB,KAAb,GAAqB,MAAM;AACzB9D,QAAAA,IAAI,CAAC6B,WAAL,CAAiB;AAAEkC,UAAAA,MAAM,EAAE;AAAV,SAAjB;AACA/D,QAAAA,IAAI,CAACkD,KAAL;AACD,OAHD;AAID;;AAED,WAAO,IAAI,KAAK1E,cAAT,CAAwBqE,YAAxB,CAAP;AACD;;AAEDoB,EAAAA,aAAa,CAAC5D,QAAD,EAAW6D,WAAX,EAAwB/D,iBAAxB,EAA2CI,UAA3C,EAAuD;AAClE;AACA,QAAM;AAAE4D,MAAAA;AAAF,QAAoB,KAAK5E,KAA/B;;AACA,QAAI4E,aAAJ,EAAmB;AACjB;AACD;;AAED,SAAK9C,iBAAL,GAAyB+C,IAAI,CAACC,GAAL,EAAzB;AACArF,IAAAA,GAAG,CAAC4C,IAAJ,6BAA8BvB,QAA9B;AAEA,SAAKH,KAAL,GAAagE,WAAb;AACA,SAAK9D,OAAL,GAAe8D,WAAW,CAAC9D,OAA3B;AACA,SAAKD,iBAAL,GAAyBA,iBAAzB;AACA,SAAKI,UAAL,GAAkBA,UAAlB,CAbkE,CAelE;;AACA,QAAM+D,eAAe,GAAGC,kBAAkB,CAAClE,QAAQ,CAAChB,OAAT,CAAiB,KAAjB,EAAwB,GAAxB,CAAD,CAAlB,CACrBA,OADqB,CACb,QADa,EACHmF,MADG,EAErBnF,OAFqB,CAEb,KAFa,EAEN,KAFM,CAAxB;AAIA,QAAMoF,cAAc,GAAG,IAAIC,cAAJ,EAAvB;AACA,SAAK1E,IAAL,GAAYyE,cAAc,CAACE,KAA3B;AACA,SAAKtE,QAAL,GAAgBA,QAAhB;AACA,SAAKJ,UAAL,GAAkB,KAAKsC,kBAAL,CAAwB,KAAKvC,IAA7B,EAAmC4E,SAAnC,EAAlB,CAvBkE,CAyBlE;;AACA,QAAI,KAAKrD,eAAT,EAA0B;AACxB,WAAKsD,aAAL;AACA;AACD;;AAED,QAAI,KAAK9E,EAAT,EAAa;AACX;AACA,WAAKA,EAAL,CAAQ8B,WAAR,CAAoB;AAAEyC,QAAAA;AAAF,OAApB,EAAyC,CAACG,cAAc,CAACK,KAAhB,CAAzC;AACD;;AACD,SAAK9E,IAAL,CAAU+E,SAAV,GAAsB,KAAKrF,iBAA3B;AACD;;AAEDsF,EAAAA,cAAc,GAAG;AACf,QAAI,KAAK9E,KAAT,EAAgB;AACd,WAAKA,KAAL,CAAWgD,KAAX;AACD;;AACD,QAAI,KAAK/C,iBAAT,EAA4B;AAC1B,WAAKA,iBAAL,CAAuB+C,KAAvB;AACD;;AACD,QAAI,KAAKjD,UAAT,EAAqB;AACnB,WAAKA,UAAL,CAAgBiD,KAAhB;AACD;;AAED,QAAM;AAAE+B,MAAAA;AAAF,QAA0B,KAAK1F,KAArC;AACA0F,IAAAA,mBAAmB;AACnB,SAAKC,eAAL;AAEAlG,IAAAA,GAAG,CAAC4C,IAAJ,iDAEI,CAACwC,IAAI,CAACC,GAAL,KAAa,KAAKhD,iBAAnB,IAAwC,IAF5C;AAKD;;AAED8D,EAAAA,cAAc,GAAG;AACf,QAAI,KAAKjF,KAAT,EAAgB;AACd,WAAKA,KAAL,CAAWgD,KAAX;AACD;;AACD,QAAI,KAAK/C,iBAAT,EAA4B;AAC1B,WAAKA,iBAAL,CAAuB+C,KAAvB;AACD;;AACD,QAAI,KAAKjD,UAAT,EAAqB;AACnB,WAAKA,UAAL,CAAgB6D,KAAhB;AACD;;AAED,SAAK7C,mBAAL,CAAyBkB,OAAzB,CAAiCiD,UAAU,IAAI;AAC7C,UAAIA,UAAJ,EAAgB;AACdA,QAAAA,UAAU,CAACtD,KAAX,CAAiB,MAAM,CAAE,CAAzB;AACAsD,QAAAA,UAAU,CAACrB,MAAX;AACD;AACF,KALD;AAMA,QAAM;AAAEsB,MAAAA;AAAF,QAAyB,KAAK9F,KAApC;AACA8F,IAAAA,kBAAkB;AAClB,SAAKH,eAAL;AACD;;AAEDA,EAAAA,eAAe,GAAG;AAChB,SAAKhF,KAAL,GAAa,IAAb;AACA,SAAKC,iBAAL,GAAyB,IAAzB;AACA,SAAKC,OAAL,GAAe,IAAf;AACA,SAAKE,SAAL,GAAiB,IAAjB;AAEA,SAAKC,UAAL,GAAkB,EAAlB;AACA,SAAKC,gBAAL,GAAwB,CAAxB;AACA,SAAKC,oBAAL,GAA4B,EAA5B;AACA,SAAKC,qBAAL,GAA6B,CAA7B;AAEA,SAAKC,cAAL,GAAsB,CAAtB;AACA,SAAKC,eAAL,GAAuB,CAAvB;AACA,SAAKC,eAAL,GAAuB,IAAIC,GAAJ,EAAvB;AAEA,SAAKC,oBAAL,GAA4B,CAA5B;AACA,SAAKC,eAAL,GAAuB,CAAvB;AACA,SAAKC,mBAAL,GAA2B,EAA3B;AAEAqB,IAAAA,YAAY,CAAC,KAAKnB,aAAN,CAAZ;AACAmB,IAAAA,YAAY,CAAC,KAAKlB,sBAAN,CAAZ;AACA,SAAKD,aAAL,GAAqB,IAArB;AACA,SAAKC,sBAAL,GAA8B,IAA9B;AACD;;AAEDvB,EAAAA,qBAAqB,GAAG;AACtBb,IAAAA,GAAG,CAAC4C,IAAJ,CAAS,mBAAT;AACA,SAAKuD,cAAL;AACD;;AAEDG,EAAAA,gBAAgB,GAAG;AACjB,QAAIC,YAAY,GAAG,EAAnB;;AACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKpF,OAAL,CAAa8B,MAAjC,EAAyCsD,CAAC,IAAI,CAA9C,EAAiD;AAC/CD,MAAAA,YAAY,IAAI,KAAKnF,OAAL,CAAaoF,CAAb,EAAgBC,IAAhC;AACAF,MAAAA,YAAY,IAAIC,CAAC,KAAK,KAAKpF,OAAL,CAAa8B,MAAb,GAAsB,CAA5B,GAAgC,IAAhC,GAAuC,GAAvD;AACD;;AACD,SAAKjC,UAAL,CAAgB6C,KAAhB,CAAsB;AAAE4C,MAAAA,MAAM,EAAEH;AAAV,KAAtB,EAAgD5D,IAAhD,CAAqD,MAAM,CAAE,CAA7D;AACD;;AAEDgE,EAAAA,mBAAmB,GAAG;AACpB,SAAKrF,SAAL,GAAiBsF,IAAI,CAACC,KAAL,CACf3G,UAAU,CAAC4G,mBAAX,GAAiC,KAAK1F,OAAL,CAAa8B,MAD/B,CAAjB;AAIA,SAAKzB,oBAAL,GAA4B,KAAKF,UAAL,CAAgBwF,GAAhB,CAAoBC,KAAK,IACnDJ,IAAI,CAACK,IAAL,CAAU,CAACD,KAAK,CAACE,MAAN,GAAeF,KAAK,CAACG,QAArB,GAAgC,CAAjC,IAAsC,KAAK7F,SAArD,CAD0B,CAA5B;AAGA,SAAKK,cAAL,GAAsB,KAAKF,oBAAL,CAA0B2F,MAA1B,CACpB,CAACC,KAAD,EAAQC,aAAR,KAA0BD,KAAK,GAAGC,aADd,CAAtB;AAIAtH,IAAAA,GAAG,CAAC4C,IAAJ,2CAAmD,KAAKjB,cAAxD;AAEA,SAAK4F,YAAL,CACEX,IAAI,CAACY,GAAL,CAAStH,UAAU,CAACuH,oBAApB,EAA0C,KAAK9F,cAA/C,CADF;AAGD;;AAEDkE,EAAAA,aAAa,GAAG;AACd,SAAKS,gBAAL;AACA,SAAKK,mBAAL;AACD;;AAEDe,EAAAA,aAAa,CAACC,aAAD,EAAgBC,gBAAhB,EAAkCC,cAAlC,EAAkD;AAC7D,QAAI,KAAK9F,oBAAL,KAA8B4F,aAA9B,IAA+C,KAAK1G,UAAxD,EAAoE;AAClE,aAAO,KAAKY,eAAL,CAAqBiG,GAArB,CAAyB,KAAK/F,oBAA9B,CAAP,EAA4D;AAC1D,aAAKd,UAAL,CAAgB6C,KAAhB,CAAsB;AACpBG,UAAAA,IAAI,EAAE,KAAK8D,sBAAL,CACJ,KAAKlG,eAAL,CAAqBmG,GAArB,CAAyB,KAAKjG,oBAA9B,CADI,EAEJ6F,gBAFI,EAGJC,cAHI;AADc,SAAtB;AAOA,aAAKhG,eAAL,CAAqBoG,MAArB,CAA4B,KAAKlG,oBAAjC;AACA,aAAKA,oBAAL,IAA6B,CAA7B;AAEA,aAAKmG,sBAAL,CAA4BP,aAA5B;AACD;;AACD,UAAI,KAAK5F,oBAAL,IAA6B,KAAKJ,cAAtC,EAAsD;AACpD,aAAKqE,cAAL;AACA;AACD;AACF;;AAED,QAAI,KAAKpE,eAAL,GAAuB,KAAKD,cAAhC,EAAgD;AAC9C3B,MAAAA,GAAG,CAACmI,MAAJ,0CAEyB,KAAK3G,gBAF9B,+CAG0B,KAAKI,eAH/B,sDAIiC,KAAKF,qBAJtC,0CAKqB,KAAKM,eAL1B,kCAMa,KAAKH,eAAL,CAAqBuG,IANlC,8BAOWxB,IAAI,CAACY,GAAL,CACPtH,UAAU,CAACuH,oBAAX,GACE,KAAK5F,eAAL,CAAqBuG,IADvB,GAEE,KAAKpG,eAHA,EAIP,KAAKL,cAAL,GAAsB,KAAKC,eAJpB,CAPX;AAeA,WAAK2F,YAAL,CACEX,IAAI,CAACY,GAAL,CACEtH,UAAU,CAACuH,oBAAX,GACE,KAAK5F,eAAL,CAAqBuG,IADvB,GAEE,KAAKpG,eAHT,EAIE,KAAKL,cAAL,GAAsB,KAAKC,eAJ7B,CADF;AAQD;AACF;;AAEDsG,EAAAA,sBAAsB,CAACP,aAAD,EAAgB;AACpC,QAAM;AAAEU,MAAAA;AAAF,QAA+B,KAAK9H,KAA1C;AACA,QAAM+H,gBAAgB,GAAG1B,IAAI,CAACC,KAAL,CACtBc,aAAa,GAAG,GAAjB,GAAwB,KAAKhG,cADN,CAAzB;AAGA,QAAM4G,YAAY,GAChBZ,aAAa,GAAG,CAAhB,GACIf,IAAI,CAACC,KAAL,CACG,CAACzB,IAAI,CAACC,GAAL,KAAa,KAAKhD,iBAAnB,KACE,KAAKV,cAAL,GAAsBgG,aADxB,CAAD,GAEEA,aAFF,GAGE,IAJJ,CADJ,GAOI,IARN;AAUAU,IAAAA,wBAAwB,CAACC,gBAAD,EAAmBC,YAAnB,CAAxB;AACD;;AAEDR,EAAAA,sBAAsB,CAACS,QAAD,EAAW;AAC/B,QAAIC,SAAS,GAAG,EAAhB;AACA,QAAMC,gBAAgB,GAAGF,QAAQ,CAACG,KAAT,CAAeC,QAAf,EAAzB;AACA,QAAM;AAAEC,MAAAA;AAAF,QAAgB,KAAKtI,KAA3B;AAEA,QAAM0D,IAAI,GAAG,EAAb;;AACA,WAAOyE,gBAAgB,CAACI,OAAjB,EAAP,EAAmC;AACjC7E,MAAAA,IAAI,CAACD,IAAL,CAAU0E,gBAAgB,CAACK,IAAjB,GAAwBC,KAAlC;AACD;;AAED,SAAK,IAAIxC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGvC,IAAI,CAACf,MAAzB,EAAiCsD,CAAC,IAAI,CAAtC,EAAyC;AACvC,UAAMyC,MAAM,GAAGhF,IAAI,CAACuC,CAAD,CAAnB;;AACA,WAAK,IAAI0C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAK9H,OAAL,CAAa8B,MAAjC,EAAyCgG,CAAC,IAAI,CAA9C,EAAiD;AAC/C,YAAM;AAAE7E,UAAAA,IAAF;AAAQoC,UAAAA;AAAR,YAAiB,KAAKrF,OAAL,CAAa8H,CAAb,CAAvB;AACA,YAAMC,qBAAqB,GAAG,KAAKC,+BAAL,CAC5BP,SAD4B,EAE5BpC,IAF4B,EAG5BpC,IAH4B,CAA9B;AAKA,YAAIgF,cAAc,GAAG,IAArB;;AACA,YAAI,CAACF,qBAAL,EAA4B;AAC1B,cAAMG,UAAU,GAAGd,QAAQ,CAACe,SAAT,CAAmBN,MAAnB,EAA2B,KAAK7H,OAAL,CAAa8H,CAAb,CAA3B,CAAnB;AACAG,UAAAA,cAAc,GAAG,CAAAC,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEE,YAAZ,KAA4B,IAA5B,GAAmCF,UAAnC,GAAgD,IAAjE;AACD;;AACD,YAAMG,QAAQ,GAAGZ,SAAS,CAACa,kBAAV,CACflB,QAAQ,CAACmB,OAAT,CAAiBV,MAAjB,EAAyB,KAAK7H,OAAL,CAAa8H,CAAb,CAAzB,CADe,EAEf7E,IAFe,EAGfoC,IAHe,EAIf4C,cAJe,CAAjB;AAMAZ,QAAAA,SAAS,IAAIvI,UAAU,CAACC,eAAX,CAA2BsJ,QAA3B,CAAb;AACAhB,QAAAA,SAAS,IAAIS,CAAC,KAAK,KAAK9H,OAAL,CAAa8B,MAAb,GAAsB,CAA5B,GAAgC,IAAhC,GAAuC,GAApD;AACD;AACF;;AAED,WAAOuF,SAAP;AACD;;AAEDlB,EAAAA,YAAY,CAACqC,CAAD,EAAI;AAAA;;AACd,QAAIA,CAAC,IAAI,CAAT,EAAY;AACV;AACD;;AACD,QAAIpD,CAAC,GAAG,CAAR;AACA,QAAIqD,gBAAgB,GAAG,KAAKtI,UAAL,CAAgB,KAAKC,gBAArB,CAAvB;;AALc;AAOZ,UAAMoG,gBAAgB,GACpBiC,gBAAgB,CAAC1C,QAAjB,GAA4B,KAAI,CAACzF,qBAAL,GAA6B,KAAI,CAACJ,SADhE;AAEA,UAAMuG,cAAc,GAAGjB,IAAI,CAACY,GAAL,CACrBI,gBAAgB,GAAG,KAAI,CAACtG,SAAxB,GAAoC,CADf,EAErBuI,gBAAgB,CAAC3C,MAFI,CAAvB;AAKA,UAAMS,aAAa,GAAG,KAAI,CAAC/F,eAA3B;;AACA,MAAA,KAAI,CAACK,mBAAL,CAAyB+B,IAAzB,CACEjE,YAAY,CAAC+J,cAAb,CACE,KAAI,CAAC3I,iBAAL,CACGqH,QADH,CAEI9I,EAAE,CAACqK,QAAH,CAAYC,OAAZ,CAAoBpC,gBAApB,EAAsCC,cAAtC,CAFJ,EAGI,KAAI,CAACzG,OAHT,EAKGuB,IALH,CAKQ6F,QAAQ,IAAI;AAChB,QAAA,KAAI,CAAC5H,sBAAL,CACE4H,QADF,EAEEb,aAFF,EAGEC,gBAHF,EAIEC,cAJF;;AAOA,eAAOF,aAAP;AACD,OAdH,EAeG7E,KAfH,CAeSmH,GAAG,IAAI;AACZjK,QAAAA,GAAG,CAAC+C,KAAJ,CAAUkH,GAAV;AACD,OAjBH,CADF,EAmBEC,GAAG,IAAI;AACLlK,QAAAA,GAAG,CAAC4C,IAAJ,oBAAqBsH,GAArB;AACD,OArBH,CADF;;AA0BA,MAAA,KAAI,CAACxI,qBAAL,IAA8B,CAA9B;AACA,MAAA,KAAI,CAACE,eAAL,IAAwB,CAAxB;AACA,MAAA,KAAI,CAACI,eAAL,IAAwB,CAAxB;;AAEA,UACE,KAAI,CAACN,qBAAL,IACA,KAAI,CAACD,oBAAL,CAA0B,KAAI,CAACD,gBAA/B,CAFF,EAGE;AACA,QAAA,KAAI,CAACA,gBAAL,IAAyB,CAAzB;AACA,QAAA,KAAI,CAACE,qBAAL,GAA6B,CAA7B;AACAmI,QAAAA,gBAAgB,GAAG,KAAI,CAACtI,UAAL,CAAgB,KAAI,CAACC,gBAArB,CAAnB;AACD;;AACDgF,MAAAA,CAAC,IAAI,CAAL;AArDY;;AAMd,WAAOA,CAAC,GAAGoD,CAAX,EAAc;AAAA;AAgDb;AACF;;AAEDlJ,EAAAA,iBAAiB,OAAW;AAAA,QAAV;AAAEyJ,MAAAA;AAAF,KAAU;AAC1B,QAAM;AAAEvF,MAAAA,QAAF;AAAYwF,MAAAA;AAAZ,QAAsCD,IAA5C;;AACA,QAAI,KAAK5H,eAAT,EAA0B;AACxB;AACD;;AACD,QAAIqC,QAAJ,EAAc;AACZ,WAAKyF,UAAL,WAAmBzF,QAAnB;AACA,WAAKiB,aAAL;AACD;;AACD,QAAIuE,qBAAJ,EAA2B;AACzB,UAAI,CAAC,KAAK7H,eAAV,EAA2B;AACzBe,QAAAA,YAAY,CAAC,KAAKnB,aAAN,CAAZ;AAEA,aAAKA,aAAL,GAAqBmI,UAAU,CAC7B,KAAKzJ,qBADwB,EAE7BX,UAAU,CAACqK,cAFkB,CAA/B;AAID;AACF;AACF;;AAED3J,EAAAA,sBAAsB,CACpB4H,QADoB,EAEpBb,aAFoB,EAGpBC,gBAHoB,EAIpBC,cAJoB,EAKpB;AACA;AACA,SAAKzF,sBAAL,GAA8BkI,UAAU,CAAC,MAAM;AAC7C,WAAKzI,eAAL,CAAqB2I,GAArB,CAAyB7C,aAAzB,EAAwCa,QAAxC;AACA,WAAKxG,eAAL,IAAwB,CAAxB;AACA,WAAK0F,aAAL,CAAmBC,aAAnB,EAAkCC,gBAAlC,EAAoDC,cAApD;AACA,WAAK5F,mBAAL,CAAyB0F,aAAzB,IAA0C,IAA1C;AACD,KALuC,EAKrCzH,UAAU,CAACuK,wBAL0B,CAAxC;AAMD;;AAEDJ,EAAAA,UAAU,CAACK,GAAD,EAAM;AACd;AACA,QAAMtH,MAAM,GAAGmB,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAf;AACApB,IAAAA,MAAM,CAACuH,MAAP,GAAgB,IAAhB;AACAvH,IAAAA,MAAM,CAACsH,GAAP,sBAAyBA,GAAzB;AACAtH,IAAAA,MAAM,CAACwH,MAAP,GAAgB,KAAhB;AACAxH,IAAAA,MAAM,CAACqD,IAAP,GAAc,QAAd;AACArD,IAAAA,MAAM,CAACyH,QAAP,GAAkB,IAAlB;AACAzH,IAAAA,MAAM,CAAC0H,gBAAP,CACE,MADF,EAEE,MAAM;AACJ1H,MAAAA,MAAM,CAACwH,MAAP,GAAgB,IAAhB;AACD,KAJH,EAKE,KALF;AAOArG,IAAAA,QAAQ,CAACwG,IAAT,CAAcC,WAAd,CAA0B5H,MAA1B;AACA,SAAKd,OAAL,CAAa0B,IAAb,CAAkBZ,MAAlB;AACD;;AAED6H,EAAAA,MAAM,GAAG;AACP,WAAO,IAAP;AACD;;AAvfmD;;gBAAjC/K,U,yBACU,I;;gBADVA,U,0BAGW,C;;gBAHXA,U,oBAKK,I;;gBALLA,U,8BAOe,C;;AAmfpCA,UAAU,CAACgL,SAAX,GAAuB;AACrBxI,EAAAA,iBAAiB,EAAEnD,SAAS,CAAC4L,IADR;AAErBhG,EAAAA,aAAa,EAAE5F,SAAS,CAAC6L,IAFJ;AAGrBnF,EAAAA,mBAAmB,EAAE1G,SAAS,CAAC4L,IAHV;AAIrB9E,EAAAA,kBAAkB,EAAE9G,SAAS,CAAC4L,IAJT;AAKrB9C,EAAAA,wBAAwB,EAAE9I,SAAS,CAAC4L,IALf;AAMrBtC,EAAAA,SAAS,EAAEtJ,SAAS,CAAC8L,UAAV,CAAqB1L,SAArB,EAAgC2L;AANtB,CAAvB;AASApL,UAAU,CAACqL,YAAX,GAA0B;AACxB7I,EAAAA,iBAAiB,EAAE,MACjB8I,OAAO,CAACC,MAAR,CAAe,IAAIC,KAAJ,CAAU,8BAAV,CAAf,CAFsB;AAGxBvG,EAAAA,aAAa,EAAE,KAHS;AAIxBc,EAAAA,mBAAmB,EAAE,MAAM,CAAE,CAJL;AAKxBI,EAAAA,kBAAkB,EAAE,MAAM,CAAE,CALJ;AAMxBgC,EAAAA,wBAAwB,EAAE,MAAM,CAAE;AANV,CAA1B","sourcesContent":["import { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { WritableStream as ponyfillWritableStream } from 'web-streams-polyfill/dist/ponyfill.js';\nimport dh from '@deephaven/jsapi-shim';\nimport { Formatter, FormatterUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { memoizeClear } from '@deephaven/grid';\nimport { PromiseUtils } from '@deephaven/utils';\n\nconst log = Log.module('TableSaver');\n\nexport default class TableSaver extends PureComponent {\n static DOWNLOAD_CELL_CHUNK = 6000;\n\n static SNAPSHOT_BUFFER_SIZE = 5;\n\n static STREAM_TIMEOUT = 8000;\n\n static SNAPSHOT_HANDLER_TIMEOUT = 5;\n\n static csvEscapeString(str) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n\n constructor(props) {\n super(props);\n\n this.handlePortMessage = this.handlePortMessage.bind(this);\n this.handleSnapshotResolved = this.handleSnapshotResolved.bind(this);\n this.handleDownloadTimeout = this.handleDownloadTimeout.bind(this);\n\n this.state = {};\n\n this.sw = null;\n this.port = null;\n this.fileWriter = null;\n\n this.table = null;\n this.tableSubscription = null;\n this.columns = null;\n\n this.fileName = null;\n\n this.chunkRows = null;\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n // WritableStream is not supported in Firefox (also IE) yet. use ponyfillWritableStream instead\n this.WritableStream = window.WritableStream || ponyfillWritableStream;\n\n // Due to an open issue in Chromium, readableStream.cancel() is never called when a user cancel the stream from Chromium's UI and the stream goes on even it's canceled.\n // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.\n // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.\n // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494\n this.streamTimeout = null;\n\n this.snapshotHandlerTimeout = null;\n\n this.downloadStartTime = null;\n\n this.iframes = [];\n\n this.useBlobFallback = !!window.safari;\n }\n\n componentDidMount() {\n const { getDownloadWorker } = this.props;\n getDownloadWorker()\n .then(sw => {\n log.info('found active service worker');\n this.sw = sw;\n this.sw.postMessage('ping'); // just to activate the service worker\n })\n .catch(error => {\n // if service worker is not available, use blob as fallback to download table csv\n log.warn('Download csv is not optimized.', error);\n this.useBlobFallback = true;\n });\n }\n\n componentWillUnmount() {\n if (this.iframes.length > 0) {\n this.iframes.forEach(iframe => {\n iframe.remove();\n });\n }\n clearTimeout(this.streamTimeout);\n clearTimeout(this.snapshotHandlerTimeout);\n }\n\n getCachedCustomColumnFormatFlag = memoizeClear(\n FormatterUtils.isCustomColumnFormatDefined,\n { max: 10000 }\n );\n\n createWriterStream(port) {\n // use blob fall back if it's safari\n const useBlob = this.useBlobFallback;\n const chunks = [];\n let encode = null;\n if (useBlob) {\n encode = TextEncoder.prototype.encode.bind(new TextEncoder());\n }\n const { fileName } = this;\n\n const streamConfig = {};\n if (useBlob) {\n streamConfig.write = chunk => {\n chunks.push(encode(chunk.rows));\n };\n streamConfig.close = () => {\n const blob = new Blob(chunks, {\n type: 'application/octet-stream; charset=utf-8',\n });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n } else {\n streamConfig.write = chunk => {\n port.postMessage(chunk);\n };\n streamConfig.close = () => {\n port.postMessage({ end: true });\n port.close();\n };\n streamConfig.abort = () => {\n port.postMessage({ cancel: true });\n port.close();\n };\n }\n\n return new this.WritableStream(streamConfig);\n }\n\n startDownload(fileName, frozenTable, tableSubscription, gridRanges) {\n // don't trigger another download when a download is ongoing\n const { isDownloading } = this.props;\n if (isDownloading) {\n return;\n }\n\n this.downloadStartTime = Date.now();\n log.info(`start downloading ${fileName}`);\n\n this.table = frozenTable;\n this.columns = frozenTable.columns;\n this.tableSubscription = tableSubscription;\n this.gridRanges = gridRanges;\n\n // Make filename RFC5987 compatible\n const encodedFileName = encodeURIComponent(fileName.replace(/\\//g, ':'))\n .replace(/['()]/g, escape)\n .replace(/\\*/g, '%2A');\n\n const messageChannel = new MessageChannel();\n this.port = messageChannel.port1;\n this.fileName = fileName;\n this.fileWriter = this.createWriterStream(this.port).getWriter();\n\n // if the browser doesn't support stream or there's no active service worker, use blobs for table download\n if (this.useBlobFallback) {\n this.writeCsvTable();\n return;\n }\n\n if (this.sw) {\n // send file name and port to service worker\n this.sw.postMessage({ encodedFileName }, [messageChannel.port2]);\n }\n this.port.onmessage = this.handlePortMessage;\n }\n\n finishDownload() {\n if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.close();\n }\n\n const { onDownloadCompleted } = this.props;\n onDownloadCompleted();\n this.resetTableSaver();\n\n log.info(\n `download finished, total elapsed time ${\n (Date.now() - this.downloadStartTime) / 1000\n } seconds`\n );\n }\n\n cancelDownload() {\n if (this.table) {\n this.table.close();\n }\n if (this.tableSubscription) {\n this.tableSubscription.close();\n }\n if (this.fileWriter) {\n this.fileWriter.abort();\n }\n\n this.cancelableSnapshots.forEach(cancelable => {\n if (cancelable) {\n cancelable.catch(() => {});\n cancelable.cancel();\n }\n });\n const { onDownloadCanceled } = this.props;\n onDownloadCanceled();\n this.resetTableSaver();\n }\n\n resetTableSaver() {\n this.table = null;\n this.tableSubscription = null;\n this.columns = null;\n this.chunkRows = null;\n\n this.gridRanges = [];\n this.gridRangeCounter = 0;\n this.rangedSnapshotsTotal = [];\n this.rangedSnapshotCounter = 0;\n\n this.snapshotsTotal = 0;\n this.snapshotCounter = 0;\n this.snapshotsBuffer = new Map();\n\n this.currentSnapshotIndex = 0;\n this.snapshotPending = 0;\n this.cancelableSnapshots = [];\n\n clearTimeout(this.streamTimeout);\n clearTimeout(this.snapshotHandlerTimeout);\n this.streamTimeout = null;\n this.snapshotHandlerTimeout = null;\n }\n\n handleDownloadTimeout() {\n log.info('download canceled');\n this.cancelDownload();\n }\n\n writeTableHeader() {\n let headerString = '';\n for (let i = 0; i < this.columns.length; i += 1) {\n headerString += this.columns[i].name;\n headerString += i === this.columns.length - 1 ? '\\n' : ',';\n }\n this.fileWriter.write({ header: headerString }).then(() => {});\n }\n\n startWriteTableBody() {\n this.chunkRows = Math.floor(\n TableSaver.DOWNLOAD_CELL_CHUNK / this.columns.length\n );\n\n this.rangedSnapshotsTotal = this.gridRanges.map(range =>\n Math.ceil((range.endRow - range.startRow + 1) / this.chunkRows)\n );\n this.snapshotsTotal = this.rangedSnapshotsTotal.reduce(\n (total, snapshotCount) => total + snapshotCount\n );\n\n log.info(`start writing table, total snapshots: `, this.snapshotsTotal);\n\n this.makeSnapshot(\n Math.min(TableSaver.SNAPSHOT_BUFFER_SIZE, this.snapshotsTotal)\n );\n }\n\n writeCsvTable() {\n this.writeTableHeader();\n this.startWriteTableBody();\n }\n\n writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow) {\n if (this.currentSnapshotIndex === snapshotIndex && this.fileWriter) {\n while (this.snapshotsBuffer.has(this.currentSnapshotIndex)) {\n this.fileWriter.write({\n rows: this.convertSnapshotIntoCsv(\n this.snapshotsBuffer.get(this.currentSnapshotIndex),\n snapshotStartRow,\n snapshotEndRow\n ),\n });\n this.snapshotsBuffer.delete(this.currentSnapshotIndex);\n this.currentSnapshotIndex += 1;\n\n this.updateDownloadProgress(snapshotIndex);\n }\n if (this.currentSnapshotIndex >= this.snapshotsTotal) {\n this.finishDownload();\n return;\n }\n }\n\n if (this.snapshotCounter < this.snapshotsTotal) {\n log.debug2(\n `\n current range index: ${this.gridRangeCounter}, \n snapshotIndexCounter: ${this.snapshotCounter}, \n currentRangedSnapshotIndex : ${this.rangedSnapshotCounter}, \n snapshotpending: ${this.snapshotPending}, \n buffered ${this.snapshotsBuffer.size}\n making ${Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )} more snapshots\n `\n );\n this.makeSnapshot(\n Math.min(\n TableSaver.SNAPSHOT_BUFFER_SIZE -\n this.snapshotsBuffer.size -\n this.snapshotPending,\n this.snapshotsTotal - this.snapshotCounter\n )\n );\n }\n }\n\n updateDownloadProgress(snapshotIndex) {\n const { onDownloadProgressUpdate } = this.props;\n const downloadProgress = Math.floor(\n (snapshotIndex * 100) / this.snapshotsTotal\n );\n const estimateTime =\n snapshotIndex > 1\n ? Math.floor(\n ((Date.now() - this.downloadStartTime) *\n (this.snapshotsTotal - snapshotIndex)) /\n snapshotIndex /\n 1000\n )\n : null;\n\n onDownloadProgressUpdate(downloadProgress, estimateTime);\n }\n\n convertSnapshotIntoCsv(snapshot) {\n let csvString = '';\n const snapshotIterator = snapshot.added.iterator();\n const { formatter } = this.props;\n\n const rows = [];\n while (snapshotIterator.hasNext()) {\n rows.push(snapshotIterator.next().value);\n }\n\n for (let i = 0; i < rows.length; i += 1) {\n const rowIdx = rows[i];\n for (let j = 0; j < this.columns.length; j += 1) {\n const { type, name } = this.columns[j];\n const hasCustomColumnFormat = this.getCachedCustomColumnFormatFlag(\n formatter,\n name,\n type\n );\n let formatOverride = null;\n if (!hasCustomColumnFormat) {\n const cellFormat = snapshot.getFormat(rowIdx, this.columns[j]);\n formatOverride = cellFormat?.formatString != null ? cellFormat : null;\n }\n const cellData = formatter.getFormattedString(\n snapshot.getData(rowIdx, this.columns[j]),\n type,\n name,\n formatOverride\n );\n csvString += TableSaver.csvEscapeString(cellData);\n csvString += j === this.columns.length - 1 ? '\\n' : ',';\n }\n }\n\n return csvString;\n }\n\n makeSnapshot(n) {\n if (n <= 0) {\n return;\n }\n let i = 0;\n let currentGridRange = this.gridRanges[this.gridRangeCounter];\n while (i < n) {\n const snapshotStartRow =\n currentGridRange.startRow + this.rangedSnapshotCounter * this.chunkRows;\n const snapshotEndRow = Math.min(\n snapshotStartRow + this.chunkRows - 1,\n currentGridRange.endRow\n );\n\n const snapshotIndex = this.snapshotCounter;\n this.cancelableSnapshots.push(\n PromiseUtils.makeCancelable(\n this.tableSubscription\n .snapshot(\n dh.RangeSet.ofRange(snapshotStartRow, snapshotEndRow),\n this.columns\n )\n .then(snapshot => {\n this.handleSnapshotResolved(\n snapshot,\n snapshotIndex,\n snapshotStartRow,\n snapshotEndRow\n );\n\n return snapshotIndex;\n })\n .catch(err => {\n log.error(err);\n }),\n val => {\n log.info(`snapshot ${val} has been canceled`);\n }\n )\n );\n\n this.rangedSnapshotCounter += 1;\n this.snapshotCounter += 1;\n this.snapshotPending += 1;\n\n if (\n this.rangedSnapshotCounter >=\n this.rangedSnapshotsTotal[this.gridRangeCounter]\n ) {\n this.gridRangeCounter += 1;\n this.rangedSnapshotCounter = 0;\n currentGridRange = this.gridRanges[this.gridRangeCounter];\n }\n i += 1;\n }\n }\n\n handlePortMessage({ data }) {\n const { download, readableStreamPulling } = data;\n if (this.useBlobFallback) {\n return;\n }\n if (download) {\n this.makeIframe(`${download}`);\n this.writeCsvTable();\n }\n if (readableStreamPulling) {\n if (!this.useBlobFallback) {\n clearTimeout(this.streamTimeout);\n\n this.streamTimeout = setTimeout(\n this.handleDownloadTimeout,\n TableSaver.STREAM_TIMEOUT\n );\n }\n }\n }\n\n handleSnapshotResolved(\n snapshot,\n snapshotIndex,\n snapshotStartRow,\n snapshotEndRow\n ) {\n // use time out to break writeSnapshot into an individual task in browser with timeout, so there's window for the browser to update table in needed.\n this.snapshotHandlerTimeout = setTimeout(() => {\n this.snapshotsBuffer.set(snapshotIndex, snapshot);\n this.snapshotPending -= 1;\n this.writeSnapshot(snapshotIndex, snapshotStartRow, snapshotEndRow);\n this.cancelableSnapshots[snapshotIndex] = null;\n }, TableSaver.SNAPSHOT_HANDLER_TIMEOUT);\n }\n\n makeIframe(src) {\n // make a return value and make it static method\n const iframe = document.createElement('iframe');\n iframe.hidden = true;\n iframe.src = `download/${src}`;\n iframe.loaded = false;\n iframe.name = 'iframe';\n iframe.isIframe = true;\n iframe.addEventListener(\n 'load',\n () => {\n iframe.loaded = true;\n },\n false\n );\n document.body.appendChild(iframe);\n this.iframes.push(iframe);\n }\n\n render() {\n return null;\n }\n}\n\nTableSaver.propTypes = {\n getDownloadWorker: PropTypes.func,\n isDownloading: PropTypes.bool,\n onDownloadCompleted: PropTypes.func,\n onDownloadCanceled: PropTypes.func,\n onDownloadProgressUpdate: PropTypes.func,\n formatter: PropTypes.instanceOf(Formatter).isRequired,\n};\n\nTableSaver.defaultProps = {\n getDownloadWorker: () =>\n Promise.reject(new Error('Download worker not provided')),\n isDownloading: false,\n onDownloadCompleted: () => {},\n onDownloadCanceled: () => {},\n onDownloadProgressUpdate: () => {},\n};\n"],"file":"TableSaver.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AggregationEdit.d.ts","sourceRoot":"","sources":["../../../src/sidebar/aggregations/AggregationEdit.tsx"],"names":[],"mappings":";AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"AggregationEdit.d.ts","sourceRoot":"","sources":["../../../src/sidebar/aggregations/AggregationEdit.tsx"],"names":[],"mappings":";AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,wBAAwB,CAAC;AAOhC,oBAAY,oBAAoB,GAAG;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC9C,CAAC;AAUF,QAAA,MAAM,eAAe,wCAIlB,oBAAoB,KAAG,WA2IzB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -9,9 +9,9 @@ import classNames from 'classnames';
|
|
|
9
9
|
import { CSSTransition } from 'react-transition-group';
|
|
10
10
|
import { Button, Checkbox, ItemList, ThemeExport } from '@deephaven/components';
|
|
11
11
|
import { dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';
|
|
12
|
+
import { TableUtils } from '@deephaven/jsapi-utils';
|
|
12
13
|
import { filterValidColumns } from "./AggregationUtils.js";
|
|
13
14
|
import "./AggregationEdit.css";
|
|
14
|
-
import TableUtils from "../../TableUtils.js";
|
|
15
15
|
var SortType;
|
|
16
16
|
|
|
17
17
|
(function (SortType) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/sidebar/aggregations/AggregationEdit.tsx"],"names":["React","useCallback","useMemo","useRef","useState","classNames","CSSTransition","Button","Checkbox","ItemList","ThemeExport","dhSortAlphaDown","dhSortAlphaUp","filterValidColumns","TableUtils","SortType","DEFAULT_ROW_HEIGHT","AggregationEdit","aggregation","columns","onChange","top","setTop","bottom","setBottom","sort","setSort","NONE","invert","selected","list","isSelected","name","includes","validColumns","filteredColumns","operation","sortColumns","ASCENDING","items","slice","map","c","value","displayValue","handleSelect","itemIndex","selectedIndex","indexOf","newSelected","newInvert","splice","push","length","handleReset","handleViewportChange","newTop","newBottom","toggleAll","checked","isModified","transitionSlowMs","active","DESCENDING","item"],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, Checkbox, ItemList, ThemeExport } from '@deephaven/components';\nimport { dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport type { Column } from '@deephaven/jsapi-shim';\nimport { Aggregation } from './Aggregations';\nimport { filterValidColumns } from './AggregationUtils';\nimport './AggregationEdit.scss';\nimport TableUtils from '../../TableUtils';\n\ninterface AggregationEditItem {\n value: string;\n displayValue: string;\n}\n\nexport type AggregationEditProps = {\n aggregation: Aggregation;\n columns: Column[];\n onChange: (aggregation: Aggregation) => void;\n};\n\nenum SortType {\n NONE,\n ASCENDING,\n DESCENDING,\n}\n\nconst DEFAULT_ROW_HEIGHT = 30;\n\nconst AggregationEdit = ({\n aggregation,\n columns,\n onChange,\n}: AggregationEditProps): JSX.Element => {\n const [top, setTop] = useState(-1);\n const [bottom, setBottom] = useState(-1);\n const [sort, setSort] = useState(SortType.NONE);\n const { invert, selected } = aggregation;\n const list = useRef<ItemList<AggregationEditItem>>(null);\n\n const isSelected = useCallback(\n name => (selected.includes(name) ? !invert : invert),\n [invert, selected]\n );\n\n const validColumns = useMemo(() => {\n let filteredColumns = filterValidColumns(columns, aggregation.operation);\n if (sort !== SortType.NONE) {\n filteredColumns = TableUtils.sortColumns(\n filteredColumns,\n sort === SortType.ASCENDING\n );\n }\n return filteredColumns;\n }, [columns, aggregation.operation, sort]);\n\n const items = useMemo(\n () =>\n top >= 0\n ? validColumns.slice(top, bottom + 1).map(c => ({\n value: c.name,\n displayValue: c.name,\n isSelected: isSelected(c.name),\n }))\n : [],\n [validColumns, isSelected, bottom, top]\n );\n\n const handleSelect = useCallback(\n itemIndex => {\n const { name } = validColumns[itemIndex];\n const selectedIndex = selected.indexOf(name);\n let newSelected = [...selected];\n let newInvert = invert;\n if (selectedIndex >= 0) {\n newSelected.splice(selectedIndex, 1);\n } else {\n newSelected.push(name);\n if (newSelected.length === validColumns.length) {\n // Every item is either selected or deselected, flip the inversion bit\n newSelected = [];\n newInvert = !invert;\n }\n }\n\n onChange({ ...aggregation, selected: newSelected, invert: newInvert });\n },\n [aggregation, invert, validColumns, selected, onChange]\n );\n\n const handleReset = useCallback(() => {\n setSort(SortType.NONE);\n onChange({ ...aggregation, selected: [], invert: true });\n }, [aggregation, onChange]);\n\n const handleViewportChange = useCallback(\n (newTop, newBottom) => {\n setTop(newTop);\n setBottom(newBottom);\n },\n [setTop, setBottom]\n );\n\n const toggleAll = useCallback(() => {\n if (selected.length === 0) {\n onChange({ ...aggregation, invert: !invert });\n } else {\n onChange({ ...aggregation, selected: [], invert: true });\n }\n }, [aggregation, invert, onChange, selected]);\n\n const checked = selected.length === 0 ? invert : null;\n const isModified = selected.length !== 0 || !invert || sort !== SortType.NONE;\n\n return (\n <div role=\"menu\" className=\"aggregation-edit\">\n <div className=\"top-menu\">\n <div className=\"form-inline\">\n <Checkbox checked={checked} onChange={toggleAll}>\n Toggle All\n </Checkbox>\n <div className=\"spacer\" />\n <CSSTransition\n in={isModified}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <Button kind=\"ghost\" className=\"btn-reset\" onClick={handleReset}>\n Reset\n </Button>\n </CSSTransition>\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.ASCENDING,\n })}\n icon={dhSortAlphaDown}\n tooltip=\"Sort ascending\"\n onClick={() => setSort(SortType.ASCENDING)}\n />\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.DESCENDING,\n })}\n icon={dhSortAlphaUp}\n tooltip=\"Sort descending\"\n onClick={() => setSort(SortType.DESCENDING)}\n />\n </div>\n </div>\n <div className=\"aggregation-edit-item-list\">\n <ItemList\n itemCount={validColumns.length}\n items={items}\n offset={top}\n renderItem={({ item }) => (\n <Checkbox checked={isSelected(item.value)}>\n {item.displayValue}\n </Checkbox>\n )}\n onSelect={handleSelect}\n onViewportChange={handleViewportChange}\n rowHeight={DEFAULT_ROW_HEIGHT}\n focusSelector=\"input\"\n ref={list}\n />\n </div>\n </div>\n );\n};\n\nexport default AggregationEdit;\n"],"file":"AggregationEdit.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/sidebar/aggregations/AggregationEdit.tsx"],"names":["React","useCallback","useMemo","useRef","useState","classNames","CSSTransition","Button","Checkbox","ItemList","ThemeExport","dhSortAlphaDown","dhSortAlphaUp","TableUtils","filterValidColumns","SortType","DEFAULT_ROW_HEIGHT","AggregationEdit","aggregation","columns","onChange","top","setTop","bottom","setBottom","sort","setSort","NONE","invert","selected","list","isSelected","name","includes","validColumns","filteredColumns","operation","sortColumns","ASCENDING","items","slice","map","c","value","displayValue","handleSelect","itemIndex","selectedIndex","indexOf","newSelected","newInvert","splice","push","length","handleReset","handleViewportChange","newTop","newBottom","toggleAll","checked","isModified","transitionSlowMs","active","DESCENDING","item"],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, Checkbox, ItemList, ThemeExport } from '@deephaven/components';\nimport { dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport type { Column } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { Aggregation } from './Aggregations';\nimport { filterValidColumns } from './AggregationUtils';\nimport './AggregationEdit.scss';\n\ninterface AggregationEditItem {\n value: string;\n displayValue: string;\n}\n\nexport type AggregationEditProps = {\n aggregation: Aggregation;\n columns: Column[];\n onChange: (aggregation: Aggregation) => void;\n};\n\nenum SortType {\n NONE,\n ASCENDING,\n DESCENDING,\n}\n\nconst DEFAULT_ROW_HEIGHT = 30;\n\nconst AggregationEdit = ({\n aggregation,\n columns,\n onChange,\n}: AggregationEditProps): JSX.Element => {\n const [top, setTop] = useState(-1);\n const [bottom, setBottom] = useState(-1);\n const [sort, setSort] = useState(SortType.NONE);\n const { invert, selected } = aggregation;\n const list = useRef<ItemList<AggregationEditItem>>(null);\n\n const isSelected = useCallback(\n name => (selected.includes(name) ? !invert : invert),\n [invert, selected]\n );\n\n const validColumns = useMemo(() => {\n let filteredColumns = filterValidColumns(columns, aggregation.operation);\n if (sort !== SortType.NONE) {\n filteredColumns = TableUtils.sortColumns(\n filteredColumns,\n sort === SortType.ASCENDING\n );\n }\n return filteredColumns;\n }, [columns, aggregation.operation, sort]);\n\n const items = useMemo(\n () =>\n top >= 0\n ? validColumns.slice(top, bottom + 1).map(c => ({\n value: c.name,\n displayValue: c.name,\n isSelected: isSelected(c.name),\n }))\n : [],\n [validColumns, isSelected, bottom, top]\n );\n\n const handleSelect = useCallback(\n itemIndex => {\n const { name } = validColumns[itemIndex];\n const selectedIndex = selected.indexOf(name);\n let newSelected = [...selected];\n let newInvert = invert;\n if (selectedIndex >= 0) {\n newSelected.splice(selectedIndex, 1);\n } else {\n newSelected.push(name);\n if (newSelected.length === validColumns.length) {\n // Every item is either selected or deselected, flip the inversion bit\n newSelected = [];\n newInvert = !invert;\n }\n }\n\n onChange({ ...aggregation, selected: newSelected, invert: newInvert });\n },\n [aggregation, invert, validColumns, selected, onChange]\n );\n\n const handleReset = useCallback(() => {\n setSort(SortType.NONE);\n onChange({ ...aggregation, selected: [], invert: true });\n }, [aggregation, onChange]);\n\n const handleViewportChange = useCallback(\n (newTop, newBottom) => {\n setTop(newTop);\n setBottom(newBottom);\n },\n [setTop, setBottom]\n );\n\n const toggleAll = useCallback(() => {\n if (selected.length === 0) {\n onChange({ ...aggregation, invert: !invert });\n } else {\n onChange({ ...aggregation, selected: [], invert: true });\n }\n }, [aggregation, invert, onChange, selected]);\n\n const checked = selected.length === 0 ? invert : null;\n const isModified = selected.length !== 0 || !invert || sort !== SortType.NONE;\n\n return (\n <div role=\"menu\" className=\"aggregation-edit\">\n <div className=\"top-menu\">\n <div className=\"form-inline\">\n <Checkbox checked={checked} onChange={toggleAll}>\n Toggle All\n </Checkbox>\n <div className=\"spacer\" />\n <CSSTransition\n in={isModified}\n timeout={ThemeExport.transitionSlowMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <Button kind=\"ghost\" className=\"btn-reset\" onClick={handleReset}>\n Reset\n </Button>\n </CSSTransition>\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.ASCENDING,\n })}\n icon={dhSortAlphaDown}\n tooltip=\"Sort ascending\"\n onClick={() => setSort(SortType.ASCENDING)}\n />\n <Button\n kind=\"ghost\"\n className={classNames({\n active: sort === SortType.DESCENDING,\n })}\n icon={dhSortAlphaUp}\n tooltip=\"Sort descending\"\n onClick={() => setSort(SortType.DESCENDING)}\n />\n </div>\n </div>\n <div className=\"aggregation-edit-item-list\">\n <ItemList\n itemCount={validColumns.length}\n items={items}\n offset={top}\n renderItem={({ item }) => (\n <Checkbox checked={isSelected(item.value)}>\n {item.displayValue}\n </Checkbox>\n )}\n onSelect={handleSelect}\n onViewportChange={handleViewportChange}\n rowHeight={DEFAULT_ROW_HEIGHT}\n focusSelector=\"input\"\n ref={list}\n />\n </div>\n </div>\n );\n};\n\nexport default AggregationEdit;\n"],"file":"AggregationEdit.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/sidebar/aggregations/AggregationUtils.ts"],"names":["TableUtils","AggregationOperation","isRollupOperation","type","isValidOperation","operationType","columnType","COUNT","FIRST","LAST","COUNT_DISTINCT","DISTINCT","UNIQUE","MIN","MAX","isNumberType","isDateType","isTextType","SUM","ABS_SUM","VAR","AVG","STD","SKIP","filterValidColumns","columns","filter","c","getOperationColumnNames","selected","invert","map","name","includes"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/sidebar/aggregations/AggregationUtils.ts"],"names":["TableUtils","AggregationOperation","isRollupOperation","type","isValidOperation","operationType","columnType","COUNT","FIRST","LAST","COUNT_DISTINCT","DISTINCT","UNIQUE","MIN","MAX","isNumberType","isDateType","isTextType","SUM","ABS_SUM","VAR","AVG","STD","SKIP","filterValidColumns","columns","filter","c","getOperationColumnNames","selected","invert","map","name","includes"],"mappings":"AACA,SAASA,UAAT,QAA2B,wBAA3B;OACOC,oB;AAEP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,iBAAiB,GAAIC,IAAD,IAAyC;AACxE,UAAQA,IAAR;AACE;AACA;AACE,aAAO,KAAP;AAHJ;AAKD,CANM;AAQP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,gBAAgB,GAAG,CAC9BC,aAD8B,EAE9BC,UAF8B,KAGlB;AACZ,UAAQD,aAAR;AACE,SAAKJ,oBAAoB,CAACM,KAA1B;AACA,SAAKN,oBAAoB,CAACO,KAA1B;AACA,SAAKP,oBAAoB,CAACQ,IAA1B;AACA,SAAKR,oBAAoB,CAACS,cAA1B;AACA,SAAKT,oBAAoB,CAACU,QAA1B;AACA,SAAKV,oBAAoB,CAACW,MAA1B;AACE,aAAO,IAAP;;AACF,SAAKX,oBAAoB,CAACY,GAA1B;AACA,SAAKZ,oBAAoB,CAACa,GAA1B;AACE,aACEd,UAAU,CAACe,YAAX,CAAwBT,UAAxB,KACAN,UAAU,CAACgB,UAAX,CAAsBV,UAAtB,CADA,IAEAN,UAAU,CAACiB,UAAX,CAAsBX,UAAtB,CAHF;;AAKF,SAAKL,oBAAoB,CAACiB,GAA1B;AACA,SAAKjB,oBAAoB,CAACkB,OAA1B;AACA,SAAKlB,oBAAoB,CAACmB,GAA1B;AACA,SAAKnB,oBAAoB,CAACoB,GAA1B;AACA,SAAKpB,oBAAoB,CAACqB,GAA1B;AACE,aAAOtB,UAAU,CAACe,YAAX,CAAwBT,UAAxB,CAAP;;AACF,SAAKL,oBAAoB,CAACsB,IAA1B;AACE,aAAO,KAAP;AACF;AAvBF;AAyBD,CA7BM;AA+BP,OAAO,IAAMC,kBAAkB,GAAG,CAChCC,OADgC,EAEhCpB,aAFgC,KAGnBoB,OAAO,CAACC,MAAR,CAAeC,CAAC,IAAIvB,gBAAgB,CAACC,aAAD,EAAgBsB,CAAC,CAACxB,IAAlB,CAApC,CAHR;AAKP,OAAO,IAAMyB,uBAAuB,GAAG,CACrCH,OADqC,EAErCpB,aAFqC,EAGrCwB,QAHqC,EAIrCC,MAJqC,KAMrCN,kBAAkB,CAACC,OAAD,EAAUpB,aAAV,CAAlB,CACG0B,GADH,CACO;AAAA,MAAC;AAAEC,IAAAA;AAAF,GAAD;AAAA,SAAcA,IAAd;AAAA,CADP,EAEGN,MAFH,CAEUM,IAAI,IAAKH,QAAQ,CAACI,QAAT,CAAkBD,IAAlB,IAA0B,CAACF,MAA3B,GAAoCA,MAFvD,CANK;AAUP,eAAe;AACb5B,EAAAA,iBADa;AAEbsB,EAAAA,kBAFa;AAGbI,EAAAA;AAHa,CAAf","sourcesContent":["import type { Column } from '@deephaven/jsapi-shim';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport AggregationOperation from './AggregationOperation';\n\n/**\n * Check if an operation requires a rollup/table grouping\n * @param type The operation to check\n * @returns True if this operation applies to the whole table, false if applies to columns\n */\nexport const isRollupOperation = (type: AggregationOperation): boolean => {\n switch (type) {\n // currently no rollup only operations, but there has been in the past\n default:\n return false;\n }\n};\n\n/**\n * Check if an operation is valid against the given column type\n * @param operationType The operation to check\n * @param columnType The column type to check against\n */\nexport const isValidOperation = (\n operationType: AggregationOperation,\n columnType: string\n): boolean => {\n switch (operationType) {\n case AggregationOperation.COUNT:\n case AggregationOperation.FIRST:\n case AggregationOperation.LAST:\n case AggregationOperation.COUNT_DISTINCT:\n case AggregationOperation.DISTINCT:\n case AggregationOperation.UNIQUE:\n return true;\n case AggregationOperation.MIN:\n case AggregationOperation.MAX:\n return (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isDateType(columnType) ||\n TableUtils.isTextType(columnType)\n );\n case AggregationOperation.SUM:\n case AggregationOperation.ABS_SUM:\n case AggregationOperation.VAR:\n case AggregationOperation.AVG:\n case AggregationOperation.STD:\n return TableUtils.isNumberType(columnType);\n case AggregationOperation.SKIP:\n return false;\n // No default case - if AggregationOperation is added, we'll get a compile time error\n }\n};\n\nexport const filterValidColumns = (\n columns: Column[],\n operationType: AggregationOperation\n): Column[] => columns.filter(c => isValidOperation(operationType, c.type));\n\nexport const getOperationColumnNames = (\n columns: Column[],\n operationType: AggregationOperation,\n selected: string[],\n invert: boolean\n): string[] =>\n filterValidColumns(columns, operationType)\n .map(({ name }) => name)\n .filter(name => (selected.includes(name) ? !invert : invert));\n\nexport default {\n isRollupOperation,\n filterValidColumns,\n getOperationColumnNames,\n};\n"],"file":"AggregationUtils.js"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import { TableUtils } from '@deephaven/jsapi-utils';
|
|
2
3
|
import Log from '@deephaven/log';
|
|
3
|
-
import TableUtils from "../../TableUtils.js";
|
|
4
4
|
import { StringCondition, DateCondition, getLabelForNumberCondition, getLabelForDateCondition, getLabelForStringCondition, NumberCondition, getDefaultConditionForType, getLabelForBooleanCondition, BooleanCondition, CharCondition, getLabelForCharCondition } from "./ConditionalFormattingUtils.js";
|
|
5
5
|
var log = Log.module('ConditionEditor');
|
|
6
6
|
|