@deephaven/iris-grid 0.42.1-beta.2 → 0.43.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 (288) hide show
  1. package/dist/AdvancedFilterCreator.d.ts +1 -0
  2. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  3. package/dist/ColumnStatistics.d.ts.map +1 -1
  4. package/dist/IrisGrid.d.ts.map +1 -1
  5. package/dist/IrisGridModel.d.ts +5 -0
  6. package/dist/IrisGridModel.d.ts.map +1 -1
  7. package/dist/IrisGridProxyModel.d.ts +1 -0
  8. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  9. package/dist/IrisGridTableModel.d.ts +1 -0
  10. package/dist/IrisGridTableModel.d.ts.map +1 -1
  11. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  12. package/package.json +15 -15
  13. package/dist/AdvancedFilterCreator.css +0 -106
  14. package/dist/AdvancedFilterCreator.css.map +0 -1
  15. package/dist/AdvancedFilterCreator.js +0 -524
  16. package/dist/AdvancedFilterCreator.js.map +0 -1
  17. package/dist/AdvancedFilterCreatorFilterItem.css +0 -9
  18. package/dist/AdvancedFilterCreatorFilterItem.css.map +0 -1
  19. package/dist/AdvancedFilterCreatorFilterItem.js +0 -184
  20. package/dist/AdvancedFilterCreatorFilterItem.js.map +0 -1
  21. package/dist/AdvancedFilterCreatorSelectValue.css +0 -50
  22. package/dist/AdvancedFilterCreatorSelectValue.css.map +0 -1
  23. package/dist/AdvancedFilterCreatorSelectValue.js +0 -301
  24. package/dist/AdvancedFilterCreatorSelectValue.js.map +0 -1
  25. package/dist/AdvancedFilterCreatorSelectValueList.js +0 -272
  26. package/dist/AdvancedFilterCreatorSelectValueList.js.map +0 -1
  27. package/dist/ColumnHeaderGroup.js +0 -61
  28. package/dist/ColumnHeaderGroup.js.map +0 -1
  29. package/dist/ColumnStatistics.css +0 -76
  30. package/dist/ColumnStatistics.css.map +0 -1
  31. package/dist/ColumnStatistics.js +0 -197
  32. package/dist/ColumnStatistics.js.map +0 -1
  33. package/dist/CommonTypes.js +0 -2
  34. package/dist/CommonTypes.js.map +0 -1
  35. package/dist/CrossColumnSearch.css +0 -35
  36. package/dist/CrossColumnSearch.css.map +0 -1
  37. package/dist/CrossColumnSearch.js +0 -199
  38. package/dist/CrossColumnSearch.js.map +0 -1
  39. package/dist/FilterInputField.css +0 -56
  40. package/dist/FilterInputField.css.map +0 -1
  41. package/dist/FilterInputField.js +0 -232
  42. package/dist/FilterInputField.js.map +0 -1
  43. package/dist/GotoRow.css +0 -45
  44. package/dist/GotoRow.css.map +0 -1
  45. package/dist/GotoRow.js +0 -298
  46. package/dist/GotoRow.js.map +0 -1
  47. package/dist/IrisGrid.css +0 -359
  48. package/dist/IrisGrid.css.map +0 -1
  49. package/dist/IrisGrid.js +0 -3647
  50. package/dist/IrisGrid.js.map +0 -1
  51. package/dist/IrisGridBottomBar.css +0 -85
  52. package/dist/IrisGridBottomBar.css.map +0 -1
  53. package/dist/IrisGridBottomBar.js +0 -36
  54. package/dist/IrisGridBottomBar.js.map +0 -1
  55. package/dist/IrisGridCellOverflowModal.css +0 -17
  56. package/dist/IrisGridCellOverflowModal.css.map +0 -1
  57. package/dist/IrisGridCellOverflowModal.js +0 -157
  58. package/dist/IrisGridCellOverflowModal.js.map +0 -1
  59. package/dist/IrisGridCellRendererUtils.js +0 -20
  60. package/dist/IrisGridCellRendererUtils.js.map +0 -1
  61. package/dist/IrisGridCopyHandler.css +0 -64
  62. package/dist/IrisGridCopyHandler.css.map +0 -1
  63. package/dist/IrisGridCopyHandler.js +0 -331
  64. package/dist/IrisGridCopyHandler.js.map +0 -1
  65. package/dist/IrisGridDataBarCellRenderer.js +0 -10
  66. package/dist/IrisGridDataBarCellRenderer.js.map +0 -1
  67. package/dist/IrisGridIcons.js +0 -25
  68. package/dist/IrisGridIcons.js.map +0 -1
  69. package/dist/IrisGridMetricCalculator.js +0 -33
  70. package/dist/IrisGridMetricCalculator.js.map +0 -1
  71. package/dist/IrisGridModel.js +0 -255
  72. package/dist/IrisGridModel.js.map +0 -1
  73. package/dist/IrisGridModelFactory.js +0 -27
  74. package/dist/IrisGridModelFactory.js.map +0 -1
  75. package/dist/IrisGridModelUpdater.js +0 -96
  76. package/dist/IrisGridModelUpdater.js.map +0 -1
  77. package/dist/IrisGridPartitionSelector.css +0 -48
  78. package/dist/IrisGridPartitionSelector.css.map +0 -1
  79. package/dist/IrisGridPartitionSelector.js +0 -198
  80. package/dist/IrisGridPartitionSelector.js.map +0 -1
  81. package/dist/IrisGridProxyModel.js +0 -527
  82. package/dist/IrisGridProxyModel.js.map +0 -1
  83. package/dist/IrisGridRenderer.js +0 -779
  84. package/dist/IrisGridRenderer.js.map +0 -1
  85. package/dist/IrisGridShortcuts.js +0 -59
  86. package/dist/IrisGridShortcuts.js.map +0 -1
  87. package/dist/IrisGridTableModel.js +0 -269
  88. package/dist/IrisGridTableModel.js.map +0 -1
  89. package/dist/IrisGridTableModelTemplate.js +0 -1589
  90. package/dist/IrisGridTableModelTemplate.js.map +0 -1
  91. package/dist/IrisGridTestUtils.js +0 -121
  92. package/dist/IrisGridTestUtils.js.map +0 -1
  93. package/dist/IrisGridTextCellRenderer.js +0 -139
  94. package/dist/IrisGridTextCellRenderer.js.map +0 -1
  95. package/dist/IrisGridTheme.js +0 -96
  96. package/dist/IrisGridTheme.js.map +0 -1
  97. package/dist/IrisGridTheme.module.css +0 -69
  98. package/dist/IrisGridTheme.module.css.map +0 -1
  99. package/dist/IrisGridTreeTableModel.js +0 -145
  100. package/dist/IrisGridTreeTableModel.js.map +0 -1
  101. package/dist/IrisGridUtils.js +0 -1279
  102. package/dist/IrisGridUtils.js.map +0 -1
  103. package/dist/MissingKeyError.js +0 -15
  104. package/dist/MissingKeyError.js.map +0 -1
  105. package/dist/PartitionSelectorSearch.css +0 -22
  106. package/dist/PartitionSelectorSearch.css.map +0 -1
  107. package/dist/PartitionSelectorSearch.js +0 -317
  108. package/dist/PartitionSelectorSearch.js.map +0 -1
  109. package/dist/PendingDataBottomBar.css +0 -13
  110. package/dist/PendingDataBottomBar.css.map +0 -1
  111. package/dist/PendingDataBottomBar.js +0 -98
  112. package/dist/PendingDataBottomBar.js.map +0 -1
  113. package/dist/TableViewportUpdater.js +0 -156
  114. package/dist/TableViewportUpdater.js.map +0 -1
  115. package/dist/ToastBottomBar.js +0 -42
  116. package/dist/ToastBottomBar.js.map +0 -1
  117. package/dist/TreeTableViewportUpdater.js +0 -96
  118. package/dist/TreeTableViewportUpdater.js.map +0 -1
  119. package/dist/declaration.d.js +0 -2
  120. package/dist/declaration.d.js.map +0 -1
  121. package/dist/format-context-menus/CustomFormatAction.css +0 -25
  122. package/dist/format-context-menus/CustomFormatAction.css.map +0 -1
  123. package/dist/format-context-menus/CustomFormatAction.js +0 -132
  124. package/dist/format-context-menus/CustomFormatAction.js.map +0 -1
  125. package/dist/format-context-menus/DateTimeFormatContextMenu.js +0 -53
  126. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +0 -1
  127. package/dist/format-context-menus/DecimalFormatContextMenu.js +0 -59
  128. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +0 -1
  129. package/dist/format-context-menus/FormatContextMenuUtils.js +0 -63
  130. package/dist/format-context-menus/FormatContextMenuUtils.js.map +0 -1
  131. package/dist/format-context-menus/IntegerFormatContextMenu.js +0 -43
  132. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +0 -1
  133. package/dist/format-context-menus/index.js +0 -4
  134. package/dist/format-context-menus/index.js.map +0 -1
  135. package/dist/index.js +0 -24
  136. package/dist/index.js.map +0 -1
  137. package/dist/key-handlers/ClearFilterKeyHandler.js +0 -21
  138. package/dist/key-handlers/ClearFilterKeyHandler.js.map +0 -1
  139. package/dist/key-handlers/CopyKeyHandler.js +0 -31
  140. package/dist/key-handlers/CopyKeyHandler.js.map +0 -1
  141. package/dist/key-handlers/ReverseKeyHandler.js +0 -32
  142. package/dist/key-handlers/ReverseKeyHandler.js.map +0 -1
  143. package/dist/key-handlers/index.js +0 -4
  144. package/dist/key-handlers/index.js.map +0 -1
  145. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +0 -175
  146. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +0 -1
  147. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +0 -139
  148. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +0 -1
  149. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +0 -83
  150. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +0 -1
  151. package/dist/mousehandlers/IrisGridContextMenuHandler.css +0 -19
  152. package/dist/mousehandlers/IrisGridContextMenuHandler.css.map +0 -1
  153. package/dist/mousehandlers/IrisGridContextMenuHandler.js +0 -1218
  154. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +0 -1
  155. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +0 -28
  156. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +0 -1
  157. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +0 -80
  158. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +0 -1
  159. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +0 -126
  160. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +0 -1
  161. package/dist/mousehandlers/IrisGridSortMouseHandler.js +0 -46
  162. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +0 -1
  163. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +0 -151
  164. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +0 -1
  165. package/dist/mousehandlers/PendingMouseHandler.js +0 -39
  166. package/dist/mousehandlers/PendingMouseHandler.js.map +0 -1
  167. package/dist/mousehandlers/index.js +0 -11
  168. package/dist/mousehandlers/index.js.map +0 -1
  169. package/dist/sidebar/AdvancedSettings.js +0 -6
  170. package/dist/sidebar/AdvancedSettings.js.map +0 -1
  171. package/dist/sidebar/AdvancedSettingsMenu.js +0 -29
  172. package/dist/sidebar/AdvancedSettingsMenu.js.map +0 -1
  173. package/dist/sidebar/AdvancedSettingsType.js +0 -7
  174. package/dist/sidebar/AdvancedSettingsType.js.map +0 -1
  175. package/dist/sidebar/ChartBuilder.css +0 -56
  176. package/dist/sidebar/ChartBuilder.css.map +0 -1
  177. package/dist/sidebar/ChartBuilder.js +0 -443
  178. package/dist/sidebar/ChartBuilder.js.map +0 -1
  179. package/dist/sidebar/CustomColumnBuilder.css +0 -58
  180. package/dist/sidebar/CustomColumnBuilder.css.map +0 -1
  181. package/dist/sidebar/CustomColumnBuilder.js +0 -384
  182. package/dist/sidebar/CustomColumnBuilder.js.map +0 -1
  183. package/dist/sidebar/CustomColumnInput.js +0 -90
  184. package/dist/sidebar/CustomColumnInput.js.map +0 -1
  185. package/dist/sidebar/InputEditor.css +0 -35
  186. package/dist/sidebar/InputEditor.css.map +0 -1
  187. package/dist/sidebar/InputEditor.js +0 -177
  188. package/dist/sidebar/InputEditor.js.map +0 -1
  189. package/dist/sidebar/OptionType.js +0 -19
  190. package/dist/sidebar/OptionType.js.map +0 -1
  191. package/dist/sidebar/RollupRows.css +0 -120
  192. package/dist/sidebar/RollupRows.css.map +0 -1
  193. package/dist/sidebar/RollupRows.js +0 -519
  194. package/dist/sidebar/RollupRows.js.map +0 -1
  195. package/dist/sidebar/SelectDistinctBuilder.css +0 -41
  196. package/dist/sidebar/SelectDistinctBuilder.css.map +0 -1
  197. package/dist/sidebar/SelectDistinctBuilder.js +0 -155
  198. package/dist/sidebar/SelectDistinctBuilder.js.map +0 -1
  199. package/dist/sidebar/TableCsvExporter.css +0 -32
  200. package/dist/sidebar/TableCsvExporter.css.map +0 -1
  201. package/dist/sidebar/TableCsvExporter.js +0 -399
  202. package/dist/sidebar/TableCsvExporter.js.map +0 -1
  203. package/dist/sidebar/TableSaver.js +0 -487
  204. package/dist/sidebar/TableSaver.js.map +0 -1
  205. package/dist/sidebar/aggregations/AggregationEdit.css +0 -61
  206. package/dist/sidebar/aggregations/AggregationEdit.css.map +0 -1
  207. package/dist/sidebar/aggregations/AggregationEdit.js +0 -155
  208. package/dist/sidebar/aggregations/AggregationEdit.js.map +0 -1
  209. package/dist/sidebar/aggregations/AggregationOperation.js +0 -19
  210. package/dist/sidebar/aggregations/AggregationOperation.js.map +0 -1
  211. package/dist/sidebar/aggregations/AggregationUtils.js +0 -59
  212. package/dist/sidebar/aggregations/AggregationUtils.js.map +0 -1
  213. package/dist/sidebar/aggregations/Aggregations.css +0 -43
  214. package/dist/sidebar/aggregations/Aggregations.css.map +0 -1
  215. package/dist/sidebar/aggregations/Aggregations.js +0 -178
  216. package/dist/sidebar/aggregations/Aggregations.js.map +0 -1
  217. package/dist/sidebar/aggregations/index.js +0 -2
  218. package/dist/sidebar/aggregations/index.js.map +0 -1
  219. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +0 -123
  220. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +0 -1
  221. package/dist/sidebar/conditional-formatting/ConditionEditor.js +0 -243
  222. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +0 -1
  223. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.css +0 -22
  224. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.css.map +0 -1
  225. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +0 -109
  226. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +0 -1
  227. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +0 -18
  228. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +0 -1
  229. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css +0 -57
  230. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css.map +0 -1
  231. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +0 -150
  232. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +0 -1
  233. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +0 -635
  234. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +0 -1
  235. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +0 -122
  236. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +0 -1
  237. package/dist/sidebar/conditional-formatting/StyleEditor.css +0 -55
  238. package/dist/sidebar/conditional-formatting/StyleEditor.css.map +0 -1
  239. package/dist/sidebar/conditional-formatting/StyleEditor.js +0 -150
  240. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +0 -1
  241. package/dist/sidebar/icons/BarIcon.js +0 -24
  242. package/dist/sidebar/icons/BarIcon.js.map +0 -1
  243. package/dist/sidebar/icons/FormatColumnWhereIcon.js +0 -42
  244. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +0 -1
  245. package/dist/sidebar/icons/FormatRowWhereIcon.js +0 -36
  246. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +0 -1
  247. package/dist/sidebar/icons/HistogramIcon.js +0 -24
  248. package/dist/sidebar/icons/HistogramIcon.js.map +0 -1
  249. package/dist/sidebar/icons/LineIcon.js +0 -27
  250. package/dist/sidebar/icons/LineIcon.js.map +0 -1
  251. package/dist/sidebar/icons/PieIcon.js +0 -24
  252. package/dist/sidebar/icons/PieIcon.js.map +0 -1
  253. package/dist/sidebar/icons/ScatterIcon.js +0 -74
  254. package/dist/sidebar/icons/ScatterIcon.js.map +0 -1
  255. package/dist/sidebar/icons/index.js +0 -8
  256. package/dist/sidebar/icons/index.js.map +0 -1
  257. package/dist/sidebar/index.js +0 -18
  258. package/dist/sidebar/index.js.map +0 -1
  259. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css +0 -68
  260. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css.map +0 -1
  261. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +0 -964
  262. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +0 -1
  263. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +0 -132
  264. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +0 -1
  265. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css +0 -29
  266. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css.map +0 -1
  267. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +0 -188
  268. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +0 -1
  269. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +0 -81
  270. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +0 -1
  271. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +0 -30
  272. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +0 -1
  273. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +0 -158
  274. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +0 -1
  275. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +0 -146
  276. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +0 -1
  277. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +0 -59
  278. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +0 -1
  279. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +0 -139
  280. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +0 -1
  281. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +0 -44
  282. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +0 -1
  283. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +0 -129
  284. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +0 -1
  285. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js +0 -4
  286. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +0 -1
  287. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +0 -261
  288. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +0 -1
@@ -1,184 +0,0 @@
1
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
- /* eslint react/no-did-update-set-state: "off" */
5
- import React, { PureComponent } from 'react';
6
- import { Button } from '@deephaven/components';
7
- import { getLabelForBooleanFilter, getLabelForDateFilter, getLabelForNumberFilter, getLabelForTextFilter } from '@deephaven/filters';
8
- import { vsTrash } from '@deephaven/icons';
9
- import { TableUtils } from '@deephaven/jsapi-utils';
10
- import Log from '@deephaven/log';
11
- import classNames from 'classnames';
12
- import memoizeOne from 'memoize-one';
13
- import "./AdvancedFilterCreatorFilterItem.css";
14
- var log = Log.module('AdvancedFilterCreatorFilterItem');
15
- export class AdvancedFilterCreatorFilterItem extends PureComponent {
16
- static getLabelForFilter(columnType, filterType) {
17
- try {
18
- if (TableUtils.isNumberType(columnType) || TableUtils.isCharType(columnType)) {
19
- return getLabelForNumberFilter(filterType);
20
- }
21
- if (TableUtils.isTextType(columnType)) {
22
- return getLabelForTextFilter(filterType);
23
- }
24
- if (TableUtils.isDateType(columnType)) {
25
- return getLabelForDateFilter(filterType);
26
- }
27
- if (TableUtils.isBooleanType(columnType)) {
28
- return getLabelForBooleanFilter(filterType);
29
- }
30
- throw new Error("Unrecognized column type: ".concat(columnType));
31
- } catch (e) {
32
- log.warn(e);
33
- return '';
34
- }
35
- }
36
- constructor(props) {
37
- super(props);
38
- _defineProperty(this, "typeDropdown", void 0);
39
- _defineProperty(this, "getCachedIsValid", memoizeOne((column, operation, value, timeZone, tableUtils) => {
40
- try {
41
- // We don't want to show an error for an empty value
42
- return !value || tableUtils.makeAdvancedValueFilter(column, operation, value, timeZone) != null;
43
- } catch (e) {
44
- return false;
45
- }
46
- }));
47
- this.handleDelete = this.handleDelete.bind(this);
48
- this.handleTypeChange = this.handleTypeChange.bind(this);
49
- this.handleValueChange = this.handleValueChange.bind(this);
50
- this.typeDropdown = null;
51
- var {
52
- value: _value = '',
53
- filterTypes,
54
- selectedType = filterTypes[0]
55
- } = props;
56
- this.state = {
57
- selectedType,
58
- value: _value
59
- };
60
- }
61
- componentDidMount() {
62
- var _this$typeDropdown;
63
- (_this$typeDropdown = this.typeDropdown) === null || _this$typeDropdown === void 0 ? void 0 : _this$typeDropdown.focus();
64
- }
65
- componentDidUpdate(prevProps) {
66
- var {
67
- value,
68
- selectedType
69
- } = this.props;
70
- if (selectedType !== undefined && prevProps.selectedType !== selectedType) {
71
- this.setState({
72
- selectedType
73
- });
74
- }
75
- if (value !== undefined && prevProps.value !== value) {
76
- this.setState({
77
- value
78
- });
79
- }
80
- }
81
- handleTypeChange(event) {
82
- var selectedType = event.target.value;
83
- log.debug2('typeChange', selectedType);
84
- this.setState({
85
- selectedType
86
- });
87
- var {
88
- onChange
89
- } = this.props;
90
- var {
91
- value
92
- } = this.state;
93
- if (value != null && value.length > 0) {
94
- // Don't send an update unless there's already a value entered
95
- onChange(selectedType, value);
96
- }
97
- }
98
- handleValueChange(event) {
99
- log.debug2('valueChange');
100
- var {
101
- value
102
- } = event.target;
103
- this.setState({
104
- value
105
- });
106
- var {
107
- onChange
108
- } = this.props;
109
- var {
110
- selectedType
111
- } = this.state;
112
- if (selectedType != null) {
113
- // Don't send an update unless they've already selected a type
114
- onChange(selectedType, value);
115
- }
116
- }
117
- handleDelete() {
118
- log.debug('delete');
119
- var {
120
- onDelete
121
- } = this.props;
122
- onDelete();
123
- }
124
- render() {
125
- var {
126
- column,
127
- filterTypes,
128
- formatter,
129
- tableUtils
130
- } = this.props;
131
- var {
132
- selectedType,
133
- value
134
- } = this.state;
135
- var showValueInput = !TableUtils.isBooleanType(column.type);
136
- var typeOptionElements = [];
137
- var isValid = this.getCachedIsValid(column, selectedType, value, formatter.timeZone, tableUtils);
138
- for (var i = 0; i < filterTypes.length; i += 1) {
139
- var _type = filterTypes[i];
140
- var label = AdvancedFilterCreatorFilterItem.getLabelForFilter(column.type, _type);
141
- var element = /*#__PURE__*/React.createElement("option", {
142
- key: _type,
143
- value: _type
144
- }, label);
145
- typeOptionElements.push(element);
146
- }
147
- return /*#__PURE__*/React.createElement("div", {
148
- className: "advanced-filter-creator-filter-item"
149
- }, /*#__PURE__*/React.createElement("div", {
150
- className: "form-row"
151
- }, /*#__PURE__*/React.createElement("div", {
152
- className: "form-group col"
153
- }, /*#__PURE__*/React.createElement("select", {
154
- className: "form-control custom-select",
155
- value: selectedType,
156
- onChange: this.handleTypeChange,
157
- ref: typeDropdown => {
158
- this.typeDropdown = typeDropdown;
159
- }
160
- }, typeOptionElements)), showValueInput && /*#__PURE__*/React.createElement("div", {
161
- className: "form-group col"
162
- }, /*#__PURE__*/React.createElement("div", {
163
- className: "input-group"
164
- }, /*#__PURE__*/React.createElement("input", {
165
- type: "text",
166
- className: classNames('form-control', {
167
- error: !isValid
168
- }),
169
- placeholder: "Enter value",
170
- value: value,
171
- onChange: this.handleValueChange
172
- }))), /*#__PURE__*/React.createElement("div", {
173
- className: "form-group col-1 px-0"
174
- }, /*#__PURE__*/React.createElement(Button, {
175
- kind: "ghost",
176
- className: "w-100 h-100 p-0 m-0",
177
- onClick: this.handleDelete,
178
- icon: vsTrash,
179
- tooltip: "Remove Filter"
180
- }))));
181
- }
182
- }
183
- export default AdvancedFilterCreatorFilterItem;
184
- //# sourceMappingURL=AdvancedFilterCreatorFilterItem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdvancedFilterCreatorFilterItem.js","names":["React","PureComponent","Button","getLabelForBooleanFilter","getLabelForDateFilter","getLabelForNumberFilter","getLabelForTextFilter","vsTrash","TableUtils","Log","classNames","memoizeOne","log","module","AdvancedFilterCreatorFilterItem","getLabelForFilter","columnType","filterType","isNumberType","isCharType","isTextType","isDateType","isBooleanType","Error","e","warn","constructor","props","column","operation","value","timeZone","tableUtils","makeAdvancedValueFilter","handleDelete","bind","handleTypeChange","handleValueChange","typeDropdown","filterTypes","selectedType","state","componentDidMount","focus","componentDidUpdate","prevProps","undefined","setState","event","target","debug2","onChange","length","debug","onDelete","render","formatter","showValueInput","type","typeOptionElements","isValid","getCachedIsValid","i","label","element","push","error"],"sources":["../src/AdvancedFilterCreatorFilterItem.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { Button } from '@deephaven/components';\nimport {\n getLabelForBooleanFilter,\n getLabelForDateFilter,\n getLabelForNumberFilter,\n getLabelForTextFilter,\n TypeValue as FilterTypeValue,\n} from '@deephaven/filters';\nimport { vsTrash } from '@deephaven/icons';\nimport type { Column } from '@deephaven/jsapi-types';\nimport {\n AdvancedFilterItemType,\n Formatter,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport classNames from 'classnames';\nimport memoizeOne from 'memoize-one';\nimport './AdvancedFilterCreatorFilterItem.scss';\n\nconst log = Log.module('AdvancedFilterCreatorFilterItem');\n\nexport interface AdvancedFilterCreatorFilterItemProps {\n column: Column;\n filterTypes: FilterTypeValue[];\n onChange(type: FilterTypeValue, value: string): void;\n onDelete(): void;\n selectedType?: FilterTypeValue;\n value?: string;\n formatter: Formatter;\n tableUtils: TableUtils;\n}\n\nexport type AdvancedFilterCreatorFilterItemState = AdvancedFilterItemType;\n\nexport class AdvancedFilterCreatorFilterItem extends PureComponent<\n AdvancedFilterCreatorFilterItemProps,\n AdvancedFilterCreatorFilterItemState\n> {\n static getLabelForFilter(\n columnType: string,\n filterType: FilterTypeValue\n ): string {\n try {\n if (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isCharType(columnType)\n ) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getLabelForBooleanFilter(filterType);\n }\n throw new Error(`Unrecognized column type: ${columnType}`);\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n\n constructor(props: AdvancedFilterCreatorFilterItemProps) {\n super(props);\n\n this.handleDelete = this.handleDelete.bind(this);\n this.handleTypeChange = this.handleTypeChange.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.typeDropdown = null;\n\n const { value = '', filterTypes, selectedType = filterTypes[0] } = props;\n\n this.state = {\n selectedType,\n value,\n };\n }\n\n componentDidMount(): void {\n this.typeDropdown?.focus();\n }\n\n componentDidUpdate(prevProps: AdvancedFilterCreatorFilterItemProps): void {\n const { value, selectedType } = this.props;\n if (selectedType !== undefined && prevProps.selectedType !== selectedType) {\n this.setState({ selectedType });\n }\n if (value !== undefined && prevProps.value !== value) {\n this.setState({ value });\n }\n }\n\n typeDropdown: HTMLSelectElement | null;\n\n handleTypeChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const selectedType = event.target.value as FilterTypeValue;\n log.debug2('typeChange', selectedType);\n this.setState({ selectedType });\n\n const { onChange } = this.props;\n const { value } = this.state;\n if (value != null && value.length > 0) {\n // Don't send an update unless there's already a value entered\n onChange(selectedType, value);\n }\n }\n\n handleValueChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('valueChange');\n const { value } = event.target;\n this.setState({ value });\n\n const { onChange } = this.props;\n const { selectedType } = this.state;\n if (selectedType != null) {\n // Don't send an update unless they've already selected a type\n onChange(selectedType, value);\n }\n }\n\n handleDelete(): void {\n log.debug('delete');\n\n const { onDelete } = this.props;\n onDelete();\n }\n\n getCachedIsValid = memoizeOne(\n (\n column: Column,\n operation: FilterTypeValue,\n value: string,\n timeZone: string,\n tableUtils: TableUtils\n ): boolean => {\n try {\n // We don't want to show an error for an empty value\n return (\n !value ||\n tableUtils.makeAdvancedValueFilter(\n column,\n operation,\n value,\n timeZone\n ) != null\n );\n } catch (e) {\n return false;\n }\n }\n );\n\n render(): JSX.Element {\n const { column, filterTypes, formatter, tableUtils } = this.props;\n const { selectedType, value } = this.state;\n const showValueInput = !TableUtils.isBooleanType(column.type);\n const typeOptionElements = [];\n const isValid = this.getCachedIsValid(\n column,\n selectedType,\n value,\n formatter.timeZone,\n tableUtils\n );\n for (let i = 0; i < filterTypes.length; i += 1) {\n const type = filterTypes[i];\n const label = AdvancedFilterCreatorFilterItem.getLabelForFilter(\n column.type,\n type\n );\n const element = (\n <option key={type} value={type}>\n {label}\n </option>\n );\n typeOptionElements.push(element);\n }\n\n return (\n <div className=\"advanced-filter-creator-filter-item\">\n <div className=\"form-row\">\n <div className=\"form-group col\">\n <select\n className=\"form-control custom-select\"\n value={selectedType}\n onChange={this.handleTypeChange}\n ref={typeDropdown => {\n this.typeDropdown = typeDropdown;\n }}\n >\n {typeOptionElements}\n </select>\n </div>\n {showValueInput && (\n <div className=\"form-group col\">\n <div className=\"input-group\">\n <input\n type=\"text\"\n className={classNames('form-control', { error: !isValid })}\n placeholder=\"Enter value\"\n value={value}\n onChange={this.handleValueChange}\n />\n </div>\n </div>\n )}\n <div className=\"form-group col-1 px-0\">\n <Button\n kind=\"ghost\"\n className=\"w-100 h-100 p-0 m-0\"\n onClick={this.handleDelete}\n icon={vsTrash}\n tooltip=\"Remove Filter\"\n />\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorFilterItem;\n"],"mappings":";;;AAAA;AACA,OAAOA,KAAK,IAAIC,aAAa,QAAQ,OAAO;AAC5C,SAASC,MAAM,QAAQ,uBAAuB;AAC9C,SACEC,wBAAwB,EACxBC,qBAAqB,EACrBC,uBAAuB,EACvBC,qBAAqB,QAEhB,oBAAoB;AAC3B,SAASC,OAAO,QAAQ,kBAAkB;AAE1C,SAGEC,UAAU,QACL,wBAAwB;AAC/B,OAAOC,GAAG,MAAM,gBAAgB;AAChC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,UAAU,MAAM,aAAa;AAAC;AAGrC,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAM,CAAC,iCAAiC,CAAC;AAezD,OAAO,MAAMC,+BAA+B,SAASb,aAAa,CAGhE;EACA,OAAOc,iBAAiB,CACtBC,UAAkB,EAClBC,UAA2B,EACnB;IACR,IAAI;MACF,IACET,UAAU,CAACU,YAAY,CAACF,UAAU,CAAC,IACnCR,UAAU,CAACW,UAAU,CAACH,UAAU,CAAC,EACjC;QACA,OAAOX,uBAAuB,CAACY,UAAU,CAAC;MAC5C;MACA,IAAIT,UAAU,CAACY,UAAU,CAACJ,UAAU,CAAC,EAAE;QACrC,OAAOV,qBAAqB,CAACW,UAAU,CAAC;MAC1C;MACA,IAAIT,UAAU,CAACa,UAAU,CAACL,UAAU,CAAC,EAAE;QACrC,OAAOZ,qBAAqB,CAACa,UAAU,CAAC;MAC1C;MACA,IAAIT,UAAU,CAACc,aAAa,CAACN,UAAU,CAAC,EAAE;QACxC,OAAOb,wBAAwB,CAACc,UAAU,CAAC;MAC7C;MACA,MAAM,IAAIM,KAAK,qCAA8BP,UAAU,EAAG;IAC5D,CAAC,CAAC,OAAOQ,CAAC,EAAE;MACVZ,GAAG,CAACa,IAAI,CAACD,CAAC,CAAC;MACX,OAAO,EAAE;IACX;EACF;EAEAE,WAAW,CAACC,KAA2C,EAAE;IACvD,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA,0CAgEIhB,UAAU,CAC3B,CACEiB,MAAc,EACdC,SAA0B,EAC1BC,KAAa,EACbC,QAAgB,EAChBC,UAAsB,KACV;MACZ,IAAI;QACF;QACA,OACE,CAACF,KAAK,IACNE,UAAU,CAACC,uBAAuB,CAChCL,MAAM,EACNC,SAAS,EACTC,KAAK,EACLC,QAAQ,CACT,IAAI,IAAI;MAEb,CAAC,CAAC,OAAOP,CAAC,EAAE;QACV,OAAO,KAAK;MACd;IACF,CAAC,CACF;IArFC,IAAI,CAACU,YAAY,GAAG,IAAI,CAACA,YAAY,CAACC,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACC,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACD,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACE,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACF,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACG,YAAY,GAAG,IAAI;IAExB,IAAM;MAAER,KAAK,EAALA,MAAK,GAAG,EAAE;MAAES,WAAW;MAAEC,YAAY,GAAGD,WAAW,CAAC,CAAC;IAAE,CAAC,GAAGZ,KAAK;IAExE,IAAI,CAACc,KAAK,GAAG;MACXD,YAAY;MACZV,KAAK,EAALA;IACF,CAAC;EACH;EAEAY,iBAAiB,GAAS;IAAA;IACxB,0BAAI,CAACJ,YAAY,uDAAjB,mBAAmBK,KAAK,EAAE;EAC5B;EAEAC,kBAAkB,CAACC,SAA+C,EAAQ;IACxE,IAAM;MAAEf,KAAK;MAAEU;IAAa,CAAC,GAAG,IAAI,CAACb,KAAK;IAC1C,IAAIa,YAAY,KAAKM,SAAS,IAAID,SAAS,CAACL,YAAY,KAAKA,YAAY,EAAE;MACzE,IAAI,CAACO,QAAQ,CAAC;QAAEP;MAAa,CAAC,CAAC;IACjC;IACA,IAAIV,KAAK,KAAKgB,SAAS,IAAID,SAAS,CAACf,KAAK,KAAKA,KAAK,EAAE;MACpD,IAAI,CAACiB,QAAQ,CAAC;QAAEjB;MAAM,CAAC,CAAC;IAC1B;EACF;EAIAM,gBAAgB,CAACY,KAA2C,EAAQ;IAClE,IAAMR,YAAY,GAAGQ,KAAK,CAACC,MAAM,CAACnB,KAAwB;IAC1DlB,GAAG,CAACsC,MAAM,CAAC,YAAY,EAAEV,YAAY,CAAC;IACtC,IAAI,CAACO,QAAQ,CAAC;MAAEP;IAAa,CAAC,CAAC;IAE/B,IAAM;MAAEW;IAAS,CAAC,GAAG,IAAI,CAACxB,KAAK;IAC/B,IAAM;MAAEG;IAAM,CAAC,GAAG,IAAI,CAACW,KAAK;IAC5B,IAAIX,KAAK,IAAI,IAAI,IAAIA,KAAK,CAACsB,MAAM,GAAG,CAAC,EAAE;MACrC;MACAD,QAAQ,CAACX,YAAY,EAAEV,KAAK,CAAC;IAC/B;EACF;EAEAO,iBAAiB,CAACW,KAA0C,EAAQ;IAClEpC,GAAG,CAACsC,MAAM,CAAC,aAAa,CAAC;IACzB,IAAM;MAAEpB;IAAM,CAAC,GAAGkB,KAAK,CAACC,MAAM;IAC9B,IAAI,CAACF,QAAQ,CAAC;MAAEjB;IAAM,CAAC,CAAC;IAExB,IAAM;MAAEqB;IAAS,CAAC,GAAG,IAAI,CAACxB,KAAK;IAC/B,IAAM;MAAEa;IAAa,CAAC,GAAG,IAAI,CAACC,KAAK;IACnC,IAAID,YAAY,IAAI,IAAI,EAAE;MACxB;MACAW,QAAQ,CAACX,YAAY,EAAEV,KAAK,CAAC;IAC/B;EACF;EAEAI,YAAY,GAAS;IACnBtB,GAAG,CAACyC,KAAK,CAAC,QAAQ,CAAC;IAEnB,IAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAAC3B,KAAK;IAC/B2B,QAAQ,EAAE;EACZ;EA2BAC,MAAM,GAAgB;IACpB,IAAM;MAAE3B,MAAM;MAAEW,WAAW;MAAEiB,SAAS;MAAExB;IAAW,CAAC,GAAG,IAAI,CAACL,KAAK;IACjE,IAAM;MAAEa,YAAY;MAAEV;IAAM,CAAC,GAAG,IAAI,CAACW,KAAK;IAC1C,IAAMgB,cAAc,GAAG,CAACjD,UAAU,CAACc,aAAa,CAACM,MAAM,CAAC8B,IAAI,CAAC;IAC7D,IAAMC,kBAAkB,GAAG,EAAE;IAC7B,IAAMC,OAAO,GAAG,IAAI,CAACC,gBAAgB,CACnCjC,MAAM,EACNY,YAAY,EACZV,KAAK,EACL0B,SAAS,CAACzB,QAAQ,EAClBC,UAAU,CACX;IACD,KAAK,IAAI8B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGvB,WAAW,CAACa,MAAM,EAAEU,CAAC,IAAI,CAAC,EAAE;MAC9C,IAAMJ,KAAI,GAAGnB,WAAW,CAACuB,CAAC,CAAC;MAC3B,IAAMC,KAAK,GAAGjD,+BAA+B,CAACC,iBAAiB,CAC7Da,MAAM,CAAC8B,IAAI,EACXA,KAAI,CACL;MACD,IAAMM,OAAO,gBACX;QAAQ,GAAG,EAAEN,KAAK;QAAC,KAAK,EAAEA;MAAK,GAC5BK,KAAK,CAET;MACDJ,kBAAkB,CAACM,IAAI,CAACD,OAAO,CAAC;IAClC;IAEA,oBACE;MAAK,SAAS,EAAC;IAAqC,gBAClD;MAAK,SAAS,EAAC;IAAU,gBACvB;MAAK,SAAS,EAAC;IAAgB,gBAC7B;MACE,SAAS,EAAC,4BAA4B;MACtC,KAAK,EAAExB,YAAa;MACpB,QAAQ,EAAE,IAAI,CAACJ,gBAAiB;MAChC,GAAG,EAAEE,YAAY,IAAI;QACnB,IAAI,CAACA,YAAY,GAAGA,YAAY;MAClC;IAAE,GAEDqB,kBAAkB,CACZ,CACL,EACLF,cAAc,iBACb;MAAK,SAAS,EAAC;IAAgB,gBAC7B;MAAK,SAAS,EAAC;IAAa,gBAC1B;MACE,IAAI,EAAC,MAAM;MACX,SAAS,EAAE/C,UAAU,CAAC,cAAc,EAAE;QAAEwD,KAAK,EAAE,CAACN;MAAQ,CAAC,CAAE;MAC3D,WAAW,EAAC,aAAa;MACzB,KAAK,EAAE9B,KAAM;MACb,QAAQ,EAAE,IAAI,CAACO;IAAkB,EACjC,CACE,CAET,eACD;MAAK,SAAS,EAAC;IAAuB,gBACpC,oBAAC,MAAM;MACL,IAAI,EAAC,OAAO;MACZ,SAAS,EAAC,qBAAqB;MAC/B,OAAO,EAAE,IAAI,CAACH,YAAa;MAC3B,IAAI,EAAE3B,OAAQ;MACd,OAAO,EAAC;IAAe,EACvB,CACE,CACF,CACF;EAEV;AACF;AAEA,eAAeO,+BAA+B"}
@@ -1,50 +0,0 @@
1
- /* stylelint-disable scss/at-import-no-partial-leading-underscore */
2
- .advanced-filter-creator-select-value .select-value-list-scroll-pane {
3
- min-height: 120px;
4
- height: 120px;
5
- max-height: 120px;
6
- overflow-x: auto;
7
- }
8
- .advanced-filter-creator-select-value .advanced-filter-creator-select-meta-row {
9
- display: flex;
10
- flex-wrap: wrap;
11
- justify-content: space-between;
12
- padding-top: 0.25rem;
13
- }
14
- .advanced-filter-creator-select-value .row-count-info {
15
- padding-top: calc(0.25rem + 2px);
16
- padding-bottom: calc(0.25rem + 2px);
17
- color: #929192;
18
- user-select: none;
19
- }
20
- .advanced-filter-creator-select-value .btn-link {
21
- color: #f0f0ee;
22
- text-decoration: underline;
23
- }
24
- .advanced-filter-creator-select-value .btn-link:hover {
25
- color: #4878ea;
26
- }
27
- .advanced-filter-creator-select-value .select-value-list-wrapper {
28
- position: relative;
29
- display: flex;
30
- background: #555356;
31
- }
32
- .advanced-filter-creator-select-value .select-value-list-wrapper .value-list-item label {
33
- white-space: nowrap;
34
- }
35
- .advanced-filter-creator-select-value .select-value-list-wrapper .loading-list {
36
- position: absolute;
37
- top: 0;
38
- bottom: 0;
39
- left: 0;
40
- right: 0;
41
- display: flex;
42
- flex-direction: column;
43
- justify-content: center;
44
- align-content: center;
45
- }
46
- .advanced-filter-creator-select-value .select-value-list-wrapper .loading-list .fa-layers {
47
- margin: auto;
48
- }
49
-
50
- /*# sourceMappingURL=AdvancedFilterCreatorSelectValue.css.map */
@@ -1 +0,0 @@
1
- {"version":3,"sourceRoot":"","sources":["../../../node_modules/@deephaven/components/scss/custom.scss","../src/AdvancedFilterCreatorSelectValue.scss","../../../node_modules/@deephaven/components/scss/new_variables.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACGE;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA,aCZO;;ADeT;EAEE;EACA;EACA;EACA;;AAGF;EACE,OEba;EFcb;;AAGF;EACE,OEnBY;;AFsBd;EACE;EACA;EACA,YEdO;;AFgBP;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE","file":"AdvancedFilterCreatorSelectValue.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n","@import '@deephaven/components/scss/custom.scss';\n\n.advanced-filter-creator-select-value {\n .select-value-list-scroll-pane {\n min-height: 120px;\n height: 120px;\n max-height: 120px;\n overflow-x: auto;\n }\n\n .advanced-filter-creator-select-meta-row {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n padding-top: $spacer-1;\n }\n\n .row-count-info {\n //same vertical padding as a btn-links that are on the same line\n padding-top: calc(#{$spacer-1} + #{$btn-border-width});\n padding-bottom: calc(#{$spacer-1} + #{$btn-border-width});\n color: $text-muted;\n user-select: none;\n }\n\n .btn-link {\n color: $foreground;\n text-decoration: underline;\n }\n\n .btn-link:hover {\n color: $primary;\n }\n\n .select-value-list-wrapper {\n position: relative;\n display: flex;\n background: $input-bg;\n\n .value-list-item label {\n white-space: nowrap;\n }\n\n .loading-list {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-content: center;\n\n .fa-layers {\n margin: auto;\n }\n }\n }\n}\n","//Set of spacer variables from the spacer map\n$spacer-0: map-get($spacers, 0); //0\n$spacer-1: map-get($spacers, 1);\n$spacer-2: map-get($spacers, 2);\n$spacer-3: map-get($spacers, 3);\n$spacer-4: map-get($spacers, 4);\n$spacer-5: map-get($spacers, 5);\n\n//Marching Ants for golden layout dropzone and drag and drop\n//top bottom, left right.\n//create 4 background images that are 50% color 1, 50% color 2 using graidents, two veritical, two horizontal\n//size them to ant-size and thickness\n//position those images along the egdes and make top/bottom repeat-x and left/right repeat-y\n//then offest each of those background positions by ant-size in animation to make them march.\n$ant-size: 8px;\n$ant-thickness: 1px;\n\n@mixin ants-base($color-1: black, $color-2: white) {\n background-image: linear-gradient(to right, $color-2 50%, $color-1 50%),\n linear-gradient(to right, $color-2 50%, $color-1 50%),\n linear-gradient(to bottom, $color-2 50%, $color-1 50%),\n linear-gradient(to bottom, $color-2 50%, $color-1 50%);\n background-size: $ant-size $ant-thickness, $ant-size $ant-thickness,\n $ant-thickness $ant-size, $ant-thickness $ant-size;\n background-position: 0 top, 0 bottom, left 0, right 0;\n background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;\n animation: march 0.5s;\n animation-timing-function: linear;\n animation-iteration-count: infinite;\n}\n\n@mixin drag-stack($pseudo-element) {\n &::#{$pseudo-element} {\n content: ' ';\n background: $primary;\n box-shadow: $box-shadow;\n border-radius: $border-radius;\n position: absolute;\n height: 100%;\n width: 100%;\n @content;\n }\n}\n\n$focus-bg-transparency: 0.12;\n$hover-bg-transparency: 0.14;\n$active-bg-transparency: 0.28;\n$exception-transparency: 0.13;\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif: 'Fira Sans', -apple-system, blinkmacsystemfont,\n 'Segoe UI', 'Roboto', 'Helvetica Neue', arial, sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n//so browsers add alpha to your color by default, ignoring opacity 1\n//by setting rgba with 0.99 it tricks browser into thinking there is alpha applied\n$text-select-color: $primary-hover;\n$text-select-color-editor: lighten(\n $gray-700,\n 15%\n); //we lighten it abit to account for that 0.01 loss, and because it needs some anyways.\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem rgba($black, 45%); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem rgba(0, 0, 0, 45%); //darkest shadow for $black popups over $black UI\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition: color 0.12s ease-in-out, background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out, box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n\n//Override Inputs\n$input-bg: $gray-600;\n$input-disabled-bg: $gray-800;\n$input-color: $foreground;\n$input-border-color: $gray-400;\n$input-placeholder-color: $gray-400;\n$input-focus-border-color: rgba($primary, 85%);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: rgba($component-active-bg, 35%);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n\n//checkbox\n$custom-control-indicator-bg: $gray-600;\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: $gray-800;\n$custom-control-indicator-checked-disabled-bg: $gray-800;\n$custom-control-label-disabled-color: $gray-400;\n\n//Custom Select\n$custom-select-indicator-color: $gray-400;\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: darken($gray-400, 5%);\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $gray-200;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n\n// Toast notification\n$toast-bg: $primary-dark;\n$toast-color: $foreground;\n$toast-error-bg: mix($danger, $content-bg, 15%);\n$toast-error-color: $foreground;\n\n//tooltips\n$tooltip-bg: $gray-700;\n$tooltip-color: $foreground;\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem rgba($black, 80%);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: $gray-600;\n$contextmenu-color: $foreground;\n$contextmenu-disabled-color: $text-muted;\n$contextmenu-keyboard-selected-bg: rgba($primary, 50%);\n$contextmenu-selected-bg: $primary;\n$contextmenu-selected-color: $foreground;\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: theme-color('danger');\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n"]}
@@ -1,301 +0,0 @@
1
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
- /* eslint react/no-did-update-set-state: "off" */
5
- import React, { PureComponent } from 'react';
6
- import { CSSTransition } from 'react-transition-group';
7
- import classNames from 'classnames';
8
- import { TableUtils } from '@deephaven/jsapi-utils';
9
- import { Button } from '@deephaven/components';
10
- import AdvancedFilterCreatorSelectValueList from "./AdvancedFilterCreatorSelectValueList.js";
11
- import "./AdvancedFilterCreatorSelectValue.css";
12
- class AdvancedFilterCreatorSelectValue extends PureComponent {
13
- constructor(props) {
14
- super(props);
15
- _defineProperty(this, "searchTablePromise", void 0);
16
- _defineProperty(this, "tableUtils", void 0);
17
- _defineProperty(this, "updateFilterTimer", void 0);
18
- this.handleSelectAllClick = this.handleSelectAllClick.bind(this);
19
- this.handleClearAllClick = this.handleClearAllClick.bind(this);
20
- this.handleListChange = this.handleListChange.bind(this);
21
- this.handleSearchChange = this.handleSearchChange.bind(this);
22
- this.handleUpdateFilterTimeout = this.handleUpdateFilterTimeout.bind(this);
23
- var {
24
- dh,
25
- invertSelection,
26
- selectedValues
27
- } = props;
28
- this.tableUtils = new TableUtils(dh);
29
- this.state = {
30
- filters: [],
31
- invertSelection,
32
- selectedValues,
33
- searchText: ''
34
- };
35
- }
36
- componentDidMount() {
37
- this.initSearchTable();
38
- }
39
- componentDidUpdate(prevProps, prevState) {
40
- var {
41
- invertSelection,
42
- selectedValues,
43
- table
44
- } = this.props;
45
- if (prevProps.table !== table) {
46
- this.initSearchTable();
47
- }
48
- if (prevProps.invertSelection !== invertSelection) {
49
- this.setState({
50
- invertSelection
51
- });
52
- }
53
- if (prevProps.selectedValues !== selectedValues) {
54
- this.setState({
55
- selectedValues
56
- });
57
- }
58
- var {
59
- table: searchTable,
60
- searchText
61
- } = this.state;
62
- if (searchTable !== prevState.table) {
63
- if (prevState.table != null) {
64
- prevState.table.close();
65
- }
66
- if (searchTable != null) {
67
- this.startUpdateFilterTimer();
68
- }
69
- }
70
- if (searchText !== prevState.searchText) {
71
- this.startUpdateFilterTimer();
72
- }
73
- }
74
- componentWillUnmount() {
75
- var {
76
- table
77
- } = this.state;
78
- if (table != null) {
79
- table.close();
80
- }
81
- this.searchTablePromise = undefined;
82
- this.stopUpdateFilterTimer();
83
- }
84
- getColumnName() {
85
- var {
86
- table
87
- } = this.props;
88
- if (table != null) {
89
- return table.columns[0].name;
90
- }
91
- return '';
92
- }
93
- getDisplayedValuesCount() {
94
- var {
95
- invertSelection,
96
- selectedValues,
97
- table
98
- } = this.state;
99
- if (table == null) {
100
- return null;
101
- }
102
- if (invertSelection) {
103
- return table.totalSize - selectedValues.length;
104
- }
105
- return selectedValues.length;
106
- }
107
- getDisplayedValueText() {
108
- var count = this.getDisplayedValuesCount();
109
- var {
110
- table
111
- } = this.state;
112
- var {
113
- formatter
114
- } = this.props;
115
- if (count != null && table != null) {
116
- var formattedCount = formatter.getFormattedString(count, 'long');
117
- var formattedTableSize = formatter.getFormattedString(table.totalSize, 'long');
118
- var prefix = '';
119
- if (count < 1000000) {
120
- prefix = 'Displaying ';
121
- }
122
- return "".concat(prefix).concat(formattedCount, " of ").concat(formattedTableSize);
123
- }
124
- return null;
125
- }
126
- initSearchTable() {
127
- var {
128
- table
129
- } = this.props;
130
- if (table == null) {
131
- return;
132
- }
133
- var searchTablePromise = table.copy();
134
- this.searchTablePromise = searchTablePromise;
135
- this.searchTablePromise.then(searchTable => {
136
- if (this.searchTablePromise === searchTablePromise) {
137
- this.setState({
138
- table: searchTable
139
- });
140
- this.searchTablePromise = undefined;
141
- } else {
142
- searchTable.close();
143
- }
144
- });
145
- }
146
- handleListChange(selectedValues, invertSelection) {
147
- this.setState({
148
- selectedValues,
149
- invertSelection
150
- });
151
- var {
152
- onChange
153
- } = this.props;
154
- onChange(selectedValues, invertSelection);
155
- }
156
- handleSearchChange(event) {
157
- var searchText = event.target.value;
158
- this.setState({
159
- searchText
160
- });
161
- }
162
- handleSelectAllClick() {
163
- this.resetSelection(true);
164
- }
165
- handleClearAllClick() {
166
- this.resetSelection(false);
167
- }
168
- handleUpdateFilterTimeout() {
169
- this.updateFilterTimer = undefined;
170
- this.updateTableFilter();
171
- }
172
- resetSelection(invertSelection) {
173
- var selectedValues = [];
174
- this.setState({
175
- invertSelection,
176
- selectedValues
177
- });
178
- var {
179
- onChange
180
- } = this.props;
181
- onChange(selectedValues, invertSelection);
182
- }
183
- startUpdateFilterTimer() {
184
- this.stopUpdateFilterTimer();
185
- this.updateFilterTimer = setTimeout(this.handleUpdateFilterTimeout, AdvancedFilterCreatorSelectValue.searchDebounceTime);
186
- }
187
- stopUpdateFilterTimer() {
188
- if (this.updateFilterTimer != null) {
189
- clearTimeout(this.updateFilterTimer);
190
- this.updateFilterTimer = undefined;
191
- }
192
- }
193
- updateTableFilter() {
194
- var {
195
- table,
196
- searchText
197
- } = this.state;
198
- var {
199
- timeZone
200
- } = this.props;
201
- var {
202
- tableUtils
203
- } = this;
204
- var column = table === null || table === void 0 ? void 0 : table.columns[0];
205
- var filters = [];
206
- if (column == null) {
207
- return;
208
- }
209
- var error;
210
- if (searchText.length > 0) {
211
- var filter = null;
212
- if (TableUtils.isCharType(column.type)) {
213
- // Just exact match for char
214
- filter = tableUtils.makeQuickFilter(column, searchText);
215
- } else if (TableUtils.isTextType(column.type)) {
216
- // case insensitive & contains search text
217
- filter = tableUtils.makeQuickFilter(column, "~".concat(searchText), timeZone);
218
- } else {
219
- // greater than or equal search for everything else
220
- // we may want to be smarter with some other types (like dates)
221
- filter = tableUtils.makeQuickFilter(column, ">=".concat(searchText), timeZone);
222
- }
223
- if (filter != null) {
224
- filters.push(filter);
225
- } else {
226
- error = 'Invalid search text';
227
- }
228
- }
229
- this.setState({
230
- filters,
231
- error
232
- });
233
- }
234
- render() {
235
- var {
236
- error,
237
- filters,
238
- invertSelection,
239
- selectedValues,
240
- searchText,
241
- table
242
- } = this.state;
243
- var {
244
- dh,
245
- formatter,
246
- showSearch
247
- } = this.props;
248
- var columnName = this.getColumnName();
249
- var displayedValuesText = this.getDisplayedValueText();
250
- var placeholderText = columnName ? "Find ".concat(columnName, "...") : '';
251
- return /*#__PURE__*/React.createElement("div", {
252
- className: "advanced-filter-creator-select-value"
253
- }, /*#__PURE__*/React.createElement("div", {
254
- className: showSearch ? 'form-group' : ''
255
- }, /*#__PURE__*/React.createElement("label", {
256
- htmlFor: "advanced-filter-creator-select-value-input"
257
- }, "Select Values"), showSearch && /*#__PURE__*/React.createElement("input", {
258
- type: "text",
259
- className: classNames('form-control', {
260
- 'is-invalid': error != null
261
- }),
262
- id: "advanced-filter-creator-select-value-input",
263
- placeholder: placeholderText,
264
- value: searchText,
265
- onChange: this.handleSearchChange
266
- })), /*#__PURE__*/React.createElement(AdvancedFilterCreatorSelectValueList, {
267
- dh: dh,
268
- table: table,
269
- filters: filters,
270
- invertSelection: invertSelection,
271
- selectedValues: selectedValues,
272
- formatter: formatter,
273
- onChange: this.handleListChange
274
- }), /*#__PURE__*/React.createElement("div", {
275
- className: "advanced-filter-creator-select-meta-row"
276
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Button, {
277
- kind: "ghost",
278
- onClick: this.handleSelectAllClick
279
- }, "Select All"), /*#__PURE__*/React.createElement(Button, {
280
- kind: "ghost",
281
- onClick: this.handleClearAllClick
282
- }, "Clear")), /*#__PURE__*/React.createElement(CSSTransition, {
283
- in: displayedValuesText != null,
284
- timeout: 250,
285
- classNames: "fade",
286
- mountOnEnter: true,
287
- unmountOnExit: true
288
- }, /*#__PURE__*/React.createElement("div", {
289
- className: "row-count-info"
290
- }, displayedValuesText))));
291
- }
292
- }
293
- _defineProperty(AdvancedFilterCreatorSelectValue, "searchDebounceTime", 250);
294
- _defineProperty(AdvancedFilterCreatorSelectValue, "defaultProps", {
295
- invertSelection: true,
296
- selectedValues: [],
297
- onChange: () => undefined,
298
- showSearch: true
299
- });
300
- export default AdvancedFilterCreatorSelectValue;
301
- //# sourceMappingURL=AdvancedFilterCreatorSelectValue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AdvancedFilterCreatorSelectValue.js","names":["React","PureComponent","CSSTransition","classNames","TableUtils","Button","AdvancedFilterCreatorSelectValueList","AdvancedFilterCreatorSelectValue","constructor","props","handleSelectAllClick","bind","handleClearAllClick","handleListChange","handleSearchChange","handleUpdateFilterTimeout","dh","invertSelection","selectedValues","tableUtils","state","filters","searchText","componentDidMount","initSearchTable","componentDidUpdate","prevProps","prevState","table","setState","searchTable","close","startUpdateFilterTimer","componentWillUnmount","searchTablePromise","undefined","stopUpdateFilterTimer","getColumnName","columns","name","getDisplayedValuesCount","totalSize","length","getDisplayedValueText","count","formatter","formattedCount","getFormattedString","formattedTableSize","prefix","copy","then","onChange","event","target","value","resetSelection","updateFilterTimer","updateTableFilter","setTimeout","searchDebounceTime","clearTimeout","timeZone","column","error","filter","isCharType","type","makeQuickFilter","isTextType","push","render","showSearch","columnName","displayedValuesText","placeholderText"],"sources":["../src/AdvancedFilterCreatorSelectValue.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport classNames from 'classnames';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport type {\n dh as DhType,\n FilterCondition,\n Table,\n} from '@deephaven/jsapi-types';\nimport { Button } from '@deephaven/components';\nimport AdvancedFilterCreatorSelectValueList from './AdvancedFilterCreatorSelectValueList';\nimport './AdvancedFilterCreatorSelectValue.scss';\nimport { ColumnName } from './CommonTypes';\n\ninterface AdvancedFilterCreatorSelectValueProps<T> {\n dh: DhType;\n invertSelection: boolean;\n selectedValues: T[];\n table?: Table;\n formatter: Formatter;\n onChange: (selectedValues: T[], invertSelection: boolean) => void;\n showSearch: boolean;\n timeZone: string;\n}\n\ninterface AdvancedFilterCreatorSelectValueState<T> {\n error?: string;\n filters: FilterCondition[];\n invertSelection: boolean;\n selectedValues: T[];\n searchText: string;\n table?: Table;\n}\n\nclass AdvancedFilterCreatorSelectValue<T = unknown> extends PureComponent<\n AdvancedFilterCreatorSelectValueProps<T>,\n AdvancedFilterCreatorSelectValueState<T>\n> {\n static searchDebounceTime = 250;\n\n static defaultProps = {\n invertSelection: true,\n selectedValues: [],\n onChange: (): void => undefined,\n showSearch: true,\n };\n\n constructor(props: AdvancedFilterCreatorSelectValueProps<T>) {\n super(props);\n\n this.handleSelectAllClick = this.handleSelectAllClick.bind(this);\n this.handleClearAllClick = this.handleClearAllClick.bind(this);\n this.handleListChange = this.handleListChange.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUpdateFilterTimeout = this.handleUpdateFilterTimeout.bind(this);\n\n const { dh, invertSelection, selectedValues } = props;\n\n this.tableUtils = new TableUtils(dh);\n\n this.state = {\n filters: [],\n invertSelection,\n selectedValues,\n searchText: '',\n };\n }\n\n componentDidMount(): void {\n this.initSearchTable();\n }\n\n componentDidUpdate(\n prevProps: AdvancedFilterCreatorSelectValueProps<T>,\n prevState: AdvancedFilterCreatorSelectValueState<T>\n ): void {\n const { invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n this.initSearchTable();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ invertSelection });\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues });\n }\n\n const { table: searchTable, searchText } = this.state;\n\n if (searchTable !== prevState.table) {\n if (prevState.table != null) {\n prevState.table.close();\n }\n if (searchTable != null) {\n this.startUpdateFilterTimer();\n }\n }\n\n if (searchText !== prevState.searchText) {\n this.startUpdateFilterTimer();\n }\n }\n\n componentWillUnmount(): void {\n const { table } = this.state;\n if (table != null) {\n table.close();\n }\n this.searchTablePromise = undefined;\n\n this.stopUpdateFilterTimer();\n }\n\n searchTablePromise?: Promise<Table>;\n\n tableUtils: TableUtils;\n\n updateFilterTimer?: ReturnType<typeof setTimeout>;\n\n getColumnName(): ColumnName {\n const { table } = this.props;\n if (table != null) {\n return table.columns[0].name;\n }\n return '';\n }\n\n getDisplayedValuesCount(): number | null {\n const { invertSelection, selectedValues, table } = this.state;\n if (table == null) {\n return null;\n }\n\n if (invertSelection) {\n return table.totalSize - selectedValues.length;\n }\n return selectedValues.length;\n }\n\n getDisplayedValueText(): string | null {\n const count = this.getDisplayedValuesCount();\n const { table } = this.state;\n\n const { formatter } = this.props;\n\n if (count != null && table != null) {\n const formattedCount = formatter.getFormattedString(count, 'long');\n const formattedTableSize = formatter.getFormattedString(\n table.totalSize,\n 'long'\n );\n let prefix = '';\n if (count < 1000000) {\n prefix = 'Displaying ';\n }\n return `${prefix}${formattedCount} of ${formattedTableSize}`;\n }\n return null;\n }\n\n initSearchTable(): void {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n const searchTablePromise = table.copy();\n this.searchTablePromise = searchTablePromise;\n this.searchTablePromise.then(searchTable => {\n if (this.searchTablePromise === searchTablePromise) {\n this.setState({ table: searchTable });\n this.searchTablePromise = undefined;\n } else {\n searchTable.close();\n }\n });\n }\n\n handleListChange(selectedValues: T[], invertSelection: boolean): void {\n this.setState({ selectedValues, invertSelection });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleSearchChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const searchText = event.target.value;\n this.setState({ searchText });\n }\n\n handleSelectAllClick(): void {\n this.resetSelection(true);\n }\n\n handleClearAllClick(): void {\n this.resetSelection(false);\n }\n\n handleUpdateFilterTimeout(): void {\n this.updateFilterTimer = undefined;\n this.updateTableFilter();\n }\n\n resetSelection(invertSelection: boolean): void {\n const selectedValues: T[] = [];\n\n this.setState({ invertSelection, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n startUpdateFilterTimer(): void {\n this.stopUpdateFilterTimer();\n\n this.updateFilterTimer = setTimeout(\n this.handleUpdateFilterTimeout,\n AdvancedFilterCreatorSelectValue.searchDebounceTime\n );\n }\n\n stopUpdateFilterTimer(): void {\n if (this.updateFilterTimer != null) {\n clearTimeout(this.updateFilterTimer);\n this.updateFilterTimer = undefined;\n }\n }\n\n updateTableFilter(): void {\n const { table, searchText } = this.state;\n const { timeZone } = this.props;\n const { tableUtils } = this;\n const column = table?.columns[0];\n const filters = [];\n if (column == null) {\n return;\n }\n let error;\n if (searchText.length > 0) {\n let filter = null;\n if (TableUtils.isCharType(column.type)) {\n // Just exact match for char\n filter = tableUtils.makeQuickFilter(column, searchText);\n } else if (TableUtils.isTextType(column.type)) {\n // case insensitive & contains search text\n filter = tableUtils.makeQuickFilter(column, `~${searchText}`, timeZone);\n } else {\n // greater than or equal search for everything else\n // we may want to be smarter with some other types (like dates)\n filter = tableUtils.makeQuickFilter(\n column,\n `>=${searchText}`,\n timeZone\n );\n }\n\n if (filter != null) {\n filters.push(filter);\n } else {\n error = 'Invalid search text';\n }\n }\n\n this.setState({ filters, error });\n }\n\n render(): React.ReactElement {\n const {\n error,\n filters,\n invertSelection,\n selectedValues,\n searchText,\n table,\n } = this.state;\n const { dh, formatter, showSearch } = this.props;\n const columnName = this.getColumnName();\n const displayedValuesText = this.getDisplayedValueText();\n const placeholderText = columnName ? `Find ${columnName}...` : '';\n\n return (\n <div className=\"advanced-filter-creator-select-value\">\n <div className={showSearch ? 'form-group' : ''}>\n <label htmlFor=\"advanced-filter-creator-select-value-input\">\n Select Values\n </label>\n {showSearch && (\n <input\n type=\"text\"\n className={classNames('form-control', {\n 'is-invalid': error != null,\n })}\n id=\"advanced-filter-creator-select-value-input\"\n placeholder={placeholderText}\n value={searchText}\n onChange={this.handleSearchChange}\n />\n )}\n </div>\n <AdvancedFilterCreatorSelectValueList\n dh={dh}\n table={table}\n filters={filters}\n invertSelection={invertSelection}\n selectedValues={selectedValues}\n formatter={formatter}\n onChange={this.handleListChange}\n />\n <div className=\"advanced-filter-creator-select-meta-row\">\n <div>\n <Button kind=\"ghost\" onClick={this.handleSelectAllClick}>\n Select All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleClearAllClick}>\n Clear\n </Button>\n </div>\n <CSSTransition\n in={displayedValuesText != null}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"row-count-info\">{displayedValuesText}</div>\n </CSSTransition>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValue;\n"],"mappings":"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"}