@deephaven/iris-grid 0.50.1-beta.5 → 0.51.1-alpha-theme-fix.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.d.ts +2 -2
- package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.d.ts +4 -4
- package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts +4 -4
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnHeaderGroup.js.map +1 -1
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.js.map +1 -1
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.js +12 -0
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridBottomBar.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCellRendererUtils.js.map +1 -1
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridDataBarCellRenderer.js.map +1 -1
- package/dist/IrisGridIcons.js.map +1 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.d.ts +2 -3
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +138 -0
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +9 -0
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTextCellRenderer.js.map +1 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.js +3 -0
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/MissingKeyError.js.map +1 -1
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/TableViewportUpdater.js +6 -1
- package/dist/TableViewportUpdater.js.map +1 -1
- package/dist/ToastBottomBar.js.map +1 -1
- package/dist/TreeTableViewportUpdater.js.map +1 -1
- package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
- package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
- package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
- package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
- package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +5 -0
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/sidebar/AdvancedSettings.js.map +1 -1
- package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/DownloadServiceWorkerUtils.js.map +1 -1
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/RollupRows.d.ts +4 -4
- package/dist/sidebar/RollupRows.d.ts.map +1 -1
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.js +5 -0
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
- package/dist/sidebar/icons/BarIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
- package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
- package/dist/sidebar/icons/LineIcon.js.map +1 -1
- package/dist/sidebar/icons/PieIcon.js.map +1 -1
- package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.d.ts +4 -4
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts +7 -7
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts +7 -5
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts +5 -3
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts +5 -5
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RollupRows.js","names":["React","Component","classNames","FontAwesomeIcon","DragDropContext","Droppable","Checkbox","DraggableItemList","DragUtils","SearchInput","Tooltip","Button","vsTrash","dhSortAlphaDown","dhSortAlphaUp","TableUtils","memoize","debounce","Log","assertNotNull","log","module","DEBOUNCE_SEARCH","GROUPED_LIST_ID","UNGROUPED_LIST_ID","RollupRows","renderColumn","item","isClone","selectedCount","text","name","badgeText","undefined","className","renderTextItem","addGroupings","currentGroupings","newGroupings","index","length","insertIndex","groupings","filter","grouping","i","includes","splice","isGroupable","column","isDecimalType","type","constructor","props","searchFilter","columns","getSortedUngroupedColumns","selectedRanges","focusIndex","toLowerCase","push","setState","ungroupedSelectedRanges","ungroupedList","current","scrollToItem","groupedColumns","find","sort","sortColumns","SORT","ASCENDING","handleDeleteClicked","bind","handleSearchChange","handleUngroupedSelect","handleUngroupedSelectionChange","handleDragStart","handleDragEnd","handleGroupedSelectionChange","handleShowConstituentsChange","handleShowNonAggregatedColumnsChange","handleSortAscending","handleSortDescending","renderGroupedItem","createRef","groupedList","config","showConstituents","showNonAggregatedColumns","state","groupedSelectedRanges","dragSource","componentDidUpdate","prevProps","prevState","updateFromConfig","sendChange","componentWillUnmount","search","cancel","event","target","value","resetSelection","DESCENDING","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"],"sources":["../../src/sidebar/RollupRows.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { ChangeEvent, Component, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n DragDropContext,\n DraggableLocation,\n DragStart,\n Droppable,\n DropResult,\n} from 'react-beautiful-dnd';\nimport {\n Checkbox,\n DraggableItemList,\n DragUtils,\n SearchInput,\n Tooltip,\n Range,\n RenderItemProps,\n Button,\n} from '@deephaven/components';\nimport { vsTrash, dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport { TableUtils, SortDirection } from '@deephaven/jsapi-utils';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { assertNotNull } from '@deephaven/utils';\nimport './RollupRows.scss';\nimport type { Column } from '@deephaven/jsapi-types';\nimport IrisGridModel from '../IrisGridModel';\nimport { ColumnName } from '../CommonTypes';\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\nexport interface UIRollupConfig {\n columns: ColumnName[];\n showConstituents: boolean;\n showNonAggregatedColumns: boolean;\n includeDescriptions: true;\n}\n\ninterface RollupRowsProps {\n model: IrisGridModel;\n onChange: (rollupConfig: UIRollupConfig) => void;\n config: UIRollupConfig | null;\n}\n\ninterface RollupRowsState {\n ungroupedSelectedRanges: Range[];\n columns: ColumnName[];\n groupedSelectedRanges: Range[];\n searchFilter: string;\n showConstituents: boolean;\n showNonAggregatedColumns: boolean;\n dragSource: DraggableLocation | null;\n sort: SortDirection;\n}\n\nclass RollupRows extends Component<RollupRowsProps, RollupRowsState> {\n static SORT = Object.freeze({\n ASCENDING: 'ASC',\n DESCENDING: 'DESC',\n });\n\n static defaultProps = {\n config: null,\n onChange: (): void => undefined,\n };\n\n static renderColumn({\n item,\n isClone,\n selectedCount,\n }: RenderItemProps<Column> & {\n isClone?: boolean;\n selectedCount?: number;\n }): ReactElement {\n const text = item?.name;\n const badgeText =\n isClone !== undefined && isClone ? `${selectedCount}` : undefined;\n const className =\n isClone !== undefined && isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static addGroupings(\n currentGroupings: string[],\n newGroupings: string[],\n index: number = currentGroupings.length\n ): string[] {\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: Column): boolean {\n return !TableUtils.isDecimalType(column.type);\n }\n\n constructor(props: RollupRowsProps) {\n super(props);\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 =\n this.handleUngroupedSelectionChange.bind(this);\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleGroupedSelectionChange =\n this.handleGroupedSelectionChange.bind(this);\n this.handleShowConstituentsChange =\n this.handleShowConstituentsChange.bind(this);\n this.handleShowNonAggregatedColumnsChange =\n this.handleShowNonAggregatedColumnsChange.bind(this);\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(\n prevProps: RollupRowsProps,\n prevState: RollupRowsState\n ): void {\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(): void {\n this.search.cancel();\n }\n\n ungroupedList: RefObject<DraggableItemList<Column>>;\n\n groupedList: RefObject<DraggableItemList<string>>;\n\n handleSearchChange(event: ChangeEvent<HTMLInputElement>): void {\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(): void {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.ASCENDING\n ? null\n : (RollupRows.SORT.ASCENDING as SortDirection),\n }));\n }\n\n handleSortDescending(): void {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.DESCENDING\n ? null\n : (RollupRows.SORT.DESCENDING as SortDirection),\n }));\n }\n\n resetSelection(): void {\n this.setState({ ungroupedSelectedRanges: [], groupedSelectedRanges: [] });\n }\n\n search = debounce((searchFilter: string) => {\n const columns = this.getSortedUngroupedColumns();\n const selectedRanges = [] as Range[];\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 assertNotNull(focusIndex);\n this.setState({ ungroupedSelectedRanges: selectedRanges });\n\n if (selectedRanges.length > 0 && this.ungroupedList.current) {\n this.ungroupedList.current.scrollToItem(focusIndex);\n }\n }, DEBOUNCE_SEARCH);\n\n handleDragStart(e: DragStart): void {\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: DropResult): void {\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] as Range,\n ];\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [] as Range[],\n groupedSelectedRanges: newSelectedRanges,\n };\n }\n );\n this.resetSelection();\n }\n\n handleUngroupedSelect(itemIndex: number): void {\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: Range[]): void {\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: Range[]): void {\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: number): void {\n this.setState(({ columns }) => {\n const newColumns = columns.slice();\n newColumns.splice(index, 1);\n return { columns: newColumns };\n });\n }\n\n handleShowConstituentsChange(): void {\n this.setState(({ showConstituents }) => ({\n showConstituents: !showConstituents,\n }));\n }\n\n handleShowNonAggregatedColumnsChange(): void {\n this.setState(({ showNonAggregatedColumns }) => ({\n showNonAggregatedColumns: !showNonAggregatedColumns,\n }));\n }\n\n updateFromConfig(): void {\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(): void {\n const { onChange } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n onChange({\n columns,\n showConstituents,\n showNonAggregatedColumns,\n } as UIRollupConfig);\n }\n\n getCachedUngroupedColumns = memoize(\n (\n columns: readonly Column[],\n groupedColumns: readonly ColumnName[]\n ): readonly Column[] =>\n columns.filter(\n column =>\n RollupRows.isGroupable(column) &&\n groupedColumns.find(name => name === column.name) == null\n )\n );\n\n getCachedSortedColumns = memoize(\n (columns: readonly Column[], sort?: SortDirection): readonly Column[] =>\n sort == null\n ? [...columns]\n : TableUtils.sortColumns(columns, sort === RollupRows.SORT.ASCENDING)\n );\n\n getUngroupedColumns(): readonly Column[] {\n const { model } = this.props;\n const { columns } = this.state;\n const { originalColumns } = model;\n\n return this.getCachedUngroupedColumns(originalColumns, columns);\n }\n\n getSortedUngroupedColumns(): readonly Column[] {\n const { sort } = this.state;\n const columns = this.getUngroupedColumns();\n return this.getCachedSortedColumns(columns, sort);\n }\n\n renderGroupedItem({\n item,\n itemIndex,\n isClone,\n selectedCount,\n }: RenderItemProps<string> & {\n isClone?: boolean;\n selectedCount?: number;\n }): ReactElement {\n const indent =\n isClone !== undefined && isClone ? '' : '\\u00A0\\u00A0'.repeat(itemIndex);\n const text = `${indent}${item}`;\n const badgeText =\n isClone !== undefined && isClone ? `${selectedCount}` : undefined;\n const className =\n isClone !== undefined && isClone ? 'item-list-item-clone' : '';\n return (\n <>\n {DraggableItemList.renderTextItem({ text, badgeText, className })}\n {(isClone === undefined || !isClone) && (\n <Button\n kind=\"ghost\"\n className=\"btn btn-link btn-link-icon btn-delete-grouping float-right\"\n onClick={() => this.handleDeleteClicked(itemIndex)}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </Button>\n )}\n </>\n );\n }\n\n render(): ReactElement {\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 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 To create a rollup, drag columns from the list below and\n drop them into this area.\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 : undefined\n }\n placeholder=\"Find column...\"\n onChange={this.handleSearchChange}\n />\n <Button\n kind=\"ghost\"\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 </Button>\n <Button\n kind=\"ghost\"\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 </Button>\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\nexport default RollupRows;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RollupRows.js","names":["React","Component","classNames","FontAwesomeIcon","DragDropContext","Droppable","Checkbox","DraggableItemList","DragUtils","SearchInput","Tooltip","Button","vsTrash","dhSortAlphaDown","dhSortAlphaUp","TableUtils","memoize","debounce","Log","assertNotNull","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","DEBOUNCE_SEARCH","GROUPED_LIST_ID","UNGROUPED_LIST_ID","RollupRows","renderColumn","_ref","item","isClone","selectedCount","text","name","badgeText","undefined","concat","className","renderTextItem","addGroupings","currentGroupings","newGroupings","index","arguments","length","insertIndex","groupings","filter","grouping","i","includes","splice","isGroupable","column","isDecimalType","type","constructor","props","_defineProperty","searchFilter","columns","getSortedUngroupedColumns","selectedRanges","focusIndex","toLowerCase","push","setState","ungroupedSelectedRanges","ungroupedList","current","scrollToItem","groupedColumns","find","sort","sortColumns","SORT","ASCENDING","handleDeleteClicked","bind","handleSearchChange","handleUngroupedSelect","handleUngroupedSelectionChange","handleDragStart","handleDragEnd","handleGroupedSelectionChange","handleShowConstituentsChange","handleShowNonAggregatedColumnsChange","handleSortAscending","handleSortDescending","renderGroupedItem","createRef","groupedList","config","showConstituents","showNonAggregatedColumns","state","groupedSelectedRanges","dragSource","componentDidUpdate","prevProps","prevState","updateFromConfig","sendChange","componentWillUnmount","search","cancel","event","target","value","resetSelection","_ref2","_ref3","DESCENDING","e","debug","document","documentElement","classList","add","source","remove","destination","droppableId","_ref4","newColumns","reorder","isSameList","destinationIndex","_ref5","sourceItems","map","c","sourceRanges","draggedItems","adjustDestinationIndex","newSelectedRanges","itemIndex","_ref6","debug2","_ref7","stateUngroupedSelectedRanges","_ref8","stateGroupedSelectedRanges","_ref9","slice","_ref10","_ref11","onChange","getUngroupedColumns","model","originalColumns","getCachedUngroupedColumns","getCachedSortedColumns","_ref12","indent","repeat","children","kind","onClick","icon","render","ungroupedColumns","groupListHeight","DEFAULT_ROW_HEIGHT","ungroupMaxListHeight","ungroupMinListHeight","Math","min","role","tabIndex","onDragEnd","onDragStart","provided","snapshot","_objectSpread","draggingFromThisWith","isDraggingOver","draggingOverWith","ref","innerRef","droppableProps","draggingItemClassName","draggablePrefix","itemCount","items","offset","onSelectionChange","renderItem","style","height","isMultiSelect","matchCount","placeholder","active","onSelect","maxHeight","minHeight","isDropDisabled","checked","Object","freeze"],"sources":["../../src/sidebar/RollupRows.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { ChangeEvent, Component, ReactElement, RefObject } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n DragDropContext,\n DraggableLocation,\n DragStart,\n Droppable,\n DropResult,\n} from 'react-beautiful-dnd';\nimport {\n Checkbox,\n DraggableItemList,\n DragUtils,\n SearchInput,\n Tooltip,\n Range,\n RenderItemProps,\n Button,\n} from '@deephaven/components';\nimport { vsTrash, dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport { TableUtils, SortDirection } from '@deephaven/jsapi-utils';\nimport memoize from 'memoizee';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { assertNotNull } from '@deephaven/utils';\nimport './RollupRows.scss';\nimport type { Column } from '@deephaven/jsapi-types';\nimport IrisGridModel from '../IrisGridModel';\nimport { ColumnName } from '../CommonTypes';\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\nexport interface UIRollupConfig {\n columns: ColumnName[];\n showConstituents: boolean;\n showNonAggregatedColumns: boolean;\n includeDescriptions: true;\n}\n\ninterface RollupRowsProps {\n model: IrisGridModel;\n onChange: (rollupConfig: UIRollupConfig) => void;\n config: UIRollupConfig | null;\n}\n\ninterface RollupRowsState {\n ungroupedSelectedRanges: readonly Range[];\n columns: ColumnName[];\n groupedSelectedRanges: readonly Range[];\n searchFilter: string;\n showConstituents: boolean;\n showNonAggregatedColumns: boolean;\n dragSource: DraggableLocation | null;\n sort: SortDirection;\n}\n\nclass RollupRows extends Component<RollupRowsProps, RollupRowsState> {\n static SORT = Object.freeze({\n ASCENDING: 'ASC',\n DESCENDING: 'DESC',\n });\n\n static defaultProps = {\n config: null,\n onChange: (): void => undefined,\n };\n\n static renderColumn({\n item,\n isClone,\n selectedCount,\n }: RenderItemProps<Column> & {\n isClone?: boolean;\n selectedCount?: number;\n }): ReactElement {\n const text = item?.name;\n const badgeText =\n isClone !== undefined && isClone ? `${selectedCount}` : undefined;\n const className =\n isClone !== undefined && isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static addGroupings(\n currentGroupings: string[],\n newGroupings: string[],\n index: number = currentGroupings.length\n ): string[] {\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: Column): boolean {\n return !TableUtils.isDecimalType(column.type);\n }\n\n constructor(props: RollupRowsProps) {\n super(props);\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 =\n this.handleUngroupedSelectionChange.bind(this);\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleGroupedSelectionChange =\n this.handleGroupedSelectionChange.bind(this);\n this.handleShowConstituentsChange =\n this.handleShowConstituentsChange.bind(this);\n this.handleShowNonAggregatedColumnsChange =\n this.handleShowNonAggregatedColumnsChange.bind(this);\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(\n prevProps: RollupRowsProps,\n prevState: RollupRowsState\n ): void {\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(): void {\n this.search.cancel();\n }\n\n ungroupedList: RefObject<DraggableItemList<Column>>;\n\n groupedList: RefObject<DraggableItemList<string>>;\n\n handleSearchChange(event: ChangeEvent<HTMLInputElement>): void {\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(): void {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.ASCENDING\n ? null\n : (RollupRows.SORT.ASCENDING as SortDirection),\n }));\n }\n\n handleSortDescending(): void {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.DESCENDING\n ? null\n : (RollupRows.SORT.DESCENDING as SortDirection),\n }));\n }\n\n resetSelection(): void {\n this.setState({ ungroupedSelectedRanges: [], groupedSelectedRanges: [] });\n }\n\n search = debounce((searchFilter: string) => {\n const columns = this.getSortedUngroupedColumns();\n const selectedRanges = [] as Range[];\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 assertNotNull(focusIndex);\n this.setState({ ungroupedSelectedRanges: selectedRanges });\n\n if (selectedRanges.length > 0 && this.ungroupedList.current) {\n this.ungroupedList.current.scrollToItem(focusIndex);\n }\n }, DEBOUNCE_SEARCH);\n\n handleDragStart(e: DragStart): void {\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: DropResult): void {\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] as Range,\n ];\n return {\n columns: newColumns,\n ungroupedSelectedRanges: [] as Range[],\n groupedSelectedRanges: newSelectedRanges,\n };\n }\n );\n this.resetSelection();\n }\n\n handleUngroupedSelect(itemIndex: number): void {\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(\n ungroupedSelectedRanges: readonly Range[]\n ): void {\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: readonly Range[]): void {\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: number): void {\n this.setState(({ columns }) => {\n const newColumns = columns.slice();\n newColumns.splice(index, 1);\n return { columns: newColumns };\n });\n }\n\n handleShowConstituentsChange(): void {\n this.setState(({ showConstituents }) => ({\n showConstituents: !showConstituents,\n }));\n }\n\n handleShowNonAggregatedColumnsChange(): void {\n this.setState(({ showNonAggregatedColumns }) => ({\n showNonAggregatedColumns: !showNonAggregatedColumns,\n }));\n }\n\n updateFromConfig(): void {\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(): void {\n const { onChange } = this.props;\n const { columns, showConstituents, showNonAggregatedColumns } = this.state;\n onChange({\n columns,\n showConstituents,\n showNonAggregatedColumns,\n } as UIRollupConfig);\n }\n\n getCachedUngroupedColumns = memoize(\n (\n columns: readonly Column[],\n groupedColumns: readonly ColumnName[]\n ): readonly Column[] =>\n columns.filter(\n column =>\n RollupRows.isGroupable(column) &&\n groupedColumns.find(name => name === column.name) == null\n )\n );\n\n getCachedSortedColumns = memoize(\n (columns: readonly Column[], sort?: SortDirection): readonly Column[] =>\n sort == null\n ? [...columns]\n : TableUtils.sortColumns(columns, sort === RollupRows.SORT.ASCENDING)\n );\n\n getUngroupedColumns(): readonly Column[] {\n const { model } = this.props;\n const { columns } = this.state;\n const { originalColumns } = model;\n\n return this.getCachedUngroupedColumns(originalColumns, columns);\n }\n\n getSortedUngroupedColumns(): readonly Column[] {\n const { sort } = this.state;\n const columns = this.getUngroupedColumns();\n return this.getCachedSortedColumns(columns, sort);\n }\n\n renderGroupedItem({\n item,\n itemIndex,\n isClone,\n selectedCount,\n }: RenderItemProps<string> & {\n isClone?: boolean;\n selectedCount?: number;\n }): ReactElement {\n const indent =\n isClone !== undefined && isClone ? '' : '\\u00A0\\u00A0'.repeat(itemIndex);\n const text = `${indent}${item}`;\n const badgeText =\n isClone !== undefined && isClone ? `${selectedCount}` : undefined;\n const className =\n isClone !== undefined && isClone ? 'item-list-item-clone' : '';\n return (\n <>\n {DraggableItemList.renderTextItem({ text, badgeText, className })}\n {(isClone === undefined || !isClone) && (\n <Button\n kind=\"ghost\"\n className=\"btn btn-link btn-link-icon btn-delete-grouping float-right\"\n onClick={() => this.handleDeleteClicked(itemIndex)}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </Button>\n )}\n </>\n );\n }\n\n render(): ReactElement {\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 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 To create a rollup, drag columns from the list below and\n drop them into this area.\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 : undefined\n }\n placeholder=\"Find column...\"\n onChange={this.handleSearchChange}\n />\n <Button\n kind=\"ghost\"\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 </Button>\n <Button\n kind=\"ghost\"\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 </Button>\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\nexport default RollupRows;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectDistinctBuilder.js","names":["React","Component","deepEqual","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","Button","Log","log","module","SelectDistinctBuilder","constructor","props","handleAddColumnClick","bind","handleDeleteColumn","handleDropdownChanged","model","selectDistinctColumns","state","inputs","length","columns","originalColumns","componentDidUpdate","prevProps","prevState","onChange","filteredInputs","filter","val","setState","prevInputs","index","input","inputIndex","event","debug","value","target","renderInputs","map","options","name","includes","render","disableAddButton","undefined"],"sources":["../../src/sidebar/SelectDistinctBuilder.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport deepEqual from 'deep-equal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsTrash } from '@deephaven/icons';\nimport { Button } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport type { Column } from '@deephaven/jsapi-types';\nimport { ModelIndex } from '@deephaven/grid';\nimport IrisGridModel from '../IrisGridModel';\n\nimport './SelectDistinctBuilder.scss';\nimport { ColumnName } from '../CommonTypes';\n\nconst log = Log.module('SelectDistinctBuilder');\n\ninterface SelectDistinctBuilderProps {\n model: IrisGridModel;\n selectDistinctColumns: readonly ColumnName[];\n onChange: (newStr: readonly string[]) => void;\n}\ninterface SelectDistinctBuilderState {\n inputs: readonly string[];\n columns: readonly Column[];\n}\nclass SelectDistinctBuilder extends Component<\n SelectDistinctBuilderProps,\n SelectDistinctBuilderState\n> {\n static defaultProps = {\n selectDistinctColumns: [],\n onChange: (): void => undefined,\n };\n\n constructor(props: SelectDistinctBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleDropdownChanged = this.handleDropdownChanged.bind(this);\n\n const { model, selectDistinctColumns } = this.props;\n\n this.state = {\n inputs:\n selectDistinctColumns.length > 0 ? [...selectDistinctColumns] : [''],\n columns: model.originalColumns,\n };\n }\n\n componentDidUpdate(\n prevProps: SelectDistinctBuilderProps,\n prevState: SelectDistinctBuilderState\n ): void {\n const { inputs } = this.state;\n const { onChange } = this.props;\n if (prevState.inputs !== inputs) {\n const filteredInputs = inputs.filter(val => val !== '');\n if (\n !deepEqual(\n prevState.inputs.filter(val => val !== ''),\n filteredInputs\n )\n ) {\n onChange(filteredInputs);\n }\n }\n }\n\n handleAddColumnClick(): void {\n this.setState(({ inputs: prevInputs }) => ({\n inputs: [...prevInputs, ''],\n }));\n }\n\n handleDeleteColumn(index: ModelIndex): void {\n this.setState(({ inputs }) => ({\n inputs:\n inputs.length === 1 && index === 0\n ? ['']\n : inputs.filter((input, inputIndex) => index !== inputIndex),\n }));\n }\n\n handleDropdownChanged(\n index: number,\n event: React.ChangeEvent<HTMLSelectElement>\n ): void {\n log.debug('handleDropdownChanged', index, event);\n const { value } = event.target;\n this.setState(({ inputs: prevInputs }) => {\n const inputs = [...prevInputs];\n inputs[index] = value;\n return { inputs };\n });\n }\n\n renderInputs(): ReactElement[] {\n const { columns, inputs } = this.state;\n\n return inputs.map((value, index) => {\n const options = columns\n .filter(({ name }) => name === value || !inputs.includes(name))\n .map(({ name }) => (\n <option value={name} key={name}>\n {name}\n </option>\n ));\n return (\n // eslint-disable-next-line react/no-array-index-key\n <div className=\"form-inline px-3 pb-3\" key={index}>\n <select\n className=\"form-control custom-select col\"\n value={value}\n onChange={event => this.handleDropdownChanged(index, event)}\n >\n <option value=\"\">Select a column</option>\n {options}\n </select>\n\n {(inputs.length > 1 || value !== '') && (\n <Button\n kind=\"ghost\"\n className=\"ml-1 px-2\"\n onClick={() => {\n this.handleDeleteColumn(index);\n }}\n icon={<FontAwesomeIcon icon={vsTrash} transform=\"grow-3\" />}\n tooltip=\"Delete column\"\n />\n )}\n </div>\n );\n });\n }\n\n render(): React.ReactElement {\n const { columns, inputs } = this.state;\n const disableAddButton = inputs.length >= columns.length;\n return (\n <div\n role=\"presentation\"\n className=\"select-distinct-builder-container h-100\"\n >\n <div className=\"select-distinct-title\">Display Unique Values From</div>\n\n {this.renderInputs()}\n\n <hr />\n\n <div className=\"pt-1 px-3\">\n <Button\n kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n disabled={disableAddButton}\n icon={dhNewCircleLargeFilled}\n >\n Add Additional Column\n </Button>\n </div>\n\n <div className=\"select-distinct-builder-footer\">\n <div className=\"select-distinct-builder-hint\">\n Display only unique values from the selected table columns. Note\n that this will reset any filters and display only the selected\n columns.\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default SelectDistinctBuilder;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAsB,OAAO;AACtD,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,sBAAsB,EAAEC,OAAO,QAAQ,kBAAkB;AAClE,SAASC,MAAM,QAAQ,uBAAuB;AAC9C,OAAOC,GAAG,MAAM,gBAAgB;AAAC;AAAA;AAAA;AAQjC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,uBAAuB,CAAC;AAW/C,MAAMC,qBAAqB,SAAST,SAAS,CAG3C;EAMAU,WAAW,CAACC,KAAiC,EAAE;IAC7C,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,oBAAoB,GAAG,IAAI,CAACA,oBAAoB,CAACC,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAACC,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACD,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAACE,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACF,IAAI,CAAC,IAAI,CAAC;IAElE,IAAM;MAAEG,KAAK;MAAEC;IAAsB,CAAC,GAAG,IAAI,CAACN,KAAK;IAEnD,IAAI,CAACO,KAAK,GAAG;MACXC,MAAM,EACJF,qBAAqB,CAACG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAGH,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;MACtEI,OAAO,EAAEL,KAAK,CAACM;IACjB,CAAC;EACH;EAEAC,kBAAkB,CAChBC,SAAqC,EACrCC,SAAqC,EAC/B;IACN,IAAM;MAAEN;IAAO,CAAC,GAAG,IAAI,CAACD,KAAK;IAC7B,IAAM;MAAEQ;IAAS,CAAC,GAAG,IAAI,CAACf,KAAK;IAC/B,IAAIc,SAAS,CAACN,MAAM,KAAKA,MAAM,EAAE;MAC/B,IAAMQ,cAAc,GAAGR,MAAM,CAACS,MAAM,CAACC,GAAG,IAAIA,GAAG,KAAK,EAAE,CAAC;MACvD,IACE,CAAC5B,SAAS,CACRwB,SAAS,CAACN,MAAM,CAACS,MAAM,CAACC,GAAG,IAAIA,GAAG,KAAK,EAAE,CAAC,EAC1CF,cAAc,CACf,EACD;QACAD,QAAQ,CAACC,cAAc,CAAC;MAC1B;IACF;EACF;EAEAf,oBAAoB,GAAS;IAC3B,IAAI,CAACkB,QAAQ,CAAC;MAAA,IAAC;QAAEX,MAAM,EAAEY;MAAW,CAAC;MAAA,OAAM;QACzCZ,MAAM,EAAE,CAAC,GAAGY,UAAU,EAAE,EAAE;MAC5B,CAAC;IAAA,CAAC,CAAC;EACL;EAEAjB,kBAAkB,CAACkB,KAAiB,EAAQ;IAC1C,IAAI,CAACF,QAAQ,CAAC;MAAA,IAAC;QAAEX;MAAO,CAAC;MAAA,OAAM;QAC7BA,MAAM,EACJA,MAAM,CAACC,MAAM,KAAK,CAAC,IAAIY,KAAK,KAAK,CAAC,GAC9B,CAAC,EAAE,CAAC,GACJb,MAAM,CAACS,MAAM,CAAC,CAACK,KAAK,EAAEC,UAAU,KAAKF,KAAK,KAAKE,UAAU;MACjE,CAAC;IAAA,CAAC,CAAC;EACL;EAEAnB,qBAAqB,CACnBiB,KAAa,EACbG,KAA2C,EACrC;IACN5B,GAAG,CAAC6B,KAAK,CAAC,uBAAuB,EAAEJ,KAAK,EAAEG,KAAK,CAAC;IAChD,IAAM;MAAEE;IAAM,CAAC,GAAGF,KAAK,CAACG,MAAM;IAC9B,IAAI,CAACR,QAAQ,CAAC,SAA4B;MAAA,IAA3B;QAAEX,MAAM,EAAEY;MAAW,CAAC;MACnC,IAAMZ,MAAM,GAAG,CAAC,GAAGY,UAAU,CAAC;MAC9BZ,MAAM,CAACa,KAAK,CAAC,GAAGK,KAAK;MACrB,OAAO;QAAElB;MAAO,CAAC;IACnB,CAAC,CAAC;EACJ;EAEAoB,YAAY,GAAmB;IAC7B,IAAM;MAAElB,OAAO;MAAEF;IAAO,CAAC,GAAG,IAAI,CAACD,KAAK;IAEtC,OAAOC,MAAM,CAACqB,GAAG,CAAC,CAACH,KAAK,EAAEL,KAAK,KAAK;MAClC,IAAMS,OAAO,GAAGpB,OAAO,CACpBO,MAAM,CAAC;QAAA,IAAC;UAAEc;QAAK,CAAC;QAAA,OAAKA,IAAI,KAAKL,KAAK,IAAI,CAAClB,MAAM,CAACwB,QAAQ,CAACD,IAAI,CAAC;MAAA,EAAC,CAC9DF,GAAG,CAAC;QAAA,IAAC;UAAEE;QAAK,CAAC;QAAA,oBACZ;UAAQ,KAAK,EAAEA,IAAK;UAAA,UACjBA;QAAI,GADmBA,IAAI,CAErB;MAAA,CACV,CAAC;MACJ;QAAA;QACE;QACA;UAAK,SAAS,EAAC,uBAAuB;UAAA,wBACpC;YACE,SAAS,EAAC,gCAAgC;YAC1C,KAAK,EAAEL,KAAM;YACb,QAAQ,EAAEF,KAAK,IAAI,IAAI,CAACpB,qBAAqB,CAACiB,KAAK,EAAEG,KAAK,CAAE;YAAA,wBAE5D;cAAQ,KAAK,EAAC,EAAE;cAAA,UAAC;YAAe,EAAS,EACxCM,OAAO;UAAA,EACD,EAER,CAACtB,MAAM,CAACC,MAAM,GAAG,CAAC,IAAIiB,KAAK,KAAK,EAAE,kBACjC,KAAC,MAAM;YACL,IAAI,EAAC,OAAO;YACZ,SAAS,EAAC,WAAW;YACrB,OAAO,EAAE,MAAM;cACb,IAAI,CAACvB,kBAAkB,CAACkB,KAAK,CAAC;YAChC,CAAE;YACF,IAAI,eAAE,KAAC,eAAe;cAAC,IAAI,EAAE5B,OAAQ;cAAC,SAAS,EAAC;YAAQ,EAAI;YAC5D,OAAO,EAAC;UAAe,EAE1B;QAAA,GApByC4B,KAAK;MAqB3C;IAEV,CAAC,CAAC;EACJ;EAEAY,MAAM,GAAuB;IAC3B,IAAM;MAAEvB,OAAO;MAAEF;IAAO,CAAC,GAAG,IAAI,CAACD,KAAK;IACtC,IAAM2B,gBAAgB,GAAG1B,MAAM,CAACC,MAAM,IAAIC,OAAO,CAACD,MAAM;IACxD,oBACE;MACE,IAAI,EAAC,cAAc;MACnB,SAAS,EAAC,yCAAyC;MAAA,wBAEnD;QAAK,SAAS,EAAC,uBAAuB;QAAA,UAAC;MAA0B,EAAM,EAEtE,IAAI,CAACmB,YAAY,EAAE,eAEpB,cAAM,eAEN;QAAK,SAAS,EAAC,WAAW;QAAA,uBACxB,KAAC,MAAM;UACL,IAAI,EAAC,OAAO;UACZ,SAAS,EAAC,gBAAgB;UAC1B,OAAO,EAAE,IAAI,CAAC3B,oBAAqB;UACnC,QAAQ,EAAEiC,gBAAiB;UAC3B,IAAI,EAAE1C,sBAAuB;UAAA,UAC9B;QAED;MAAS,EACL,eAEN;QAAK,SAAS,EAAC,gCAAgC;QAAA,uBAC7C;UAAK,SAAS,EAAC,8BAA8B;UAAA,UAAC;QAI9C;MAAM,EACF;IAAA,EACF;EAEV;AACF;AAAC,gBAnJKM,qBAAqB,kBAIH;EACpBQ,qBAAqB,EAAE,EAAE;EACzBS,QAAQ,EAAE,MAAYoB;AACxB,CAAC;AA8IH,eAAerC,qBAAqB"}
|
|
1
|
+
{"version":3,"file":"SelectDistinctBuilder.js","names":["React","Component","deepEqual","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","Button","Log","jsx","_jsx","jsxs","_jsxs","log","module","SelectDistinctBuilder","constructor","props","handleAddColumnClick","bind","handleDeleteColumn","handleDropdownChanged","model","selectDistinctColumns","state","inputs","length","columns","originalColumns","componentDidUpdate","prevProps","prevState","onChange","filteredInputs","filter","val","setState","_ref","prevInputs","index","_ref2","input","inputIndex","event","debug","value","target","_ref3","renderInputs","map","options","_ref4","name","includes","_ref5","children","className","kind","onClick","icon","transform","tooltip","render","disableAddButton","role","disabled","_defineProperty","undefined"],"sources":["../../src/sidebar/SelectDistinctBuilder.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport deepEqual from 'deep-equal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsTrash } from '@deephaven/icons';\nimport { Button } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport type { Column } from '@deephaven/jsapi-types';\nimport { ModelIndex } from '@deephaven/grid';\nimport IrisGridModel from '../IrisGridModel';\n\nimport './SelectDistinctBuilder.scss';\nimport { ColumnName } from '../CommonTypes';\n\nconst log = Log.module('SelectDistinctBuilder');\n\ninterface SelectDistinctBuilderProps {\n model: IrisGridModel;\n selectDistinctColumns: readonly ColumnName[];\n onChange: (newStr: readonly string[]) => void;\n}\ninterface SelectDistinctBuilderState {\n inputs: readonly string[];\n columns: readonly Column[];\n}\nclass SelectDistinctBuilder extends Component<\n SelectDistinctBuilderProps,\n SelectDistinctBuilderState\n> {\n static defaultProps = {\n selectDistinctColumns: [],\n onChange: (): void => undefined,\n };\n\n constructor(props: SelectDistinctBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleDropdownChanged = this.handleDropdownChanged.bind(this);\n\n const { model, selectDistinctColumns } = this.props;\n\n this.state = {\n inputs:\n selectDistinctColumns.length > 0 ? [...selectDistinctColumns] : [''],\n columns: model.originalColumns,\n };\n }\n\n componentDidUpdate(\n prevProps: SelectDistinctBuilderProps,\n prevState: SelectDistinctBuilderState\n ): void {\n const { inputs } = this.state;\n const { onChange } = this.props;\n if (prevState.inputs !== inputs) {\n const filteredInputs = inputs.filter(val => val !== '');\n if (\n !deepEqual(\n prevState.inputs.filter(val => val !== ''),\n filteredInputs\n )\n ) {\n onChange(filteredInputs);\n }\n }\n }\n\n handleAddColumnClick(): void {\n this.setState(({ inputs: prevInputs }) => ({\n inputs: [...prevInputs, ''],\n }));\n }\n\n handleDeleteColumn(index: ModelIndex): void {\n this.setState(({ inputs }) => ({\n inputs:\n inputs.length === 1 && index === 0\n ? ['']\n : inputs.filter((input, inputIndex) => index !== inputIndex),\n }));\n }\n\n handleDropdownChanged(\n index: number,\n event: React.ChangeEvent<HTMLSelectElement>\n ): void {\n log.debug('handleDropdownChanged', index, event);\n const { value } = event.target;\n this.setState(({ inputs: prevInputs }) => {\n const inputs = [...prevInputs];\n inputs[index] = value;\n return { inputs };\n });\n }\n\n renderInputs(): ReactElement[] {\n const { columns, inputs } = this.state;\n\n return inputs.map((value, index) => {\n const options = columns\n .filter(({ name }) => name === value || !inputs.includes(name))\n .map(({ name }) => (\n <option value={name} key={name}>\n {name}\n </option>\n ));\n return (\n // eslint-disable-next-line react/no-array-index-key\n <div className=\"form-inline px-3 pb-3\" key={index}>\n <select\n className=\"form-control custom-select col\"\n value={value}\n onChange={event => this.handleDropdownChanged(index, event)}\n >\n <option value=\"\">Select a column</option>\n {options}\n </select>\n\n {(inputs.length > 1 || value !== '') && (\n <Button\n kind=\"ghost\"\n className=\"ml-1 px-2\"\n onClick={() => {\n this.handleDeleteColumn(index);\n }}\n icon={<FontAwesomeIcon icon={vsTrash} transform=\"grow-3\" />}\n tooltip=\"Delete column\"\n />\n )}\n </div>\n );\n });\n }\n\n render(): React.ReactElement {\n const { columns, inputs } = this.state;\n const disableAddButton = inputs.length >= columns.length;\n return (\n <div\n role=\"presentation\"\n className=\"select-distinct-builder-container h-100\"\n >\n <div className=\"select-distinct-title\">Display Unique Values From</div>\n\n {this.renderInputs()}\n\n <hr />\n\n <div className=\"pt-1 px-3\">\n <Button\n kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n disabled={disableAddButton}\n icon={dhNewCircleLargeFilled}\n >\n Add Additional Column\n </Button>\n </div>\n\n <div className=\"select-distinct-builder-footer\">\n <div className=\"select-distinct-builder-hint\">\n Display only unique values from the selected table columns. Note\n that this will reset any filters and display only the selected\n columns.\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default SelectDistinctBuilder;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableCsvExporter.js","names":["React","Component","ClassNames","FontAwesomeIcon","Button","Checkbox","LoadingSpinner","RadioGroup","RadioItem","GridRange","GridUtils","vsWarning","TimeUtils","shortid","Log","IrisGridUtils","log","module","TableCsvExporter","getDateString","dh","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadRowOptionChanged","handleCustomizedDownloadRowOptionChanged","handleCustomizedDownloadRowsChanged","handleIncludeColumnHeadersChanged","handleIncludeHiddenColumnsChanged","handleUseUnformattedValuesChanged","model","name","state","fileName","downloadRowOption","DOWNLOAD_ROW_OPTIONS","ALL_ROWS","customizedDownloadRowOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","includeColumnHeaders","includeHiddenColumns","useUnformattedValues","errorMessage","id","generate","getSnapshotRanges","selectedRanges","rowCount","columnCount","snapshotRanges","push","SELECTED_ROWS","map","range","startColumn","endColumn","sort","rangeA","rangeB","startRow","CUSTOMIZED_ROWS","Math","min","LAST","max","getModelRanges","ranges","userColumnWidths","movedColumns","hiddenColumns","getHiddenColumns","modelRanges","length","subtractRanges","makeColumn","subtractRangesFromRanges","resetDownloadState","setState","isDownloading","onDownloadStart","onDownload","onCancel","validateOptionInput","frozenTable","export","tableSubscription","setViewport","getViewportData","error","event","target","value","parseInt","render","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","toString","replace","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","width","undefined"],"sources":["../../src/sidebar/TableCsvExporter.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n Checkbox,\n LoadingSpinner,\n RadioGroup,\n RadioItem,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport type {\n dh as DhType,\n Table,\n TableViewportSubscription,\n} from '@deephaven/jsapi-types';\nimport { TimeUtils } from '@deephaven/utils';\nimport shortid from 'shortid';\nimport './TableCsvExporter.scss';\nimport Log from '@deephaven/log';\nimport IrisGridModel from '../IrisGridModel';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableCsvExporter');\ninterface TableCsvExporterProps {\n model: IrisGridModel;\n name: string;\n userColumnWidths: ModelSizeMap;\n movedColumns: readonly MoveOperation[];\n isDownloading: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number;\n onDownloadStart: () => void;\n onDownload: (\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ) => void;\n onCancel: () => void;\n selectedRanges: readonly GridRange[];\n}\n\ninterface TableCsvExporterState {\n fileName: string;\n\n downloadRowOption: string;\n customizedDownloadRowOption: string;\n customizedDownloadRows: number;\n\n includeColumnHeaders: boolean;\n includeHiddenColumns: boolean;\n useUnformattedValues: boolean;\n\n errorMessage: React.ReactNode;\n id: string;\n}\nclass TableCsvExporter extends Component<\n TableCsvExporterProps,\n TableCsvExporterState\n> {\n static FILENAME_DATE_FORMAT = 'yyyy-MM-dd-HHmmss';\n\n static DOWNLOAD_STATUS = {\n INITIATING: 'INITIATING',\n DOWNLOADING: 'DOWNLOADING',\n FINISHED: 'FINISHED',\n CANCELED: 'CANCELED',\n };\n\n static DOWNLOAD_ROW_OPTIONS = {\n ALL_ROWS: 'ALL_ROWS',\n SELECTED_ROWS: 'SELECTED_ROWS',\n CUSTOMIZED_ROWS: 'CUSTOMIZED_ROWS',\n };\n\n static CUSTOMIZED_ROWS_OPTIONS = {\n FIRST: 'FIRST',\n LAST: 'LAST',\n };\n\n static DEFAULT_DOWNLOAD_ROWS = 100;\n\n static defaultProps = {\n onDownloadStart: (): void => undefined,\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selectedRanges: [],\n };\n\n static getDateString(dh: DhType): string {\n return dh.i18n.DateTimeFormat.format(\n TableCsvExporter.FILENAME_DATE_FORMAT,\n new Date()\n );\n }\n\n constructor(props: TableCsvExporterProps) {\n super(props);\n\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadRowOptionChanged =\n this.handleDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowOptionChanged =\n this.handleCustomizedDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowsChanged =\n this.handleCustomizedDownloadRowsChanged.bind(this);\n this.handleIncludeColumnHeadersChanged =\n this.handleIncludeColumnHeadersChanged.bind(this);\n this.handleIncludeHiddenColumnsChanged =\n this.handleIncludeHiddenColumnsChanged.bind(this);\n this.handleUseUnformattedValuesChanged =\n this.handleUseUnformattedValuesChanged.bind(this);\n\n const { model, name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString(model.dh)}.csv`,\n\n downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,\n customizedDownloadRowOption:\n TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n includeColumnHeaders: true,\n includeHiddenColumns: false,\n useUnformattedValues: false,\n\n errorMessage: null,\n id: shortid.generate(),\n };\n }\n\n getSnapshotRanges(): GridRange[] {\n const { model, selectedRanges } = this.props;\n const {\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount, columnCount } = model;\n let snapshotRanges = [] as GridRange[];\n switch (downloadRowOption) {\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:\n snapshotRanges = selectedRanges\n .map(range => ({\n ...range,\n startColumn: 0,\n endColumn: columnCount - 1,\n }))\n .sort((rangeA, rangeB) => {\n if (rangeA.startRow != null && rangeB.startRow != null) {\n return rangeA.startRow - rangeB.startRow;\n }\n return 0;\n }) as GridRange[];\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadRowOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n 0,\n 0,\n columnCount - 1,\n Math.min(customizedDownloadRows - 1, rowCount - 1)\n )\n );\n break;\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.LAST:\n snapshotRanges.push(\n new GridRange(\n 0,\n Math.max(0, rowCount - customizedDownloadRows),\n columnCount - 1,\n rowCount - 1\n )\n );\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n return snapshotRanges;\n }\n\n getModelRanges(ranges: readonly GridRange[]): GridRange[] {\n const { userColumnWidths, movedColumns } = this.props;\n const { includeHiddenColumns } = this.state;\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (!includeHiddenColumns && hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n return modelRanges;\n }\n\n resetDownloadState(): void {\n this.setState({ errorMessage: null });\n }\n\n async handleDownloadClick(): Promise<void> {\n const { model, isDownloading, onDownloadStart, onDownload, onCancel } =\n this.props;\n const { fileName, includeColumnHeaders, useUnformattedValues } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n\n const snapshotRanges = this.getSnapshotRanges();\n const modelRanges = this.getModelRanges(snapshotRanges);\n if (this.validateOptionInput()) {\n onDownloadStart();\n try {\n const frozenTable = await model.export();\n const tableSubscription = frozenTable.setViewport(0, 0);\n await tableSubscription.getViewportData();\n onDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n } catch (error) {\n log.error('CSV download failed', error);\n\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> {`${error}`}\n </p>\n ),\n });\n onCancel();\n }\n }\n }\n\n handleDownloadRowOptionChanged(\n event: React.ChangeEvent<HTMLInputElement>\n ): void {\n this.setState({ downloadRowOption: event.target.value });\n }\n\n handleCustomizedDownloadRowOptionChanged(\n event: React.ChangeEvent<HTMLSelectElement>\n ): void {\n this.setState({ customizedDownloadRowOption: event.target.value });\n }\n\n handleCustomizedDownloadRowsChanged(\n event: React.ChangeEvent<HTMLInputElement>\n ): void {\n this.setState({ customizedDownloadRows: parseInt(event.target.value, 10) });\n }\n\n handleIncludeColumnHeadersChanged(): void {\n this.setState(({ includeColumnHeaders }) => ({\n includeColumnHeaders: !includeColumnHeaders,\n }));\n }\n\n handleIncludeHiddenColumnsChanged(): void {\n this.setState(({ includeHiddenColumns }) => ({\n includeHiddenColumns: !includeHiddenColumns,\n }));\n }\n\n handleUseUnformattedValuesChanged(): void {\n this.setState(({ useUnformattedValues }) => ({\n useUnformattedValues: !useUnformattedValues,\n }));\n }\n\n validateOptionInput(): boolean {\n const { selectedRanges } = this.props;\n const { downloadRowOption, customizedDownloadRows } = this.state;\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&\n selectedRanges.length === 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> No rows selected. Please select\n some rows in the table.\n </p>\n ),\n });\n return false;\n }\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS &&\n customizedDownloadRows <= 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Number of rows to output must\n be greater than 0\n </p>\n ),\n });\n return false;\n }\n return true;\n }\n\n render(): ReactElement {\n const {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n selectedRanges,\n tableDownloadStatus,\n } = this.props;\n const {\n fileName,\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n includeColumnHeaders,\n includeHiddenColumns,\n useUnformattedValues,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div className=\"section-title\">Download Rows</div>\n <div className=\"form-group\">\n <RadioGroup\n onChange={this.handleDownloadRowOptionChanged}\n value={downloadRowOption}\n disabled={isDownloading}\n >\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS}\n data-testid=\"radio-csv-exporter-download-all\"\n >\n All Rows\n <span className=\"text-muted ml-2\">\n {`(${rowCount\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`}\n </span>\n </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS}\n data-testid=\"radio-csv-exporter-only-selected\"\n >\n Only Selected Rows\n <span className=\"text-muted ml-2\">\n {selectedRanges.length > 0\n ? `(${GridRange.rowCount(selectedRanges)\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`\n : null}\n </span>\n </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n >\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadRowOption:\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <select\n value={customizedDownloadRowOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n className=\"custom-select\"\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowOptionChanged}\n >\n <option value=\"FIRST\">First</option>\n <option value=\"LAST\">Last</option>\n </select>\n <input\n type=\"number\"\n className=\"form-control\"\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n placeholder=\"100\"\n value={customizedDownloadRows}\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n />\n <div>Rows</div>\n </div>\n </RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-group\">\n <label htmlFor={`customizedRows-${id}`}>File Name</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`filename-${id}`}\n data-testid=\"input-csv-exporter-file-name\"\n name={`filename-${id}`}\n value={fileName}\n onChange={event => {\n this.setState({ fileName: event.target.value });\n }}\n disabled={isDownloading}\n />\n </div>\n <div className=\"checkbox-options\">\n <Checkbox\n checked={includeColumnHeaders}\n onChange={this.handleIncludeColumnHeadersChanged}\n >\n Include column headers\n </Checkbox>\n <Checkbox\n checked={includeHiddenColumns}\n onChange={this.handleIncludeHiddenColumnsChanged}\n >\n Include hidden columns\n </Checkbox>\n <Checkbox\n checked={useUnformattedValues}\n onChange={this.handleUseUnformattedValuesChanged}\n >\n Use unformatted values\n </Checkbox>\n </div>\n <div className=\"section-footer flex-column\">\n {errorMessage != null && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n {tableDownloadStatus && (\n <div className=\"download-status\">\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <>\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING && (\n <div className=\"text-muted\">Starting Download...</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING && (\n <div className=\"text-muted d-flex justify-content-between\">\n <span>\n {tableDownloadEstimatedTime ||\n tableDownloadEstimatedTime === 0\n ? `Estimated time: ${TimeUtils.formatElapsedTime(\n tableDownloadEstimatedTime\n )}`\n : null}\n </span>\n <span>{`${tableDownloadProgress}%`}</span>\n </div>\n )}\n </>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"text-muted text-right\">Download Completed</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.CANCELED && (\n <div className=\"text-muted\">Download Canceled</div>\n )}\n\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <div className=\"progress\">\n <div\n className=\"progress-bar progress-bar-striped progress-bar-animated\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-success\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n </div>\n )}\n <Button\n kind=\"primary\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner className=\"loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Downloading</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isDownloading && 'Download'}\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default TableCsvExporter;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableCsvExporter.js","names":["React","Component","ClassNames","FontAwesomeIcon","Button","Checkbox","LoadingSpinner","RadioGroup","RadioItem","GridRange","GridUtils","vsWarning","TimeUtils","shortid","Log","IrisGridUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","TableCsvExporter","getDateString","dh","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadRowOptionChanged","handleCustomizedDownloadRowOptionChanged","handleCustomizedDownloadRowsChanged","handleIncludeColumnHeadersChanged","handleIncludeHiddenColumnsChanged","handleUseUnformattedValuesChanged","model","name","state","fileName","concat","downloadRowOption","DOWNLOAD_ROW_OPTIONS","ALL_ROWS","customizedDownloadRowOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","includeColumnHeaders","includeHiddenColumns","useUnformattedValues","errorMessage","id","generate","getSnapshotRanges","selectedRanges","rowCount","columnCount","snapshotRanges","push","SELECTED_ROWS","map","range","_objectSpread","startColumn","endColumn","sort","rangeA","rangeB","startRow","CUSTOMIZED_ROWS","Math","min","LAST","max","getModelRanges","ranges","userColumnWidths","movedColumns","hiddenColumns","getHiddenColumns","modelRanges","length","subtractRanges","makeColumn","subtractRangesFromRanges","resetDownloadState","setState","_this","_asyncToGenerator","isDownloading","onDownloadStart","onDownload","onCancel","validateOptionInput","frozenTable","export","tableSubscription","setViewport","getViewportData","error","children","icon","event","target","value","parseInt","_ref","_ref2","_ref3","render","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","className","onChange","disabled","toString","replace","role","onClick","type","placeholder","htmlFor","checked","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","style","width","kind","_defineProperty","undefined"],"sources":["../../src/sidebar/TableCsvExporter.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n Checkbox,\n LoadingSpinner,\n RadioGroup,\n RadioItem,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport type {\n dh as DhType,\n Table,\n TableViewportSubscription,\n} from '@deephaven/jsapi-types';\nimport { TimeUtils } from '@deephaven/utils';\nimport shortid from 'shortid';\nimport './TableCsvExporter.scss';\nimport Log from '@deephaven/log';\nimport IrisGridModel from '../IrisGridModel';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableCsvExporter');\ninterface TableCsvExporterProps {\n model: IrisGridModel;\n name: string;\n userColumnWidths: ModelSizeMap;\n movedColumns: readonly MoveOperation[];\n isDownloading: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number;\n onDownloadStart: () => void;\n onDownload: (\n fileName: string,\n frozenTable: Table,\n tableSubscription: TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ) => void;\n onCancel: () => void;\n selectedRanges: readonly GridRange[];\n}\n\ninterface TableCsvExporterState {\n fileName: string;\n\n downloadRowOption: string;\n customizedDownloadRowOption: string;\n customizedDownloadRows: number;\n\n includeColumnHeaders: boolean;\n includeHiddenColumns: boolean;\n useUnformattedValues: boolean;\n\n errorMessage: React.ReactNode;\n id: string;\n}\nclass TableCsvExporter extends Component<\n TableCsvExporterProps,\n TableCsvExporterState\n> {\n static FILENAME_DATE_FORMAT = 'yyyy-MM-dd-HHmmss';\n\n static DOWNLOAD_STATUS = {\n INITIATING: 'INITIATING',\n DOWNLOADING: 'DOWNLOADING',\n FINISHED: 'FINISHED',\n CANCELED: 'CANCELED',\n };\n\n static DOWNLOAD_ROW_OPTIONS = {\n ALL_ROWS: 'ALL_ROWS',\n SELECTED_ROWS: 'SELECTED_ROWS',\n CUSTOMIZED_ROWS: 'CUSTOMIZED_ROWS',\n };\n\n static CUSTOMIZED_ROWS_OPTIONS = {\n FIRST: 'FIRST',\n LAST: 'LAST',\n };\n\n static DEFAULT_DOWNLOAD_ROWS = 100;\n\n static defaultProps = {\n onDownloadStart: (): void => undefined,\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selectedRanges: [],\n };\n\n static getDateString(dh: DhType): string {\n return dh.i18n.DateTimeFormat.format(\n TableCsvExporter.FILENAME_DATE_FORMAT,\n new Date()\n );\n }\n\n constructor(props: TableCsvExporterProps) {\n super(props);\n\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadRowOptionChanged =\n this.handleDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowOptionChanged =\n this.handleCustomizedDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowsChanged =\n this.handleCustomizedDownloadRowsChanged.bind(this);\n this.handleIncludeColumnHeadersChanged =\n this.handleIncludeColumnHeadersChanged.bind(this);\n this.handleIncludeHiddenColumnsChanged =\n this.handleIncludeHiddenColumnsChanged.bind(this);\n this.handleUseUnformattedValuesChanged =\n this.handleUseUnformattedValuesChanged.bind(this);\n\n const { model, name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString(model.dh)}.csv`,\n\n downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,\n customizedDownloadRowOption:\n TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n includeColumnHeaders: true,\n includeHiddenColumns: false,\n useUnformattedValues: false,\n\n errorMessage: null,\n id: shortid.generate(),\n };\n }\n\n getSnapshotRanges(): GridRange[] {\n const { model, selectedRanges } = this.props;\n const {\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount, columnCount } = model;\n let snapshotRanges = [] as GridRange[];\n switch (downloadRowOption) {\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:\n snapshotRanges = selectedRanges\n .map(range => ({\n ...range,\n startColumn: 0,\n endColumn: columnCount - 1,\n }))\n .sort((rangeA, rangeB) => {\n if (rangeA.startRow != null && rangeB.startRow != null) {\n return rangeA.startRow - rangeB.startRow;\n }\n return 0;\n }) as GridRange[];\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadRowOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n 0,\n 0,\n columnCount - 1,\n Math.min(customizedDownloadRows - 1, rowCount - 1)\n )\n );\n break;\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.LAST:\n snapshotRanges.push(\n new GridRange(\n 0,\n Math.max(0, rowCount - customizedDownloadRows),\n columnCount - 1,\n rowCount - 1\n )\n );\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n return snapshotRanges;\n }\n\n getModelRanges(ranges: readonly GridRange[]): GridRange[] {\n const { userColumnWidths, movedColumns } = this.props;\n const { includeHiddenColumns } = this.state;\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (!includeHiddenColumns && hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n return modelRanges;\n }\n\n resetDownloadState(): void {\n this.setState({ errorMessage: null });\n }\n\n async handleDownloadClick(): Promise<void> {\n const { model, isDownloading, onDownloadStart, onDownload, onCancel } =\n this.props;\n const { fileName, includeColumnHeaders, useUnformattedValues } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n\n const snapshotRanges = this.getSnapshotRanges();\n const modelRanges = this.getModelRanges(snapshotRanges);\n if (this.validateOptionInput()) {\n onDownloadStart();\n try {\n const frozenTable = await model.export();\n const tableSubscription = frozenTable.setViewport(0, 0);\n await tableSubscription.getViewportData();\n onDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n } catch (error) {\n log.error('CSV download failed', error);\n\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> {`${error}`}\n </p>\n ),\n });\n onCancel();\n }\n }\n }\n\n handleDownloadRowOptionChanged(\n event: React.ChangeEvent<HTMLInputElement>\n ): void {\n this.setState({ downloadRowOption: event.target.value });\n }\n\n handleCustomizedDownloadRowOptionChanged(\n event: React.ChangeEvent<HTMLSelectElement>\n ): void {\n this.setState({ customizedDownloadRowOption: event.target.value });\n }\n\n handleCustomizedDownloadRowsChanged(\n event: React.ChangeEvent<HTMLInputElement>\n ): void {\n this.setState({ customizedDownloadRows: parseInt(event.target.value, 10) });\n }\n\n handleIncludeColumnHeadersChanged(): void {\n this.setState(({ includeColumnHeaders }) => ({\n includeColumnHeaders: !includeColumnHeaders,\n }));\n }\n\n handleIncludeHiddenColumnsChanged(): void {\n this.setState(({ includeHiddenColumns }) => ({\n includeHiddenColumns: !includeHiddenColumns,\n }));\n }\n\n handleUseUnformattedValuesChanged(): void {\n this.setState(({ useUnformattedValues }) => ({\n useUnformattedValues: !useUnformattedValues,\n }));\n }\n\n validateOptionInput(): boolean {\n const { selectedRanges } = this.props;\n const { downloadRowOption, customizedDownloadRows } = this.state;\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&\n selectedRanges.length === 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> No rows selected. Please select\n some rows in the table.\n </p>\n ),\n });\n return false;\n }\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS &&\n customizedDownloadRows <= 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Number of rows to output must\n be greater than 0\n </p>\n ),\n });\n return false;\n }\n return true;\n }\n\n render(): ReactElement {\n const {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n selectedRanges,\n tableDownloadStatus,\n } = this.props;\n const {\n fileName,\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n includeColumnHeaders,\n includeHiddenColumns,\n useUnformattedValues,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div className=\"section-title\">Download Rows</div>\n <div className=\"form-group\">\n <RadioGroup\n onChange={this.handleDownloadRowOptionChanged}\n value={downloadRowOption}\n disabled={isDownloading}\n >\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS}\n data-testid=\"radio-csv-exporter-download-all\"\n >\n All Rows\n <span className=\"text-muted ml-2\">\n {`(${rowCount\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`}\n </span>\n </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS}\n data-testid=\"radio-csv-exporter-only-selected\"\n >\n Only Selected Rows\n <span className=\"text-muted ml-2\">\n {selectedRanges.length > 0\n ? `(${GridRange.rowCount(selectedRanges)\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`\n : null}\n </span>\n </RadioItem>\n <RadioItem\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n >\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadRowOption:\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <select\n value={customizedDownloadRowOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n className=\"custom-select\"\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowOptionChanged}\n >\n <option value=\"FIRST\">First</option>\n <option value=\"LAST\">Last</option>\n </select>\n <input\n type=\"number\"\n className=\"form-control\"\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n placeholder=\"100\"\n value={customizedDownloadRows}\n disabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n />\n <div>Rows</div>\n </div>\n </RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-group\">\n <label htmlFor={`customizedRows-${id}`}>File Name</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`filename-${id}`}\n data-testid=\"input-csv-exporter-file-name\"\n name={`filename-${id}`}\n value={fileName}\n onChange={event => {\n this.setState({ fileName: event.target.value });\n }}\n disabled={isDownloading}\n />\n </div>\n <div className=\"checkbox-options\">\n <Checkbox\n checked={includeColumnHeaders}\n onChange={this.handleIncludeColumnHeadersChanged}\n >\n Include column headers\n </Checkbox>\n <Checkbox\n checked={includeHiddenColumns}\n onChange={this.handleIncludeHiddenColumnsChanged}\n >\n Include hidden columns\n </Checkbox>\n <Checkbox\n checked={useUnformattedValues}\n onChange={this.handleUseUnformattedValuesChanged}\n >\n Use unformatted values\n </Checkbox>\n </div>\n <div className=\"section-footer flex-column\">\n {errorMessage != null && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n {tableDownloadStatus && (\n <div className=\"download-status\">\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <>\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING && (\n <div className=\"text-muted\">Starting Download...</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING && (\n <div className=\"text-muted d-flex justify-content-between\">\n <span>\n {tableDownloadEstimatedTime ||\n tableDownloadEstimatedTime === 0\n ? `Estimated time: ${TimeUtils.formatElapsedTime(\n tableDownloadEstimatedTime\n )}`\n : null}\n </span>\n <span>{`${tableDownloadProgress}%`}</span>\n </div>\n )}\n </>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"text-muted text-right\">Download Completed</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.CANCELED && (\n <div className=\"text-muted\">Download Canceled</div>\n )}\n\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <div className=\"progress\">\n <div\n className=\"progress-bar progress-bar-striped progress-bar-animated\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-success\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n </div>\n )}\n <Button\n kind=\"primary\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner className=\"loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Downloading</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isDownloading && 'Download'}\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default TableCsvExporter;\n"],"mappings":"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"}
|
|
@@ -94,6 +94,11 @@ export default class TableSaver extends PureComponent {
|
|
|
94
94
|
if (this.streamTimeout) clearTimeout(this.streamTimeout);
|
|
95
95
|
if (this.snapshotHandlerTimeout) clearTimeout(this.snapshotHandlerTimeout);
|
|
96
96
|
}
|
|
97
|
+
|
|
98
|
+
// 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.
|
|
99
|
+
// Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.
|
|
100
|
+
// If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.
|
|
101
|
+
// Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494
|
|
97
102
|
createWriterStream(port) {
|
|
98
103
|
// use blob fall back if it's safari
|
|
99
104
|
var useBlob = this.useBlobFallback;
|