@deephaven/iris-grid 1.7.2-beta.1 → 1.7.2-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/dist/AdvancedFilterCreator.js +5 -7
  2. package/dist/AdvancedFilterCreator.js.map +1 -1
  3. package/dist/AdvancedFilterCreatorFilterItem.js +6 -7
  4. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.js +1 -2
  6. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValueList.js +2 -3
  8. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  9. package/dist/ColumnHeaderGroup.js.map +1 -1
  10. package/dist/ColumnStatistics.d.ts +2 -2
  11. package/dist/ColumnStatistics.d.ts.map +1 -1
  12. package/dist/ColumnStatistics.js +2 -5
  13. package/dist/ColumnStatistics.js.map +1 -1
  14. package/dist/CommonTypes.js.map +1 -1
  15. package/dist/CrossColumnSearch.js +2 -4
  16. package/dist/CrossColumnSearch.js.map +1 -1
  17. package/dist/EmptyIrisGridModel.js.map +1 -1
  18. package/dist/FilterInputField.js +4 -5
  19. package/dist/FilterInputField.js.map +1 -1
  20. package/dist/GotoRow.js +4 -6
  21. package/dist/GotoRow.js.map +1 -1
  22. package/dist/IrisGrid.d.ts +35 -44
  23. package/dist/IrisGrid.d.ts.map +1 -1
  24. package/dist/IrisGrid.js +157 -170
  25. package/dist/IrisGrid.js.map +1 -1
  26. package/dist/IrisGridBottomBar.d.ts.map +1 -1
  27. package/dist/IrisGridBottomBar.js +4 -1
  28. package/dist/IrisGridBottomBar.js.map +1 -1
  29. package/dist/IrisGridCacheUtils.js.map +1 -1
  30. package/dist/IrisGridCellOverflowModal.js +1 -2
  31. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  32. package/dist/IrisGridCellRendererUtils.js.map +1 -1
  33. package/dist/IrisGridCopyHandler.js +4 -6
  34. package/dist/IrisGridCopyHandler.js.map +1 -1
  35. package/dist/IrisGridDataBarCellRenderer.js.map +1 -1
  36. package/dist/IrisGridIcons.js.map +1 -1
  37. package/dist/IrisGridMetricCalculator.d.ts +1 -2
  38. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  39. package/dist/IrisGridMetricCalculator.js +3 -2
  40. package/dist/IrisGridMetricCalculator.js.map +1 -1
  41. package/dist/IrisGridModel.js.map +1 -1
  42. package/dist/IrisGridModelFactory.js.map +1 -1
  43. package/dist/IrisGridModelUpdater.js.map +1 -1
  44. package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
  45. package/dist/IrisGridPartitionSelector.js +6 -8
  46. package/dist/IrisGridPartitionSelector.js.map +1 -1
  47. package/dist/IrisGridPartitionedTableModel.js.map +1 -1
  48. package/dist/IrisGridProxyModel.js +6 -7
  49. package/dist/IrisGridProxyModel.js.map +1 -1
  50. package/dist/IrisGridRenderer.js +0 -1
  51. package/dist/IrisGridRenderer.js.map +1 -1
  52. package/dist/IrisGridShortcuts.js.map +1 -1
  53. package/dist/IrisGridTableModel.js +1 -2
  54. package/dist/IrisGridTableModel.js.map +1 -1
  55. package/dist/IrisGridTableModelTemplate.d.ts +1 -1
  56. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  57. package/dist/IrisGridTableModelTemplate.js +57 -61
  58. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  59. package/dist/IrisGridTestUtils.js.map +1 -1
  60. package/dist/IrisGridTextCellRenderer.js.map +1 -1
  61. package/dist/IrisGridTheme.js.map +1 -1
  62. package/dist/IrisGridThemeProvider.js.map +1 -1
  63. package/dist/IrisGridTreeTableModel.js +12 -13
  64. package/dist/IrisGridTreeTableModel.js.map +1 -1
  65. package/dist/IrisGridUtils.js +56 -56
  66. package/dist/IrisGridUtils.js.map +1 -1
  67. package/dist/LazyIrisGrid.d.ts +55 -78
  68. package/dist/LazyIrisGrid.d.ts.map +1 -1
  69. package/dist/LazyIrisGrid.js.map +1 -1
  70. package/dist/MissingKeyError.js.map +1 -1
  71. package/dist/MissingPartitionError.js.map +1 -1
  72. package/dist/NoPastePermissionModal.js +1 -2
  73. package/dist/NoPastePermissionModal.js.map +1 -1
  74. package/dist/PartitionedGridModel.js.map +1 -1
  75. package/dist/PendingDataBottomBar.js +1 -2
  76. package/dist/PendingDataBottomBar.js.map +1 -1
  77. package/dist/ToastBottomBar.js.map +1 -1
  78. package/dist/declaration.d.js.map +1 -1
  79. package/dist/format-context-menus/CustomFormatAction.js +1 -2
  80. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  81. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
  82. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  83. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  84. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  85. package/dist/format-context-menus/TextAlignmentFormatContextMenu.js +6 -4
  86. package/dist/format-context-menus/TextAlignmentFormatContextMenu.js.map +1 -1
  87. package/dist/format-context-menus/index.js.map +1 -1
  88. package/dist/index.js.map +1 -1
  89. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
  90. package/dist/key-handlers/CopyCellKeyHandler.js.map +1 -1
  91. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  92. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  93. package/dist/key-handlers/index.js.map +1 -1
  94. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  95. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  96. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.d.ts.map +1 -1
  97. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +5 -2
  98. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  99. package/dist/mousehandlers/IrisGridContextMenuHandler.js +1 -2
  100. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  101. package/dist/mousehandlers/IrisGridCopyCellMouseHandler.js.map +1 -1
  102. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  103. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  104. package/dist/mousehandlers/IrisGridPartitionedTableMouseHandler.js.map +1 -1
  105. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +1 -1
  106. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  107. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +1 -3
  108. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
  109. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  110. package/dist/mousehandlers/index.js.map +1 -1
  111. package/dist/sidebar/AdvancedSettings.js.map +1 -1
  112. package/dist/sidebar/AdvancedSettingsMenu.d.ts +1 -1
  113. package/dist/sidebar/AdvancedSettingsMenu.d.ts.map +1 -1
  114. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  115. package/dist/sidebar/AdvancedSettingsType.js +3 -3
  116. package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
  117. package/dist/sidebar/ChartBuilder.d.ts +2 -2
  118. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  119. package/dist/sidebar/ChartBuilder.js +1 -2
  120. package/dist/sidebar/ChartBuilder.js.map +1 -1
  121. package/dist/sidebar/CustomColumnBuilder.js +3 -5
  122. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  123. package/dist/sidebar/CustomColumnInput.js +1 -2
  124. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  125. package/dist/sidebar/DownloadServiceWorkerUtils.js +1 -1
  126. package/dist/sidebar/DownloadServiceWorkerUtils.js.map +1 -1
  127. package/dist/sidebar/InputEditor.js +8 -9
  128. package/dist/sidebar/InputEditor.js.map +1 -1
  129. package/dist/sidebar/OptionType.js +3 -3
  130. package/dist/sidebar/OptionType.js.map +1 -1
  131. package/dist/sidebar/RollupRows.js +7 -9
  132. package/dist/sidebar/RollupRows.js.map +1 -1
  133. package/dist/sidebar/SelectDistinctBuilder.js +1 -2
  134. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  135. package/dist/sidebar/TableCsvExporter.js +5 -7
  136. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  137. package/dist/sidebar/TableSaver.js +9 -10
  138. package/dist/sidebar/TableSaver.js.map +1 -1
  139. package/dist/sidebar/aggregations/AggregationEdit.js +4 -5
  140. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  141. package/dist/sidebar/aggregations/AggregationOperation.js +3 -3
  142. package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
  143. package/dist/sidebar/aggregations/AggregationUtils.js +0 -1
  144. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  145. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  146. package/dist/sidebar/aggregations/Aggregations.js +2 -4
  147. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  148. package/dist/sidebar/aggregations/index.js.map +1 -1
  149. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  150. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +1 -3
  151. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  152. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  153. package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -3
  154. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  155. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +1 -2
  156. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  157. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  158. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +1 -2
  159. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  160. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +21 -21
  161. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  162. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  163. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +1 -3
  164. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  165. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts.map +1 -1
  166. package/dist/sidebar/conditional-formatting/StyleEditor.js +2 -3
  167. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  168. package/dist/sidebar/icons/BarIcon.js +1 -2
  169. package/dist/sidebar/icons/BarIcon.js.map +1 -1
  170. package/dist/sidebar/icons/FormatColumnWhereIcon.js +1 -2
  171. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
  172. package/dist/sidebar/icons/FormatRowWhereIcon.js +1 -2
  173. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
  174. package/dist/sidebar/icons/HistogramIcon.js +1 -2
  175. package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
  176. package/dist/sidebar/icons/LineIcon.js +1 -2
  177. package/dist/sidebar/icons/LineIcon.js.map +1 -1
  178. package/dist/sidebar/icons/PieIcon.js +1 -2
  179. package/dist/sidebar/icons/PieIcon.js.map +1 -1
  180. package/dist/sidebar/icons/ScatterIcon.js +1 -2
  181. package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
  182. package/dist/sidebar/icons/index.js.map +1 -1
  183. package/dist/sidebar/index.js.map +1 -1
  184. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +2 -2
  185. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -1
  186. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +34 -36
  187. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  188. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +3 -3
  189. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +1 -1
  190. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +3 -5
  191. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +1 -1
  192. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.d.ts.map +1 -1
  193. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +2 -4
  194. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +1 -1
  195. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +1 -1
  196. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +4 -4
  197. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +1 -1
  198. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +3 -6
  199. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +1 -1
  200. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +1 -1
  201. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +1 -2
  202. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +1 -1
  203. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +1 -1
  204. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +1 -1
  205. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +1 -2
  206. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -1
  207. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  208. package/package.json +17 -18
@@ -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","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","isBigDecimalType","type","isBigIntegerType","constructor","props","_defineProperty","searchFilter","columns","getSortedUngroupedColumns","selectedRanges","focusIndex","toLowerCase","push","setState","ungroupedSelectedRanges","ungroupedList","current","scrollToItem","groupedColumns","find","max","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, {\n type ChangeEvent,\n Component,\n type ReactElement,\n type RefObject,\n} from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n DragDropContext,\n type DraggableLocation,\n type DragStart,\n Droppable,\n type DropResult,\n} from 'react-beautiful-dnd';\nimport {\n Checkbox,\n DraggableItemList,\n DragUtils,\n SearchInput,\n Tooltip,\n type Range,\n type RenderItemProps,\n Button,\n} from '@deephaven/components';\nimport { vsTrash, dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport { TableUtils, type 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 { dh } from '@deephaven/jsapi-types';\nimport type IrisGridModel from '../IrisGridModel';\nimport { type 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<dh.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: dh.Column): boolean {\n return (\n !TableUtils.isBigDecimalType(column.type) &&\n !TableUtils.isBigIntegerType(column.type)\n );\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<dh.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 ? null : RollupRows.SORT.ASCENDING,\n }));\n }\n\n handleSortDescending(): void {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.DESCENDING ? null : RollupRows.SORT.DESCENDING,\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 dh.Column[],\n groupedColumns: readonly ColumnName[]\n ): readonly dh.Column[] =>\n columns.filter(\n column =>\n RollupRows.isGroupable(column) &&\n groupedColumns.find(name => name === column.name) == null\n ),\n { max: 100 }\n );\n\n getCachedSortedColumns = memoize(\n (\n columns: readonly dh.Column[],\n sort?: SortDirection\n ): readonly dh.Column[] =>\n sort == null\n ? [...columns]\n : TableUtils.sortColumns(columns, sort === RollupRows.SORT.ASCENDING),\n { max: 100 }\n );\n\n getUngroupedColumns(): readonly dh.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 dh.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","isBigDecimalType","type","isBigIntegerType","constructor","props","_defineProperty","searchFilter","columns","getSortedUngroupedColumns","selectedRanges","focusIndex","toLowerCase","push","setState","ungroupedSelectedRanges","ungroupedList","current","scrollToItem","groupedColumns","find","max","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","_ref0","_ref1","onChange","getUngroupedColumns","model","originalColumns","getCachedUngroupedColumns","getCachedSortedColumns","_ref10","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, {\n type ChangeEvent,\n Component,\n type ReactElement,\n type RefObject,\n} from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n DragDropContext,\n type DraggableLocation,\n type DragStart,\n Droppable,\n type DropResult,\n} from 'react-beautiful-dnd';\nimport {\n Checkbox,\n DraggableItemList,\n DragUtils,\n SearchInput,\n Tooltip,\n type Range,\n type RenderItemProps,\n Button,\n} from '@deephaven/components';\nimport { vsTrash, dhSortAlphaDown, dhSortAlphaUp } from '@deephaven/icons';\nimport { TableUtils, type 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 { dh } from '@deephaven/jsapi-types';\nimport type IrisGridModel from '../IrisGridModel';\nimport { type 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<dh.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: dh.Column): boolean {\n return (\n !TableUtils.isBigDecimalType(column.type) &&\n !TableUtils.isBigIntegerType(column.type)\n );\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<dh.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 ? null : RollupRows.SORT.ASCENDING,\n }));\n }\n\n handleSortDescending(): void {\n this.setState(({ sort }) => ({\n sort:\n sort === RollupRows.SORT.DESCENDING ? null : RollupRows.SORT.DESCENDING,\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 dh.Column[],\n groupedColumns: readonly ColumnName[]\n ): readonly dh.Column[] =>\n columns.filter(\n column =>\n RollupRows.isGroupable(column) &&\n groupedColumns.find(name => name === column.name) == null\n ),\n { max: 100 }\n );\n\n getCachedSortedColumns = memoize(\n (\n columns: readonly dh.Column[],\n sort?: SortDirection\n ): readonly dh.Column[] =>\n sort == null\n ? [...columns]\n : TableUtils.sortColumns(columns, sort === RollupRows.SORT.ASCENDING),\n { max: 100 }\n );\n\n getUngroupedColumns(): readonly dh.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 dh.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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","ignoreList":[]}
@@ -8,8 +8,7 @@ import { dhNewCircleLargeFilled, vsTrash } from '@deephaven/icons';
8
8
  import { Button, Select } from '@deephaven/components';
9
9
  import Log from '@deephaven/log';
10
10
  import "./SelectDistinctBuilder.css";
11
- import { jsx as _jsx } from "react/jsx-runtime";
12
- import { jsxs as _jsxs } from "react/jsx-runtime";
11
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
12
  var log = Log.module('SelectDistinctBuilder');
14
13
  class SelectDistinctBuilder extends Component {
15
14
  constructor(props) {
@@ -1 +1 @@
1
- {"version":3,"file":"SelectDistinctBuilder.js","names":["React","Component","deepEqual","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","Button","Select","Log","jsx","_jsx","jsxs","_jsxs","log","module","SelectDistinctBuilder","constructor","props","handleAddColumnClick","bind","handleDeleteColumn","handleDropdownChanged","model","selectDistinctColumns","state","inputs","length","columns","originalColumns","componentDidUpdate","prevProps","prevState","onChange","filteredInputs","filter","val","setState","_ref","prevInputs","index","_ref2","input","inputIndex","value","debug","_ref3","renderInputs","map","options","_ref4","name","includes","_ref5","children","className","eventTargetValue","kind","onClick","icon","transform","tooltip","render","disableAddButton","role","disabled","_defineProperty","undefined"],"sources":["../../src/sidebar/SelectDistinctBuilder.tsx"],"sourcesContent":["import React, { Component, type ReactElement } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsTrash } from '@deephaven/icons';\nimport { Button, Select } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type ModelIndex } from '@deephaven/grid';\nimport type IrisGridModel from '../IrisGridModel';\n\nimport './SelectDistinctBuilder.scss';\nimport { type ColumnName } from '../CommonTypes';\n\nconst log = Log.module('SelectDistinctBuilder');\n\ninterface SelectDistinctBuilderProps {\n model: IrisGridModel;\n selectDistinctColumns: readonly ColumnName[];\n onChange: (newStr: readonly string[]) => void;\n}\ninterface SelectDistinctBuilderState {\n inputs: readonly string[];\n columns: readonly dh.Column[];\n}\nclass SelectDistinctBuilder extends Component<\n SelectDistinctBuilderProps,\n SelectDistinctBuilderState\n> {\n static defaultProps = {\n selectDistinctColumns: [],\n onChange: (): void => undefined,\n };\n\n constructor(props: SelectDistinctBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleDropdownChanged = this.handleDropdownChanged.bind(this);\n\n const { model, selectDistinctColumns } = this.props;\n\n this.state = {\n inputs:\n selectDistinctColumns.length > 0 ? [...selectDistinctColumns] : [''],\n columns: model.originalColumns,\n };\n }\n\n componentDidUpdate(\n prevProps: SelectDistinctBuilderProps,\n prevState: SelectDistinctBuilderState\n ): void {\n const { inputs } = this.state;\n const { onChange } = this.props;\n if (prevState.inputs !== inputs) {\n const filteredInputs = inputs.filter(val => val !== '');\n if (\n !deepEqual(\n prevState.inputs.filter(val => val !== ''),\n filteredInputs\n )\n ) {\n onChange(filteredInputs);\n }\n }\n }\n\n handleAddColumnClick(): void {\n this.setState(({ inputs: prevInputs }) => ({\n inputs: [...prevInputs, ''],\n }));\n }\n\n handleDeleteColumn(index: ModelIndex): void {\n this.setState(({ inputs }) => ({\n inputs:\n inputs.length === 1 && index === 0\n ? ['']\n : inputs.filter((input, inputIndex) => index !== inputIndex),\n }));\n }\n\n handleDropdownChanged(index: number, value: string): void {\n log.debug('handleDropdownChanged', index, value);\n this.setState(({ inputs: prevInputs }) => {\n const inputs = [...prevInputs];\n inputs[index] = value;\n return { inputs };\n });\n }\n\n renderInputs(): ReactElement[] {\n const { columns, inputs } = this.state;\n\n return inputs.map((value, index) => {\n const options = columns\n .filter(({ name }) => name === value || !inputs.includes(name))\n .map(({ name }) => (\n <option value={name} key={name}>\n {name}\n </option>\n ));\n return (\n // eslint-disable-next-line react/no-array-index-key\n <div className=\"form-inline px-3 pb-3\" key={index}>\n <Select\n className=\"form-control custom-select col\"\n value={value}\n onChange={(eventTargetValue: string) =>\n this.handleDropdownChanged(index, eventTargetValue)\n }\n >\n <option value=\"\">Select a column</option>\n {options}\n </Select>\n\n {(inputs.length > 1 || value !== '') && (\n <Button\n kind=\"ghost\"\n className=\"ml-1 px-2\"\n onClick={() => {\n this.handleDeleteColumn(index);\n }}\n icon={<FontAwesomeIcon icon={vsTrash} transform=\"grow-3\" />}\n tooltip=\"Delete column\"\n />\n )}\n </div>\n );\n });\n }\n\n render(): React.ReactElement {\n const { columns, inputs } = this.state;\n const disableAddButton = inputs.length >= columns.length;\n return (\n <div\n role=\"presentation\"\n className=\"select-distinct-builder-container h-100\"\n >\n <div className=\"select-distinct-title\">Display Unique Values From</div>\n\n {this.renderInputs()}\n\n <hr />\n\n <div className=\"pt-1 px-3\">\n <Button\n kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n disabled={disableAddButton}\n icon={dhNewCircleLargeFilled}\n >\n Add Additional Column\n </Button>\n </div>\n\n <div className=\"select-distinct-builder-footer\">\n <div className=\"select-distinct-builder-hint\">\n Display only unique values from the selected table columns. Note\n that this will reset any filters and display only the selected\n columns.\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default SelectDistinctBuilder;\n"],"mappings":"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"}
1
+ {"version":3,"file":"SelectDistinctBuilder.js","names":["React","Component","deepEqual","FontAwesomeIcon","dhNewCircleLargeFilled","vsTrash","Button","Select","Log","jsx","_jsx","jsxs","_jsxs","log","module","SelectDistinctBuilder","constructor","props","handleAddColumnClick","bind","handleDeleteColumn","handleDropdownChanged","model","selectDistinctColumns","state","inputs","length","columns","originalColumns","componentDidUpdate","prevProps","prevState","onChange","filteredInputs","filter","val","setState","_ref","prevInputs","index","_ref2","input","inputIndex","value","debug","_ref3","renderInputs","map","options","_ref4","name","includes","_ref5","children","className","eventTargetValue","kind","onClick","icon","transform","tooltip","render","disableAddButton","role","disabled","_defineProperty","undefined"],"sources":["../../src/sidebar/SelectDistinctBuilder.tsx"],"sourcesContent":["import React, { Component, type ReactElement } from 'react';\nimport deepEqual from 'fast-deep-equal';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhNewCircleLargeFilled, vsTrash } from '@deephaven/icons';\nimport { Button, Select } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type ModelIndex } from '@deephaven/grid';\nimport type IrisGridModel from '../IrisGridModel';\n\nimport './SelectDistinctBuilder.scss';\nimport { type ColumnName } from '../CommonTypes';\n\nconst log = Log.module('SelectDistinctBuilder');\n\ninterface SelectDistinctBuilderProps {\n model: IrisGridModel;\n selectDistinctColumns: readonly ColumnName[];\n onChange: (newStr: readonly string[]) => void;\n}\ninterface SelectDistinctBuilderState {\n inputs: readonly string[];\n columns: readonly dh.Column[];\n}\nclass SelectDistinctBuilder extends Component<\n SelectDistinctBuilderProps,\n SelectDistinctBuilderState\n> {\n static defaultProps = {\n selectDistinctColumns: [],\n onChange: (): void => undefined,\n };\n\n constructor(props: SelectDistinctBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleDropdownChanged = this.handleDropdownChanged.bind(this);\n\n const { model, selectDistinctColumns } = this.props;\n\n this.state = {\n inputs:\n selectDistinctColumns.length > 0 ? [...selectDistinctColumns] : [''],\n columns: model.originalColumns,\n };\n }\n\n componentDidUpdate(\n prevProps: SelectDistinctBuilderProps,\n prevState: SelectDistinctBuilderState\n ): void {\n const { inputs } = this.state;\n const { onChange } = this.props;\n if (prevState.inputs !== inputs) {\n const filteredInputs = inputs.filter(val => val !== '');\n if (\n !deepEqual(\n prevState.inputs.filter(val => val !== ''),\n filteredInputs\n )\n ) {\n onChange(filteredInputs);\n }\n }\n }\n\n handleAddColumnClick(): void {\n this.setState(({ inputs: prevInputs }) => ({\n inputs: [...prevInputs, ''],\n }));\n }\n\n handleDeleteColumn(index: ModelIndex): void {\n this.setState(({ inputs }) => ({\n inputs:\n inputs.length === 1 && index === 0\n ? ['']\n : inputs.filter((input, inputIndex) => index !== inputIndex),\n }));\n }\n\n handleDropdownChanged(index: number, value: string): void {\n log.debug('handleDropdownChanged', index, value);\n this.setState(({ inputs: prevInputs }) => {\n const inputs = [...prevInputs];\n inputs[index] = value;\n return { inputs };\n });\n }\n\n renderInputs(): ReactElement[] {\n const { columns, inputs } = this.state;\n\n return inputs.map((value, index) => {\n const options = columns\n .filter(({ name }) => name === value || !inputs.includes(name))\n .map(({ name }) => (\n <option value={name} key={name}>\n {name}\n </option>\n ));\n return (\n // eslint-disable-next-line react/no-array-index-key\n <div className=\"form-inline px-3 pb-3\" key={index}>\n <Select\n className=\"form-control custom-select col\"\n value={value}\n onChange={(eventTargetValue: string) =>\n this.handleDropdownChanged(index, eventTargetValue)\n }\n >\n <option value=\"\">Select a column</option>\n {options}\n </Select>\n\n {(inputs.length > 1 || value !== '') && (\n <Button\n kind=\"ghost\"\n className=\"ml-1 px-2\"\n onClick={() => {\n this.handleDeleteColumn(index);\n }}\n icon={<FontAwesomeIcon icon={vsTrash} transform=\"grow-3\" />}\n tooltip=\"Delete column\"\n />\n )}\n </div>\n );\n });\n }\n\n render(): React.ReactElement {\n const { columns, inputs } = this.state;\n const disableAddButton = inputs.length >= columns.length;\n return (\n <div\n role=\"presentation\"\n className=\"select-distinct-builder-container h-100\"\n >\n <div className=\"select-distinct-title\">Display Unique Values From</div>\n\n {this.renderInputs()}\n\n <hr />\n\n <div className=\"pt-1 px-3\">\n <Button\n kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n disabled={disableAddButton}\n icon={dhNewCircleLargeFilled}\n >\n Add Additional Column\n </Button>\n </div>\n\n <div className=\"select-distinct-builder-footer\">\n <div className=\"select-distinct-builder-hint\">\n Display only unique values from the selected table columns. Note\n that this will reset any filters and display only the selected\n columns.\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default SelectDistinctBuilder;\n"],"mappings":"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","ignoreList":[]}
@@ -16,9 +16,7 @@ import { nanoid } from 'nanoid';
16
16
  import "./TableCsvExporter.css";
17
17
  import Log from '@deephaven/log';
18
18
  import IrisGridUtils from "../IrisGridUtils.js";
19
- import { jsx as _jsx } from "react/jsx-runtime";
20
- import { jsxs as _jsxs } from "react/jsx-runtime";
21
- import { Fragment as _Fragment } from "react/jsx-runtime";
19
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
22
20
  var log = Log.module('TableCsvExporter');
23
21
  class TableCsvExporter extends Component {
24
22
  static getDateString(dh) {
@@ -142,10 +140,10 @@ class TableCsvExporter extends Component {
142
140
  if (_this.validateOptionInput()) {
143
141
  onDownloadStart();
144
142
  try {
145
- var _frozenTable = yield model.export();
146
- var _tableSubscription = _frozenTable.setViewport(0, 0);
147
- yield _tableSubscription.getViewportData();
148
- onDownload(fileName, _frozenTable, _tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);
143
+ var frozenTable = yield model.export();
144
+ var tableSubscription = frozenTable.setViewport(0, 0);
145
+ yield tableSubscription.getViewportData();
146
+ onDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);
149
147
  } catch (error) {
150
148
  log.error('CSV download failed', error);
151
149
  _this.setState({
@@ -1 +1 @@
1
- {"version":3,"file":"TableCsvExporter.js","names":["React","Component","ClassNames","FontAwesomeIcon","Button","Checkbox","LoadingSpinner","RadioGroup","Radio","NumberField","Picker","Item","GridRange","GridUtils","vsWarning","TimeUtils","nanoid","Log","IrisGridUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","TableCsvExporter","getDateString","dh","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadRowOptionChanged","handleCustomizedDownloadRowOptionChanged","handleCustomizedDownloadRowsChanged","handleIncludeColumnHeadersChanged","handleIncludeHiddenColumnsChanged","handleUseUnformattedValuesChanged","model","name","state","fileName","concat","downloadRowOption","DOWNLOAD_ROW_OPTIONS","ALL_ROWS","customizedDownloadRowOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","includeColumnHeaders","includeHiddenColumns","useUnformattedValues","errorMessage","id","getSnapshotRanges","selectedRanges","rowCount","columnCount","snapshotRanges","push","SELECTED_ROWS","map","range","_objectSpread","startColumn","endColumn","sort","rangeA","rangeB","startRow","CUSTOMIZED_ROWS","Math","min","LAST","max","getModelRanges","ranges","userColumnWidths","movedColumns","hiddenColumns","getHiddenColumns","modelRanges","length","subtractRanges","makeColumn","subtractRangesFromRanges","resetDownloadState","setState","_this","_asyncToGenerator","isDownloading","onDownloadStart","onDownload","onCancel","validateOptionInput","frozenTable","export","tableSubscription","setViewport","getViewportData","error","children","icon","value","String","_ref","_ref2","_ref3","render","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","className","onChange","isDisabled","toString","replace","margin","role","onClick","selectedKey","flex","minValue","defaultValue","width","minWidth","htmlFor","type","event","target","disabled","checked","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","style","kind","_defineProperty","undefined"],"sources":["../../src/sidebar/TableCsvExporter.tsx"],"sourcesContent":["import React, { Component, type ReactElement } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n Checkbox,\n LoadingSpinner,\n RadioGroup,\n Radio,\n NumberField,\n Picker,\n Item,\n type ItemKey,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n type ModelSizeMap,\n type MoveOperation,\n} from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { TimeUtils } from '@deephaven/utils';\nimport { nanoid } from 'nanoid';\nimport './TableCsvExporter.scss';\nimport Log from '@deephaven/log';\nimport type IrisGridModel from '../IrisGridModel';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableCsvExporter');\ninterface TableCsvExporterProps {\n model: IrisGridModel;\n name: string;\n userColumnWidths: ModelSizeMap;\n movedColumns: readonly MoveOperation[];\n isDownloading: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number;\n onDownloadStart: () => void;\n onDownload: (\n fileName: string,\n frozenTable: DhType.Table,\n tableSubscription: DhType.TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ) => void;\n onCancel: () => void;\n selectedRanges: readonly GridRange[];\n}\n\ninterface TableCsvExporterState {\n fileName: string;\n\n downloadRowOption: string;\n customizedDownloadRowOption: string;\n customizedDownloadRows: number;\n\n includeColumnHeaders: boolean;\n includeHiddenColumns: boolean;\n useUnformattedValues: boolean;\n\n errorMessage: React.ReactNode;\n id: string;\n}\nclass TableCsvExporter extends Component<\n TableCsvExporterProps,\n TableCsvExporterState\n> {\n static FILENAME_DATE_FORMAT = 'yyyy-MM-dd-HHmmss';\n\n static DOWNLOAD_STATUS = {\n INITIATING: 'INITIATING',\n DOWNLOADING: 'DOWNLOADING',\n FINISHED: 'FINISHED',\n CANCELED: 'CANCELED',\n };\n\n static DOWNLOAD_ROW_OPTIONS = {\n ALL_ROWS: 'ALL_ROWS',\n SELECTED_ROWS: 'SELECTED_ROWS',\n CUSTOMIZED_ROWS: 'CUSTOMIZED_ROWS',\n };\n\n static CUSTOMIZED_ROWS_OPTIONS = {\n FIRST: 'FIRST',\n LAST: 'LAST',\n };\n\n static DEFAULT_DOWNLOAD_ROWS = 100;\n\n static defaultProps = {\n onDownloadStart: (): void => undefined,\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selectedRanges: [],\n };\n\n static getDateString(dh: typeof DhType): string {\n return dh.i18n.DateTimeFormat.format(\n TableCsvExporter.FILENAME_DATE_FORMAT,\n new Date()\n );\n }\n\n constructor(props: TableCsvExporterProps) {\n super(props);\n\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadRowOptionChanged =\n this.handleDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowOptionChanged =\n this.handleCustomizedDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowsChanged =\n this.handleCustomizedDownloadRowsChanged.bind(this);\n this.handleIncludeColumnHeadersChanged =\n this.handleIncludeColumnHeadersChanged.bind(this);\n this.handleIncludeHiddenColumnsChanged =\n this.handleIncludeHiddenColumnsChanged.bind(this);\n this.handleUseUnformattedValuesChanged =\n this.handleUseUnformattedValuesChanged.bind(this);\n\n const { model, name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString(model.dh)}.csv`,\n\n downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,\n customizedDownloadRowOption:\n TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n includeColumnHeaders: true,\n includeHiddenColumns: false,\n useUnformattedValues: false,\n\n errorMessage: null,\n id: nanoid(),\n };\n }\n\n getSnapshotRanges(): GridRange[] {\n const { model, selectedRanges } = this.props;\n const {\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount, columnCount } = model;\n let snapshotRanges = [] as GridRange[];\n switch (downloadRowOption) {\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:\n snapshotRanges = selectedRanges\n .map(range => ({\n ...range,\n startColumn: 0,\n endColumn: columnCount - 1,\n }))\n .sort((rangeA, rangeB) => {\n if (rangeA.startRow != null && rangeB.startRow != null) {\n return rangeA.startRow - rangeB.startRow;\n }\n return 0;\n }) as GridRange[];\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadRowOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n 0,\n 0,\n columnCount - 1,\n Math.min(customizedDownloadRows - 1, rowCount - 1)\n )\n );\n break;\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.LAST:\n snapshotRanges.push(\n new GridRange(\n 0,\n Math.max(0, rowCount - customizedDownloadRows),\n columnCount - 1,\n rowCount - 1\n )\n );\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n return snapshotRanges;\n }\n\n getModelRanges(ranges: readonly GridRange[]): GridRange[] {\n const { userColumnWidths, movedColumns } = this.props;\n const { includeHiddenColumns } = this.state;\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (!includeHiddenColumns && hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n return modelRanges;\n }\n\n resetDownloadState(): void {\n this.setState({ errorMessage: null });\n }\n\n async handleDownloadClick(): Promise<void> {\n const { model, isDownloading, onDownloadStart, onDownload, onCancel } =\n this.props;\n const { fileName, includeColumnHeaders, useUnformattedValues } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n\n const snapshotRanges = this.getSnapshotRanges();\n const modelRanges = this.getModelRanges(snapshotRanges);\n if (this.validateOptionInput()) {\n onDownloadStart();\n try {\n const frozenTable = await model.export();\n const tableSubscription = frozenTable.setViewport(0, 0);\n await tableSubscription.getViewportData();\n onDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n } catch (error) {\n log.error('CSV download failed', error);\n\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> {`${error}`}\n </p>\n ),\n });\n onCancel();\n }\n }\n }\n\n handleDownloadRowOptionChanged(value: string): void {\n this.setState({ downloadRowOption: value });\n }\n\n handleCustomizedDownloadRowOptionChanged(value: ItemKey | null): void {\n if (value !== null) {\n this.setState({ customizedDownloadRowOption: String(value) });\n }\n }\n\n handleCustomizedDownloadRowsChanged(value: number): void {\n this.setState({ customizedDownloadRows: value });\n }\n\n handleIncludeColumnHeadersChanged(): void {\n this.setState(({ includeColumnHeaders }) => ({\n includeColumnHeaders: !includeColumnHeaders,\n }));\n }\n\n handleIncludeHiddenColumnsChanged(): void {\n this.setState(({ includeHiddenColumns }) => ({\n includeHiddenColumns: !includeHiddenColumns,\n }));\n }\n\n handleUseUnformattedValuesChanged(): void {\n this.setState(({ useUnformattedValues }) => ({\n useUnformattedValues: !useUnformattedValues,\n }));\n }\n\n validateOptionInput(): boolean {\n const { selectedRanges } = this.props;\n const { downloadRowOption, customizedDownloadRows } = this.state;\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&\n selectedRanges.length === 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> No rows selected. Please select\n some rows in the table.\n </p>\n ),\n });\n return false;\n }\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS &&\n customizedDownloadRows <= 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Number of rows to output must\n be greater than 0\n </p>\n ),\n });\n return false;\n }\n return true;\n }\n\n render(): ReactElement {\n const {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n selectedRanges,\n tableDownloadStatus,\n } = this.props;\n const {\n fileName,\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n includeColumnHeaders,\n includeHiddenColumns,\n useUnformattedValues,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div id=\"download-rows-label\" className=\"section-title\">\n Download Rows\n </div>\n <div className=\"form-group\">\n <RadioGroup\n aria-labelledby=\"download-rows-label\"\n onChange={this.handleDownloadRowOptionChanged}\n value={downloadRowOption}\n isDisabled={isDownloading}\n >\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS}\n data-testid=\"radio-csv-exporter-download-all\"\n >\n All Rows\n <span className=\"text-muted ml-2\">\n {`(${rowCount\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`}\n </span>\n </Radio>\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS}\n data-testid=\"radio-csv-exporter-only-selected\"\n >\n Only Selected Rows\n <span className=\"text-muted ml-2\">\n {selectedRanges.length > 0\n ? `(${GridRange.rowCount(selectedRanges)\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`\n : null}\n </span>\n </Radio>\n <div className=\"d-flex\">\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n margin=\"0\"\n aria-label=\"Download a custom number of rows\"\n />\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadRowOption:\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <Picker\n selectedKey={customizedDownloadRowOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n isDisabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowOptionChanged}\n aria-label=\"First or last number of rows\"\n flex\n >\n <Item key=\"FIRST\">First</Item>\n <Item key=\"LAST\">Last</Item>\n </Picker>\n <NumberField\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n minValue={1}\n defaultValue={100}\n value={customizedDownloadRows}\n width=\"100%\"\n minWidth={0}\n isDisabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n aria-label=\"Number of rows to download\"\n flex\n />\n <div>Rows</div>\n </div>\n </div>\n </RadioGroup>\n </div>\n <div className=\"form-group\">\n <label htmlFor={`customizedRows-${id}`}>File Name</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`filename-${id}`}\n data-testid=\"input-csv-exporter-file-name\"\n name={`filename-${id}`}\n value={fileName}\n onChange={event => {\n this.setState({ fileName: event.target.value });\n }}\n disabled={isDownloading}\n />\n </div>\n <div className=\"checkbox-options\">\n <Checkbox\n checked={includeColumnHeaders}\n onChange={this.handleIncludeColumnHeadersChanged}\n >\n Include column headers\n </Checkbox>\n <Checkbox\n checked={includeHiddenColumns}\n onChange={this.handleIncludeHiddenColumnsChanged}\n >\n Include hidden columns\n </Checkbox>\n <Checkbox\n checked={useUnformattedValues}\n onChange={this.handleUseUnformattedValuesChanged}\n >\n Use unformatted values\n </Checkbox>\n </div>\n <div className=\"section-footer flex-column\">\n {errorMessage != null && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n {tableDownloadStatus && (\n <div className=\"download-status\">\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <>\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING && (\n <div className=\"text-muted\">Starting Download...</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING && (\n <div className=\"text-muted d-flex justify-content-between\">\n <span>\n {tableDownloadEstimatedTime ||\n tableDownloadEstimatedTime === 0\n ? `Estimated time: ${TimeUtils.formatElapsedTime(\n tableDownloadEstimatedTime\n )}`\n : null}\n </span>\n <span>{`${tableDownloadProgress}%`}</span>\n </div>\n )}\n </>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"text-muted text-right\">Download Completed</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.CANCELED && (\n <div className=\"text-muted\">Download Canceled</div>\n )}\n\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <div className=\"progress\">\n <div\n className=\"progress-bar progress-bar-striped progress-bar-animated\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-success\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n </div>\n )}\n <Button\n kind=\"primary\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner className=\"mr-2 loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Downloading</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isDownloading && 'Download'}\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default TableCsvExporter;\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableCsvExporter.js","names":["React","Component","ClassNames","FontAwesomeIcon","Button","Checkbox","LoadingSpinner","RadioGroup","Radio","NumberField","Picker","Item","GridRange","GridUtils","vsWarning","TimeUtils","nanoid","Log","IrisGridUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","TableCsvExporter","getDateString","dh","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadRowOptionChanged","handleCustomizedDownloadRowOptionChanged","handleCustomizedDownloadRowsChanged","handleIncludeColumnHeadersChanged","handleIncludeHiddenColumnsChanged","handleUseUnformattedValuesChanged","model","name","state","fileName","concat","downloadRowOption","DOWNLOAD_ROW_OPTIONS","ALL_ROWS","customizedDownloadRowOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","includeColumnHeaders","includeHiddenColumns","useUnformattedValues","errorMessage","id","getSnapshotRanges","selectedRanges","rowCount","columnCount","snapshotRanges","push","SELECTED_ROWS","map","range","_objectSpread","startColumn","endColumn","sort","rangeA","rangeB","startRow","CUSTOMIZED_ROWS","Math","min","LAST","max","getModelRanges","ranges","userColumnWidths","movedColumns","hiddenColumns","getHiddenColumns","modelRanges","length","subtractRanges","makeColumn","subtractRangesFromRanges","resetDownloadState","setState","_this","_asyncToGenerator","isDownloading","onDownloadStart","onDownload","onCancel","validateOptionInput","frozenTable","export","tableSubscription","setViewport","getViewportData","error","children","icon","value","String","_ref","_ref2","_ref3","render","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","className","onChange","isDisabled","toString","replace","margin","role","onClick","selectedKey","flex","minValue","defaultValue","width","minWidth","htmlFor","type","event","target","disabled","checked","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","style","kind","_defineProperty","undefined"],"sources":["../../src/sidebar/TableCsvExporter.tsx"],"sourcesContent":["import React, { Component, type ReactElement } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n Checkbox,\n LoadingSpinner,\n RadioGroup,\n Radio,\n NumberField,\n Picker,\n Item,\n type ItemKey,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n type ModelSizeMap,\n type MoveOperation,\n} from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { TimeUtils } from '@deephaven/utils';\nimport { nanoid } from 'nanoid';\nimport './TableCsvExporter.scss';\nimport Log from '@deephaven/log';\nimport type IrisGridModel from '../IrisGridModel';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableCsvExporter');\ninterface TableCsvExporterProps {\n model: IrisGridModel;\n name: string;\n userColumnWidths: ModelSizeMap;\n movedColumns: readonly MoveOperation[];\n isDownloading: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number;\n onDownloadStart: () => void;\n onDownload: (\n fileName: string,\n frozenTable: DhType.Table,\n tableSubscription: DhType.TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ) => void;\n onCancel: () => void;\n selectedRanges: readonly GridRange[];\n}\n\ninterface TableCsvExporterState {\n fileName: string;\n\n downloadRowOption: string;\n customizedDownloadRowOption: string;\n customizedDownloadRows: number;\n\n includeColumnHeaders: boolean;\n includeHiddenColumns: boolean;\n useUnformattedValues: boolean;\n\n errorMessage: React.ReactNode;\n id: string;\n}\nclass TableCsvExporter extends Component<\n TableCsvExporterProps,\n TableCsvExporterState\n> {\n static FILENAME_DATE_FORMAT = 'yyyy-MM-dd-HHmmss';\n\n static DOWNLOAD_STATUS = {\n INITIATING: 'INITIATING',\n DOWNLOADING: 'DOWNLOADING',\n FINISHED: 'FINISHED',\n CANCELED: 'CANCELED',\n };\n\n static DOWNLOAD_ROW_OPTIONS = {\n ALL_ROWS: 'ALL_ROWS',\n SELECTED_ROWS: 'SELECTED_ROWS',\n CUSTOMIZED_ROWS: 'CUSTOMIZED_ROWS',\n };\n\n static CUSTOMIZED_ROWS_OPTIONS = {\n FIRST: 'FIRST',\n LAST: 'LAST',\n };\n\n static DEFAULT_DOWNLOAD_ROWS = 100;\n\n static defaultProps = {\n onDownloadStart: (): void => undefined,\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selectedRanges: [],\n };\n\n static getDateString(dh: typeof DhType): string {\n return dh.i18n.DateTimeFormat.format(\n TableCsvExporter.FILENAME_DATE_FORMAT,\n new Date()\n );\n }\n\n constructor(props: TableCsvExporterProps) {\n super(props);\n\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadRowOptionChanged =\n this.handleDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowOptionChanged =\n this.handleCustomizedDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowsChanged =\n this.handleCustomizedDownloadRowsChanged.bind(this);\n this.handleIncludeColumnHeadersChanged =\n this.handleIncludeColumnHeadersChanged.bind(this);\n this.handleIncludeHiddenColumnsChanged =\n this.handleIncludeHiddenColumnsChanged.bind(this);\n this.handleUseUnformattedValuesChanged =\n this.handleUseUnformattedValuesChanged.bind(this);\n\n const { model, name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString(model.dh)}.csv`,\n\n downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,\n customizedDownloadRowOption:\n TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n includeColumnHeaders: true,\n includeHiddenColumns: false,\n useUnformattedValues: false,\n\n errorMessage: null,\n id: nanoid(),\n };\n }\n\n getSnapshotRanges(): GridRange[] {\n const { model, selectedRanges } = this.props;\n const {\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount, columnCount } = model;\n let snapshotRanges = [] as GridRange[];\n switch (downloadRowOption) {\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:\n snapshotRanges = selectedRanges\n .map(range => ({\n ...range,\n startColumn: 0,\n endColumn: columnCount - 1,\n }))\n .sort((rangeA, rangeB) => {\n if (rangeA.startRow != null && rangeB.startRow != null) {\n return rangeA.startRow - rangeB.startRow;\n }\n return 0;\n }) as GridRange[];\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadRowOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n 0,\n 0,\n columnCount - 1,\n Math.min(customizedDownloadRows - 1, rowCount - 1)\n )\n );\n break;\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.LAST:\n snapshotRanges.push(\n new GridRange(\n 0,\n Math.max(0, rowCount - customizedDownloadRows),\n columnCount - 1,\n rowCount - 1\n )\n );\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n return snapshotRanges;\n }\n\n getModelRanges(ranges: readonly GridRange[]): GridRange[] {\n const { userColumnWidths, movedColumns } = this.props;\n const { includeHiddenColumns } = this.state;\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (!includeHiddenColumns && hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n return modelRanges;\n }\n\n resetDownloadState(): void {\n this.setState({ errorMessage: null });\n }\n\n async handleDownloadClick(): Promise<void> {\n const { model, isDownloading, onDownloadStart, onDownload, onCancel } =\n this.props;\n const { fileName, includeColumnHeaders, useUnformattedValues } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n\n const snapshotRanges = this.getSnapshotRanges();\n const modelRanges = this.getModelRanges(snapshotRanges);\n if (this.validateOptionInput()) {\n onDownloadStart();\n try {\n const frozenTable = await model.export();\n const tableSubscription = frozenTable.setViewport(0, 0);\n await tableSubscription.getViewportData();\n onDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n } catch (error) {\n log.error('CSV download failed', error);\n\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> {`${error}`}\n </p>\n ),\n });\n onCancel();\n }\n }\n }\n\n handleDownloadRowOptionChanged(value: string): void {\n this.setState({ downloadRowOption: value });\n }\n\n handleCustomizedDownloadRowOptionChanged(value: ItemKey | null): void {\n if (value !== null) {\n this.setState({ customizedDownloadRowOption: String(value) });\n }\n }\n\n handleCustomizedDownloadRowsChanged(value: number): void {\n this.setState({ customizedDownloadRows: value });\n }\n\n handleIncludeColumnHeadersChanged(): void {\n this.setState(({ includeColumnHeaders }) => ({\n includeColumnHeaders: !includeColumnHeaders,\n }));\n }\n\n handleIncludeHiddenColumnsChanged(): void {\n this.setState(({ includeHiddenColumns }) => ({\n includeHiddenColumns: !includeHiddenColumns,\n }));\n }\n\n handleUseUnformattedValuesChanged(): void {\n this.setState(({ useUnformattedValues }) => ({\n useUnformattedValues: !useUnformattedValues,\n }));\n }\n\n validateOptionInput(): boolean {\n const { selectedRanges } = this.props;\n const { downloadRowOption, customizedDownloadRows } = this.state;\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&\n selectedRanges.length === 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> No rows selected. Please select\n some rows in the table.\n </p>\n ),\n });\n return false;\n }\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS &&\n customizedDownloadRows <= 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Number of rows to output must\n be greater than 0\n </p>\n ),\n });\n return false;\n }\n return true;\n }\n\n render(): ReactElement {\n const {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n selectedRanges,\n tableDownloadStatus,\n } = this.props;\n const {\n fileName,\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n includeColumnHeaders,\n includeHiddenColumns,\n useUnformattedValues,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div id=\"download-rows-label\" className=\"section-title\">\n Download Rows\n </div>\n <div className=\"form-group\">\n <RadioGroup\n aria-labelledby=\"download-rows-label\"\n onChange={this.handleDownloadRowOptionChanged}\n value={downloadRowOption}\n isDisabled={isDownloading}\n >\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS}\n data-testid=\"radio-csv-exporter-download-all\"\n >\n All Rows\n <span className=\"text-muted ml-2\">\n {`(${rowCount\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`}\n </span>\n </Radio>\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS}\n data-testid=\"radio-csv-exporter-only-selected\"\n >\n Only Selected Rows\n <span className=\"text-muted ml-2\">\n {selectedRanges.length > 0\n ? `(${GridRange.rowCount(selectedRanges)\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`\n : null}\n </span>\n </Radio>\n <div className=\"d-flex\">\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n margin=\"0\"\n aria-label=\"Download a custom number of rows\"\n />\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadRowOption:\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <Picker\n selectedKey={customizedDownloadRowOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n isDisabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowOptionChanged}\n aria-label=\"First or last number of rows\"\n flex\n >\n <Item key=\"FIRST\">First</Item>\n <Item key=\"LAST\">Last</Item>\n </Picker>\n <NumberField\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n minValue={1}\n defaultValue={100}\n value={customizedDownloadRows}\n width=\"100%\"\n minWidth={0}\n isDisabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n aria-label=\"Number of rows to download\"\n flex\n />\n <div>Rows</div>\n </div>\n </div>\n </RadioGroup>\n </div>\n <div className=\"form-group\">\n <label htmlFor={`customizedRows-${id}`}>File Name</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`filename-${id}`}\n data-testid=\"input-csv-exporter-file-name\"\n name={`filename-${id}`}\n value={fileName}\n onChange={event => {\n this.setState({ fileName: event.target.value });\n }}\n disabled={isDownloading}\n />\n </div>\n <div className=\"checkbox-options\">\n <Checkbox\n checked={includeColumnHeaders}\n onChange={this.handleIncludeColumnHeadersChanged}\n >\n Include column headers\n </Checkbox>\n <Checkbox\n checked={includeHiddenColumns}\n onChange={this.handleIncludeHiddenColumnsChanged}\n >\n Include hidden columns\n </Checkbox>\n <Checkbox\n checked={useUnformattedValues}\n onChange={this.handleUseUnformattedValuesChanged}\n >\n Use unformatted values\n </Checkbox>\n </div>\n <div className=\"section-footer flex-column\">\n {errorMessage != null && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n {tableDownloadStatus && (\n <div className=\"download-status\">\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <>\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING && (\n <div className=\"text-muted\">Starting Download...</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING && (\n <div className=\"text-muted d-flex justify-content-between\">\n <span>\n {tableDownloadEstimatedTime ||\n tableDownloadEstimatedTime === 0\n ? `Estimated time: ${TimeUtils.formatElapsedTime(\n tableDownloadEstimatedTime\n )}`\n : null}\n </span>\n <span>{`${tableDownloadProgress}%`}</span>\n </div>\n )}\n </>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"text-muted text-right\">Download Completed</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.CANCELED && (\n <div className=\"text-muted\">Download Canceled</div>\n )}\n\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <div className=\"progress\">\n <div\n className=\"progress-bar progress-bar-striped progress-bar-animated\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-success\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n </div>\n )}\n <Button\n kind=\"primary\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner className=\"mr-2 loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Downloading</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isDownloading && 'Download'}\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default TableCsvExporter;\n"],"mappings":"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","ignoreList":[]}
@@ -43,6 +43,10 @@ export default class TableSaver extends PureComponent {
43
43
  _defineProperty(this, "currentSnapshotIndex", void 0);
44
44
  _defineProperty(this, "snapshotPending", void 0);
45
45
  _defineProperty(this, "cancelableSnapshots", void 0);
46
+ // 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.
47
+ // Instead, we monitor the pull() behavior from the readableStream called when the stream wants more data to write.
48
+ // If the stream doesn't pull for long enough time, chances are the stream is already canceled, so we stop the stream.
49
+ // Issue ticket on Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=638494
46
50
  _defineProperty(this, "streamTimeout", void 0);
47
51
  _defineProperty(this, "snapshotHandlerTimeout", void 0);
48
52
  _defineProperty(this, "downloadStartTime", void 0);
@@ -94,11 +98,6 @@ export default class TableSaver extends PureComponent {
94
98
  if (this.streamTimeout) clearTimeout(this.streamTimeout);
95
99
  if (this.snapshotHandlerTimeout) clearTimeout(this.snapshotHandlerTimeout);
96
100
  }
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
102
101
  createWriterStream(port) {
103
102
  // use blob fall back if it's safari
104
103
  var useBlob = this.useBlobFallback;
@@ -214,9 +213,9 @@ export default class TableSaver extends PureComponent {
214
213
  }
215
214
  cancelDownload() {
216
215
  var _this$table, _this$tableSubscripti, _this$fileWriter;
217
- (_this$table = this.table) === null || _this$table === void 0 ? void 0 : _this$table.close();
218
- (_this$tableSubscripti = this.tableSubscription) === null || _this$tableSubscripti === void 0 ? void 0 : _this$tableSubscripti.close();
219
- (_this$fileWriter = this.fileWriter) === null || _this$fileWriter === void 0 ? void 0 : _this$fileWriter.abort();
216
+ (_this$table = this.table) === null || _this$table === void 0 || _this$table.close();
217
+ (_this$tableSubscripti = this.tableSubscription) === null || _this$tableSubscripti === void 0 || _this$tableSubscripti.close();
218
+ (_this$fileWriter = this.fileWriter) === null || _this$fileWriter === void 0 || _this$fileWriter.abort();
220
219
  this.cancelableSnapshots.forEach(cancelable => {
221
220
  if (cancelable) {
222
221
  cancelable.catch(() => null);
@@ -269,7 +268,7 @@ export default class TableSaver extends PureComponent {
269
268
  headerString += i === this.columns.length - 1 ? '\n' : ',';
270
269
  }
271
270
  }
272
- (_this$fileWriter2 = this.fileWriter) === null || _this$fileWriter2 === void 0 ? void 0 : _this$fileWriter2.write({
271
+ (_this$fileWriter2 = this.fileWriter) === null || _this$fileWriter2 === void 0 || _this$fileWriter2.write({
273
272
  header: headerString
274
273
  }).then(() => null);
275
274
  }
@@ -467,7 +466,7 @@ export default class TableSaver extends PureComponent {
467
466
  }
468
467
  removeIframe() {
469
468
  var _this$iframe;
470
- (_this$iframe = this.iframe) === null || _this$iframe === void 0 ? void 0 : _this$iframe.remove();
469
+ (_this$iframe = this.iframe) === null || _this$iframe === void 0 || _this$iframe.remove();
471
470
  this.iframe = undefined;
472
471
  }
473
472
  render() {