@deephaven/iris-grid 0.22.3-deep-bot-test.14 → 0.23.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 (236) hide show
  1. package/dist/AdvancedFilterCreator.d.ts +1 -1
  2. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  3. package/dist/AdvancedFilterCreator.js +7 -65
  4. package/dist/AdvancedFilterCreator.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorFilterItem.d.ts +1 -1
  6. package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
  7. package/dist/AdvancedFilterCreatorFilterItem.js +0 -23
  8. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  9. package/dist/AdvancedFilterCreatorSelectValue.js +0 -52
  10. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  11. package/dist/AdvancedFilterCreatorSelectValueList.d.ts +1 -5
  12. package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
  13. package/dist/AdvancedFilterCreatorSelectValueList.js +2 -42
  14. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  15. package/dist/ColumnHeaderGroup.js +0 -11
  16. package/dist/ColumnHeaderGroup.js.map +1 -1
  17. package/dist/ColumnStatistics.js +1 -20
  18. package/dist/ColumnStatistics.js.map +1 -1
  19. package/dist/CommonTypes.d.ts +14 -14
  20. package/dist/CommonTypes.d.ts.map +1 -1
  21. package/dist/CrossColumnSearch.js +2 -23
  22. package/dist/CrossColumnSearch.js.map +1 -1
  23. package/dist/FilterInputField.js +2 -36
  24. package/dist/FilterInputField.js.map +1 -1
  25. package/dist/GotoRow.d.ts +1 -1
  26. package/dist/GotoRow.d.ts.map +1 -1
  27. package/dist/GotoRow.js +2 -7
  28. package/dist/GotoRow.js.map +1 -1
  29. package/dist/IrisGrid.d.ts +45 -39
  30. package/dist/IrisGrid.d.ts.map +1 -1
  31. package/dist/IrisGrid.js +77 -519
  32. package/dist/IrisGrid.js.map +1 -1
  33. package/dist/IrisGridBottomBar.d.ts +2 -2
  34. package/dist/IrisGridBottomBar.d.ts.map +1 -1
  35. package/dist/IrisGridBottomBar.js +2 -2
  36. package/dist/IrisGridBottomBar.js.map +1 -1
  37. package/dist/IrisGridCellOverflowModal.js +6 -21
  38. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  39. package/dist/IrisGridCopyHandler.d.ts +3 -3
  40. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  41. package/dist/IrisGridCopyHandler.js +3 -50
  42. package/dist/IrisGridCopyHandler.js.map +1 -1
  43. package/dist/IrisGridMetricCalculator.js +2 -12
  44. package/dist/IrisGridMetricCalculator.js.map +1 -1
  45. package/dist/IrisGridModel.d.ts +3 -3
  46. package/dist/IrisGridModel.d.ts.map +1 -1
  47. package/dist/IrisGridModel.js +32 -58
  48. package/dist/IrisGridModel.js.map +1 -1
  49. package/dist/IrisGridModelFactory.js +0 -7
  50. package/dist/IrisGridModelFactory.js.map +1 -1
  51. package/dist/IrisGridModelUpdater.js +0 -4
  52. package/dist/IrisGridModelUpdater.js.map +1 -1
  53. package/dist/IrisGridPartitionSelector.js +0 -23
  54. package/dist/IrisGridPartitionSelector.js.map +1 -1
  55. package/dist/IrisGridProxyModel.js +9 -153
  56. package/dist/IrisGridProxyModel.js.map +1 -1
  57. package/dist/IrisGridRenderer.d.ts +1 -1
  58. package/dist/IrisGridRenderer.d.ts.map +1 -1
  59. package/dist/IrisGridRenderer.js +41 -183
  60. package/dist/IrisGridRenderer.js.map +1 -1
  61. package/dist/IrisGridShortcuts.js.map +1 -1
  62. package/dist/IrisGridTableModel.d.ts +3 -3
  63. package/dist/IrisGridTableModel.d.ts.map +1 -1
  64. package/dist/IrisGridTableModel.js +10 -90
  65. package/dist/IrisGridTableModel.js.map +1 -1
  66. package/dist/IrisGridTableModelTemplate.d.ts +3 -3
  67. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
  68. package/dist/IrisGridTableModelTemplate.js +70 -461
  69. package/dist/IrisGridTableModelTemplate.js.map +1 -1
  70. package/dist/IrisGridTestUtils.js +0 -23
  71. package/dist/IrisGridTestUtils.js.map +1 -1
  72. package/dist/IrisGridTheme.d.ts +1 -1
  73. package/dist/IrisGridTheme.d.ts.map +1 -1
  74. package/dist/IrisGridTheme.js.map +1 -1
  75. package/dist/IrisGridTreeTableModel.js +3 -42
  76. package/dist/IrisGridTreeTableModel.js.map +1 -1
  77. package/dist/IrisGridUtils.d.ts +13 -7
  78. package/dist/IrisGridUtils.d.ts.map +1 -1
  79. package/dist/IrisGridUtils.js +98 -196
  80. package/dist/IrisGridUtils.js.map +1 -1
  81. package/dist/MissingKeyError.js +0 -7
  82. package/dist/MissingKeyError.js.map +1 -1
  83. package/dist/PartitionSelectorSearch.d.ts +2 -2
  84. package/dist/PartitionSelectorSearch.js +2 -48
  85. package/dist/PartitionSelectorSearch.js.map +1 -1
  86. package/dist/PendingDataBottomBar.d.ts +2 -2
  87. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  88. package/dist/PendingDataBottomBar.js +2 -7
  89. package/dist/PendingDataBottomBar.js.map +1 -1
  90. package/dist/TableViewportUpdater.d.ts +2 -2
  91. package/dist/TableViewportUpdater.d.ts.map +1 -1
  92. package/dist/TableViewportUpdater.js +3 -29
  93. package/dist/TableViewportUpdater.js.map +1 -1
  94. package/dist/ToastBottomBar.d.ts +2 -2
  95. package/dist/ToastBottomBar.d.ts.map +1 -1
  96. package/dist/ToastBottomBar.js +2 -4
  97. package/dist/ToastBottomBar.js.map +1 -1
  98. package/dist/TreeTableViewportUpdater.js +0 -21
  99. package/dist/TreeTableViewportUpdater.js.map +1 -1
  100. package/dist/format-context-menus/CustomFormatAction.d.ts +1 -1
  101. package/dist/format-context-menus/CustomFormatAction.d.ts.map +1 -1
  102. package/dist/format-context-menus/CustomFormatAction.js +4 -25
  103. package/dist/format-context-menus/CustomFormatAction.js.map +1 -1
  104. package/dist/format-context-menus/DateTimeFormatContextMenu.js +0 -7
  105. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +1 -1
  106. package/dist/format-context-menus/DecimalFormatContextMenu.js +0 -9
  107. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +1 -1
  108. package/dist/format-context-menus/FormatContextMenuUtils.js +3 -9
  109. package/dist/format-context-menus/FormatContextMenuUtils.js.map +1 -1
  110. package/dist/format-context-menus/IntegerFormatContextMenu.js +0 -8
  111. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +1 -1
  112. package/dist/format-context-menus/index.js.map +1 -1
  113. package/dist/index.d.ts +3 -3
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +3 -3
  116. package/dist/index.js.map +1 -1
  117. package/dist/key-handlers/ClearFilterKeyHandler.js +0 -8
  118. package/dist/key-handlers/ClearFilterKeyHandler.js.map +1 -1
  119. package/dist/key-handlers/CopyKeyHandler.js +1 -10
  120. package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
  121. package/dist/key-handlers/ReverseKeyHandler.js +0 -11
  122. package/dist/key-handlers/ReverseKeyHandler.js.map +1 -1
  123. package/dist/key-handlers/index.js.map +1 -1
  124. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +2 -32
  125. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  126. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +4 -34
  127. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  128. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +0 -20
  129. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  130. package/dist/mousehandlers/IrisGridContextMenuHandler.js +15 -105
  131. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  132. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +0 -9
  133. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +1 -1
  134. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +0 -17
  135. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  136. package/dist/mousehandlers/IrisGridSortMouseHandler.js +2 -15
  137. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  138. package/dist/mousehandlers/PendingMouseHandler.js +0 -6
  139. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  140. package/dist/mousehandlers/index.js.map +1 -1
  141. package/dist/sidebar/AdvancedSettings.js.map +1 -1
  142. package/dist/sidebar/AdvancedSettingsMenu.d.ts +6 -6
  143. package/dist/sidebar/AdvancedSettingsMenu.d.ts.map +1 -1
  144. package/dist/sidebar/AdvancedSettingsMenu.js +2 -6
  145. package/dist/sidebar/AdvancedSettingsMenu.js.map +1 -1
  146. package/dist/sidebar/AdvancedSettingsType.js +0 -2
  147. package/dist/sidebar/AdvancedSettingsType.js.map +1 -1
  148. package/dist/sidebar/ChartBuilder.d.ts +2 -2
  149. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  150. package/dist/sidebar/ChartBuilder.js +2 -46
  151. package/dist/sidebar/ChartBuilder.js.map +1 -1
  152. package/dist/sidebar/CustomColumnBuilder.d.ts +2 -2
  153. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  154. package/dist/sidebar/CustomColumnBuilder.js +6 -58
  155. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  156. package/dist/sidebar/CustomColumnInput.js +4 -15
  157. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  158. package/dist/sidebar/InputEditor.js +5 -36
  159. package/dist/sidebar/InputEditor.js.map +1 -1
  160. package/dist/sidebar/OptionType.js +0 -2
  161. package/dist/sidebar/OptionType.js.map +1 -1
  162. package/dist/sidebar/RollupRows.d.ts +3 -3
  163. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  164. package/dist/sidebar/RollupRows.js +9 -65
  165. package/dist/sidebar/RollupRows.js.map +1 -1
  166. package/dist/sidebar/SelectDistinctBuilder.js +0 -13
  167. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  168. package/dist/sidebar/TableCsvExporter.js +0 -52
  169. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  170. package/dist/sidebar/TableSaver.d.ts +1 -1
  171. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  172. package/dist/sidebar/TableSaver.js +10 -123
  173. package/dist/sidebar/TableSaver.js.map +1 -1
  174. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +5 -4
  175. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  176. package/dist/sidebar/VisibilityOrderingBuilder.js +37 -116
  177. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  178. package/dist/sidebar/aggregations/AggregationEdit.d.ts +2 -2
  179. package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
  180. package/dist/sidebar/aggregations/AggregationEdit.js +2 -14
  181. package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
  182. package/dist/sidebar/aggregations/AggregationOperation.js +0 -2
  183. package/dist/sidebar/aggregations/AggregationOperation.js.map +1 -1
  184. package/dist/sidebar/aggregations/AggregationUtils.js +2 -5
  185. package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
  186. package/dist/sidebar/aggregations/Aggregations.d.ts +4 -4
  187. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  188. package/dist/sidebar/aggregations/Aggregations.js +2 -12
  189. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  190. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +1 -1
  191. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
  192. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +2 -16
  193. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
  194. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +1 -1
  195. package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
  196. package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -35
  197. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
  198. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts +4 -4
  199. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
  200. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +2 -12
  201. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
  202. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +0 -3
  203. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
  204. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +5 -5
  205. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  206. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +16 -26
  207. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  208. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +3 -3
  209. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  210. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +9 -172
  211. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  212. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +1 -1
  213. package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
  214. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +2 -16
  215. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
  216. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts +1 -1
  217. package/dist/sidebar/conditional-formatting/StyleEditor.d.ts.map +1 -1
  218. package/dist/sidebar/conditional-formatting/StyleEditor.js +2 -12
  219. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +1 -1
  220. package/dist/sidebar/icons/BarIcon.js +0 -3
  221. package/dist/sidebar/icons/BarIcon.js.map +1 -1
  222. package/dist/sidebar/icons/FormatColumnWhereIcon.js +2 -5
  223. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +1 -1
  224. package/dist/sidebar/icons/FormatRowWhereIcon.js +2 -5
  225. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +1 -1
  226. package/dist/sidebar/icons/HistogramIcon.js +0 -3
  227. package/dist/sidebar/icons/HistogramIcon.js.map +1 -1
  228. package/dist/sidebar/icons/LineIcon.js +0 -3
  229. package/dist/sidebar/icons/LineIcon.js.map +1 -1
  230. package/dist/sidebar/icons/PieIcon.js +0 -3
  231. package/dist/sidebar/icons/PieIcon.js.map +1 -1
  232. package/dist/sidebar/icons/ScatterIcon.js +0 -3
  233. package/dist/sidebar/icons/ScatterIcon.js.map +1 -1
  234. package/dist/sidebar/icons/index.js.map +1 -1
  235. package/dist/sidebar/index.js.map +1 -1
  236. package/package.json +15 -15
@@ -1,5 +1,4 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
2
  /* eslint react/no-did-update-set-state: "off" */
4
3
  import React, { PureComponent } from 'react';
5
4
  import { CSSTransition } from 'react-transition-group';
@@ -7,7 +6,6 @@ import dh from '@deephaven/jsapi-shim';
7
6
  import { LoadingSpinner, SelectValueList } from '@deephaven/components';
8
7
  import Log from '@deephaven/log';
9
8
  var log = Log.module('AdvancedFilterCreatorSelectValueList');
10
-
11
9
  /**
12
10
  * Select values from a long scrollable list.
13
11
  * Swaps items in and out for infinite scrolling
@@ -21,20 +19,15 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
21
19
  static indexOf(value, values) {
22
20
  for (var i = 0; i < values.length; i += 1) {
23
21
  var v = values[i];
24
-
25
22
  if (v === value || v != null && v.valueOf != null && value != null && value.valueOf != null && v.valueOf() === value.valueOf()) {
26
23
  return i;
27
24
  }
28
25
  }
29
-
30
26
  return -1;
31
27
  }
32
-
33
28
  constructor(props) {
34
29
  super(props);
35
-
36
30
  _defineProperty(this, "list", void 0);
37
-
38
31
  this.handleSelect = this.handleSelect.bind(this);
39
32
  this.handleViewportChange = this.handleViewportChange.bind(this);
40
33
  this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);
@@ -51,14 +44,12 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
51
44
  isLoading: true
52
45
  };
53
46
  }
54
-
55
47
  componentDidMount() {
56
48
  var {
57
49
  table
58
50
  } = this.props;
59
51
  if (table) this.startListening(table);
60
52
  }
61
-
62
53
  componentDidUpdate(prevProps) {
63
54
  var {
64
55
  filters,
@@ -66,38 +57,32 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
66
57
  selectedValues,
67
58
  table
68
59
  } = this.props;
69
-
70
60
  if (prevProps.table !== table) {
71
61
  if (prevProps.table) this.stopListening(prevProps.table);
72
62
  if (table) this.startListening(table);
73
63
  this.resetViewport();
74
64
  }
75
-
76
65
  if (prevProps.invertSelection !== invertSelection) {
77
66
  this.setState({
78
67
  selectedValues: []
79
68
  }, this.handleSelectionUpdate);
80
69
  }
81
-
82
70
  if (prevProps.selectedValues !== selectedValues) {
83
71
  this.setState({
84
72
  selectedValues
85
73
  }, this.handleSelectionUpdate);
86
74
  }
87
-
88
75
  if (prevProps.filters !== filters) {
89
76
  table === null || table === void 0 ? void 0 : table.applyFilter(filters);
90
77
  this.resetViewport();
91
78
  }
92
79
  }
93
-
94
80
  componentWillUnmount() {
95
81
  var {
96
82
  table
97
83
  } = this.props;
98
84
  if (table) this.stopListening(table);
99
85
  }
100
-
101
86
  handleSelect(itemIndex, value) {
102
87
  var {
103
88
  invertSelection
@@ -107,19 +92,15 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
107
92
  } = this.state;
108
93
  selectedValues = [...selectedValues];
109
94
  var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);
110
-
111
95
  if (selectedIndex >= 0) {
112
96
  selectedValues.splice(selectedIndex, 1);
113
97
  } else {
114
98
  selectedValues.push(value);
115
99
  }
116
-
117
100
  var isSelected = selectedIndex < 0;
118
-
119
101
  if (invertSelection) {
120
102
  isSelected = !isSelected;
121
103
  }
122
-
123
104
  var {
124
105
  offset
125
106
  } = this.state;
@@ -128,11 +109,9 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
128
109
  } = this.state;
129
110
  items = [...items];
130
111
  var visibleItemIndex = itemIndex - offset;
131
-
132
112
  if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {
133
113
  items[visibleItemIndex].isSelected = isSelected;
134
114
  }
135
-
136
115
  this.setState({
137
116
  items,
138
117
  selectedValues
@@ -142,15 +121,12 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
142
121
  } = this.props;
143
122
  onChange(selectedValues, invertSelection);
144
123
  }
145
-
146
124
  handleViewportChange(top, bottom) {
147
125
  this.updateViewport(top, bottom);
148
126
  }
149
-
150
127
  handleSelectionUpdate() {
151
128
  this.updateItemSelection();
152
129
  }
153
-
154
130
  handleTableUpdate(event) {
155
131
  var {
156
132
  table,
@@ -163,7 +139,6 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
163
139
  } = data;
164
140
  var items = [];
165
141
  var column = table.columns[0];
166
-
167
142
  for (var r = 0; r < data.rows.length; r += 1) {
168
143
  var row = data.rows[r];
169
144
  var value = row.get(column);
@@ -175,7 +150,6 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
175
150
  isSelected
176
151
  });
177
152
  }
178
-
179
153
  log.debug2('Received table update:', offset, items.length);
180
154
  var itemCount = table.size;
181
155
  this.setState({
@@ -185,39 +159,34 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
185
159
  isLoading: false
186
160
  });
187
161
  }
188
-
189
162
  isValueSelected(value) {
190
163
  var {
191
164
  invertSelection
192
165
  } = this.props;
193
166
  var {
194
167
  selectedValues
195
- } = this.state; // Need to check if any of the valueOf matches, timestamp value that is equal
168
+ } = this.state;
196
169
 
170
+ // Need to check if any of the valueOf matches, timestamp value that is equal
197
171
  var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);
198
172
  return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;
199
173
  }
200
-
201
174
  startListening(table) {
202
175
  table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
203
176
  }
204
-
205
177
  stopListening(table) {
206
178
  table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
207
179
  }
208
-
209
180
  resetViewport() {
210
181
  if (this.list && this.list.topRow != null && this.list.bottomRow != null) {
211
182
  this.updateViewport(this.list.topRow, this.list.bottomRow, true);
212
183
  }
213
184
  }
214
-
215
185
  updateItemSelection() {
216
186
  var {
217
187
  items
218
188
  } = this.state;
219
189
  items = [...items];
220
-
221
190
  for (var i = 0; i < items.length; i += 1) {
222
191
  var item = items[i];
223
192
  var {
@@ -225,35 +194,29 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
225
194
  } = item;
226
195
  item.isSelected = this.isValueSelected(value);
227
196
  }
228
-
229
197
  this.setState({
230
198
  items
231
199
  });
232
200
  }
233
-
234
201
  updateViewport(top, bottom) {
235
202
  var isLoading = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
236
203
  var {
237
204
  table
238
205
  } = this.props;
239
-
240
206
  if (table == null) {
241
207
  return;
242
208
  }
243
-
244
209
  if (isLoading) {
245
210
  this.setState({
246
211
  isLoading: true
247
212
  });
248
213
  }
249
-
250
214
  var viewportSize = bottom - top + 1;
251
215
  var topRow = Math.max(0, top - viewportSize * 3);
252
216
  var bottomRow = Math.max(topRow, bottom + viewportSize * 3);
253
217
  log.debug2('Setting viewport', topRow, ',', bottomRow);
254
218
  table.setViewport(topRow, bottomRow);
255
219
  }
256
-
257
220
  render() {
258
221
  var {
259
222
  offset,
@@ -284,14 +247,11 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
284
247
  className: "loading-spinner-large"
285
248
  }))));
286
249
  }
287
-
288
250
  }
289
-
290
251
  _defineProperty(AdvancedFilterCreatorSelectValueList, "defaultProps", {
291
252
  invertSelection: true,
292
253
  selectedValues: [],
293
254
  onChange: () => undefined
294
255
  });
295
-
296
256
  export default AdvancedFilterCreatorSelectValueList;
297
257
  //# sourceMappingURL=AdvancedFilterCreatorSelectValueList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdvancedFilterCreatorSelectValueList.js","names":["React","PureComponent","CSSTransition","dh","LoadingSpinner","SelectValueList","Log","log","module","AdvancedFilterCreatorSelectValueList","indexOf","value","values","i","length","v","valueOf","constructor","props","handleSelect","bind","handleViewportChange","handleSelectionUpdate","handleTableUpdate","list","selectedValues","state","itemCount","items","offset","isLoading","componentDidMount","table","startListening","componentDidUpdate","prevProps","filters","invertSelection","stopListening","resetViewport","setState","applyFilter","componentWillUnmount","itemIndex","selectedIndex","splice","push","isSelected","visibleItemIndex","onChange","top","bottom","updateViewport","updateItemSelection","event","formatter","data","detail","column","columns","r","rows","row","get","displayValue","getFormattedString","type","name","isValueSelected","debug2","size","addEventListener","Table","EVENT_UPDATED","removeEventListener","topRow","bottomRow","item","viewportSize","Math","max","setViewport","render","undefined"],"sources":["../src/AdvancedFilterCreatorSelectValueList.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport dh, { FilterCondition, Table } from '@deephaven/jsapi-shim';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport {\n LoadingSpinner,\n SelectValueList,\n SelectItem,\n} from '@deephaven/components';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('AdvancedFilterCreatorSelectValueList');\n\ninterface AdvancedFilterCreatorSelectValueListProps<T> {\n selectedValues: T[];\n table?: Table;\n filters: FilterCondition[];\n invertSelection: boolean;\n onChange: (selectedValues: T[], invertSelection: boolean) => void;\n formatter: Formatter;\n}\n\ninterface AdvancedFilterCreatorSelectValueListState<T> {\n itemCount: number;\n items: SelectItem<T>[];\n offset: number;\n selectedValues: T[];\n isLoading: boolean;\n}\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList<T = unknown> extends PureComponent<\n AdvancedFilterCreatorSelectValueListProps<T>,\n AdvancedFilterCreatorSelectValueListState<T>\n> {\n static defaultProps = {\n invertSelection: true,\n selectedValues: [],\n onChange: (): void => undefined,\n };\n\n /**\n * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.\n * @param value The value to search for\n * @param values The array of values to search within\n */\n static indexOf(\n value: { valueof?: unknown },\n values: { valueof?: unknown }[]\n ): number {\n for (let i = 0; i < values.length; i += 1) {\n const v = values[i];\n if (\n v === value ||\n (v != null &&\n v.valueOf != null &&\n value != null &&\n value.valueOf != null &&\n v.valueOf() === value.valueOf())\n ) {\n return i;\n }\n }\n\n return -1;\n }\n\n constructor(props: AdvancedFilterCreatorSelectValueListProps<T>) {\n super(props);\n\n this.handleSelect = this.handleSelect.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n\n this.list = null;\n\n const { selectedValues } = this.props;\n\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true,\n };\n }\n\n componentDidMount(): void {\n const { table } = this.props;\n if (table) this.startListening(table);\n }\n\n componentDidUpdate(\n prevProps: AdvancedFilterCreatorSelectValueListProps<T>\n ): void {\n const { filters, invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n if (prevProps.table) this.stopListening(prevProps.table);\n if (table) this.startListening(table);\n this.resetViewport();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ selectedValues: [] }, this.handleSelectionUpdate);\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues }, this.handleSelectionUpdate);\n }\n\n if (prevProps.filters !== filters) {\n table?.applyFilter(filters);\n this.resetViewport();\n }\n }\n\n componentWillUnmount(): void {\n const { table } = this.props;\n if (table) this.stopListening(table);\n }\n\n list: SelectValueList<T> | null;\n\n handleSelect(itemIndex: number, value: T): void {\n const { invertSelection } = this.props;\n let { selectedValues } = this.state;\n selectedValues = [...selectedValues];\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n\n let isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n\n const { offset } = this.state;\n let { items } = this.state;\n items = [...items];\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n\n this.setState({ items, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleViewportChange(top: number, bottom: number): void {\n this.updateViewport(top, bottom);\n }\n\n handleSelectionUpdate(): void {\n this.updateItemSelection();\n }\n\n handleTableUpdate(event: CustomEvent): void {\n const { table, formatter } = this.props;\n if (!table) return;\n\n const data = event.detail;\n const { offset } = data;\n const items = [];\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 = formatter.getFormattedString(\n value,\n column.type,\n column.name\n );\n const isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected,\n });\n }\n\n log.debug2('Received table update:', offset, items.length);\n\n const itemCount = table.size;\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n isValueSelected(value: T): boolean {\n const { invertSelection } = this.props;\n const { selectedValues } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n\n startListening(table: Table): void {\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n\n stopListening(table: Table): void {\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n\n resetViewport(): void {\n if (this.list && this.list.topRow != null && this.list.bottomRow != null) {\n this.updateViewport(this.list.topRow, this.list.bottomRow, true);\n }\n }\n\n updateItemSelection(): void {\n let { items } = this.state;\n\n items = [...items];\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value } = item;\n item.isSelected = this.isValueSelected(value);\n }\n\n this.setState({ items });\n }\n\n updateViewport(top: number, bottom: number, isLoading = false): void {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n if (isLoading) {\n this.setState({ isLoading: true });\n }\n\n const viewportSize = bottom - top + 1;\n const topRow = Math.max(0, top - viewportSize * 3);\n const bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow);\n }\n\n render(): React.ReactElement {\n const { offset, isLoading, items, itemCount } = this.state;\n\n return (\n <div className=\"select-value-list-wrapper\">\n <SelectValueList\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n ref={list => {\n this.list = list;\n }}\n />\n <CSSTransition\n in={isLoading}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"loading-list\">\n <LoadingSpinner className=\"loading-spinner-large\" />\n </div>\n </CSSTransition>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValueList;\n"],"mappings":"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"}
1
+ {"version":3,"file":"AdvancedFilterCreatorSelectValueList.js","names":["React","PureComponent","CSSTransition","dh","LoadingSpinner","SelectValueList","Log","log","module","AdvancedFilterCreatorSelectValueList","indexOf","value","values","i","length","v","valueOf","constructor","props","handleSelect","bind","handleViewportChange","handleSelectionUpdate","handleTableUpdate","list","selectedValues","state","itemCount","items","offset","isLoading","componentDidMount","table","startListening","componentDidUpdate","prevProps","filters","invertSelection","stopListening","resetViewport","setState","applyFilter","componentWillUnmount","itemIndex","selectedIndex","splice","push","isSelected","visibleItemIndex","onChange","top","bottom","updateViewport","updateItemSelection","event","formatter","data","detail","column","columns","r","rows","row","get","displayValue","getFormattedString","type","name","isValueSelected","debug2","size","addEventListener","Table","EVENT_UPDATED","removeEventListener","topRow","bottomRow","item","viewportSize","Math","max","setViewport","render","undefined"],"sources":["../src/AdvancedFilterCreatorSelectValueList.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport dh, { FilterCondition, Table } from '@deephaven/jsapi-shim';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport {\n LoadingSpinner,\n SelectValueList,\n SelectItem,\n} from '@deephaven/components';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('AdvancedFilterCreatorSelectValueList');\n\ninterface AdvancedFilterCreatorSelectValueListProps<T> {\n selectedValues: T[];\n table?: Table;\n filters: FilterCondition[];\n invertSelection: boolean;\n onChange: (selectedValues: T[], invertSelection: boolean) => void;\n formatter: Formatter;\n}\n\ninterface AdvancedFilterCreatorSelectValueListState<T> {\n itemCount: number;\n items: SelectItem<T>[];\n offset: number;\n selectedValues: T[];\n isLoading: boolean;\n}\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList<T = unknown> extends PureComponent<\n AdvancedFilterCreatorSelectValueListProps<T>,\n AdvancedFilterCreatorSelectValueListState<T>\n> {\n static defaultProps = {\n invertSelection: true,\n selectedValues: [],\n onChange: (): void => undefined,\n };\n\n /**\n * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.\n * @param value The value to search for\n * @param values The array of values to search within\n */\n static indexOf(value: unknown, values: unknown[]): number {\n for (let i = 0; i < values.length; i += 1) {\n const v = values[i];\n if (\n v === value ||\n (v != null &&\n v.valueOf != null &&\n value != null &&\n value.valueOf != null &&\n v.valueOf() === value.valueOf())\n ) {\n return i;\n }\n }\n\n return -1;\n }\n\n constructor(props: AdvancedFilterCreatorSelectValueListProps<T>) {\n super(props);\n\n this.handleSelect = this.handleSelect.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n\n this.list = null;\n\n const { selectedValues } = this.props;\n\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true,\n };\n }\n\n componentDidMount(): void {\n const { table } = this.props;\n if (table) this.startListening(table);\n }\n\n componentDidUpdate(\n prevProps: AdvancedFilterCreatorSelectValueListProps<T>\n ): void {\n const { filters, invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n if (prevProps.table) this.stopListening(prevProps.table);\n if (table) this.startListening(table);\n this.resetViewport();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ selectedValues: [] }, this.handleSelectionUpdate);\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues }, this.handleSelectionUpdate);\n }\n\n if (prevProps.filters !== filters) {\n table?.applyFilter(filters);\n this.resetViewport();\n }\n }\n\n componentWillUnmount(): void {\n const { table } = this.props;\n if (table) this.stopListening(table);\n }\n\n list: SelectValueList<T> | null;\n\n handleSelect(itemIndex: number, value: T): void {\n const { invertSelection } = this.props;\n let { selectedValues } = this.state;\n selectedValues = [...selectedValues];\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n\n let isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n\n const { offset } = this.state;\n let { items } = this.state;\n items = [...items];\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n\n this.setState({ items, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleViewportChange(top: number, bottom: number): void {\n this.updateViewport(top, bottom);\n }\n\n handleSelectionUpdate(): void {\n this.updateItemSelection();\n }\n\n handleTableUpdate(event: CustomEvent): void {\n const { table, formatter } = this.props;\n if (!table) return;\n\n const data = event.detail;\n const { offset } = data;\n const items = [];\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 = formatter.getFormattedString(\n value,\n column.type,\n column.name\n );\n const isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected,\n });\n }\n\n log.debug2('Received table update:', offset, items.length);\n\n const itemCount = table.size;\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n isValueSelected(value: T): boolean {\n const { invertSelection } = this.props;\n const { selectedValues } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n\n startListening(table: Table): void {\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n\n stopListening(table: Table): void {\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n\n resetViewport(): void {\n if (this.list && this.list.topRow != null && this.list.bottomRow != null) {\n this.updateViewport(this.list.topRow, this.list.bottomRow, true);\n }\n }\n\n updateItemSelection(): void {\n let { items } = this.state;\n\n items = [...items];\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value } = item;\n item.isSelected = this.isValueSelected(value);\n }\n\n this.setState({ items });\n }\n\n updateViewport(top: number, bottom: number, isLoading = false): void {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n if (isLoading) {\n this.setState({ isLoading: true });\n }\n\n const viewportSize = bottom - top + 1;\n const topRow = Math.max(0, top - viewportSize * 3);\n const bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow);\n }\n\n render(): React.ReactElement {\n const { offset, isLoading, items, itemCount } = this.state;\n\n return (\n <div className=\"select-value-list-wrapper\">\n <SelectValueList\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n ref={list => {\n this.list = list;\n }}\n />\n <CSSTransition\n in={isLoading}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"loading-list\">\n <LoadingSpinner className=\"loading-spinner-large\" />\n </div>\n </CSSTransition>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValueList;\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
2
  import { GridUtils } from '@deephaven/grid';
4
3
  import memoizeOne from 'memoize-one';
5
4
  import Log from '@deephaven/log';
@@ -16,36 +15,26 @@ export default class ColumnHeaderGroup {
16
15
  depth,
17
16
  childIndexes
18
17
  } = _ref;
19
-
20
18
  _defineProperty(this, "name", void 0);
21
-
22
19
  _defineProperty(this, "children", void 0);
23
-
24
20
  _defineProperty(this, "depth", void 0);
25
-
26
21
  _defineProperty(this, "color", void 0);
27
-
28
22
  _defineProperty(this, "childIndexes", void 0);
29
-
30
23
  _defineProperty(this, "getVisibleRange", memoizeOne(movedItems => {
31
24
  var flattenedIndexes = this.childIndexes.flat();
32
25
  var visibleIndexes = GridUtils.getVisibleIndexes(flattenedIndexes, movedItems);
33
26
  var start = Math.min(...visibleIndexes);
34
27
  var end = Math.max(...visibleIndexes);
35
-
36
28
  if (end - start !== flattenedIndexes.length - 1) {
37
29
  log.warn("Column header group ".concat(this.name, " is not contiguous"));
38
30
  }
39
-
40
31
  return [start, end];
41
32
  }));
42
-
43
33
  this.name = name;
44
34
  this.children = children;
45
35
  this.color = color;
46
36
  this.depth = depth;
47
37
  this.childIndexes = childIndexes;
48
38
  }
49
-
50
39
  }
51
40
  //# sourceMappingURL=ColumnHeaderGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnHeaderGroup.js","names":["GridUtils","memoizeOne","Log","log","module","isColumnHeaderGroup","x","ColumnHeaderGroup","constructor","name","children","color","depth","childIndexes","movedItems","flattenedIndexes","flat","visibleIndexes","getVisibleIndexes","start","Math","min","end","max","length","warn"],"sources":["../src/ColumnHeaderGroup.ts"],"sourcesContent":["import {\n MoveOperation,\n GridUtils,\n ModelIndex,\n BoundedAxisRange,\n IColumnHeaderGroup,\n} from '@deephaven/grid';\nimport memoizeOne from 'memoize-one';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('ColumnHeaderGroup');\n\nexport function isColumnHeaderGroup(x: unknown): x is ColumnHeaderGroup {\n return x instanceof ColumnHeaderGroup;\n}\n\nexport default class ColumnHeaderGroup implements IColumnHeaderGroup {\n name: string;\n\n children: string[];\n\n depth: number;\n\n color?: string;\n\n childIndexes: (ModelIndex | ModelIndex[])[];\n\n constructor({\n name,\n children,\n color,\n depth,\n childIndexes,\n }: {\n name: string;\n children: string[];\n color?: string;\n depth: number;\n childIndexes: (ModelIndex | ModelIndex[])[];\n }) {\n this.name = name;\n this.children = children;\n this.color = color;\n this.depth = depth;\n this.childIndexes = childIndexes;\n }\n\n getVisibleRange = memoizeOne(\n (movedItems: MoveOperation[]): BoundedAxisRange => {\n const flattenedIndexes = this.childIndexes.flat();\n const visibleIndexes = GridUtils.getVisibleIndexes(\n flattenedIndexes,\n movedItems\n );\n\n const start = Math.min(...visibleIndexes);\n const end = Math.max(...visibleIndexes);\n\n if (end - start !== flattenedIndexes.length - 1) {\n log.warn(`Column header group ${this.name} is not contiguous`);\n }\n\n return [start, end];\n }\n );\n}\n"],"mappings":";;AAAA,SAEEA,SAFF,QAMO,iBANP;AAOA,OAAOC,UAAP,MAAuB,aAAvB;AACA,OAAOC,GAAP,MAAgB,gBAAhB;AAEA,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAJ,CAAW,mBAAX,CAAZ;AAEA,OAAO,SAASC,mBAAT,CAA6BC,CAA7B,EAAiE;EACtE,OAAOA,CAAC,YAAYC,iBAApB;AACD;AAED,eAAe,MAAMA,iBAAN,CAAsD;EAWnEC,WAAW,OAYR;IAAA,IAZS;MACVC,IADU;MAEVC,QAFU;MAGVC,KAHU;MAIVC,KAJU;MAKVC;IALU,CAYT;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA;;IAAA,yCAQeZ,UAAU,CACzBa,UAAD,IAAmD;MACjD,IAAMC,gBAAgB,GAAG,KAAKF,YAAL,CAAkBG,IAAlB,EAAzB;MACA,IAAMC,cAAc,GAAGjB,SAAS,CAACkB,iBAAV,CACrBH,gBADqB,EAErBD,UAFqB,CAAvB;MAKA,IAAMK,KAAK,GAAGC,IAAI,CAACC,GAAL,CAAS,GAAGJ,cAAZ,CAAd;MACA,IAAMK,GAAG,GAAGF,IAAI,CAACG,GAAL,CAAS,GAAGN,cAAZ,CAAZ;;MAEA,IAAIK,GAAG,GAAGH,KAAN,KAAgBJ,gBAAgB,CAACS,MAAjB,GAA0B,CAA9C,EAAiD;QAC/CrB,GAAG,CAACsB,IAAJ,+BAAgC,KAAKhB,IAArC;MACD;;MAED,OAAO,CAACU,KAAD,EAAQG,GAAR,CAAP;IACD,CAhByB,CARzB;;IACD,KAAKb,IAAL,GAAYA,IAAZ;IACA,KAAKC,QAAL,GAAgBA,QAAhB;IACA,KAAKC,KAAL,GAAaA,KAAb;IACA,KAAKC,KAAL,GAAaA,KAAb;IACA,KAAKC,YAAL,GAAoBA,YAApB;EACD;;AA7BkE"}
1
+ {"version":3,"file":"ColumnHeaderGroup.js","names":["GridUtils","memoizeOne","Log","log","module","isColumnHeaderGroup","x","ColumnHeaderGroup","constructor","name","children","color","depth","childIndexes","movedItems","flattenedIndexes","flat","visibleIndexes","getVisibleIndexes","start","Math","min","end","max","length","warn"],"sources":["../src/ColumnHeaderGroup.ts"],"sourcesContent":["import {\n MoveOperation,\n GridUtils,\n ModelIndex,\n BoundedAxisRange,\n IColumnHeaderGroup,\n} from '@deephaven/grid';\nimport memoizeOne from 'memoize-one';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('ColumnHeaderGroup');\n\nexport function isColumnHeaderGroup(x: unknown): x is ColumnHeaderGroup {\n return x instanceof ColumnHeaderGroup;\n}\n\nexport default class ColumnHeaderGroup implements IColumnHeaderGroup {\n name: string;\n\n children: string[];\n\n depth: number;\n\n color?: string;\n\n childIndexes: (ModelIndex | ModelIndex[])[];\n\n constructor({\n name,\n children,\n color,\n depth,\n childIndexes,\n }: {\n name: string;\n children: string[];\n color?: string;\n depth: number;\n childIndexes: (ModelIndex | ModelIndex[])[];\n }) {\n this.name = name;\n this.children = children;\n this.color = color;\n this.depth = depth;\n this.childIndexes = childIndexes;\n }\n\n getVisibleRange = memoizeOne(\n (movedItems: MoveOperation[]): BoundedAxisRange => {\n const flattenedIndexes = this.childIndexes.flat();\n const visibleIndexes = GridUtils.getVisibleIndexes(\n flattenedIndexes,\n movedItems\n );\n\n const start = Math.min(...visibleIndexes);\n const end = Math.max(...visibleIndexes);\n\n if (end - start !== flattenedIndexes.length - 1) {\n log.warn(`Column header group ${this.name} is not contiguous`);\n }\n\n return [start, end];\n }\n );\n}\n"],"mappings":";AAAA,SAEEA,SAAS,QAIJ,iBAAiB;AACxB,OAAOC,UAAU,MAAM,aAAa;AACpC,OAAOC,GAAG,MAAM,gBAAgB;AAEhC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,mBAAmB,CAAC;AAE3C,OAAO,SAASC,mBAAmB,CAACC,CAAU,EAA0B;EACtE,OAAOA,CAAC,YAAYC,iBAAiB;AACvC;AAEA,eAAe,MAAMA,iBAAiB,CAA+B;EAWnEC,WAAW,OAYR;IAAA,IAZS;MACVC,IAAI;MACJC,QAAQ;MACRC,KAAK;MACLC,KAAK;MACLC;IAOF,CAAC;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA,yCAQiBZ,UAAU,CACzBa,UAA2B,IAAuB;MACjD,IAAMC,gBAAgB,GAAG,IAAI,CAACF,YAAY,CAACG,IAAI,EAAE;MACjD,IAAMC,cAAc,GAAGjB,SAAS,CAACkB,iBAAiB,CAChDH,gBAAgB,EAChBD,UAAU,CACX;MAED,IAAMK,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,GAAGJ,cAAc,CAAC;MACzC,IAAMK,GAAG,GAAGF,IAAI,CAACG,GAAG,CAAC,GAAGN,cAAc,CAAC;MAEvC,IAAIK,GAAG,GAAGH,KAAK,KAAKJ,gBAAgB,CAACS,MAAM,GAAG,CAAC,EAAE;QAC/CrB,GAAG,CAACsB,IAAI,+BAAwB,IAAI,CAAChB,IAAI,wBAAqB;MAChE;MAEA,OAAO,CAACU,KAAK,EAAEG,GAAG,CAAC;IACrB,CAAC,CACF;IAxBC,IAAI,CAACb,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,YAAY,GAAGA,YAAY;EAClC;AAoBF"}
@@ -1,5 +1,4 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
2
  import React, { Component } from 'react';
4
3
  import classNames from 'classnames';
5
4
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
@@ -13,20 +12,16 @@ var log = Log.module('ColumnStatistics');
13
12
  var STATS_LABEL_OVERRIDES = {
14
13
  SIZE: 'Number of Rows'
15
14
  };
16
-
17
15
  class ColumnStatistics extends Component {
18
16
  /** Automatically generate the statistics when the row count is below this threshold */
17
+
19
18
  static getStatsLabel(operation) {
20
19
  var _STATS_LABEL_OVERRIDE;
21
-
22
20
  return (_STATS_LABEL_OVERRIDE = STATS_LABEL_OVERRIDES[operation]) !== null && _STATS_LABEL_OVERRIDE !== void 0 ? _STATS_LABEL_OVERRIDE : operation.split(' ').map(w => w[0].toUpperCase() + w.substr(1).toLowerCase()).join(' ');
23
21
  }
24
-
25
22
  constructor(props) {
26
23
  super(props);
27
-
28
24
  _defineProperty(this, "cancelablePromise", void 0);
29
-
30
25
  this.handleError = this.handleError.bind(this);
31
26
  this.handleGenerateStatistics = this.handleGenerateStatistics.bind(this);
32
27
  this.handleStatistics = this.handleStatistics.bind(this);
@@ -38,17 +33,14 @@ class ColumnStatistics extends Component {
38
33
  numRows: 0
39
34
  };
40
35
  }
41
-
42
36
  componentDidMount() {
43
37
  this.maybeGenerateStatistics();
44
38
  }
45
-
46
39
  componentWillUnmount() {
47
40
  if (this.cancelablePromise) {
48
41
  this.cancelablePromise.cancel();
49
42
  }
50
43
  }
51
-
52
44
  maybeGenerateStatistics() {
53
45
  var {
54
46
  model
@@ -57,7 +49,6 @@ class ColumnStatistics extends Component {
57
49
  this.setState({
58
50
  numRows
59
51
  });
60
-
61
52
  if (!model.isColumnStatisticsAvailable) {
62
53
  this.setState({
63
54
  loading: false
@@ -66,7 +57,6 @@ class ColumnStatistics extends Component {
66
57
  this.handleGenerateStatistics();
67
58
  }
68
59
  }
69
-
70
60
  handleGenerateStatistics() {
71
61
  this.setState({
72
62
  loading: true
@@ -78,7 +68,6 @@ class ColumnStatistics extends Component {
78
68
  this.cancelablePromise = PromiseUtils.makeCancelable(model.columnStatistics(column));
79
69
  this.cancelablePromise.then(this.handleStatistics).catch(this.handleError);
80
70
  }
81
-
82
71
  handleStatistics(stats) {
83
72
  log.debug('Received statistics', stats);
84
73
  var {
@@ -108,13 +97,11 @@ class ColumnStatistics extends Component {
108
97
  });
109
98
  onStatistics();
110
99
  }
111
-
112
100
  handleError(error) {
113
101
  if (error != null && PromiseUtils.isCanceled(error)) {
114
102
  log.debug('Called handleError on a cancelled promise result');
115
103
  return;
116
104
  }
117
-
118
105
  log.error('Error generating statistics', error);
119
106
  this.setState({
120
107
  error,
@@ -122,7 +109,6 @@ class ColumnStatistics extends Component {
122
109
  statistics: null
123
110
  });
124
111
  }
125
-
126
112
  render() {
127
113
  var {
128
114
  column,
@@ -138,7 +124,6 @@ class ColumnStatistics extends Component {
138
124
  var statisticElements = [];
139
125
  var columnType = column.type.substring(column.type.lastIndexOf('.') + 1);
140
126
  var description = column.description === null ? null : column.description;
141
-
142
127
  if (statistics != null) {
143
128
  for (var i = 0; i < statistics.length; i += 1) {
144
129
  var {
@@ -158,7 +143,6 @@ class ColumnStatistics extends Component {
158
143
  statisticElements.push(statisticElement);
159
144
  }
160
145
  }
161
-
162
146
  var rowCountLabel = isExpandableGridModel(model) && model.hasExpandableRows ? 'Expanded Rows' : 'Number of Rows';
163
147
  var formattedRowCount = model.displayString(numRows, 'long');
164
148
  var columnIndex = model.getColumnIndexByName(column.name);
@@ -205,10 +189,7 @@ class ColumnStatistics extends Component {
205
189
  className: "mr-2"
206
190
  }), "Calculating Stats..."));
207
191
  }
208
-
209
192
  }
210
-
211
193
  _defineProperty(ColumnStatistics, "AUTO_GENERATE_LIMIT", 100000);
212
-
213
194
  export default ColumnStatistics;
214
195
  //# sourceMappingURL=ColumnStatistics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnStatistics.js","names":["React","Component","classNames","FontAwesomeIcon","Button","CopyButton","LoadingSpinner","dhFreeze","dhRefresh","vsLock","Log","PromiseUtils","isExpandableGridModel","log","module","STATS_LABEL_OVERRIDES","SIZE","ColumnStatistics","getStatsLabel","operation","split","map","w","toUpperCase","substr","toLowerCase","join","constructor","props","handleError","bind","handleGenerateStatistics","handleStatistics","cancelablePromise","state","error","loading","statistics","numRows","componentDidMount","maybeGenerateStatistics","componentWillUnmount","cancel","model","rowCount","pendingRowCount","setState","isColumnStatisticsAvailable","AUTO_GENERATE_LIMIT","column","makeCancelable","columnStatistics","then","catch","stats","debug","onStatistics","statisticsMap","forEach","value","push","type","getType","uniqueValues","className","isCanceled","render","showGenerateStatistics","statisticElements","columnType","substring","lastIndexOf","description","i","length","formattedValue","displayString","name","statisticElement","rowCountLabel","hasExpandableRows","formattedRowCount","columnIndex","getColumnIndexByName","isColumnMovable","isColumnFrozen"],"sources":["../src/ColumnStatistics.tsx"],"sourcesContent":["import React, { Component, Key } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CopyButton, LoadingSpinner } from '@deephaven/components';\nimport { dhFreeze, dhRefresh, vsLock } from '@deephaven/icons';\nimport {\n Column,\n ColumnStatistics as APIColumnStatistics,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { CancelablePromise, PromiseUtils } from '@deephaven/utils';\nimport { isExpandableGridModel } from '@deephaven/grid';\nimport './ColumnStatistics.scss';\nimport IrisGridModel from './IrisGridModel';\n\nconst log = Log.module('ColumnStatistics');\nconst STATS_LABEL_OVERRIDES: Record<string, string> = {\n SIZE: 'Number of Rows',\n};\n\ninterface Statistic {\n operation: Key;\n className?: string;\n value: unknown;\n type: string;\n}\n\ninterface ColumnStatisticsProps {\n column: Column;\n model: IrisGridModel;\n onStatistics: () => void;\n}\ninterface ColumnStatisticsState {\n error: unknown;\n loading: boolean;\n statistics: Statistic[] | null;\n numRows: number;\n}\n\nclass ColumnStatistics extends Component<\n ColumnStatisticsProps,\n ColumnStatisticsState\n> {\n /** Automatically generate the statistics when the row count is below this threshold */\n static AUTO_GENERATE_LIMIT = 100000;\n\n static getStatsLabel(operation: string): string {\n return (\n STATS_LABEL_OVERRIDES[operation] ??\n operation\n .split(' ')\n .map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())\n .join(' ')\n );\n }\n\n constructor(props: ColumnStatisticsProps) {\n super(props);\n\n this.handleError = this.handleError.bind(this);\n this.handleGenerateStatistics = this.handleGenerateStatistics.bind(this);\n this.handleStatistics = this.handleStatistics.bind(this);\n\n this.cancelablePromise = null;\n\n this.state = {\n error: null,\n loading: false,\n statistics: null,\n numRows: 0,\n };\n }\n\n componentDidMount(): void {\n this.maybeGenerateStatistics();\n }\n\n componentWillUnmount(): void {\n if (this.cancelablePromise) {\n this.cancelablePromise.cancel();\n }\n }\n\n cancelablePromise: CancelablePromise<APIColumnStatistics> | null;\n\n maybeGenerateStatistics(): void {\n const { model } = this.props;\n\n const numRows = model.rowCount - model.pendingRowCount;\n this.setState({ numRows });\n if (!model.isColumnStatisticsAvailable) {\n this.setState({ loading: false });\n } else if (numRows < ColumnStatistics.AUTO_GENERATE_LIMIT) {\n this.handleGenerateStatistics();\n }\n }\n\n handleGenerateStatistics(): void {\n this.setState({ loading: true });\n\n const { column, model } = this.props;\n\n this.cancelablePromise = PromiseUtils.makeCancelable(\n model.columnStatistics(column)\n );\n\n this.cancelablePromise.then(this.handleStatistics).catch(this.handleError);\n }\n\n handleStatistics(stats: APIColumnStatistics): void {\n log.debug('Received statistics', stats);\n\n const { model, onStatistics } = this.props;\n const statistics: Statistic[] = [];\n\n stats.statisticsMap.forEach((value, operation) => {\n statistics.push({\n operation: ColumnStatistics.getStatsLabel(operation),\n value,\n type: stats.getType(operation),\n });\n });\n\n stats.uniqueValues.forEach((value, operation) => {\n statistics.push({\n operation,\n className: 'column-statistics-unique-value',\n value,\n type: 'long',\n });\n });\n\n this.setState({\n loading: false,\n statistics,\n numRows: model.rowCount - model.pendingRowCount,\n });\n\n onStatistics();\n }\n\n handleError(error: Error): void {\n if (error != null && PromiseUtils.isCanceled(error)) {\n log.debug('Called handleError on a cancelled promise result');\n return;\n }\n\n log.error('Error generating statistics', error);\n this.setState({\n error,\n loading: false,\n statistics: null,\n });\n }\n\n render(): React.ReactElement {\n const { column, model } = this.props;\n const { error, loading, statistics, numRows } = this.state;\n const showGenerateStatistics =\n !loading &&\n error == null &&\n statistics == null &&\n model.isColumnStatisticsAvailable;\n const statisticElements = [];\n const columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n const description = column.description === null ? null : column.description;\n if (statistics != null) {\n for (let i = 0; i < statistics.length; i += 1) {\n const { operation, className, value, type } = statistics[i];\n const formattedValue = !type\n ? model.displayString(value, column.type, column.name)\n : model.displayString(value, type);\n const statisticElement = (\n <React.Fragment key={operation}>\n <div\n className={classNames('column-statistic-operation', className)}\n >\n {operation}\n </div>\n <div className=\"column-statistic-value\">{formattedValue}</div>\n </React.Fragment>\n );\n statisticElements.push(statisticElement);\n }\n }\n const rowCountLabel =\n isExpandableGridModel(model) && model.hasExpandableRows\n ? 'Expanded Rows'\n : 'Number of Rows';\n const formattedRowCount = model.displayString(numRows, 'long');\n const columnIndex = model.getColumnIndexByName(column.name);\n return (\n <div className=\"column-statistics\">\n <div className=\"column-statistics-title\">\n {column.name}\n <span className=\"column-statistics-type\">&nbsp;({columnType})</span>\n <CopyButton\n className=\"column-statistics-copy\"\n tooltip=\"Copy column name\"\n copy={column.name}\n />\n </div>\n {description != null && (\n <div className=\"column-statistics-description\">{description}</div>\n )}\n {columnIndex != null && !model.isColumnMovable(columnIndex) && (\n <div className=\"column-statistics-status\">\n <FontAwesomeIcon\n icon={model.isColumnFrozen(columnIndex) ? dhFreeze : vsLock}\n className=\"mr-1\"\n />\n {model.isColumnFrozen(columnIndex) ? 'Frozen' : 'Not movable'}\n </div>\n )}\n <div className=\"column-statistics-grid\">\n {statistics == null && (\n <>\n <div className=\"column-statistic-operation\">{rowCountLabel}</div>\n <div className=\"column-statistic-value\">{formattedRowCount}</div>\n </>\n )}\n\n {statisticElements}\n </div>\n {showGenerateStatistics && (\n <Button\n kind=\"ghost\"\n className=\"px-0\"\n onClick={this.handleGenerateStatistics}\n >\n Generate Stats\n </Button>\n )}\n {error != null && <div className=\"error-message\">{`${error}`}</div>}\n {statistics && !loading && (\n <Button\n kind=\"ghost\"\n className=\"px-0\"\n onClick={this.handleGenerateStatistics}\n icon={<FontAwesomeIcon icon={dhRefresh} className=\"mr-1\" />}\n >\n Refresh\n </Button>\n )}\n {loading && (\n <div className=\"column-statistics-loading\">\n <LoadingSpinner className=\"mr-2\" />\n Calculating Stats...\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default ColumnStatistics;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnStatistics.js","names":["React","Component","classNames","FontAwesomeIcon","Button","CopyButton","LoadingSpinner","dhFreeze","dhRefresh","vsLock","Log","PromiseUtils","isExpandableGridModel","log","module","STATS_LABEL_OVERRIDES","SIZE","ColumnStatistics","getStatsLabel","operation","split","map","w","toUpperCase","substr","toLowerCase","join","constructor","props","handleError","bind","handleGenerateStatistics","handleStatistics","cancelablePromise","state","error","loading","statistics","numRows","componentDidMount","maybeGenerateStatistics","componentWillUnmount","cancel","model","rowCount","pendingRowCount","setState","isColumnStatisticsAvailable","AUTO_GENERATE_LIMIT","column","makeCancelable","columnStatistics","then","catch","stats","debug","onStatistics","statisticsMap","forEach","value","push","type","getType","uniqueValues","className","isCanceled","render","showGenerateStatistics","statisticElements","columnType","substring","lastIndexOf","description","i","length","formattedValue","displayString","name","statisticElement","rowCountLabel","hasExpandableRows","formattedRowCount","columnIndex","getColumnIndexByName","isColumnMovable","isColumnFrozen"],"sources":["../src/ColumnStatistics.tsx"],"sourcesContent":["import React, { Component, Key } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, CopyButton, LoadingSpinner } from '@deephaven/components';\nimport { dhFreeze, dhRefresh, vsLock } from '@deephaven/icons';\nimport {\n Column,\n ColumnStatistics as APIColumnStatistics,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { CancelablePromise, PromiseUtils } from '@deephaven/utils';\nimport { isExpandableGridModel } from '@deephaven/grid';\nimport './ColumnStatistics.scss';\nimport IrisGridModel from './IrisGridModel';\n\nconst log = Log.module('ColumnStatistics');\nconst STATS_LABEL_OVERRIDES: Record<string, string> = {\n SIZE: 'Number of Rows',\n};\n\ninterface Statistic {\n operation: Key;\n className?: string;\n value: unknown;\n type: string;\n}\n\ninterface ColumnStatisticsProps {\n column: Column;\n model: IrisGridModel;\n onStatistics: () => void;\n}\ninterface ColumnStatisticsState {\n error: unknown;\n loading: boolean;\n statistics: Statistic[] | null;\n numRows: number;\n}\n\nclass ColumnStatistics extends Component<\n ColumnStatisticsProps,\n ColumnStatisticsState\n> {\n /** Automatically generate the statistics when the row count is below this threshold */\n static AUTO_GENERATE_LIMIT = 100000;\n\n static getStatsLabel(operation: string): string {\n return (\n STATS_LABEL_OVERRIDES[operation] ??\n operation\n .split(' ')\n .map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())\n .join(' ')\n );\n }\n\n constructor(props: ColumnStatisticsProps) {\n super(props);\n\n this.handleError = this.handleError.bind(this);\n this.handleGenerateStatistics = this.handleGenerateStatistics.bind(this);\n this.handleStatistics = this.handleStatistics.bind(this);\n\n this.cancelablePromise = null;\n\n this.state = {\n error: null,\n loading: false,\n statistics: null,\n numRows: 0,\n };\n }\n\n componentDidMount(): void {\n this.maybeGenerateStatistics();\n }\n\n componentWillUnmount(): void {\n if (this.cancelablePromise) {\n this.cancelablePromise.cancel();\n }\n }\n\n cancelablePromise: CancelablePromise<APIColumnStatistics> | null;\n\n maybeGenerateStatistics(): void {\n const { model } = this.props;\n\n const numRows = model.rowCount - model.pendingRowCount;\n this.setState({ numRows });\n if (!model.isColumnStatisticsAvailable) {\n this.setState({ loading: false });\n } else if (numRows < ColumnStatistics.AUTO_GENERATE_LIMIT) {\n this.handleGenerateStatistics();\n }\n }\n\n handleGenerateStatistics(): void {\n this.setState({ loading: true });\n\n const { column, model } = this.props;\n\n this.cancelablePromise = PromiseUtils.makeCancelable(\n model.columnStatistics(column)\n );\n\n this.cancelablePromise.then(this.handleStatistics).catch(this.handleError);\n }\n\n handleStatistics(stats: APIColumnStatistics): void {\n log.debug('Received statistics', stats);\n\n const { model, onStatistics } = this.props;\n const statistics: Statistic[] = [];\n\n stats.statisticsMap.forEach((value, operation) => {\n statistics.push({\n operation: ColumnStatistics.getStatsLabel(operation),\n value,\n type: stats.getType(operation),\n });\n });\n\n stats.uniqueValues.forEach((value, operation) => {\n statistics.push({\n operation,\n className: 'column-statistics-unique-value',\n value,\n type: 'long',\n });\n });\n\n this.setState({\n loading: false,\n statistics,\n numRows: model.rowCount - model.pendingRowCount,\n });\n\n onStatistics();\n }\n\n handleError(error: Error): void {\n if (error != null && PromiseUtils.isCanceled(error)) {\n log.debug('Called handleError on a cancelled promise result');\n return;\n }\n\n log.error('Error generating statistics', error);\n this.setState({\n error,\n loading: false,\n statistics: null,\n });\n }\n\n render(): React.ReactElement {\n const { column, model } = this.props;\n const { error, loading, statistics, numRows } = this.state;\n const showGenerateStatistics =\n !loading &&\n error == null &&\n statistics == null &&\n model.isColumnStatisticsAvailable;\n const statisticElements = [];\n const columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n const description = column.description === null ? null : column.description;\n if (statistics != null) {\n for (let i = 0; i < statistics.length; i += 1) {\n const { operation, className, value, type } = statistics[i];\n const formattedValue = !type\n ? model.displayString(value, column.type, column.name)\n : model.displayString(value, type);\n const statisticElement = (\n <React.Fragment key={operation}>\n <div\n className={classNames('column-statistic-operation', className)}\n >\n {operation}\n </div>\n <div className=\"column-statistic-value\">{formattedValue}</div>\n </React.Fragment>\n );\n statisticElements.push(statisticElement);\n }\n }\n const rowCountLabel =\n isExpandableGridModel(model) && model.hasExpandableRows\n ? 'Expanded Rows'\n : 'Number of Rows';\n const formattedRowCount = model.displayString(numRows, 'long');\n const columnIndex = model.getColumnIndexByName(column.name);\n return (\n <div className=\"column-statistics\">\n <div className=\"column-statistics-title\">\n {column.name}\n <span className=\"column-statistics-type\">&nbsp;({columnType})</span>\n <CopyButton\n className=\"column-statistics-copy\"\n tooltip=\"Copy column name\"\n copy={column.name}\n />\n </div>\n {description != null && (\n <div className=\"column-statistics-description\">{description}</div>\n )}\n {columnIndex != null && !model.isColumnMovable(columnIndex) && (\n <div className=\"column-statistics-status\">\n <FontAwesomeIcon\n icon={model.isColumnFrozen(columnIndex) ? dhFreeze : vsLock}\n className=\"mr-1\"\n />\n {model.isColumnFrozen(columnIndex) ? 'Frozen' : 'Not movable'}\n </div>\n )}\n <div className=\"column-statistics-grid\">\n {statistics == null && (\n <>\n <div className=\"column-statistic-operation\">{rowCountLabel}</div>\n <div className=\"column-statistic-value\">{formattedRowCount}</div>\n </>\n )}\n\n {statisticElements}\n </div>\n {showGenerateStatistics && (\n <Button\n kind=\"ghost\"\n className=\"px-0\"\n onClick={this.handleGenerateStatistics}\n >\n Generate Stats\n </Button>\n )}\n {error != null && <div className=\"error-message\">{`${error}`}</div>}\n {statistics && !loading && (\n <Button\n kind=\"ghost\"\n className=\"px-0\"\n onClick={this.handleGenerateStatistics}\n icon={<FontAwesomeIcon icon={dhRefresh} className=\"mr-1\" />}\n >\n Refresh\n </Button>\n )}\n {loading && (\n <div className=\"column-statistics-loading\">\n <LoadingSpinner className=\"mr-2\" />\n Calculating Stats...\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default ColumnStatistics;\n"],"mappings":"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"}
@@ -6,24 +6,24 @@ import { IconDefinition } from '@deephaven/icons';
6
6
  import AggregationOperation from './sidebar/aggregations/AggregationOperation';
7
7
  import { OptionType } from './sidebar';
8
8
  export type { AdvancedFilterOptions };
9
- export declare type ColumnName = string;
10
- export declare type AdvancedFilterMap = Map<ModelIndex, AdvancedFilter>;
11
- export declare type QuickFilterMap = Map<ModelIndex, QuickFilter>;
12
- export declare type AggregationMap = Record<AggregationOperation, ColumnName[]>;
13
- export declare type OperationMap = Record<ColumnName, AggregationOperation[]>;
14
- export declare type QuickFilter = {
9
+ export type ColumnName = string;
10
+ export type AdvancedFilterMap = Map<ModelIndex, AdvancedFilter>;
11
+ export type QuickFilterMap = Map<ModelIndex, QuickFilter>;
12
+ export type AggregationMap = Record<AggregationOperation, ColumnName[]>;
13
+ export type OperationMap = Record<ColumnName, AggregationOperation[]>;
14
+ export type QuickFilter = {
15
15
  text: string;
16
16
  filter: FilterCondition | null;
17
17
  };
18
- export declare type AdvancedFilter = {
18
+ export type AdvancedFilter = {
19
19
  filter: FilterCondition | null;
20
20
  options: AdvancedFilterOptions;
21
21
  };
22
- export declare type Action = {
22
+ export type Action = {
23
23
  action: () => void;
24
24
  shortcut: Shortcut;
25
25
  };
26
- export declare type OptionItem = {
26
+ export type OptionItem = {
27
27
  type: OptionType;
28
28
  title: string;
29
29
  subtitle?: string;
@@ -35,7 +35,7 @@ export interface UITotalsTableConfig extends TotalsTableConfig {
35
35
  operationOrder: AggregationOperation[];
36
36
  showOnTop: boolean;
37
37
  }
38
- export declare type InputFilter = {
38
+ export type InputFilter = {
39
39
  name: string;
40
40
  type: string;
41
41
  value: string;
@@ -44,16 +44,16 @@ export declare type InputFilter = {
44
44
  export interface UIRow {
45
45
  data: Map<ModelIndex, CellData>;
46
46
  }
47
- export declare type UIViewportData<R extends UIRow = UIRow> = {
47
+ export type UIViewportData<R extends UIRow = UIRow> = {
48
48
  offset: number;
49
49
  rows: R[];
50
50
  };
51
- export declare type RowData<T = unknown> = Map<number, {
51
+ export type RowData<T = unknown> = Map<number, {
52
52
  value: T;
53
53
  }>;
54
- export declare type CellData = {
54
+ export type CellData = {
55
55
  value: unknown;
56
56
  format?: Format;
57
57
  };
58
- export declare type PendingDataMap<R extends UIRow = UIRow> = Map<ModelIndex, R>;
58
+ export type PendingDataMap<R extends UIRow = UIRow> = Map<ModelIndex, R>;
59
59
  //# sourceMappingURL=CommonTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommonTypes.d.ts","sourceRoot":"","sources":["../src/CommonTypes.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,MAAM,EACP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,oBAAoB,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,YAAY,EAAE,qBAAqB,EAAE,CAAC;AACtC,oBAAY,UAAU,GAAG,MAAM,CAAC;AAChC,oBAAY,iBAAiB,GAAG,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAChE,oBAAY,cAAc,GAAG,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAC1D,oBAAY,cAAc,GAAG,MAAM,CAAC,oBAAoB,EAAE,UAAU,EAAE,CAAC,CAAC;AACxE,oBAAY,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAEtE,oBAAY,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,oBAAY,cAAc,GAAG;IAC3B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,qBAAqB,CAAC;CAChC,CAAC;AAEF,oBAAY,MAAM,GAAG;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,cAAc,EAAE,oBAAoB,EAAE,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,oBAAY,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;CACjC;AAED,oBAAY,cAAc,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,EAAE,CAAC;CACX,CAAC;AACF,oBAAY,OAAO,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAE7D,oBAAY,QAAQ,GAAG;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,oBAAY,cAAc,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"CommonTypes.d.ts","sourceRoot":"","sources":["../src/CommonTypes.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,MAAM,EACP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,oBAAoB,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,YAAY,EAAE,qBAAqB,EAAE,CAAC;AACtC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAChC,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,oBAAoB,EAAE,UAAU,EAAE,CAAC,CAAC;AACxE,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAEtE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,qBAAqB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,cAAc,EAAE,oBAAoB,EAAE,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;CACjC;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,EAAE,CAAC;CACX,CAAC;AACF,MAAM,MAAM,OAAO,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAE7D,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC"}