@deephaven/iris-grid 0.38.1-beta.5 → 0.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/README.md +2 -4
  2. package/dist/AdvancedFilterCreator.d.ts +2 -3
  3. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  4. package/dist/AdvancedFilterCreator.js +4 -8
  5. package/dist/AdvancedFilterCreator.js.map +1 -1
  6. package/dist/AdvancedFilterCreatorFilterItem.d.ts +3 -4
  7. package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
  8. package/dist/AdvancedFilterCreatorFilterItem.js +4 -5
  9. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  10. package/dist/AdvancedFilterCreatorSelectValue.d.ts +2 -4
  11. package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
  12. package/dist/AdvancedFilterCreatorSelectValue.js +3 -11
  13. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  14. package/dist/AdvancedFilterCreatorSelectValueList.d.ts +1 -3
  15. package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
  16. package/dist/AdvancedFilterCreatorSelectValueList.js +5 -7
  17. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  18. package/dist/ColumnStatistics.d.ts +1 -1
  19. package/dist/ColumnStatistics.d.ts.map +1 -1
  20. package/dist/ColumnStatistics.js.map +1 -1
  21. package/dist/CommonTypes.d.ts +1 -1
  22. package/dist/CommonTypes.d.ts.map +1 -1
  23. package/dist/CommonTypes.js.map +1 -1
  24. package/dist/CrossColumnSearch.d.ts +2 -2
  25. package/dist/CrossColumnSearch.d.ts.map +1 -1
  26. package/dist/CrossColumnSearch.js +2 -1
  27. package/dist/CrossColumnSearch.js.map +1 -1
  28. package/dist/GotoRow.d.ts +1 -3
  29. package/dist/GotoRow.d.ts.map +1 -1
  30. package/dist/GotoRow.js +0 -1
  31. package/dist/GotoRow.js.map +1 -1
  32. package/dist/IrisGrid.css +0 -3
  33. package/dist/IrisGrid.css.map +1 -1
  34. package/dist/IrisGrid.d.ts +6 -8
  35. package/dist/IrisGrid.d.ts.map +1 -1
  36. package/dist/IrisGrid.js +33 -46
  37. package/dist/IrisGrid.js.map +1 -1
  38. package/dist/IrisGridCopyHandler.js.map +1 -1
  39. package/dist/IrisGridMetricCalculator.d.ts +1 -1
  40. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  41. package/dist/IrisGridMetricCalculator.js.map +1 -1
  42. package/dist/IrisGridModel.d.ts +1 -1
  43. package/dist/IrisGridModel.d.ts.map +1 -1
  44. package/dist/IrisGridModel.js.map +1 -1
  45. package/dist/IrisGridModelFactory.d.ts +2 -2
  46. package/dist/IrisGridModelFactory.d.ts.map +1 -1
  47. package/dist/IrisGridModelFactory.js +3 -3
  48. package/dist/IrisGridModelFactory.js.map +1 -1
  49. package/dist/IrisGridModelUpdater.d.ts +2 -3
  50. package/dist/IrisGridModelUpdater.d.ts.map +1 -1
  51. package/dist/IrisGridModelUpdater.js +2 -2
  52. package/dist/IrisGridModelUpdater.js.map +1 -1
  53. package/dist/IrisGridPartitionSelector.d.ts +1 -2
  54. package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
  55. package/dist/IrisGridPartitionSelector.js +0 -2
  56. package/dist/IrisGridPartitionSelector.js.map +1 -1
  57. package/dist/IrisGridProxyModel.d.ts +2 -3
  58. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  59. package/dist/IrisGridProxyModel.js +9 -11
  60. package/dist/IrisGridProxyModel.js.map +1 -1
  61. package/dist/IrisGridRenderer.d.ts +27 -19
  62. package/dist/IrisGridRenderer.d.ts.map +1 -1
  63. package/dist/IrisGridRenderer.js +205 -64
  64. package/dist/IrisGridRenderer.js.map +1 -1
  65. package/dist/IrisGridTableModel.d.ts +2 -2
  66. package/dist/IrisGridTableModel.d.ts.map +1 -1
  67. package/dist/IrisGridTableModel.js +6 -6
  68. package/dist/IrisGridTableModel.js.map +1 -1
  69. package/dist/IrisGridTableModelTemplate.d.ts +3 -8
  70. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  71. package/dist/IrisGridTableModelTemplate.js +15 -36
  72. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  73. package/dist/IrisGridTestUtils.d.ts +3 -2
  74. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  75. package/dist/IrisGridTestUtils.js +6 -5
  76. package/dist/IrisGridTestUtils.js.map +1 -1
  77. package/dist/IrisGridTheme.d.ts.map +1 -1
  78. package/dist/IrisGridTheme.js +1 -4
  79. package/dist/IrisGridTheme.js.map +1 -1
  80. package/dist/IrisGridTheme.module.css +0 -3
  81. package/dist/IrisGridTheme.module.css.map +1 -1
  82. package/dist/IrisGridTreeTableModel.d.ts +1 -1
  83. package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
  84. package/dist/IrisGridTreeTableModel.js.map +1 -1
  85. package/dist/IrisGridUtils.d.ts +85 -88
  86. package/dist/IrisGridUtils.d.ts.map +1 -1
  87. package/dist/IrisGridUtils.js +558 -569
  88. package/dist/IrisGridUtils.js.map +1 -1
  89. package/dist/PartitionSelectorSearch.d.ts +1 -2
  90. package/dist/PartitionSelectorSearch.d.ts.map +1 -1
  91. package/dist/PartitionSelectorSearch.js +1 -3
  92. package/dist/PartitionSelectorSearch.js.map +1 -1
  93. package/dist/TableViewportUpdater.d.ts +1 -1
  94. package/dist/TableViewportUpdater.d.ts.map +1 -1
  95. package/dist/TableViewportUpdater.js.map +1 -1
  96. package/dist/TreeTableViewportUpdater.d.ts +1 -2
  97. package/dist/TreeTableViewportUpdater.d.ts.map +1 -1
  98. package/dist/TreeTableViewportUpdater.js +1 -1
  99. package/dist/TreeTableViewportUpdater.js.map +1 -1
  100. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  101. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +9 -10
  102. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  103. package/dist/mousehandlers/IrisGridContextMenuHandler.js +28 -41
  104. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  105. package/dist/mousehandlers/IrisGridTokenMouseHandler.d.ts.map +1 -1
  106. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +3 -18
  107. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
  108. package/dist/sidebar/ChartBuilder.d.ts +11 -12
  109. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  110. package/dist/sidebar/ChartBuilder.js +81 -98
  111. package/dist/sidebar/ChartBuilder.js.map +1 -1
  112. package/dist/sidebar/RollupRows.d.ts +1 -1
  113. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  114. package/dist/sidebar/RollupRows.js.map +1 -1
  115. package/dist/sidebar/SelectDistinctBuilder.d.ts +1 -1
  116. package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
  117. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  118. package/dist/sidebar/TableCsvExporter.d.ts +2 -3
  119. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  120. package/dist/sidebar/TableCsvExporter.js +3 -3
  121. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  122. package/dist/sidebar/TableSaver.d.ts +1 -2
  123. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  124. package/dist/sidebar/TableSaver.js +1 -4
  125. package/dist/sidebar/TableSaver.js.map +1 -1
  126. package/dist/sidebar/aggregations/AggregationEdit.d.ts +1 -1
  127. package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
  128. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  129. package/dist/sidebar/aggregations/AggregationUtils.d.ts +1 -1
  130. package/dist/sidebar/aggregations/AggregationUtils.d.ts.map +1 -1
  131. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  132. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +0 -2
  133. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  134. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +0 -2
  135. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  136. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +0 -2
  137. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  138. package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -3
  139. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  140. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  141. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +0 -2
  142. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  143. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.d.ts +2 -2
  144. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.d.ts.map +1 -1
  145. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +1 -1
  146. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  147. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +3 -3
  148. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  149. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +3 -3
  150. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  151. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +0 -2
  152. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  153. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +0 -2
  154. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  155. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +1 -1
  156. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -1
  157. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
  158. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +1 -1
  159. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -1
  160. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
  161. package/package.json +15 -16
  162. package/dist/IrisGridCellRendererUtils.d.ts +0 -7
  163. package/dist/IrisGridCellRendererUtils.d.ts.map +0 -1
  164. package/dist/IrisGridCellRendererUtils.js +0 -20
  165. package/dist/IrisGridCellRendererUtils.js.map +0 -1
  166. package/dist/IrisGridDataBarCellRenderer.d.ts +0 -7
  167. package/dist/IrisGridDataBarCellRenderer.d.ts.map +0 -1
  168. package/dist/IrisGridDataBarCellRenderer.js +0 -10
  169. package/dist/IrisGridDataBarCellRenderer.js.map +0 -1
  170. package/dist/IrisGridIcons.d.ts +0 -4
  171. package/dist/IrisGridIcons.d.ts.map +0 -1
  172. package/dist/IrisGridIcons.js +0 -25
  173. package/dist/IrisGridIcons.js.map +0 -1
  174. package/dist/IrisGridTextCellRenderer.d.ts +0 -20
  175. package/dist/IrisGridTextCellRenderer.d.ts.map +0 -1
  176. package/dist/IrisGridTextCellRenderer.js +0 -139
  177. package/dist/IrisGridTextCellRenderer.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PartitionSelectorSearch.js","names":["React","Component","PropTypes","debounce","ItemList","LoadingSpinner","Log","CanceledPromiseError","log","module","DEBOUNCE_UPDATE_FILTER","PartitionSelectorSearch","handleError","error","constructor","props","updateFilter","handleFilterChange","bind","handleInputFocus","handleKeyDown","handleListKeydown","handleSelect","handleTableUpdate","handleTextChange","handleViewportChange","itemList","searchInput","timer","state","offset","itemCount","items","text","isLoading","componentDidMount","startListening","componentDidUpdate","prevProps","prevState","onListResized","componentWillUnmount","debounceUpdateFilter","cancel","stopListening","event","key","selectedValue","length","value","trim","onSelect","stopPropagation","preventDefault","focusItem","focus","debug2","table","size","setState","itemIndex","offsetIndex","data","detail","getFormattedString","column","columns","r","rows","row","get","displayValue","type","name","push","target","topRow","bottomRow","delta","Math","max","top","bottom","setViewport","dh","initialPageSize","addEventListener","Table","EVENT_UPDATED","EVENT_FILTERCHANGED","removeEventListener","filterText","filters","filter","invoke","FilterValue","ofString","applyFilter","render","listHeight","min","MAX_VISIBLE_ITEMS","DEFAULT_ROW_HEIGHT","height","undefined","func","isRequired","shape","arrayOf","string","number"],"sources":["../src/PartitionSelectorSearch.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash.debounce';\nimport type { dh as DhType, Table } from '@deephaven/jsapi-types';\nimport { ItemList, LoadingSpinner } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { CanceledPromiseError } from '@deephaven/utils';\nimport './PartitionSelectorSearch.scss';\nimport { ModelIndex } from '@deephaven/grid';\n\nconst log = Log.module('PartitionSelectorSearch');\nconst DEBOUNCE_UPDATE_FILTER = 150;\n\ninterface Item {\n value: string;\n displayValue: string;\n}\n\ninterface PartitionSelectorSearchProps<T> {\n dh: DhType;\n getFormattedString: (value: T, type: string, name: string) => string;\n table: Table;\n initialPageSize: number;\n onSelect: (value: string) => void;\n onListResized: () => void;\n}\ninterface PartitionSelectorSearchState {\n offset: number;\n itemCount: number;\n items: Item[];\n text: string;\n isLoading: boolean;\n}\nclass PartitionSelectorSearch<T> extends Component<\n PartitionSelectorSearchProps<T>,\n PartitionSelectorSearchState\n> {\n static MAX_VISIBLE_ITEMS = 12;\n\n static defaultProps = {\n initialPageSize: 100,\n onSelect: (): void => undefined,\n onListResized: (): void => undefined,\n };\n\n static propTypes = {\n getFormattedString: PropTypes.func.isRequired,\n table: PropTypes.shape({\n addEventListener: PropTypes.func.isRequired,\n removeEventListener: PropTypes.func.isRequired,\n columns: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n filter: PropTypes.func.isRequired,\n })\n ),\n size: PropTypes.number.isRequired,\n applyFilter: PropTypes.func.isRequired,\n setViewport: PropTypes.func.isRequired,\n }).isRequired,\n initialPageSize: PropTypes.number,\n onSelect: PropTypes.func,\n onListResized: PropTypes.func,\n };\n\n static handleError(error: unknown): void {\n if (!(error instanceof CanceledPromiseError)) {\n log.error(error);\n }\n }\n\n constructor(props: PartitionSelectorSearchProps<T>) {\n super(props);\n\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleInputFocus = this.handleInputFocus.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleListKeydown = this.handleListKeydown.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTextChange = this.handleTextChange.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n\n this.itemList = null;\n this.searchInput = null;\n this.timer = null;\n\n this.state = {\n offset: 0,\n itemCount: 0,\n items: [],\n text: '',\n isLoading: true,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n }\n\n componentDidUpdate(\n prevProps: PartitionSelectorSearchProps<T>,\n prevState: PartitionSelectorSearchState\n ): void {\n const { isLoading, itemCount } = this.state;\n const { onListResized } = this.props;\n if (\n itemCount !== prevState.itemCount ||\n isLoading !== prevState.isLoading\n ) {\n onListResized();\n }\n }\n\n componentWillUnmount(): void {\n this.debounceUpdateFilter.cancel();\n\n this.stopListening();\n }\n\n itemList: ItemList<Item> | null;\n\n searchInput: HTMLInputElement | null;\n\n timer: null;\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): boolean {\n if (this.itemList == null) {\n return false;\n }\n\n const { items, itemCount } = this.state;\n switch (event.key) {\n case 'Enter': {\n let selectedValue = null;\n if (items.length > 0) {\n selectedValue = items[0].value;\n } else {\n const { text } = this.state;\n selectedValue = text.trim();\n }\n\n if (selectedValue.length > 0) {\n const { onSelect } = this.props;\n onSelect(selectedValue);\n }\n\n event.stopPropagation();\n event.preventDefault();\n return true;\n }\n case 'ArrowDown':\n if (itemCount > 0) {\n this.itemList.focusItem(1);\n }\n event.stopPropagation();\n event.preventDefault();\n return true;\n default:\n return false;\n }\n }\n\n handleListKeydown(event: React.KeyboardEvent<HTMLDivElement>): void {\n switch (event.key) {\n case 'Escape':\n // Do nothing\n break;\n default:\n this.focus();\n break;\n }\n }\n\n handleFilterChange(): void {\n log.debug2('handleFilterChange');\n\n const { table } = this.props;\n const itemCount = table.size;\n this.setState({ itemCount, isLoading: true });\n }\n\n handleInputFocus(): void {\n if (this.itemList) {\n this.itemList.focusItem(0);\n }\n }\n\n handleSelect(itemIndex: ModelIndex): void {\n log.debug2('handleSelect', itemIndex);\n\n const { onSelect } = this.props;\n const { offset, items } = this.state;\n const offsetIndex = itemIndex - offset;\n if (offsetIndex < 0 || items.length <= offsetIndex) {\n log.error('No data for item', itemIndex);\n return;\n }\n\n const { value } = items[offsetIndex];\n onSelect(value);\n }\n\n handleTableUpdate(event: CustomEvent): void {\n const data = event.detail;\n const { offset } = data;\n\n const items = [] as Item[];\n const { getFormattedString, table } = this.props;\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n const displayValue = getFormattedString(value, column.type, column.name);\n items.push({\n displayValue,\n value,\n });\n }\n\n const itemCount = table.size;\n log.debug2('handleTableUpdate', itemCount, offset, items.length);\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n handleTextChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('handleTextChange');\n\n const { value: text } = event.target;\n\n this.setState({ text });\n\n this.debounceUpdateFilter();\n }\n\n handleViewportChange(topRow: number, bottomRow: number): void {\n log.debug2('handleViewportChange', topRow, bottomRow);\n\n const delta = Math.max(1, bottomRow - topRow);\n const top = Math.max(0, topRow - delta);\n const bottom = bottomRow + delta;\n\n const { table } = this.props;\n table.setViewport(top, bottom);\n }\n\n debounceUpdateFilter = debounce((): void => {\n this.updateFilter();\n }, DEBOUNCE_UPDATE_FILTER);\n\n focus(): void {\n if (this.searchInput) {\n this.searchInput.focus();\n }\n }\n\n startListening(): void {\n const { dh, initialPageSize, table } = this.props;\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n table.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleFilterChange\n );\n table.setViewport(0, initialPageSize);\n }\n\n stopListening(): void {\n const { dh, table } = this.props;\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n table.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleFilterChange\n );\n }\n\n updateFilter(): void {\n const { dh, initialPageSize, table } = this.props;\n const { text } = this.state;\n const filterText = text.trim();\n const filters = [];\n if (filterText.length > 0) {\n const column = table.columns[0];\n const filter = column\n .filter()\n .invoke(\n 'matches',\n dh.FilterValue.ofString(`(?s)(?i).*\\\\Q${filterText}\\\\E.*`)\n );\n filters.push(filter);\n }\n\n log.debug2('updateFilter', filters);\n\n table.applyFilter(filters);\n table.setViewport(0, initialPageSize);\n }\n\n render(): JSX.Element {\n const { isLoading, itemCount, items, offset, text } = this.state;\n const listHeight =\n Math.min(itemCount, PartitionSelectorSearch.MAX_VISIBLE_ITEMS) *\n ItemList.DEFAULT_ROW_HEIGHT +\n // Adjust for ListItem vertical padding - .375rem ~ 5.25px\n 11;\n return (\n <div className=\"iris-grid-partition-selector-search\">\n <div className=\"search-container\">\n <input\n type=\"text\"\n ref={searchInput => {\n this.searchInput = searchInput;\n }}\n value={text}\n placeholder=\"Available Partitions\"\n onChange={this.handleTextChange}\n onFocus={this.handleInputFocus}\n onKeyDown={this.handleKeyDown}\n className=\"form-control input-partition\"\n />\n </div>\n {!isLoading && itemCount > 0 && (\n <div\n className=\"iris-grid-partition-selector-search-list\"\n onKeyDown={this.handleListKeydown}\n role=\"presentation\"\n style={{ height: listHeight }}\n >\n <ItemList\n ref={itemList => {\n this.itemList = itemList;\n }}\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n />\n </div>\n )}\n {!isLoading && itemCount === 0 && (\n <div className=\"iris-grid-partition-selector-search-empty\">\n No results\n </div>\n )}\n {isLoading && (\n <div className=\"iris-grid-partition-selector-loading\">\n <LoadingSpinner />\n &nbsp;Loading...\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default PartitionSelectorSearch;\n"],"mappings":"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"}
1
+ {"version":3,"file":"PartitionSelectorSearch.js","names":["React","Component","PropTypes","debounce","dh","ItemList","LoadingSpinner","Log","CanceledPromiseError","log","module","DEBOUNCE_UPDATE_FILTER","PartitionSelectorSearch","handleError","error","constructor","props","updateFilter","handleFilterChange","bind","handleInputFocus","handleKeyDown","handleListKeydown","handleSelect","handleTableUpdate","handleTextChange","handleViewportChange","itemList","searchInput","timer","state","offset","itemCount","items","text","isLoading","componentDidMount","startListening","componentDidUpdate","prevProps","prevState","onListResized","componentWillUnmount","debounceUpdateFilter","cancel","stopListening","event","key","selectedValue","length","value","trim","onSelect","stopPropagation","preventDefault","focusItem","focus","debug2","table","size","setState","itemIndex","offsetIndex","data","detail","getFormattedString","column","columns","r","rows","row","get","displayValue","type","name","push","target","topRow","bottomRow","delta","Math","max","top","bottom","setViewport","initialPageSize","addEventListener","Table","EVENT_UPDATED","EVENT_FILTERCHANGED","removeEventListener","filterText","filters","filter","invoke","FilterValue","ofString","applyFilter","render","listHeight","min","MAX_VISIBLE_ITEMS","DEFAULT_ROW_HEIGHT","height","undefined","func","isRequired","shape","arrayOf","string","number"],"sources":["../src/PartitionSelectorSearch.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash.debounce';\nimport dh, { Table } from '@deephaven/jsapi-shim';\nimport { ItemList, LoadingSpinner } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { CanceledPromiseError } from '@deephaven/utils';\nimport './PartitionSelectorSearch.scss';\nimport { ModelIndex } from '@deephaven/grid';\n\nconst log = Log.module('PartitionSelectorSearch');\nconst DEBOUNCE_UPDATE_FILTER = 150;\n\ninterface Item {\n value: string;\n displayValue: string;\n}\n\ninterface PartitionSelectorSearchProps<T> {\n getFormattedString: (value: T, type: string, name: string) => string;\n table: Table;\n initialPageSize: number;\n onSelect: (value: string) => void;\n onListResized: () => void;\n}\ninterface PartitionSelectorSearchState {\n offset: number;\n itemCount: number;\n items: Item[];\n text: string;\n isLoading: boolean;\n}\nclass PartitionSelectorSearch<T> extends Component<\n PartitionSelectorSearchProps<T>,\n PartitionSelectorSearchState\n> {\n static MAX_VISIBLE_ITEMS = 12;\n\n static defaultProps = {\n initialPageSize: 100,\n onSelect: (): void => undefined,\n onListResized: (): void => undefined,\n };\n\n static propTypes = {\n getFormattedString: PropTypes.func.isRequired,\n table: PropTypes.shape({\n addEventListener: PropTypes.func.isRequired,\n removeEventListener: PropTypes.func.isRequired,\n columns: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n filter: PropTypes.func.isRequired,\n })\n ),\n size: PropTypes.number.isRequired,\n applyFilter: PropTypes.func.isRequired,\n setViewport: PropTypes.func.isRequired,\n }).isRequired,\n initialPageSize: PropTypes.number,\n onSelect: PropTypes.func,\n onListResized: PropTypes.func,\n };\n\n static handleError(error: unknown): void {\n if (!(error instanceof CanceledPromiseError)) {\n log.error(error);\n }\n }\n\n constructor(props: PartitionSelectorSearchProps<T>) {\n super(props);\n\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleInputFocus = this.handleInputFocus.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleListKeydown = this.handleListKeydown.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTextChange = this.handleTextChange.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n\n this.itemList = null;\n this.searchInput = null;\n this.timer = null;\n\n this.state = {\n offset: 0,\n itemCount: 0,\n items: [],\n text: '',\n isLoading: true,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n }\n\n componentDidUpdate(\n prevProps: PartitionSelectorSearchProps<T>,\n prevState: PartitionSelectorSearchState\n ): void {\n const { isLoading, itemCount } = this.state;\n const { onListResized } = this.props;\n if (\n itemCount !== prevState.itemCount ||\n isLoading !== prevState.isLoading\n ) {\n onListResized();\n }\n }\n\n componentWillUnmount(): void {\n this.debounceUpdateFilter.cancel();\n\n this.stopListening();\n }\n\n itemList: ItemList<Item> | null;\n\n searchInput: HTMLInputElement | null;\n\n timer: null;\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): boolean {\n if (this.itemList == null) {\n return false;\n }\n\n const { items, itemCount } = this.state;\n switch (event.key) {\n case 'Enter': {\n let selectedValue = null;\n if (items.length > 0) {\n selectedValue = items[0].value;\n } else {\n const { text } = this.state;\n selectedValue = text.trim();\n }\n\n if (selectedValue.length > 0) {\n const { onSelect } = this.props;\n onSelect(selectedValue);\n }\n\n event.stopPropagation();\n event.preventDefault();\n return true;\n }\n case 'ArrowDown':\n if (itemCount > 0) {\n this.itemList.focusItem(1);\n }\n event.stopPropagation();\n event.preventDefault();\n return true;\n default:\n return false;\n }\n }\n\n handleListKeydown(event: React.KeyboardEvent<HTMLDivElement>): void {\n switch (event.key) {\n case 'Escape':\n // Do nothing\n break;\n default:\n this.focus();\n break;\n }\n }\n\n handleFilterChange(): void {\n log.debug2('handleFilterChange');\n\n const { table } = this.props;\n const itemCount = table.size;\n this.setState({ itemCount, isLoading: true });\n }\n\n handleInputFocus(): void {\n if (this.itemList) {\n this.itemList.focusItem(0);\n }\n }\n\n handleSelect(itemIndex: ModelIndex): void {\n log.debug2('handleSelect', itemIndex);\n\n const { onSelect } = this.props;\n const { offset, items } = this.state;\n const offsetIndex = itemIndex - offset;\n if (offsetIndex < 0 || items.length <= offsetIndex) {\n log.error('No data for item', itemIndex);\n return;\n }\n\n const { value } = items[offsetIndex];\n onSelect(value);\n }\n\n handleTableUpdate(event: CustomEvent): void {\n const data = event.detail;\n const { offset } = data;\n\n const items = [] as Item[];\n const { getFormattedString, table } = this.props;\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n const displayValue = getFormattedString(value, column.type, column.name);\n items.push({\n displayValue,\n value,\n });\n }\n\n const itemCount = table.size;\n log.debug2('handleTableUpdate', itemCount, offset, items.length);\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n handleTextChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('handleTextChange');\n\n const { value: text } = event.target;\n\n this.setState({ text });\n\n this.debounceUpdateFilter();\n }\n\n handleViewportChange(topRow: number, bottomRow: number): void {\n log.debug2('handleViewportChange', topRow, bottomRow);\n\n const delta = Math.max(1, bottomRow - topRow);\n const top = Math.max(0, topRow - delta);\n const bottom = bottomRow + delta;\n\n const { table } = this.props;\n table.setViewport(top, bottom);\n }\n\n debounceUpdateFilter = debounce((): void => {\n this.updateFilter();\n }, DEBOUNCE_UPDATE_FILTER);\n\n focus(): void {\n if (this.searchInput) {\n this.searchInput.focus();\n }\n }\n\n startListening(): void {\n const { initialPageSize, table } = this.props;\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n table.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleFilterChange\n );\n table.setViewport(0, initialPageSize);\n }\n\n stopListening(): void {\n const { table } = this.props;\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n table.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleFilterChange\n );\n }\n\n updateFilter(): void {\n const { initialPageSize, table } = this.props;\n const { text } = this.state;\n const filterText = text.trim();\n const filters = [];\n if (filterText.length > 0) {\n const column = table.columns[0];\n const filter = column\n .filter()\n .invoke(\n 'matches',\n dh.FilterValue.ofString(`(?s)(?i).*\\\\Q${filterText}\\\\E.*`)\n );\n filters.push(filter);\n }\n\n log.debug2('updateFilter', filters);\n\n table.applyFilter(filters);\n table.setViewport(0, initialPageSize);\n }\n\n render(): JSX.Element {\n const { isLoading, itemCount, items, offset, text } = this.state;\n const listHeight =\n Math.min(itemCount, PartitionSelectorSearch.MAX_VISIBLE_ITEMS) *\n ItemList.DEFAULT_ROW_HEIGHT +\n // Adjust for ListItem vertical padding - .375rem ~ 5.25px\n 11;\n return (\n <div className=\"iris-grid-partition-selector-search\">\n <div className=\"search-container\">\n <input\n type=\"text\"\n ref={searchInput => {\n this.searchInput = searchInput;\n }}\n value={text}\n placeholder=\"Available Partitions\"\n onChange={this.handleTextChange}\n onFocus={this.handleInputFocus}\n onKeyDown={this.handleKeyDown}\n className=\"form-control input-partition\"\n />\n </div>\n {!isLoading && itemCount > 0 && (\n <div\n className=\"iris-grid-partition-selector-search-list\"\n onKeyDown={this.handleListKeydown}\n role=\"presentation\"\n style={{ height: listHeight }}\n >\n <ItemList\n ref={itemList => {\n this.itemList = itemList;\n }}\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n />\n </div>\n )}\n {!isLoading && itemCount === 0 && (\n <div className=\"iris-grid-partition-selector-search-empty\">\n No results\n </div>\n )}\n {isLoading && (\n <div className=\"iris-grid-partition-selector-loading\">\n <LoadingSpinner />\n &nbsp;Loading...\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default PartitionSelectorSearch;\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { PureComponent } from 'react';
2
2
  import { MoveOperation } from '@deephaven/grid';
3
- import type { Column, FilterCondition, Sort, Table, TableViewportSubscription } from '@deephaven/jsapi-types';
3
+ import { Column, FilterCondition, Sort, Table, TableViewportSubscription } from '@deephaven/jsapi-shim';
4
4
  import { ColumnName } from './CommonTypes';
5
5
  /**
6
6
  * Updates the viewport for an Iris table, for use in a scroll pane.
@@ -1 +1 @@
1
- {"version":3,"file":"TableViewportUpdater.d.ts","sourceRoot":"","sources":["../src/TableViewportUpdater.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAa,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EACV,MAAM,EACN,eAAe,EACf,IAAI,EACJ,KAAK,EACL,yBAAyB,EAC1B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAM3C;;;GAGG;AAEH,UAAU,yBAAyB;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,EAAE,UAAU,EAAE,CAAC;IAC5B,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,cAAc,EAAE,CAAC,YAAY,CAAC,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACpE;AAED,cAAM,oBAAqB,SAAQ,aAAa,CAC9C,yBAAyB,EACzB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IAEC,MAAM,CAAC,gBAAgB,SAAK;IAE5B,MAAM,CAAC,mBAAmB,SAAK;IAE/B,MAAM,CAAC,YAAY;;;;;;8BAMG,IAAI;;;;;MAKxB;IAEF,iBAAiB,IAAI,IAAI;IAkBzB,kBAAkB,CAAC,SAAS,EAAE,yBAAyB,GAAG,IAAI;IA2C9D,oBAAoB,IAAI,IAAI;IAI5B,YAAY,CAAC,EAAE,yBAAyB,CAAC;IAGzC,mBAAmB,UAAmB,KAAK,OAAO,MAAM,UAAU,MAAM,cASrE;IAGH,kBAAkB,UAEP,KAAK,QACN,MAAM,SACL,MAAM,gBACC,aAAa,EAAE,qBAyB/B;IAEF,iBAAiB,IAAI,IAAI;IAazB,cAAc,uCAEL,MAAM,UACH,MAAM,QACR,MAAM,SACL,MAAM,eACA,MAAM,EAAE,KACpB,IAAI,EA4CP;IAEF,MAAM,IAAI,IAAI;CAGf;AAED,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"TableViewportUpdater.d.ts","sourceRoot":"","sources":["../src/TableViewportUpdater.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAa,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,MAAM,EACN,eAAe,EACf,IAAI,EACJ,KAAK,EACL,yBAAyB,EAC1B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAM3C;;;GAGG;AAEH,UAAU,yBAAyB;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,EAAE,UAAU,EAAE,CAAC;IAC5B,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,cAAc,EAAE,CAAC,YAAY,CAAC,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACpE;AAED,cAAM,oBAAqB,SAAQ,aAAa,CAC9C,yBAAyB,EACzB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IAEC,MAAM,CAAC,gBAAgB,SAAK;IAE5B,MAAM,CAAC,mBAAmB,SAAK;IAE/B,MAAM,CAAC,YAAY;;;;;;8BAMG,IAAI;;;;;MAKxB;IAEF,iBAAiB,IAAI,IAAI;IAkBzB,kBAAkB,CAAC,SAAS,EAAE,yBAAyB,GAAG,IAAI;IA2C9D,oBAAoB,IAAI,IAAI;IAI5B,YAAY,CAAC,EAAE,yBAAyB,CAAC;IAGzC,mBAAmB,UAAmB,KAAK,OAAO,MAAM,UAAU,MAAM,cASrE;IAGH,kBAAkB,UAEP,KAAK,QACN,MAAM,SACL,MAAM,gBACC,aAAa,EAAE,qBAyB/B;IAEF,iBAAiB,IAAI,IAAI;IAazB,cAAc,uCAEL,MAAM,UACH,MAAM,QACR,MAAM,SACL,MAAM,eACA,MAAM,EAAE,KACpB,IAAI,EA4CP;IAEF,MAAM,IAAI,IAAI;CAGf;AAED,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableViewportUpdater.js","names":["PureComponent","memoize","throttle","GridUtils","Log","log","module","UPDATE_THROTTLE","TableViewportUpdater","table","top","bottom","viewHeight","viewportTop","Math","max","ROW_BUFFER_PAGES","viewportBottom","left","right","movedColumns","viewWidth","viewportLeft","COLUMN_BUFFER_PAGES","viewportRight","min","columns","length","i","modelIndex","getModelIndex","push","viewColumns","error","debug2","props","getViewportRowRange","getViewportColumns","subscription","setViewport","onSubscription","componentDidMount","filters","sorts","customColumns","applyFilter","applySort","applyCustomColumns","updateViewport","componentDidUpdate","prevProps","isFilterChanged","isSortChanged","isCustomColumnsChanged","isTableChanged","closeSubscription","debug","componentWillUnmount","close","undefined","cancel","render"],"sources":["../src/TableViewportUpdater.tsx"],"sourcesContent":["import { PureComponent } from 'react';\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport { GridUtils, MoveOperation } from '@deephaven/grid';\nimport type {\n Column,\n FilterCondition,\n Sort,\n Table,\n TableViewportSubscription,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { ColumnName } from './CommonTypes';\n\nconst log = Log.module('TableViewportUpdater');\n\nconst UPDATE_THROTTLE = 150;\n\n/**\n * Updates the viewport for an Iris table, for use in a scroll pane.\n * Automatically throttles the viewport requests and buffers above and below.\n */\n\ninterface TableViewportUpdaterProps {\n table: Table;\n top: number;\n bottom: number;\n left: number;\n right: number;\n columns: Column[];\n filters: FilterCondition[];\n sorts: Sort[];\n customColumns: ColumnName[];\n movedColumns: MoveOperation[];\n onSubscription: (subscription?: TableViewportSubscription) => void;\n}\n\nclass TableViewportUpdater extends PureComponent<\n TableViewportUpdaterProps,\n Record<string, never>\n> {\n // Number of pages to buffer for rows/columns\n static ROW_BUFFER_PAGES = 3;\n\n static COLUMN_BUFFER_PAGES = 1;\n\n static defaultProps = {\n top: 0,\n bottom: 0,\n left: null,\n right: null,\n columns: null,\n onSubscription: (): void => undefined,\n filters: [],\n sorts: [],\n customColumns: [],\n movedColumns: [],\n };\n\n componentDidMount(): void {\n const {\n top,\n bottom,\n left,\n right,\n table,\n filters,\n sorts,\n columns,\n customColumns,\n } = this.props;\n table.applyFilter(filters);\n table.applySort(sorts);\n table.applyCustomColumns(customColumns);\n this.updateViewport(top, bottom, left, right, columns);\n }\n\n componentDidUpdate(prevProps: TableViewportUpdaterProps): void {\n const {\n top,\n bottom,\n left,\n right,\n table,\n filters,\n sorts,\n customColumns,\n columns,\n } = this.props;\n const isFilterChanged = filters !== prevProps.filters;\n const isSortChanged = sorts !== prevProps.sorts;\n const isCustomColumnsChanged = customColumns !== prevProps.customColumns;\n const isTableChanged = table !== prevProps.table;\n if (\n isFilterChanged ||\n isSortChanged ||\n isCustomColumnsChanged ||\n isTableChanged\n ) {\n this.closeSubscription();\n }\n\n if (isFilterChanged || isTableChanged) {\n log.debug('update table filter', filters);\n table.applyFilter(filters);\n }\n\n if (isSortChanged || isTableChanged) {\n log.debug('update table sort', sorts);\n table.applySort(sorts);\n }\n\n if (isCustomColumnsChanged || isTableChanged) {\n log.debug('update table custom columns', customColumns);\n table.applyCustomColumns(customColumns);\n }\n\n this.updateViewport(top, bottom, left, right, columns);\n }\n\n componentWillUnmount(): void {\n this.closeSubscription();\n }\n\n subscription?: TableViewportSubscription;\n\n // eslint-disable-next-line class-methods-use-this\n getViewportRowRange = memoize((table: Table, top: number, bottom: number) => {\n const viewHeight = bottom - top;\n const viewportTop = Math.max(\n 0,\n top - viewHeight * TableViewportUpdater.ROW_BUFFER_PAGES\n );\n const viewportBottom =\n bottom + viewHeight * TableViewportUpdater.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n });\n\n // eslint-disable-next-line class-methods-use-this\n getViewportColumns = memoize(\n (\n table: Table,\n left: number,\n right: number,\n movedColumns: MoveOperation[]\n ) => {\n if (left == null || right == null) {\n return null;\n }\n\n const viewWidth = right - left;\n const viewportLeft = Math.max(\n 0,\n left - viewWidth * TableViewportUpdater.COLUMN_BUFFER_PAGES\n );\n const viewportRight = Math.min(\n right + viewWidth * TableViewportUpdater.COLUMN_BUFFER_PAGES,\n table.columns.length - 1\n );\n\n // Need to get all the columns from the table model now\n const columns = [];\n for (let i = viewportLeft; i <= viewportRight; i += 1) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n columns.push(table.columns[modelIndex]);\n }\n\n return columns;\n }\n );\n\n closeSubscription(): void {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = undefined;\n\n const { onSubscription } = this.props;\n onSubscription();\n }\n\n this.updateViewport.cancel();\n }\n\n updateViewport = throttle(\n (\n top: number,\n bottom: number,\n left: number,\n right: number,\n viewColumns: Column[]\n ): void => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n\n if (top === 0 && bottom === 0) {\n log.debug2('Ignoring 0-0 viewport');\n return;\n }\n\n const { movedColumns, table } = this.props;\n const [viewportTop, viewportBottom] = this.getViewportRowRange(\n table,\n top,\n bottom\n );\n const columns =\n viewColumns ??\n this.getViewportColumns(table, left, right, movedColumns);\n log.debug2(\n 'Setting Viewport Top:',\n viewportTop,\n 'Bottom:',\n viewportBottom,\n 'Columns:',\n columns\n );\n if (this.subscription == null) {\n log.debug2('updateViewport creating new subscription');\n this.subscription = table.setViewport(\n viewportTop,\n viewportBottom,\n columns\n );\n\n const { onSubscription } = this.props;\n onSubscription(this.subscription);\n } else {\n log.debug2('updateViewport using existing subscription');\n this.subscription.setViewport(viewportTop, viewportBottom, columns);\n }\n },\n UPDATE_THROTTLE\n );\n\n render(): null {\n return null;\n }\n}\n\nexport default TableViewportUpdater;\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableViewportUpdater.js","names":["PureComponent","memoize","throttle","GridUtils","Log","log","module","UPDATE_THROTTLE","TableViewportUpdater","table","top","bottom","viewHeight","viewportTop","Math","max","ROW_BUFFER_PAGES","viewportBottom","left","right","movedColumns","viewWidth","viewportLeft","COLUMN_BUFFER_PAGES","viewportRight","min","columns","length","i","modelIndex","getModelIndex","push","viewColumns","error","debug2","props","getViewportRowRange","getViewportColumns","subscription","setViewport","onSubscription","componentDidMount","filters","sorts","customColumns","applyFilter","applySort","applyCustomColumns","updateViewport","componentDidUpdate","prevProps","isFilterChanged","isSortChanged","isCustomColumnsChanged","isTableChanged","closeSubscription","debug","componentWillUnmount","close","undefined","cancel","render"],"sources":["../src/TableViewportUpdater.tsx"],"sourcesContent":["import { PureComponent } from 'react';\nimport memoize from 'memoize-one';\nimport throttle from 'lodash.throttle';\nimport { GridUtils, MoveOperation } from '@deephaven/grid';\nimport {\n Column,\n FilterCondition,\n Sort,\n Table,\n TableViewportSubscription,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { ColumnName } from './CommonTypes';\n\nconst log = Log.module('TableViewportUpdater');\n\nconst UPDATE_THROTTLE = 150;\n\n/**\n * Updates the viewport for an Iris table, for use in a scroll pane.\n * Automatically throttles the viewport requests and buffers above and below.\n */\n\ninterface TableViewportUpdaterProps {\n table: Table;\n top: number;\n bottom: number;\n left: number;\n right: number;\n columns: Column[];\n filters: FilterCondition[];\n sorts: Sort[];\n customColumns: ColumnName[];\n movedColumns: MoveOperation[];\n onSubscription: (subscription?: TableViewportSubscription) => void;\n}\n\nclass TableViewportUpdater extends PureComponent<\n TableViewportUpdaterProps,\n Record<string, never>\n> {\n // Number of pages to buffer for rows/columns\n static ROW_BUFFER_PAGES = 3;\n\n static COLUMN_BUFFER_PAGES = 1;\n\n static defaultProps = {\n top: 0,\n bottom: 0,\n left: null,\n right: null,\n columns: null,\n onSubscription: (): void => undefined,\n filters: [],\n sorts: [],\n customColumns: [],\n movedColumns: [],\n };\n\n componentDidMount(): void {\n const {\n top,\n bottom,\n left,\n right,\n table,\n filters,\n sorts,\n columns,\n customColumns,\n } = this.props;\n table.applyFilter(filters);\n table.applySort(sorts);\n table.applyCustomColumns(customColumns);\n this.updateViewport(top, bottom, left, right, columns);\n }\n\n componentDidUpdate(prevProps: TableViewportUpdaterProps): void {\n const {\n top,\n bottom,\n left,\n right,\n table,\n filters,\n sorts,\n customColumns,\n columns,\n } = this.props;\n const isFilterChanged = filters !== prevProps.filters;\n const isSortChanged = sorts !== prevProps.sorts;\n const isCustomColumnsChanged = customColumns !== prevProps.customColumns;\n const isTableChanged = table !== prevProps.table;\n if (\n isFilterChanged ||\n isSortChanged ||\n isCustomColumnsChanged ||\n isTableChanged\n ) {\n this.closeSubscription();\n }\n\n if (isFilterChanged || isTableChanged) {\n log.debug('update table filter', filters);\n table.applyFilter(filters);\n }\n\n if (isSortChanged || isTableChanged) {\n log.debug('update table sort', sorts);\n table.applySort(sorts);\n }\n\n if (isCustomColumnsChanged || isTableChanged) {\n log.debug('update table custom columns', customColumns);\n table.applyCustomColumns(customColumns);\n }\n\n this.updateViewport(top, bottom, left, right, columns);\n }\n\n componentWillUnmount(): void {\n this.closeSubscription();\n }\n\n subscription?: TableViewportSubscription;\n\n // eslint-disable-next-line class-methods-use-this\n getViewportRowRange = memoize((table: Table, top: number, bottom: number) => {\n const viewHeight = bottom - top;\n const viewportTop = Math.max(\n 0,\n top - viewHeight * TableViewportUpdater.ROW_BUFFER_PAGES\n );\n const viewportBottom =\n bottom + viewHeight * TableViewportUpdater.ROW_BUFFER_PAGES;\n return [viewportTop, viewportBottom];\n });\n\n // eslint-disable-next-line class-methods-use-this\n getViewportColumns = memoize(\n (\n table: Table,\n left: number,\n right: number,\n movedColumns: MoveOperation[]\n ) => {\n if (left == null || right == null) {\n return null;\n }\n\n const viewWidth = right - left;\n const viewportLeft = Math.max(\n 0,\n left - viewWidth * TableViewportUpdater.COLUMN_BUFFER_PAGES\n );\n const viewportRight = Math.min(\n right + viewWidth * TableViewportUpdater.COLUMN_BUFFER_PAGES,\n table.columns.length - 1\n );\n\n // Need to get all the columns from the table model now\n const columns = [];\n for (let i = viewportLeft; i <= viewportRight; i += 1) {\n const modelIndex = GridUtils.getModelIndex(i, movedColumns);\n columns.push(table.columns[modelIndex]);\n }\n\n return columns;\n }\n );\n\n closeSubscription(): void {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = undefined;\n\n const { onSubscription } = this.props;\n onSubscription();\n }\n\n this.updateViewport.cancel();\n }\n\n updateViewport = throttle(\n (\n top: number,\n bottom: number,\n left: number,\n right: number,\n viewColumns: Column[]\n ): void => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n\n if (top === 0 && bottom === 0) {\n log.debug2('Ignoring 0-0 viewport');\n return;\n }\n\n const { movedColumns, table } = this.props;\n const [viewportTop, viewportBottom] = this.getViewportRowRange(\n table,\n top,\n bottom\n );\n const columns =\n viewColumns ??\n this.getViewportColumns(table, left, right, movedColumns);\n log.debug2(\n 'Setting Viewport Top:',\n viewportTop,\n 'Bottom:',\n viewportBottom,\n 'Columns:',\n columns\n );\n if (this.subscription == null) {\n log.debug2('updateViewport creating new subscription');\n this.subscription = table.setViewport(\n viewportTop,\n viewportBottom,\n columns\n );\n\n const { onSubscription } = this.props;\n onSubscription(this.subscription);\n } else {\n log.debug2('updateViewport using existing subscription');\n this.subscription.setViewport(viewportTop, viewportBottom, columns);\n }\n },\n UPDATE_THROTTLE\n );\n\n render(): null {\n return null;\n }\n}\n\nexport default TableViewportUpdater;\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { PureComponent } from 'react';
2
- import type { dh as DhType, EventListener, FilterCondition, RemoverFn, Sort, Table } from '@deephaven/jsapi-types';
2
+ import { EventListener, FilterCondition, RemoverFn, Sort, Table } from '@deephaven/jsapi-shim';
3
3
  interface TreeTableViewportUpdaterProps {
4
- dh: DhType;
5
4
  table: Table;
6
5
  top: number;
7
6
  bottom: number;
@@ -1 +1 @@
1
- {"version":3,"file":"TreeTableViewportUpdater.d.ts","sourceRoot":"","sources":["../src/TreeTableViewportUpdater.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,KAAK,EACV,EAAE,IAAI,MAAM,EACZ,aAAa,EACb,eAAe,EACf,SAAS,EACT,IAAI,EACJ,KAAK,EACN,MAAM,wBAAwB,CAAC;AAOhC,UAAU,6BAA6B;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,aAAa,CAAC;CACjC;AAED;;;GAGG;AACH,cAAM,wBAAyB,SAAQ,aAAa,CAClD,6BAA6B,EAC7B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,eAAe,SAAQ;IAE9B,MAAM,CAAC,YAAY;;;gCAGK,IAAI;;;;MAI1B;gBAEU,KAAK,EAAE,6BAA6B;IAMhD,iBAAiB,IAAI,IAAI;IAQzB,kBAAkB,CAAC,SAAS,EAAE,6BAA6B,GAAG,IAAI;IAelE,oBAAoB,IAAI,IAAI;IAO5B,eAAe,EAAE,SAAS,GAAG,IAAI,CAAC;IAElC,cAAc,uCAAkB,MAAM,UAAU,MAAM,KAAG,IAAI,EAgCzC;IAEpB,MAAM,IAAI,IAAI;CAGf;AAED,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"TreeTableViewportUpdater.d.ts","sourceRoot":"","sources":["../src/TreeTableViewportUpdater.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAW,EACT,aAAa,EACb,eAAe,EACf,SAAS,EACT,IAAI,EACJ,KAAK,EACN,MAAM,uBAAuB,CAAC;AAO/B,UAAU,6BAA6B;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,aAAa,CAAC;CACjC;AAED;;;GAGG;AACH,cAAM,wBAAyB,SAAQ,aAAa,CAClD,6BAA6B,EAC7B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,eAAe,SAAQ;IAE9B,MAAM,CAAC,YAAY;;;gCAGK,IAAI;;;;MAI1B;gBAEU,KAAK,EAAE,6BAA6B;IAMhD,iBAAiB,IAAI,IAAI;IAQzB,kBAAkB,CAAC,SAAS,EAAE,6BAA6B,GAAG,IAAI;IAelE,oBAAoB,IAAI,IAAI;IAO5B,eAAe,EAAE,SAAS,GAAG,IAAI,CAAC;IAElC,cAAc,uCAAkB,MAAM,UAAU,MAAM,KAAG,IAAI,EAgCzC;IAEpB,MAAM,IAAI,IAAI;CAGf;AAED,eAAe,wBAAwB,CAAC"}
@@ -3,6 +3,7 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typ
3
3
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
4
  import { PureComponent } from 'react';
5
5
  import throttle from 'lodash.throttle';
6
+ import dh from '@deephaven/jsapi-shim';
6
7
  import Log from '@deephaven/log';
7
8
  var log = Log.module('TreeTableViewportUpdater');
8
9
  var UPDATE_THROTTLE = 150;
@@ -33,7 +34,6 @@ class TreeTableViewportUpdater extends PureComponent {
33
34
  log.debug2('Setting Viewport Top:', viewportTop, 'Bottom:', viewportBottom, table);
34
35
  if (!this.listenerCleanup) {
35
36
  var {
36
- dh,
37
37
  onViewportUpdate
38
38
  } = this.props;
39
39
  this.listenerCleanup = table.addEventListener(dh.TreeTable.EVENT_UPDATED, onViewportUpdate);
@@ -1 +1 @@
1
- {"version":3,"file":"TreeTableViewportUpdater.js","names":["PureComponent","throttle","Log","log","module","UPDATE_THROTTLE","TreeTableViewportUpdater","constructor","props","top","bottom","error","debug2","table","updateInterval","viewSize","viewportTop","Math","max","viewportBottom","listenerCleanup","dh","onViewportUpdate","addEventListener","TreeTable","EVENT_UPDATED","setViewport","undefined","componentDidMount","filters","sorts","debug","applyFilter","applySort","updateViewport","componentDidUpdate","prevProps","componentWillUnmount","cancel","render","UPDATE_INTERVAL"],"sources":["../src/TreeTableViewportUpdater.tsx"],"sourcesContent":["import { PureComponent } from 'react';\nimport throttle from 'lodash.throttle';\nimport type {\n dh as DhType,\n EventListener,\n FilterCondition,\n RemoverFn,\n Sort,\n Table,\n} from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('TreeTableViewportUpdater');\n\nconst UPDATE_THROTTLE = 150;\n\ninterface TreeTableViewportUpdaterProps {\n dh: DhType;\n table: Table;\n top: number;\n bottom: number;\n filters: FilterCondition[];\n sorts: Sort[];\n updateInterval: number;\n onViewportUpdate: EventListener;\n}\n\n/**\n * Updates the viewport of a TreeTable for use in a scroll pane.\n * Automatically throttles the viewport requests and buffers above and below.\n */\nclass TreeTableViewportUpdater extends PureComponent<\n TreeTableViewportUpdaterProps,\n Record<string, never>\n> {\n static UPDATE_INTERVAL = 1000;\n\n static defaultProps = {\n top: 0,\n bottom: 0,\n onViewportUpdate: (): void => undefined,\n filters: [],\n sorts: [],\n updateInterval: TreeTableViewportUpdater.UPDATE_INTERVAL,\n };\n\n constructor(props: TreeTableViewportUpdaterProps) {\n super(props);\n\n this.listenerCleanup = null;\n }\n\n componentDidMount(): void {\n const { top, bottom, table, filters, sorts } = this.props;\n log.debug('componentDidMount', this.props);\n table.applyFilter(filters);\n table.applySort(sorts);\n this.updateViewport(top, bottom);\n }\n\n componentDidUpdate(prevProps: TreeTableViewportUpdaterProps): void {\n const { top, bottom, table, filters, sorts } = this.props;\n if (filters !== prevProps.filters) {\n log.debug('update table filter', filters);\n table.applyFilter(filters);\n }\n\n if (sorts !== prevProps.sorts) {\n log.debug('update table sort', sorts);\n table.applySort(sorts);\n }\n\n this.updateViewport(top, bottom);\n }\n\n componentWillUnmount(): void {\n this.updateViewport.cancel();\n if (this.listenerCleanup) {\n this.listenerCleanup();\n }\n }\n\n listenerCleanup: RemoverFn | null;\n\n updateViewport = throttle((top: number, bottom: number): void => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n\n if (top === 0 && bottom === 0) {\n log.debug2('Ignoring 0-0 viewport');\n return;\n }\n\n const { table, updateInterval } = this.props;\n const viewSize = bottom - top;\n const viewportTop = Math.max(0, top - viewSize * 3);\n const viewportBottom = bottom + viewSize * 3 + 1;\n log.debug2(\n 'Setting Viewport Top:',\n viewportTop,\n 'Bottom:',\n viewportBottom,\n table\n );\n\n if (!this.listenerCleanup) {\n const { dh, onViewportUpdate } = this.props;\n this.listenerCleanup = table.addEventListener(\n dh.TreeTable.EVENT_UPDATED,\n onViewportUpdate\n );\n }\n\n table.setViewport(viewportTop, viewportBottom, undefined, updateInterval);\n }, UPDATE_THROTTLE);\n\n render(): null {\n return null;\n }\n}\n\nexport default TreeTableViewportUpdater;\n"],"mappings":"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"}
1
+ {"version":3,"file":"TreeTableViewportUpdater.js","names":["PureComponent","throttle","dh","Log","log","module","UPDATE_THROTTLE","TreeTableViewportUpdater","constructor","props","top","bottom","error","debug2","table","updateInterval","viewSize","viewportTop","Math","max","viewportBottom","listenerCleanup","onViewportUpdate","addEventListener","TreeTable","EVENT_UPDATED","setViewport","undefined","componentDidMount","filters","sorts","debug","applyFilter","applySort","updateViewport","componentDidUpdate","prevProps","componentWillUnmount","cancel","render","UPDATE_INTERVAL"],"sources":["../src/TreeTableViewportUpdater.tsx"],"sourcesContent":["import { PureComponent } from 'react';\nimport throttle from 'lodash.throttle';\nimport dh, {\n EventListener,\n FilterCondition,\n RemoverFn,\n Sort,\n Table,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('TreeTableViewportUpdater');\n\nconst UPDATE_THROTTLE = 150;\n\ninterface TreeTableViewportUpdaterProps {\n table: Table;\n top: number;\n bottom: number;\n filters: FilterCondition[];\n sorts: Sort[];\n updateInterval: number;\n onViewportUpdate: EventListener;\n}\n\n/**\n * Updates the viewport of a TreeTable for use in a scroll pane.\n * Automatically throttles the viewport requests and buffers above and below.\n */\nclass TreeTableViewportUpdater extends PureComponent<\n TreeTableViewportUpdaterProps,\n Record<string, never>\n> {\n static UPDATE_INTERVAL = 1000;\n\n static defaultProps = {\n top: 0,\n bottom: 0,\n onViewportUpdate: (): void => undefined,\n filters: [],\n sorts: [],\n updateInterval: TreeTableViewportUpdater.UPDATE_INTERVAL,\n };\n\n constructor(props: TreeTableViewportUpdaterProps) {\n super(props);\n\n this.listenerCleanup = null;\n }\n\n componentDidMount(): void {\n const { top, bottom, table, filters, sorts } = this.props;\n log.debug('componentDidMount', this.props);\n table.applyFilter(filters);\n table.applySort(sorts);\n this.updateViewport(top, bottom);\n }\n\n componentDidUpdate(prevProps: TreeTableViewportUpdaterProps): void {\n const { top, bottom, table, filters, sorts } = this.props;\n if (filters !== prevProps.filters) {\n log.debug('update table filter', filters);\n table.applyFilter(filters);\n }\n\n if (sorts !== prevProps.sorts) {\n log.debug('update table sort', sorts);\n table.applySort(sorts);\n }\n\n this.updateViewport(top, bottom);\n }\n\n componentWillUnmount(): void {\n this.updateViewport.cancel();\n if (this.listenerCleanup) {\n this.listenerCleanup();\n }\n }\n\n listenerCleanup: RemoverFn | null;\n\n updateViewport = throttle((top: number, bottom: number): void => {\n if (bottom < top) {\n log.error('Invalid viewport', top, bottom);\n return;\n }\n\n if (top === 0 && bottom === 0) {\n log.debug2('Ignoring 0-0 viewport');\n return;\n }\n\n const { table, updateInterval } = this.props;\n const viewSize = bottom - top;\n const viewportTop = Math.max(0, top - viewSize * 3);\n const viewportBottom = bottom + viewSize * 3 + 1;\n log.debug2(\n 'Setting Viewport Top:',\n viewportTop,\n 'Bottom:',\n viewportBottom,\n table\n );\n\n if (!this.listenerCleanup) {\n const { onViewportUpdate } = this.props;\n this.listenerCleanup = table.addEventListener(\n dh.TreeTable.EVENT_UPDATED,\n onViewportUpdate\n );\n }\n\n table.setViewport(viewportTop, viewportBottom, undefined, updateInterval);\n }, UPDATE_THROTTLE);\n\n render(): null {\n return null;\n }\n}\n\nexport default TreeTableViewportUpdater;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridColumnSelectMouseHandler.js","names":["GridMouseHandler","IrisGridColumnSelectMouseHandler","constructor","irisGrid","cursor","isActive","isSelectingColumn","props","isValidColumn","tableColumn","columnSelectionValidator","updateColumnSelectionStatus","getTableColumn","columnIndex","model","modelColumn","getModelColumn","columns","onMove","gridPoint","columnAllowedCursor","columnNotAllowedCursor","column","setState","hoverSelectColumn","onWheel","preventDefault","stopPropagation","onLeave","onDown","onClick","selectColumn"],"sources":["../../src/mousehandlers/IrisGridColumnSelectMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport {\n GridMouseHandler,\n GridPoint,\n EventHandlerResult,\n} from '@deephaven/grid';\nimport type { Column } from '@deephaven/jsapi-types';\nimport { IrisGrid } from '../IrisGrid';\n\n/**\n * Handles interaction with tables when the Linker tool is active\n */\nclass IrisGridColumnSelectMouseHandler extends GridMouseHandler {\n constructor(irisGrid: IrisGrid) {\n super();\n\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n\n private irisGrid: IrisGrid;\n\n private isActive(): boolean {\n const { isSelectingColumn } = this.irisGrid.props;\n return isSelectingColumn;\n }\n\n private isValidColumn(tableColumn: Column | null): boolean {\n if (tableColumn == null) {\n return false;\n }\n\n const { columnSelectionValidator } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n return columnSelectionValidator(tableColumn);\n }\n return true;\n }\n\n private updateColumnSelectionStatus(): void {\n const { columnSelectionValidator } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n columnSelectionValidator(null);\n }\n }\n\n private getTableColumn(columnIndex: number | null): Column | null {\n if (columnIndex == null) {\n return null;\n }\n\n const { model } = this.irisGrid.props;\n const modelColumn = this.irisGrid.getModelColumn(columnIndex);\n if (modelColumn == null) {\n return null;\n }\n\n return model.columns[modelColumn];\n }\n\n onMove(gridPoint: GridPoint): EventHandlerResult {\n if (!this.isActive()) {\n return false;\n }\n\n const { columnAllowedCursor, columnNotAllowedCursor } = this.irisGrid.props;\n const { column } = gridPoint;\n const tableColumn = this.getTableColumn(column);\n\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n this.irisGrid.setState({ hoverSelectColumn: column });\n } else {\n this.cursor = columnNotAllowedCursor;\n this.irisGrid.setState({ hoverSelectColumn: null });\n }\n\n return true;\n }\n\n // keeps linker cursor state during wheel event\n onWheel(gridPoint: GridPoint): EventHandlerResult {\n if (!this.isActive()) {\n return false;\n }\n\n const { columnAllowedCursor, columnNotAllowedCursor } = this.irisGrid.props;\n const { column } = gridPoint;\n const tableColumn = this.getTableColumn(column);\n\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n this.irisGrid.setState({ hoverSelectColumn: column });\n } else {\n this.cursor = columnNotAllowedCursor;\n this.irisGrid.setState({ hoverSelectColumn: null });\n }\n\n // don't block wheel event from scrolling\n return { preventDefault: false, stopPropagation: false };\n }\n\n onLeave(): EventHandlerResult {\n if (this.isActive()) {\n this.irisGrid.setState({ hoverSelectColumn: null });\n }\n\n this.updateColumnSelectionStatus();\n\n return false;\n }\n\n onDown(): EventHandlerResult {\n return this.isActive();\n }\n\n onClick(gridPoint: GridPoint): EventHandlerResult {\n if (!this.isActive()) {\n return false;\n }\n\n const { column } = gridPoint;\n const tableColumn = this.getTableColumn(column);\n if (tableColumn != null && this.isValidColumn(tableColumn)) {\n this.irisGrid.selectColumn(tableColumn);\n }\n\n return true;\n }\n}\n\nexport default IrisGridColumnSelectMouseHandler;\n"],"mappings":"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"}
1
+ {"version":3,"file":"IrisGridColumnSelectMouseHandler.js","names":["GridMouseHandler","IrisGridColumnSelectMouseHandler","constructor","irisGrid","cursor","isActive","isSelectingColumn","props","isValidColumn","tableColumn","columnSelectionValidator","updateColumnSelectionStatus","getTableColumn","columnIndex","model","modelColumn","getModelColumn","columns","onMove","gridPoint","columnAllowedCursor","columnNotAllowedCursor","column","setState","hoverSelectColumn","onWheel","preventDefault","stopPropagation","onLeave","onDown","onClick","selectColumn"],"sources":["../../src/mousehandlers/IrisGridColumnSelectMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport {\n GridMouseHandler,\n GridPoint,\n EventHandlerResult,\n} from '@deephaven/grid';\nimport type { Column } from '@deephaven/jsapi-shim';\nimport { IrisGrid } from '../IrisGrid';\n\n/**\n * Handles interaction with tables when the Linker tool is active\n */\nclass IrisGridColumnSelectMouseHandler extends GridMouseHandler {\n constructor(irisGrid: IrisGrid) {\n super();\n\n this.irisGrid = irisGrid;\n this.cursor = null;\n }\n\n private irisGrid: IrisGrid;\n\n private isActive(): boolean {\n const { isSelectingColumn } = this.irisGrid.props;\n return isSelectingColumn;\n }\n\n private isValidColumn(tableColumn: Column | null): boolean {\n if (tableColumn == null) {\n return false;\n }\n\n const { columnSelectionValidator } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n return columnSelectionValidator(tableColumn);\n }\n return true;\n }\n\n private updateColumnSelectionStatus(): void {\n const { columnSelectionValidator } = this.irisGrid.props;\n if (columnSelectionValidator != null) {\n columnSelectionValidator(null);\n }\n }\n\n private getTableColumn(columnIndex: number | null): Column | null {\n if (columnIndex == null) {\n return null;\n }\n\n const { model } = this.irisGrid.props;\n const modelColumn = this.irisGrid.getModelColumn(columnIndex);\n if (modelColumn == null) {\n return null;\n }\n\n return model.columns[modelColumn];\n }\n\n onMove(gridPoint: GridPoint): EventHandlerResult {\n if (!this.isActive()) {\n return false;\n }\n\n const { columnAllowedCursor, columnNotAllowedCursor } = this.irisGrid.props;\n const { column } = gridPoint;\n const tableColumn = this.getTableColumn(column);\n\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n this.irisGrid.setState({ hoverSelectColumn: column });\n } else {\n this.cursor = columnNotAllowedCursor;\n this.irisGrid.setState({ hoverSelectColumn: null });\n }\n\n return true;\n }\n\n // keeps linker cursor state during wheel event\n onWheel(gridPoint: GridPoint): EventHandlerResult {\n if (!this.isActive()) {\n return false;\n }\n\n const { columnAllowedCursor, columnNotAllowedCursor } = this.irisGrid.props;\n const { column } = gridPoint;\n const tableColumn = this.getTableColumn(column);\n\n if (this.isValidColumn(tableColumn)) {\n this.cursor = columnAllowedCursor;\n this.irisGrid.setState({ hoverSelectColumn: column });\n } else {\n this.cursor = columnNotAllowedCursor;\n this.irisGrid.setState({ hoverSelectColumn: null });\n }\n\n // don't block wheel event from scrolling\n return { preventDefault: false, stopPropagation: false };\n }\n\n onLeave(): EventHandlerResult {\n if (this.isActive()) {\n this.irisGrid.setState({ hoverSelectColumn: null });\n }\n\n this.updateColumnSelectionStatus();\n\n return false;\n }\n\n onDown(): EventHandlerResult {\n return this.isActive();\n }\n\n onClick(gridPoint: GridPoint): EventHandlerResult {\n if (!this.isActive()) {\n return false;\n }\n\n const { column } = gridPoint;\n const tableColumn = this.getTableColumn(column);\n if (tableColumn != null && this.isValidColumn(tableColumn)) {\n this.irisGrid.selectColumn(tableColumn);\n }\n\n return true;\n }\n}\n\nexport default IrisGridColumnSelectMouseHandler;\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { ContextAction } from '@deephaven/components';
3
3
  import { EventHandlerResult, Grid, GridMouseHandler, GridPoint, ModelIndex } from '@deephaven/grid';
4
- import type { Column, dh as DhType, FilterCondition, FilterValue, Sort } from '@deephaven/jsapi-types';
4
+ import { Column, FilterCondition, FilterValue, Sort } from '@deephaven/jsapi-shim';
5
5
  import { TableColumnFormat, SortDirection } from '@deephaven/jsapi-utils';
6
6
  import type { DebouncedFunc } from 'lodash';
7
7
  import './IrisGridContextMenuHandler.scss';
@@ -43,21 +43,20 @@ declare class IrisGridContextMenuHandler extends GridMouseHandler {
43
43
  * Converts operator to text string,
44
44
  */
45
45
  static getOperatorAsText(operator: '&&' | '||'): 'And' | 'Or';
46
+ /**
47
+ * Gets an equality filter for the provided numeric value
48
+ * @param column The column to make the filter for
49
+ * @param value The value to get the equality filter for
50
+ */
51
+ static getNumberValueEqualsFilter(column: Column, value: number): FilterCondition;
52
+ static getFilterValueForNumberOrChar(columnType: string, value: unknown): FilterValue;
46
53
  static getRowOptionFormatted(command: string, cellValue: string, len?: number): string;
47
54
  irisGrid: IrisGrid;
48
55
  debouncedUpdateCustomFormat: DebouncedFunc<(modelIndex: number, selectedFormat: TableColumnFormat | null) => void>;
49
- constructor(irisGrid: IrisGrid, dh: DhType);
56
+ constructor(irisGrid: IrisGrid);
50
57
  componentWillUnmount(): void;
51
- dh: DhType;
52
58
  getHeaderActions(modelIndex: ModelIndex, gridPoint: GridPoint): ContextAction[];
53
59
  getCellActions(modelColumn: number | undefined | null, grid: Grid, gridPoint: GridPoint): ContextAction[];
54
- /**
55
- * Gets an equality filter for the provided numeric value
56
- * @param column The column to make the filter for
57
- * @param value The value to get the equality filter for
58
- */
59
- getNumberValueEqualsFilter(column: Column, value: number): FilterCondition;
60
- getFilterValueForNumberOrChar(columnType: string, value: unknown): FilterValue;
61
60
  onContextMenu(gridPoint: GridPoint, grid: Grid, event: React.MouseEvent<Element, MouseEvent>): EventHandlerResult;
62
61
  dateFormatActions(column: Column): ContextAction[];
63
62
  numberFormatActions(column: Column): ContextAction[] | null;
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridContextMenuHandler.d.ts","sourceRoot":"","sources":["../../src/mousehandlers/IrisGridContextMenuHandler.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IrisGridContextMenuHandler.d.ts","sourceRoot":"","sources":["../../src/mousehandlers/IrisGridContextMenuHandler.tsx"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { dhFilterFilled, vsRemove, vsCheck, vsFilter } from '@deephaven/icons';
10
10
  import debounce from 'lodash.debounce';
11
11
  import { ContextActions, ContextActionUtils, GLOBAL_SHORTCUTS } from '@deephaven/components';
12
12
  import { GridMouseHandler, GridRenderer, isEditableGridModel, isExpandableGridModel } from '@deephaven/grid';
13
+ import dh from '@deephaven/jsapi-shim';
13
14
  import { TableColumnFormatter, DateTimeColumnFormatter, TableUtils } from '@deephaven/jsapi-utils';
14
15
  import Log from '@deephaven/log';
15
16
  import { assertNotNull, copyToClipboard } from '@deephaven/utils';
@@ -57,17 +58,38 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
57
58
  static getOperatorAsText(operator) {
58
59
  return operator === '&&' ? 'And' : 'Or';
59
60
  }
61
+
62
+ /**
63
+ * Gets an equality filter for the provided numeric value
64
+ * @param column The column to make the filter for
65
+ * @param value The value to get the equality filter for
66
+ */
67
+ static getNumberValueEqualsFilter(column, value) {
68
+ var columnFilter = column.filter();
69
+ if (value === Number.POSITIVE_INFINITY) {
70
+ return dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.greaterThan(dh.FilterValue.ofNumber(0)));
71
+ }
72
+ if (value === Number.NEGATIVE_INFINITY) {
73
+ return dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.lessThan(dh.FilterValue.ofNumber(0)));
74
+ }
75
+ if (Number.isNaN(value)) {
76
+ return dh.FilterCondition.invoke('isNaN', columnFilter);
77
+ }
78
+ var filterValue = IrisGridContextMenuHandler.getFilterValueForNumberOrChar(column.type, value);
79
+ return columnFilter.eq(filterValue);
80
+ }
81
+ static getFilterValueForNumberOrChar(columnType, value) {
82
+ return TableUtils.isCharType(columnType) ? dh.FilterValue.ofString(String.fromCharCode(value)) : dh.FilterValue.ofNumber(value);
83
+ }
60
84
  static getRowOptionFormatted(command, cellValue) {
61
85
  var len = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 30;
62
86
  return "".concat(command, " \"").concat(GridRenderer.truncate(cellValue, len - command.length - 3), "\"");
63
87
  }
64
- constructor(irisGrid, dh) {
88
+ constructor(irisGrid) {
65
89
  super();
66
90
  _defineProperty(this, "irisGrid", void 0);
67
91
  _defineProperty(this, "debouncedUpdateCustomFormat", void 0);
68
- _defineProperty(this, "dh", void 0);
69
92
  this.debouncedUpdateCustomFormat = debounce(irisGrid.handleFormatSelection, DEBOUNCE_UPDATE_FORMAT);
70
- this.dh = dh;
71
93
  this.irisGrid = irisGrid;
72
94
  }
73
95
  componentWillUnmount() {
@@ -442,35 +464,6 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
442
464
  }
443
465
  return actions;
444
466
  }
445
-
446
- /**
447
- * Gets an equality filter for the provided numeric value
448
- * @param column The column to make the filter for
449
- * @param value The value to get the equality filter for
450
- */
451
- getNumberValueEqualsFilter(column, value) {
452
- var {
453
- dh
454
- } = this;
455
- var columnFilter = column.filter();
456
- if (value === Number.POSITIVE_INFINITY) {
457
- return dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.greaterThan(dh.FilterValue.ofNumber(0)));
458
- }
459
- if (value === Number.NEGATIVE_INFINITY) {
460
- return dh.FilterCondition.invoke('isInf', columnFilter).and(columnFilter.lessThan(dh.FilterValue.ofNumber(0)));
461
- }
462
- if (Number.isNaN(value)) {
463
- return dh.FilterCondition.invoke('isNaN', columnFilter);
464
- }
465
- var filterValue = this.getFilterValueForNumberOrChar(column.type, value);
466
- return columnFilter.eq(filterValue);
467
- }
468
- getFilterValueForNumberOrChar(columnType, value) {
469
- var {
470
- dh
471
- } = this;
472
- return TableUtils.isCharType(columnType) ? dh.FilterValue.ofString(String.fromCharCode(value)) : dh.FilterValue.ofNumber(value);
473
- }
474
467
  onContextMenu(gridPoint, grid, event) {
475
468
  var {
476
469
  irisGrid
@@ -672,9 +665,6 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
672
665
  return actions;
673
666
  }
674
667
  stringFilterActions(column, valueText, value, quickFilter, operator) {
675
- var {
676
- dh
677
- } = this;
678
668
  var filterValue = dh.FilterValue.ofString(value);
679
669
  var newQuickFilter = quickFilter;
680
670
  if (!newQuickFilter) {
@@ -757,7 +747,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
757
747
  return actions;
758
748
  }
759
749
  numberFilterActions(column, valueText, value, quickFilter, operator) {
760
- var filterValue = this.getFilterValueForNumberOrChar(column.type, value);
750
+ var filterValue = IrisGridContextMenuHandler.getFilterValueForNumberOrChar(column.type, value);
761
751
  var filter = null;
762
752
  var filterText = null;
763
753
  if (quickFilter) {
@@ -782,7 +772,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
782
772
  title: 'is equal to',
783
773
  description: "Show only rows where ".concat(column.name, " is ").concat(valueText),
784
774
  action: () => {
785
- var valueFilter = this.getNumberValueEqualsFilter(column, value);
775
+ var valueFilter = IrisGridContextMenuHandler.getNumberValueEqualsFilter(column, value);
786
776
  this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, valueFilter, operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "=".concat(valueText), operator));
787
777
  },
788
778
  order: 10,
@@ -792,7 +782,7 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
792
782
  title: 'is not equal to',
793
783
  description: "Show only rows where ".concat(column.name, " is not ").concat(valueText),
794
784
  action: () => {
795
- var valueFilter = this.getNumberValueEqualsFilter(column, value).not();
785
+ var valueFilter = IrisGridContextMenuHandler.getNumberValueEqualsFilter(column, value).not();
796
786
  this.irisGrid.setQuickFilter(columnIndex, IrisGridContextMenuHandler.getQuickFilterCondition(filter, valueFilter, operator), IrisGridContextMenuHandler.getQuickFilterText(filterText, "!=".concat(valueText), operator));
797
787
  },
798
788
  order: 20,
@@ -899,9 +889,6 @@ class IrisGridContextMenuHandler extends GridMouseHandler {
899
889
  return actions;
900
890
  }
901
891
  dateFilterActions(column, valueText, previewValue, value, quickFilter, operator) {
902
- var {
903
- dh
904
- } = this;
905
892
  var filterValue = dh.FilterValue.ofNumber(value);
906
893
  var filter = null;
907
894
  var filterText = null;