@deephaven/iris-grid 0.13.3-treemap.2 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/AdvancedFilterCreator.d.ts +69 -63
  2. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  3. package/dist/AdvancedFilterCreator.js +79 -73
  4. package/dist/AdvancedFilterCreator.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.d.ts +45 -45
  6. package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValue.js +32 -36
  8. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  9. package/dist/AdvancedFilterCreatorSelectValueList.d.ts +47 -52
  10. package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
  11. package/dist/AdvancedFilterCreatorSelectValueList.js +24 -39
  12. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  13. package/dist/ColumnStatistics.d.ts +34 -22
  14. package/dist/ColumnStatistics.d.ts.map +1 -1
  15. package/dist/ColumnStatistics.js +8 -12
  16. package/dist/ColumnStatistics.js.map +1 -1
  17. package/dist/CommonTypes.d.ts +58 -0
  18. package/dist/CommonTypes.d.ts.map +1 -0
  19. package/dist/CommonTypes.js +2 -0
  20. package/dist/CommonTypes.js.map +1 -0
  21. package/dist/CrossColumnSearch.d.ts +26 -24
  22. package/dist/CrossColumnSearch.d.ts.map +1 -1
  23. package/dist/CrossColumnSearch.js +9 -13
  24. package/dist/CrossColumnSearch.js.map +1 -1
  25. package/dist/FilterInputField.d.ts +48 -51
  26. package/dist/FilterInputField.d.ts.map +1 -1
  27. package/dist/FilterInputField.js +30 -27
  28. package/dist/FilterInputField.js.map +1 -1
  29. package/dist/IrisGrid.d.ts +409 -453
  30. package/dist/IrisGrid.d.ts.map +1 -1
  31. package/dist/IrisGrid.js +514 -449
  32. package/dist/IrisGrid.js.map +1 -1
  33. package/dist/IrisGridCellOverflowModal.d.ts +1 -1
  34. package/dist/IrisGridCellOverflowModal.d.ts.map +1 -1
  35. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  36. package/dist/IrisGridCopyHandler.d.ts +52 -46
  37. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  38. package/dist/IrisGridCopyHandler.js +22 -38
  39. package/dist/IrisGridCopyHandler.js.map +1 -1
  40. package/dist/IrisGridMetricCalculator.d.ts +5 -4
  41. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  42. package/dist/IrisGridMetricCalculator.js +5 -1
  43. package/dist/IrisGridMetricCalculator.js.map +1 -1
  44. package/dist/IrisGridModel.d.ts +37 -35
  45. package/dist/IrisGridModel.d.ts.map +1 -1
  46. package/dist/IrisGridModel.js +19 -3
  47. package/dist/IrisGridModel.js.map +1 -1
  48. package/dist/IrisGridModelFactory.d.ts +7 -5
  49. package/dist/IrisGridModelFactory.d.ts.map +1 -1
  50. package/dist/IrisGridModelFactory.js +5 -5
  51. package/dist/IrisGridModelFactory.js.map +1 -1
  52. package/dist/IrisGridModelUpdater.d.ts +13 -11
  53. package/dist/IrisGridModelUpdater.d.ts.map +1 -1
  54. package/dist/IrisGridModelUpdater.js.map +1 -1
  55. package/dist/IrisGridPartitionSelector.d.ts +38 -39
  56. package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
  57. package/dist/IrisGridPartitionSelector.js +18 -24
  58. package/dist/IrisGridPartitionSelector.js.map +1 -1
  59. package/dist/IrisGridProxyModel.d.ts +111 -32
  60. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  61. package/dist/IrisGridProxyModel.js +212 -170
  62. package/dist/IrisGridProxyModel.js.map +1 -1
  63. package/dist/IrisGridRenderer.d.ts +59 -31
  64. package/dist/IrisGridRenderer.d.ts.map +1 -1
  65. package/dist/IrisGridRenderer.js +92 -46
  66. package/dist/IrisGridRenderer.js.map +1 -1
  67. package/dist/IrisGridTableModel.d.ts +48 -147
  68. package/dist/IrisGridTableModel.d.ts.map +1 -1
  69. package/dist/IrisGridTableModel.js +58 -1381
  70. package/dist/IrisGridTableModel.js.map +1 -1
  71. package/dist/IrisGridTableModelTemplate.d.ts +219 -0
  72. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -0
  73. package/dist/IrisGridTableModelTemplate.js +1623 -0
  74. package/dist/IrisGridTableModelTemplate.js.map +1 -0
  75. package/dist/IrisGridTestUtils.d.ts +18 -14
  76. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  77. package/dist/IrisGridTestUtils.js +29 -1
  78. package/dist/IrisGridTestUtils.js.map +1 -1
  79. package/dist/IrisGridTheme.d.ts +35 -3
  80. package/dist/IrisGridTheme.d.ts.map +1 -1
  81. package/dist/IrisGridTheme.js.map +1 -1
  82. package/dist/IrisGridTreeTableModel.d.ts +26 -7
  83. package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
  84. package/dist/IrisGridTreeTableModel.js +24 -14
  85. package/dist/IrisGridTreeTableModel.js.map +1 -1
  86. package/dist/IrisGridUtils.d.ts +257 -162
  87. package/dist/IrisGridUtils.d.ts.map +1 -1
  88. package/dist/IrisGridUtils.js +132 -95
  89. package/dist/IrisGridUtils.js.map +1 -1
  90. package/dist/MissingKeyError.d.ts +5 -3
  91. package/dist/MissingKeyError.d.ts.map +1 -1
  92. package/dist/MissingKeyError.js.map +1 -1
  93. package/dist/PartitionSelectorSearch.d.ts +61 -40
  94. package/dist/PartitionSelectorSearch.d.ts.map +1 -1
  95. package/dist/PartitionSelectorSearch.js +25 -15
  96. package/dist/PartitionSelectorSearch.js.map +1 -1
  97. package/dist/PendingDataBottomBar.d.ts +3 -6
  98. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  99. package/dist/PendingDataBottomBar.js.map +1 -1
  100. package/dist/TableViewportUpdater.d.ts +39 -55
  101. package/dist/TableViewportUpdater.d.ts.map +1 -1
  102. package/dist/TableViewportUpdater.js +42 -64
  103. package/dist/TableViewportUpdater.js.map +1 -1
  104. package/dist/TreeTableViewportUpdater.d.ts +29 -37
  105. package/dist/TreeTableViewportUpdater.d.ts.map +1 -1
  106. package/dist/TreeTableViewportUpdater.js +39 -50
  107. package/dist/TreeTableViewportUpdater.js.map +1 -1
  108. package/dist/index.d.ts +9 -0
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +9 -0
  111. package/dist/index.js.map +1 -1
  112. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.d.ts.map +1 -1
  113. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  114. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts +1 -1
  115. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts.map +1 -1
  116. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +2 -0
  117. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  118. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +1 -1
  119. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  120. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +41 -130
  121. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  122. package/dist/mousehandlers/IrisGridContextMenuHandler.js +426 -317
  123. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  124. package/dist/mousehandlers/IrisGridFilterMouseHandler.d.ts.map +1 -1
  125. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +2 -2
  126. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  127. package/dist/mousehandlers/IrisGridSortMouseHandler.js +1 -1
  128. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  129. package/dist/mousehandlers/PendingMouseHandler.d.ts +8 -4
  130. package/dist/mousehandlers/PendingMouseHandler.d.ts.map +1 -1
  131. package/dist/mousehandlers/PendingMouseHandler.js +4 -5
  132. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  133. package/dist/sidebar/ChartBuilder.d.ts +48 -33
  134. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  135. package/dist/sidebar/ChartBuilder.js +28 -27
  136. package/dist/sidebar/ChartBuilder.js.map +1 -1
  137. package/dist/sidebar/CustomColumnBuilder.d.ts +51 -41
  138. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  139. package/dist/sidebar/CustomColumnBuilder.js +22 -18
  140. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  141. package/dist/sidebar/CustomColumnInput.d.ts +26 -36
  142. package/dist/sidebar/CustomColumnInput.d.ts.map +1 -1
  143. package/dist/sidebar/CustomColumnInput.js +11 -20
  144. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  145. package/dist/sidebar/InputEditor.d.ts +34 -35
  146. package/dist/sidebar/InputEditor.d.ts.map +1 -1
  147. package/dist/sidebar/InputEditor.js +43 -24
  148. package/dist/sidebar/InputEditor.js.map +1 -1
  149. package/dist/sidebar/RollupRows.d.ts +67 -52
  150. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  151. package/dist/sidebar/RollupRows.js +51 -53
  152. package/dist/sidebar/RollupRows.js.map +1 -1
  153. package/dist/sidebar/SelectDistinctBuilder.d.ts +27 -21
  154. package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
  155. package/dist/sidebar/SelectDistinctBuilder.js +6 -10
  156. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  157. package/dist/sidebar/TableCsvExporter.d.ts +42 -39
  158. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  159. package/dist/sidebar/TableCsvExporter.js +12 -20
  160. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  161. package/dist/sidebar/TableSaver.d.ts +59 -60
  162. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  163. package/dist/sidebar/TableSaver.js +154 -68
  164. package/dist/sidebar/TableSaver.js.map +1 -1
  165. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +56 -45
  166. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  167. package/dist/sidebar/VisibilityOrderingBuilder.js +34 -29
  168. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  169. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  170. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  171. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +2 -1
  172. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  173. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  174. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +6 -5
  175. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  176. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +5 -0
  177. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  178. package/dist/sidebar/icons/index.d.ts +7 -7
  179. package/dist/sidebar/icons/index.d.ts.map +1 -1
  180. package/dist/sidebar/icons/index.js.map +1 -1
  181. package/dist/sidebar/index.d.ts +12 -12
  182. package/dist/sidebar/index.d.ts.map +1 -1
  183. package/dist/sidebar/index.js.map +1 -1
  184. package/package.json +17 -16
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/PartitionSelectorSearch.jsx"],"names":["React","Component","PropTypes","debounce","dh","ItemList","LoadingSpinner","Log","CanceledPromiseError","log","module","DEBOUNCE_UPDATE_FILTER","PartitionSelectorSearch","handleError","error","constructor","props","debounceUpdateFilter","bind","handleFilterChange","handleInputFocus","handleKeyDown","handleListKeydown","handleSelect","handleTableUpdate","handleTextChange","handleViewportChange","itemList","searchInput","timer","state","offset","itemCount","items","text","isLoading","componentDidMount","startListening","componentDidUpdate","prevProps","prevState","onListResized","componentWillUnmount","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","updateFilter","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","propTypes","func","isRequired","shape","arrayOf","string","number","defaultProps"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash.debounce';\nimport dh from '@deephaven/jsapi-shim';\nimport { ItemList, LoadingSpinner } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { CanceledPromiseError } from '@deephaven/utils';\nimport './PartitionSelectorSearch.scss';\n\nconst log = Log.module('PartitionSelectorSearch');\nconst DEBOUNCE_UPDATE_FILTER = 150;\n\nclass PartitionSelectorSearch extends Component {\n static MAX_VISIBLE_ITEMS = 12;\n\n static handleError(error) {\n if (!(error instanceof CanceledPromiseError)) {\n log.error(error);\n }\n }\n\n constructor(props) {\n super(props);\n\n this.debounceUpdateFilter = debounce(\n this.debounceUpdateFilter.bind(this),\n DEBOUNCE_UPDATE_FILTER\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() {\n this.startListening();\n }\n\n componentDidUpdate(prevProps, prevState) {\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() {\n this.debounceUpdateFilter.cancel();\n\n this.stopListening();\n }\n\n handleKeyDown(event) {\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) {\n switch (event.key) {\n case 'Escape':\n // Do nothing\n break;\n default:\n this.focus();\n break;\n }\n }\n\n handleFilterChange() {\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() {\n if (this.itemList) {\n this.itemList.focusItem(0);\n }\n }\n\n handleSelect(itemIndex) {\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) {\n const data = event.detail;\n const { offset } = data;\n\n const items = [];\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) {\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, bottomRow) {\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() {\n this.updateFilter();\n }\n\n focus() {\n if (this.searchInput) {\n this.searchInput.focus();\n }\n }\n\n startListening() {\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() {\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() {\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() {\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\nPartitionSelectorSearch.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\nPartitionSelectorSearch.defaultProps = {\n initialPageSize: 100,\n onSelect: () => {},\n onListResized: () => {},\n};\n\nexport default PartitionSelectorSearch;\n"],"file":"PartitionSelectorSearch.js"}
1
+ {"version":3,"sources":["../src/PartitionSelectorSearch.tsx"],"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"],"mappings":"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","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"],"file":"PartitionSelectorSearch.js"}
@@ -1,18 +1,15 @@
1
1
  /// <reference types="react" />
2
2
  import './PendingDataBottomBar.scss';
3
+ import { PendingDataMap } from './CommonTypes';
3
4
  export declare type PendingDataBottomBarProps = {
4
5
  onSave: () => Promise<void>;
5
6
  onDiscard: () => Promise<void>;
6
7
  discardTooltip?: string;
7
8
  saveTooltip?: string;
8
9
  isSaving?: boolean;
9
- error?: string;
10
+ error?: string | null;
10
11
  pendingDataErrors: Map<number, Error[]>;
11
- pendingDataMap: Map<number, {
12
- data: Map<number, {
13
- value: unknown;
14
- }>;
15
- }>;
12
+ pendingDataMap: PendingDataMap;
16
13
  onEntering?: () => void;
17
14
  onEntered?: () => void;
18
15
  onExiting?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"PendingDataBottomBar.d.ts","sourceRoot":"","sources":["../src/PendingDataBottomBar.tsx"],"names":[],"mappings":";AAMA,OAAO,6BAA6B,CAAC;AAMrC,oBAAY,yBAAyB,GAAG;IACtC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACxC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IACvE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,wJAa9B,yBAAyB,KAAG,WAwG9B,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"PendingDataBottomBar.d.ts","sourceRoot":"","sources":["../src/PendingDataBottomBar.tsx"],"names":[],"mappings":";AAMA,OAAO,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAM/C,oBAAY,yBAAyB,GAAG;IACtC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,wJAa9B,yBAAyB,KAAG,WAwG9B,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/PendingDataBottomBar.tsx"],"names":["React","useEffect","useMemo","useRef","useState","FontAwesomeIcon","vsPass","vsWarning","Button","LoadingSpinner","usePrevious","IrisGridBottomBar","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","isSaving","onSave","onDiscard","discardTooltip","saveTooltip","error","pendingDataErrors","pendingDataMap","onEntering","onEntered","onExiting","onExited","isSuccessShown","setIsSuccessShown","wasSuccessShown","setWasSuccessShown","successTimeout","prevIsSaving","errorMessage","size","Array","from","keys","join","trim","showSuccessMessage","current","setTimeout","hideSuccessMessage","clearTimeout","cleanupTimeout","undefined","pendingRowCount","commitIcon"],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './PendingDataBottomBar.scss';\n\nconst HIDE_TIMEOUT = 3000;\n\nconst MAX_NUMBER_ROWS_SHOWN = 5;\n\nexport type PendingDataBottomBarProps = {\n onSave: () => Promise<void>;\n onDiscard: () => Promise<void>;\n discardTooltip?: string;\n saveTooltip?: string;\n isSaving?: boolean;\n error?: string;\n pendingDataErrors: Map<number, Error[]>;\n pendingDataMap: Map<number, { data: Map<number, { value: unknown }> }>;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n};\n\nexport const PendingDataBottomBar = ({\n isSaving = false,\n onSave,\n onDiscard,\n discardTooltip,\n saveTooltip,\n error,\n pendingDataErrors,\n pendingDataMap,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: PendingDataBottomBarProps): JSX.Element => {\n const [isSuccessShown, setIsSuccessShown] = useState(false);\n const [wasSuccessShown, setWasSuccessShown] = useState(false);\n const successTimeout = useRef<ReturnType<typeof setTimeout>>();\n const prevIsSaving = usePrevious(isSaving);\n const errorMessage = useMemo(() => {\n if (pendingDataErrors.size === 0) {\n return error;\n }\n if (pendingDataErrors.size <= MAX_NUMBER_ROWS_SHOWN) {\n return `Key can't be empty (on pending row${\n pendingDataErrors.size > 1 ? 's' : ''\n } ${Array.from(pendingDataErrors.keys()).join(', ').trim()})`;\n }\n return `Key can't be empty (on ${pendingDataErrors.size} rows)`;\n }, [error, pendingDataErrors]);\n\n useEffect(\n function showSuccessMessage() {\n if (prevIsSaving && !isSaving && errorMessage == null) {\n setIsSuccessShown(true);\n setWasSuccessShown(true);\n successTimeout.current = setTimeout(() => {\n setIsSuccessShown(false);\n }, HIDE_TIMEOUT);\n }\n },\n [errorMessage, isSaving, prevIsSaving]\n );\n\n useEffect(\n function hideSuccessMessage() {\n if (successTimeout.current && pendingDataMap.size > 0) {\n // A change just occurred while the success message was still being shown, just hide the success message\n clearTimeout(successTimeout.current);\n setIsSuccessShown(false);\n setWasSuccessShown(false);\n }\n },\n [pendingDataMap]\n );\n\n useEffect(function cleanupTimeout() {\n return () =>\n successTimeout.current ? clearTimeout(successTimeout.current) : undefined;\n }, []);\n\n const pendingRowCount = pendingDataMap.size;\n let commitIcon;\n if (isSaving) {\n commitIcon = <LoadingSpinner />;\n } else if (wasSuccessShown) {\n commitIcon = vsPass;\n }\n\n return (\n <IrisGridBottomBar\n className=\"pending-data-bottom-bar\"\n isShown={pendingRowCount > 0 || isSuccessShown || errorMessage != null}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={() => {\n setWasSuccessShown(false);\n if (onExited) {\n onExited();\n }\n }}\n >\n {errorMessage && (\n <div className=\"error-message\">\n <FontAwesomeIcon icon={vsWarning} />\n <span>{`${errorMessage}`}</span>\n </div>\n )}\n {!errorMessage && (\n <div className=\"status-message\">\n {pendingRowCount > 0 && (\n <span>{`${pendingRowCount} row${\n pendingRowCount > 1 ? 's' : ''\n } pending`}</span>\n )}\n </div>\n )}\n <div className=\"buttons-container\">\n {!isSaving && !wasSuccessShown && (\n <Button kind=\"secondary\" onClick={onDiscard} tooltip={discardTooltip}>\n Discard\n </Button>\n )}\n <Button\n kind={wasSuccessShown ? 'success' : 'primary'}\n onClick={onSave}\n icon={commitIcon}\n disabled={isSaving || wasSuccessShown || errorMessage != null}\n tooltip={saveTooltip}\n >\n {isSaving && `Committing...`}\n {!isSaving && wasSuccessShown && `Success`}\n {!isSaving && !wasSuccessShown && `Commit`}\n </Button>\n </div>\n </IrisGridBottomBar>\n );\n};\n\nexport default PendingDataBottomBar;\n"],"file":"PendingDataBottomBar.js"}
1
+ {"version":3,"sources":["../src/PendingDataBottomBar.tsx"],"names":["React","useEffect","useMemo","useRef","useState","FontAwesomeIcon","vsPass","vsWarning","Button","LoadingSpinner","usePrevious","IrisGridBottomBar","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","isSaving","onSave","onDiscard","discardTooltip","saveTooltip","error","pendingDataErrors","pendingDataMap","onEntering","onEntered","onExiting","onExited","isSuccessShown","setIsSuccessShown","wasSuccessShown","setWasSuccessShown","successTimeout","prevIsSaving","errorMessage","size","Array","from","keys","join","trim","showSuccessMessage","current","setTimeout","hideSuccessMessage","clearTimeout","cleanupTimeout","undefined","pendingRowCount","commitIcon"],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './PendingDataBottomBar.scss';\nimport { PendingDataMap } from './CommonTypes';\n\nconst HIDE_TIMEOUT = 3000;\n\nconst MAX_NUMBER_ROWS_SHOWN = 5;\n\nexport type PendingDataBottomBarProps = {\n onSave: () => Promise<void>;\n onDiscard: () => Promise<void>;\n discardTooltip?: string;\n saveTooltip?: string;\n isSaving?: boolean;\n error?: string | null;\n pendingDataErrors: Map<number, Error[]>;\n pendingDataMap: PendingDataMap;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n};\n\nexport const PendingDataBottomBar = ({\n isSaving = false,\n onSave,\n onDiscard,\n discardTooltip,\n saveTooltip,\n error,\n pendingDataErrors,\n pendingDataMap,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: PendingDataBottomBarProps): JSX.Element => {\n const [isSuccessShown, setIsSuccessShown] = useState(false);\n const [wasSuccessShown, setWasSuccessShown] = useState(false);\n const successTimeout = useRef<ReturnType<typeof setTimeout>>();\n const prevIsSaving = usePrevious(isSaving);\n const errorMessage = useMemo(() => {\n if (pendingDataErrors.size === 0) {\n return error;\n }\n if (pendingDataErrors.size <= MAX_NUMBER_ROWS_SHOWN) {\n return `Key can't be empty (on pending row${\n pendingDataErrors.size > 1 ? 's' : ''\n } ${Array.from(pendingDataErrors.keys()).join(', ').trim()})`;\n }\n return `Key can't be empty (on ${pendingDataErrors.size} rows)`;\n }, [error, pendingDataErrors]);\n\n useEffect(\n function showSuccessMessage() {\n if (prevIsSaving && !isSaving && errorMessage == null) {\n setIsSuccessShown(true);\n setWasSuccessShown(true);\n successTimeout.current = setTimeout(() => {\n setIsSuccessShown(false);\n }, HIDE_TIMEOUT);\n }\n },\n [errorMessage, isSaving, prevIsSaving]\n );\n\n useEffect(\n function hideSuccessMessage() {\n if (successTimeout.current && pendingDataMap.size > 0) {\n // A change just occurred while the success message was still being shown, just hide the success message\n clearTimeout(successTimeout.current);\n setIsSuccessShown(false);\n setWasSuccessShown(false);\n }\n },\n [pendingDataMap]\n );\n\n useEffect(function cleanupTimeout() {\n return () =>\n successTimeout.current ? clearTimeout(successTimeout.current) : undefined;\n }, []);\n\n const pendingRowCount = pendingDataMap.size;\n let commitIcon;\n if (isSaving) {\n commitIcon = <LoadingSpinner />;\n } else if (wasSuccessShown) {\n commitIcon = vsPass;\n }\n\n return (\n <IrisGridBottomBar\n className=\"pending-data-bottom-bar\"\n isShown={pendingRowCount > 0 || isSuccessShown || errorMessage != null}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={() => {\n setWasSuccessShown(false);\n if (onExited) {\n onExited();\n }\n }}\n >\n {errorMessage && (\n <div className=\"error-message\">\n <FontAwesomeIcon icon={vsWarning} />\n <span>{`${errorMessage}`}</span>\n </div>\n )}\n {!errorMessage && (\n <div className=\"status-message\">\n {pendingRowCount > 0 && (\n <span>{`${pendingRowCount} row${\n pendingRowCount > 1 ? 's' : ''\n } pending`}</span>\n )}\n </div>\n )}\n <div className=\"buttons-container\">\n {!isSaving && !wasSuccessShown && (\n <Button kind=\"secondary\" onClick={onDiscard} tooltip={discardTooltip}>\n Discard\n </Button>\n )}\n <Button\n kind={wasSuccessShown ? 'success' : 'primary'}\n onClick={onSave}\n icon={commitIcon}\n disabled={isSaving || wasSuccessShown || errorMessage != null}\n tooltip={saveTooltip}\n >\n {isSaving && `Committing...`}\n {!isSaving && wasSuccessShown && `Success`}\n {!isSaving && !wasSuccessShown && `Commit`}\n </Button>\n </div>\n </IrisGridBottomBar>\n );\n};\n\nexport default PendingDataBottomBar;\n"],"file":"PendingDataBottomBar.js"}
@@ -1,65 +1,49 @@
1
- export default TableViewportUpdater;
1
+ /// <reference types="lodash" />
2
+ import { PureComponent } from 'react';
3
+ import { MoveOperation } from '@deephaven/grid';
4
+ import { Column, FilterCondition, Sort, Table, TableViewportSubscription } from '@deephaven/jsapi-shim';
5
+ import { ColumnName } from './CommonTypes';
2
6
  /**
3
7
  * Updates the viewport for an Iris table, for use in a scroll pane.
4
8
  * Automatically throttles the viewport requests and buffers above and below.
5
9
  */
6
- declare class TableViewportUpdater extends PureComponent<any, any, any> {
10
+ interface TableViewportUpdaterProps {
11
+ table: Table;
12
+ top: number;
13
+ bottom: number;
14
+ left: number;
15
+ right: number;
16
+ columns: Column[];
17
+ filters: FilterCondition[];
18
+ sorts: Sort[];
19
+ customColumns: ColumnName[];
20
+ movedColumns: MoveOperation[];
21
+ onSubscription: (subscription?: TableViewportSubscription) => void;
22
+ }
23
+ declare class TableViewportUpdater extends PureComponent<TableViewportUpdaterProps, Record<string, never>> {
7
24
  static ROW_BUFFER_PAGES: number;
8
25
  static COLUMN_BUFFER_PAGES: number;
9
- constructor(props: any);
10
- updateViewport(top: any, bottom: any, left: any, right: any, viewColumns: any): void;
11
- subscription: any;
26
+ static defaultProps: {
27
+ top: number;
28
+ bottom: number;
29
+ left: null;
30
+ right: null;
31
+ columns: null;
32
+ onSubscription: () => void;
33
+ filters: never[];
34
+ sorts: never[];
35
+ customColumns: never[];
36
+ movedColumns: never[];
37
+ };
38
+ componentDidMount(): void;
39
+ componentDidUpdate(prevProps: TableViewportUpdaterProps): void;
40
+ componentWillUnmount(): void;
41
+ subscription?: TableViewportSubscription;
12
42
  getViewportRowRange: (this: any, table: any, top: any, bottom: any) => any[];
13
- getViewportColumns: (this: any, table: any, left: any, right: any, movedColumns: any) => any[] | null;
43
+ getViewportColumns: (this: any, table: any, left: any, right: any, movedColumns: MoveOperation[]) => any[] | null;
14
44
  closeSubscription(): void;
45
+ updateViewport: import("lodash").DebouncedFunc<(top: number, bottom: number, left: number, right: number, viewColumns: Column[]) => void>;
46
+ render(): null;
15
47
  }
16
- declare namespace TableViewportUpdater {
17
- namespace propTypes {
18
- const table: PropTypes.Validator<PropTypes.InferProps<{
19
- applyFilter: PropTypes.Validator<(...args: any[]) => any>;
20
- applySort: PropTypes.Validator<(...args: any[]) => any>;
21
- applyCustomColumns: PropTypes.Validator<(...args: any[]) => any>;
22
- setViewport: PropTypes.Validator<(...args: any[]) => any>;
23
- }>>;
24
- const top: PropTypes.Requireable<number>;
25
- const bottom: PropTypes.Requireable<number>;
26
- const left: PropTypes.Requireable<number>;
27
- const right: PropTypes.Requireable<number>;
28
- const columns: PropTypes.Requireable<(PropTypes.InferProps<{
29
- name: PropTypes.Validator<string>;
30
- type: PropTypes.Validator<string>;
31
- description: PropTypes.Requireable<string>;
32
- constituentType: PropTypes.Requireable<string>;
33
- }> | null | undefined)[]>;
34
- const filters: PropTypes.Requireable<(PropTypes.InferProps<{}> | null | undefined)[]>;
35
- const sorts: PropTypes.Requireable<(PropTypes.InferProps<{}> | null | undefined)[]>;
36
- const customColumns: PropTypes.Requireable<(string | null | undefined)[]>;
37
- const movedColumns: PropTypes.Requireable<(PropTypes.InferProps<{}> | null | undefined)[]>;
38
- const onSubscription: PropTypes.Requireable<(...args: any[]) => any>;
39
- }
40
- namespace defaultProps {
41
- const top_1: number;
42
- export { top_1 as top };
43
- const bottom_1: number;
44
- export { bottom_1 as bottom };
45
- const left_1: null;
46
- export { left_1 as left };
47
- const right_1: null;
48
- export { right_1 as right };
49
- const columns_1: null;
50
- export { columns_1 as columns };
51
- export function onSubscription_1(): void;
52
- export { onSubscription_1 as onSubscription };
53
- const filters_1: never[];
54
- export { filters_1 as filters };
55
- const sorts_1: never[];
56
- export { sorts_1 as sorts };
57
- const customColumns_1: never[];
58
- export { customColumns_1 as customColumns };
59
- const movedColumns_1: never[];
60
- export { movedColumns_1 as movedColumns };
61
- }
62
- }
63
- import { PureComponent } from "react";
64
- import PropTypes from "prop-types";
48
+ export default TableViewportUpdater;
65
49
  //# sourceMappingURL=TableViewportUpdater.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableViewportUpdater.d.ts","sourceRoot":"","sources":["../src/TableViewportUpdater.jsx"],"names":[],"mappings":";AAYA;;;GAGG;AACH;IAEE,gCAA4B;IAE5B,mCAA+B;IAE/B,wBASC;IAsHD,qFAyCC;IAhKC,kBAAwB;IAqE1B,6EASG;IAGH,sGAuBG;IAEH,0BAWC;CAgDF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA2BiB,yCAAQ"}
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,0DAShB;IAGH,kBAAkB,+DACmB,aAAa,EAAE,kBAwBlD;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"}
@@ -2,10 +2,8 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
2
2
 
3
3
  import { PureComponent } from 'react';
4
4
  import memoize from 'memoize-one';
5
- import PropTypes from 'prop-types';
6
5
  import throttle from 'lodash.throttle';
7
6
  import { GridUtils } from '@deephaven/grid';
8
- import { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';
9
7
  import Log from '@deephaven/log';
10
8
  var log = Log.module('TableViewportUpdater');
11
9
  var UPDATE_THROTTLE = 150;
@@ -15,9 +13,10 @@ var UPDATE_THROTTLE = 150;
15
13
  */
16
14
 
17
15
  class TableViewportUpdater extends PureComponent {
18
- // Number of pages to buffer for rows/columns
19
- constructor(props) {
20
- super(props);
16
+ constructor() {
17
+ super(...arguments);
18
+
19
+ _defineProperty(this, "subscription", void 0);
21
20
 
22
21
  _defineProperty(this, "getViewportRowRange", memoize((table, top, bottom) => {
23
22
  var viewHeight = bottom - top;
@@ -45,8 +44,37 @@ class TableViewportUpdater extends PureComponent {
45
44
  return columns;
46
45
  }));
47
46
 
48
- this.updateViewport = throttle(this.updateViewport.bind(this), UPDATE_THROTTLE);
49
- this.subscription = null;
47
+ _defineProperty(this, "updateViewport", throttle((top, bottom, left, right, viewColumns) => {
48
+ if (bottom < top) {
49
+ log.error('Invalid viewport', top, bottom);
50
+ return;
51
+ }
52
+
53
+ if (top === 0 && bottom === 0) {
54
+ log.debug2('Ignoring 0-0 viewport');
55
+ return;
56
+ }
57
+
58
+ var {
59
+ movedColumns,
60
+ table
61
+ } = this.props;
62
+ var [viewportTop, viewportBottom] = this.getViewportRowRange(table, top, bottom);
63
+ var columns = viewColumns !== null && viewColumns !== void 0 ? viewColumns : this.getViewportColumns(table, left, right, movedColumns);
64
+ log.debug2('Setting Viewport Top:', viewportTop, 'Bottom:', viewportBottom, 'Columns:', columns);
65
+
66
+ if (this.subscription == null) {
67
+ log.debug2('updateViewport creating new subscription');
68
+ this.subscription = table.setViewport(viewportTop, viewportBottom, columns);
69
+ var {
70
+ onSubscription
71
+ } = this.props;
72
+ onSubscription(this.subscription);
73
+ } else {
74
+ log.debug2('updateViewport using existing subscription');
75
+ this.subscription.setViewport(viewportTop, viewportBottom, columns);
76
+ }
77
+ }, UPDATE_THROTTLE));
50
78
  }
51
79
 
52
80
  componentDidMount() {
@@ -108,56 +136,23 @@ class TableViewportUpdater extends PureComponent {
108
136
 
109
137
  componentWillUnmount() {
110
138
  this.closeSubscription();
111
- } // eslint-disable-next-line class-methods-use-this
112
-
139
+ }
113
140
 
114
141
  closeSubscription() {
115
142
  log.debug2('closeSubscription', this.subscription);
116
143
 
117
144
  if (this.subscription) {
118
145
  this.subscription.close();
119
- this.subscription = null;
146
+ this.subscription = undefined;
120
147
  var {
121
148
  onSubscription
122
149
  } = this.props;
123
- onSubscription(null);
150
+ onSubscription();
124
151
  }
125
152
 
126
153
  this.updateViewport.cancel();
127
154
  }
128
155
 
129
- updateViewport(top, bottom, left, right, viewColumns) {
130
- if (bottom < top) {
131
- log.error('Invalid viewport', top, bottom);
132
- return;
133
- }
134
-
135
- if (top === 0 && bottom === 0) {
136
- log.debug2('Ignoring 0-0 viewport');
137
- return;
138
- }
139
-
140
- var {
141
- movedColumns,
142
- table
143
- } = this.props;
144
- var [viewportTop, viewportBottom] = this.getViewportRowRange(table, top, bottom);
145
- var columns = viewColumns !== null && viewColumns !== void 0 ? viewColumns : this.getViewportColumns(table, left, right, movedColumns);
146
- log.debug2('Setting Viewport Top:', viewportTop, 'Bottom:', viewportBottom, 'Columns:', columns);
147
-
148
- if (this.subscription == null) {
149
- log.debug2('updateViewport creating new subscription');
150
- this.subscription = table.setViewport(viewportTop, viewportBottom, columns);
151
- var {
152
- onSubscription
153
- } = this.props;
154
- onSubscription(this.subscription);
155
- } else {
156
- log.debug2('updateViewport using existing subscription');
157
- this.subscription.setViewport(viewportTop, viewportBottom, columns);
158
- }
159
- }
160
-
161
156
  render() {
162
157
  return null;
163
158
  }
@@ -168,35 +163,18 @@ _defineProperty(TableViewportUpdater, "ROW_BUFFER_PAGES", 3);
168
163
 
169
164
  _defineProperty(TableViewportUpdater, "COLUMN_BUFFER_PAGES", 1);
170
165
 
171
- TableViewportUpdater.propTypes = {
172
- table: PropTypes.shape({
173
- applyFilter: PropTypes.func.isRequired,
174
- applySort: PropTypes.func.isRequired,
175
- applyCustomColumns: PropTypes.func.isRequired,
176
- setViewport: PropTypes.func.isRequired
177
- }).isRequired,
178
- top: PropTypes.number,
179
- bottom: PropTypes.number,
180
- left: PropTypes.number,
181
- right: PropTypes.number,
182
- columns: PropTypes.arrayOf(APIPropTypes.Column),
183
- filters: PropTypes.arrayOf(PropTypes.shape({})),
184
- sorts: PropTypes.arrayOf(PropTypes.shape({})),
185
- customColumns: PropTypes.arrayOf(PropTypes.string),
186
- movedColumns: PropTypes.arrayOf(PropTypes.shape({})),
187
- onSubscription: PropTypes.func
188
- };
189
- TableViewportUpdater.defaultProps = {
166
+ _defineProperty(TableViewportUpdater, "defaultProps", {
190
167
  top: 0,
191
168
  bottom: 0,
192
169
  left: null,
193
170
  right: null,
194
171
  columns: null,
195
- onSubscription: () => {},
172
+ onSubscription: () => undefined,
196
173
  filters: [],
197
174
  sorts: [],
198
175
  customColumns: [],
199
176
  movedColumns: []
200
- };
177
+ });
178
+
201
179
  export default TableViewportUpdater;
202
180
  //# sourceMappingURL=TableViewportUpdater.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/TableViewportUpdater.jsx"],"names":["PureComponent","memoize","PropTypes","throttle","GridUtils","APIPropTypes","Log","log","module","UPDATE_THROTTLE","TableViewportUpdater","constructor","props","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","updateViewport","bind","subscription","componentDidMount","filters","sorts","customColumns","applyFilter","applySort","applyCustomColumns","componentDidUpdate","prevProps","isFilterChanged","isSortChanged","isCustomColumnsChanged","isTableChanged","closeSubscription","debug","componentWillUnmount","debug2","close","onSubscription","cancel","viewColumns","error","getViewportRowRange","getViewportColumns","setViewport","render","propTypes","shape","func","isRequired","number","arrayOf","Column","string","defaultProps"],"mappings":"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","sourcesContent":["import { PureComponent } from 'react';\nimport memoize from 'memoize-one';\nimport PropTypes from 'prop-types';\nimport throttle from 'lodash.throttle';\nimport { GridUtils } from '@deephaven/grid';\nimport { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\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 */\nclass TableViewportUpdater extends PureComponent {\n // Number of pages to buffer for rows/columns\n static ROW_BUFFER_PAGES = 3;\n\n static COLUMN_BUFFER_PAGES = 1;\n\n constructor(props) {\n super(props);\n\n this.updateViewport = throttle(\n this.updateViewport.bind(this),\n UPDATE_THROTTLE\n );\n\n this.subscription = null;\n }\n\n componentDidMount() {\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) {\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() {\n this.closeSubscription();\n }\n\n // eslint-disable-next-line class-methods-use-this\n getViewportRowRange = memoize((table, top, bottom) => {\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((table, left, right, movedColumns) => {\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 closeSubscription() {\n log.debug2('closeSubscription', this.subscription);\n if (this.subscription) {\n this.subscription.close();\n this.subscription = null;\n\n const { onSubscription } = this.props;\n onSubscription(null);\n }\n\n this.updateViewport.cancel();\n }\n\n updateViewport(top, bottom, left, right, viewColumns) {\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 ?? 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\n render() {\n return null;\n }\n}\n\nTableViewportUpdater.propTypes = {\n table: PropTypes.shape({\n applyFilter: PropTypes.func.isRequired,\n applySort: PropTypes.func.isRequired,\n applyCustomColumns: PropTypes.func.isRequired,\n setViewport: PropTypes.func.isRequired,\n }).isRequired,\n top: PropTypes.number,\n bottom: PropTypes.number,\n left: PropTypes.number,\n right: PropTypes.number,\n columns: PropTypes.arrayOf(APIPropTypes.Column),\n filters: PropTypes.arrayOf(PropTypes.shape({})),\n sorts: PropTypes.arrayOf(PropTypes.shape({})),\n customColumns: PropTypes.arrayOf(PropTypes.string),\n movedColumns: PropTypes.arrayOf(PropTypes.shape({})),\n onSubscription: PropTypes.func,\n};\n\nTableViewportUpdater.defaultProps = {\n top: 0,\n bottom: 0,\n left: null,\n right: null,\n columns: null,\n onSubscription: () => {},\n filters: [],\n sorts: [],\n customColumns: [],\n movedColumns: [],\n};\n\nexport default TableViewportUpdater;\n"],"file":"TableViewportUpdater.js"}
1
+ {"version":3,"sources":["../src/TableViewportUpdater.tsx"],"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"],"mappings":"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","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, top, bottom) => {\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 (table, left, right, movedColumns: MoveOperation[]) => {\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"],"file":"TableViewportUpdater.js"}
@@ -1,44 +1,36 @@
1
- export default TreeTableViewportUpdater;
1
+ /// <reference types="lodash" />
2
+ import { PureComponent } from 'react';
3
+ import { EventListener, FilterCondition, RemoverFn, Sort, Table } from '@deephaven/jsapi-shim';
4
+ interface TreeTableViewportUpdaterProps {
5
+ table: Table;
6
+ top: number;
7
+ bottom: number;
8
+ filters: FilterCondition[];
9
+ sorts: Sort[];
10
+ updateInterval: number;
11
+ onViewportUpdate: EventListener;
12
+ }
2
13
  /**
3
14
  * Updates the viewport of a TreeTable for use in a scroll pane.
4
15
  * Automatically throttles the viewport requests and buffers above and below.
5
16
  */
6
- declare class TreeTableViewportUpdater extends PureComponent<any, any, any> {
17
+ declare class TreeTableViewportUpdater extends PureComponent<TreeTableViewportUpdaterProps, Record<string, never>> {
7
18
  static UPDATE_INTERVAL: number;
8
- constructor(props: any);
9
- updateViewport(top: any, bottom: any): void;
10
- listenerCleanup: any;
19
+ static defaultProps: {
20
+ top: number;
21
+ bottom: number;
22
+ onViewportUpdate: () => void;
23
+ filters: never[];
24
+ sorts: never[];
25
+ updateInterval: number;
26
+ };
27
+ constructor(props: TreeTableViewportUpdaterProps);
28
+ componentDidMount(): void;
29
+ componentDidUpdate(prevProps: TreeTableViewportUpdaterProps): void;
30
+ componentWillUnmount(): void;
31
+ listenerCleanup: RemoverFn | null;
32
+ updateViewport: import("lodash").DebouncedFunc<(top: number, bottom: number) => void>;
33
+ render(): null;
11
34
  }
12
- declare namespace TreeTableViewportUpdater {
13
- namespace propTypes {
14
- const table: PropTypes.Validator<PropTypes.InferProps<{
15
- addEventListener: PropTypes.Validator<(...args: any[]) => any>;
16
- applyFilter: PropTypes.Validator<(...args: any[]) => any>;
17
- applySort: PropTypes.Validator<(...args: any[]) => any>;
18
- setViewport: PropTypes.Validator<(...args: any[]) => any>;
19
- }>>;
20
- const top: PropTypes.Requireable<number>;
21
- const bottom: PropTypes.Requireable<number>;
22
- const filters: PropTypes.Requireable<(PropTypes.InferProps<{}> | null | undefined)[]>;
23
- const sorts: PropTypes.Requireable<(PropTypes.InferProps<{}> | null | undefined)[]>;
24
- const updateInterval: PropTypes.Requireable<number>;
25
- const onViewportUpdate: PropTypes.Requireable<(...args: any[]) => any>;
26
- }
27
- namespace defaultProps {
28
- const top_1: number;
29
- export { top_1 as top };
30
- const bottom_1: number;
31
- export { bottom_1 as bottom };
32
- export function onViewportUpdate_1(): void;
33
- export { onViewportUpdate_1 as onViewportUpdate };
34
- const filters_1: never[];
35
- export { filters_1 as filters };
36
- const sorts_1: never[];
37
- export { sorts_1 as sorts };
38
- import updateInterval_1 = TreeTableViewportUpdater.UPDATE_INTERVAL;
39
- export { updateInterval_1 as updateInterval };
40
- }
41
- }
42
- import { PureComponent } from "react";
43
- import PropTypes from "prop-types";
35
+ export default TreeTableViewportUpdater;
44
36
  //# sourceMappingURL=TreeTableViewportUpdater.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TreeTableViewportUpdater.d.ts","sourceRoot":"","sources":["../src/TreeTableViewportUpdater.jsx"],"names":[],"mappings":";AAUA;;;GAGG;AACH;IACE,+BAA8B;IAE9B,wBASC;IAgCD,4CAgCC;IAjEC,qBAA2B;CAsE9B;;;;;;;;;;;;;;;;;;;;;QAoBmB,2CAAQ"}
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;IAOhD,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"}