@deephaven/iris-grid 0.42.1-beta.4 → 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 (277) hide show
  1. package/package.json +15 -15
  2. package/dist/AdvancedFilterCreator.css +0 -106
  3. package/dist/AdvancedFilterCreator.css.map +0 -1
  4. package/dist/AdvancedFilterCreator.js +0 -541
  5. package/dist/AdvancedFilterCreator.js.map +0 -1
  6. package/dist/AdvancedFilterCreatorFilterItem.css +0 -9
  7. package/dist/AdvancedFilterCreatorFilterItem.css.map +0 -1
  8. package/dist/AdvancedFilterCreatorFilterItem.js +0 -184
  9. package/dist/AdvancedFilterCreatorFilterItem.js.map +0 -1
  10. package/dist/AdvancedFilterCreatorSelectValue.css +0 -50
  11. package/dist/AdvancedFilterCreatorSelectValue.css.map +0 -1
  12. package/dist/AdvancedFilterCreatorSelectValue.js +0 -301
  13. package/dist/AdvancedFilterCreatorSelectValue.js.map +0 -1
  14. package/dist/AdvancedFilterCreatorSelectValueList.js +0 -272
  15. package/dist/AdvancedFilterCreatorSelectValueList.js.map +0 -1
  16. package/dist/ColumnHeaderGroup.js +0 -61
  17. package/dist/ColumnHeaderGroup.js.map +0 -1
  18. package/dist/ColumnStatistics.css +0 -76
  19. package/dist/ColumnStatistics.css.map +0 -1
  20. package/dist/ColumnStatistics.js +0 -202
  21. package/dist/ColumnStatistics.js.map +0 -1
  22. package/dist/CommonTypes.js +0 -2
  23. package/dist/CommonTypes.js.map +0 -1
  24. package/dist/CrossColumnSearch.css +0 -35
  25. package/dist/CrossColumnSearch.css.map +0 -1
  26. package/dist/CrossColumnSearch.js +0 -199
  27. package/dist/CrossColumnSearch.js.map +0 -1
  28. package/dist/FilterInputField.css +0 -56
  29. package/dist/FilterInputField.css.map +0 -1
  30. package/dist/FilterInputField.js +0 -232
  31. package/dist/FilterInputField.js.map +0 -1
  32. package/dist/GotoRow.css +0 -45
  33. package/dist/GotoRow.css.map +0 -1
  34. package/dist/GotoRow.js +0 -298
  35. package/dist/GotoRow.js.map +0 -1
  36. package/dist/IrisGrid.css +0 -359
  37. package/dist/IrisGrid.css.map +0 -1
  38. package/dist/IrisGrid.js +0 -3651
  39. package/dist/IrisGrid.js.map +0 -1
  40. package/dist/IrisGridBottomBar.css +0 -85
  41. package/dist/IrisGridBottomBar.css.map +0 -1
  42. package/dist/IrisGridBottomBar.js +0 -36
  43. package/dist/IrisGridBottomBar.js.map +0 -1
  44. package/dist/IrisGridCellOverflowModal.css +0 -17
  45. package/dist/IrisGridCellOverflowModal.css.map +0 -1
  46. package/dist/IrisGridCellOverflowModal.js +0 -157
  47. package/dist/IrisGridCellOverflowModal.js.map +0 -1
  48. package/dist/IrisGridCellRendererUtils.js +0 -20
  49. package/dist/IrisGridCellRendererUtils.js.map +0 -1
  50. package/dist/IrisGridCopyHandler.css +0 -64
  51. package/dist/IrisGridCopyHandler.css.map +0 -1
  52. package/dist/IrisGridCopyHandler.js +0 -331
  53. package/dist/IrisGridCopyHandler.js.map +0 -1
  54. package/dist/IrisGridDataBarCellRenderer.js +0 -10
  55. package/dist/IrisGridDataBarCellRenderer.js.map +0 -1
  56. package/dist/IrisGridIcons.js +0 -25
  57. package/dist/IrisGridIcons.js.map +0 -1
  58. package/dist/IrisGridMetricCalculator.js +0 -33
  59. package/dist/IrisGridMetricCalculator.js.map +0 -1
  60. package/dist/IrisGridModel.js +0 -263
  61. package/dist/IrisGridModel.js.map +0 -1
  62. package/dist/IrisGridModelFactory.js +0 -27
  63. package/dist/IrisGridModelFactory.js.map +0 -1
  64. package/dist/IrisGridModelUpdater.js +0 -96
  65. package/dist/IrisGridModelUpdater.js.map +0 -1
  66. package/dist/IrisGridPartitionSelector.css +0 -48
  67. package/dist/IrisGridPartitionSelector.css.map +0 -1
  68. package/dist/IrisGridPartitionSelector.js +0 -198
  69. package/dist/IrisGridPartitionSelector.js.map +0 -1
  70. package/dist/IrisGridProxyModel.js +0 -530
  71. package/dist/IrisGridProxyModel.js.map +0 -1
  72. package/dist/IrisGridRenderer.js +0 -779
  73. package/dist/IrisGridRenderer.js.map +0 -1
  74. package/dist/IrisGridShortcuts.js +0 -59
  75. package/dist/IrisGridShortcuts.js.map +0 -1
  76. package/dist/IrisGridTableModel.js +0 -273
  77. package/dist/IrisGridTableModel.js.map +0 -1
  78. package/dist/IrisGridTableModelTemplate.js +0 -1589
  79. package/dist/IrisGridTableModelTemplate.js.map +0 -1
  80. package/dist/IrisGridTestUtils.js +0 -121
  81. package/dist/IrisGridTestUtils.js.map +0 -1
  82. package/dist/IrisGridTextCellRenderer.js +0 -139
  83. package/dist/IrisGridTextCellRenderer.js.map +0 -1
  84. package/dist/IrisGridTheme.js +0 -96
  85. package/dist/IrisGridTheme.js.map +0 -1
  86. package/dist/IrisGridTheme.module.css +0 -69
  87. package/dist/IrisGridTheme.module.css.map +0 -1
  88. package/dist/IrisGridTreeTableModel.js +0 -145
  89. package/dist/IrisGridTreeTableModel.js.map +0 -1
  90. package/dist/IrisGridUtils.js +0 -1279
  91. package/dist/IrisGridUtils.js.map +0 -1
  92. package/dist/MissingKeyError.js +0 -15
  93. package/dist/MissingKeyError.js.map +0 -1
  94. package/dist/PartitionSelectorSearch.css +0 -22
  95. package/dist/PartitionSelectorSearch.css.map +0 -1
  96. package/dist/PartitionSelectorSearch.js +0 -317
  97. package/dist/PartitionSelectorSearch.js.map +0 -1
  98. package/dist/PendingDataBottomBar.css +0 -13
  99. package/dist/PendingDataBottomBar.css.map +0 -1
  100. package/dist/PendingDataBottomBar.js +0 -98
  101. package/dist/PendingDataBottomBar.js.map +0 -1
  102. package/dist/TableViewportUpdater.js +0 -156
  103. package/dist/TableViewportUpdater.js.map +0 -1
  104. package/dist/ToastBottomBar.js +0 -42
  105. package/dist/ToastBottomBar.js.map +0 -1
  106. package/dist/TreeTableViewportUpdater.js +0 -96
  107. package/dist/TreeTableViewportUpdater.js.map +0 -1
  108. package/dist/declaration.d.js +0 -2
  109. package/dist/declaration.d.js.map +0 -1
  110. package/dist/format-context-menus/CustomFormatAction.css +0 -25
  111. package/dist/format-context-menus/CustomFormatAction.css.map +0 -1
  112. package/dist/format-context-menus/CustomFormatAction.js +0 -132
  113. package/dist/format-context-menus/CustomFormatAction.js.map +0 -1
  114. package/dist/format-context-menus/DateTimeFormatContextMenu.js +0 -53
  115. package/dist/format-context-menus/DateTimeFormatContextMenu.js.map +0 -1
  116. package/dist/format-context-menus/DecimalFormatContextMenu.js +0 -59
  117. package/dist/format-context-menus/DecimalFormatContextMenu.js.map +0 -1
  118. package/dist/format-context-menus/FormatContextMenuUtils.js +0 -63
  119. package/dist/format-context-menus/FormatContextMenuUtils.js.map +0 -1
  120. package/dist/format-context-menus/IntegerFormatContextMenu.js +0 -43
  121. package/dist/format-context-menus/IntegerFormatContextMenu.js.map +0 -1
  122. package/dist/format-context-menus/index.js +0 -4
  123. package/dist/format-context-menus/index.js.map +0 -1
  124. package/dist/index.js +0 -24
  125. package/dist/index.js.map +0 -1
  126. package/dist/key-handlers/ClearFilterKeyHandler.js +0 -21
  127. package/dist/key-handlers/ClearFilterKeyHandler.js.map +0 -1
  128. package/dist/key-handlers/CopyKeyHandler.js +0 -31
  129. package/dist/key-handlers/CopyKeyHandler.js.map +0 -1
  130. package/dist/key-handlers/ReverseKeyHandler.js +0 -32
  131. package/dist/key-handlers/ReverseKeyHandler.js.map +0 -1
  132. package/dist/key-handlers/index.js +0 -4
  133. package/dist/key-handlers/index.js.map +0 -1
  134. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js +0 -175
  135. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +0 -1
  136. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +0 -139
  137. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +0 -1
  138. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +0 -83
  139. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +0 -1
  140. package/dist/mousehandlers/IrisGridContextMenuHandler.css +0 -19
  141. package/dist/mousehandlers/IrisGridContextMenuHandler.css.map +0 -1
  142. package/dist/mousehandlers/IrisGridContextMenuHandler.js +0 -1220
  143. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +0 -1
  144. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js +0 -28
  145. package/dist/mousehandlers/IrisGridDataSelectMouseHandler.js.map +0 -1
  146. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +0 -80
  147. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +0 -1
  148. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js +0 -126
  149. package/dist/mousehandlers/IrisGridRowTreeMouseHandler.js.map +0 -1
  150. package/dist/mousehandlers/IrisGridSortMouseHandler.js +0 -46
  151. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +0 -1
  152. package/dist/mousehandlers/IrisGridTokenMouseHandler.js +0 -151
  153. package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +0 -1
  154. package/dist/mousehandlers/PendingMouseHandler.js +0 -39
  155. package/dist/mousehandlers/PendingMouseHandler.js.map +0 -1
  156. package/dist/mousehandlers/index.js +0 -11
  157. package/dist/mousehandlers/index.js.map +0 -1
  158. package/dist/sidebar/AdvancedSettings.js +0 -6
  159. package/dist/sidebar/AdvancedSettings.js.map +0 -1
  160. package/dist/sidebar/AdvancedSettingsMenu.js +0 -29
  161. package/dist/sidebar/AdvancedSettingsMenu.js.map +0 -1
  162. package/dist/sidebar/AdvancedSettingsType.js +0 -7
  163. package/dist/sidebar/AdvancedSettingsType.js.map +0 -1
  164. package/dist/sidebar/ChartBuilder.css +0 -56
  165. package/dist/sidebar/ChartBuilder.css.map +0 -1
  166. package/dist/sidebar/ChartBuilder.js +0 -443
  167. package/dist/sidebar/ChartBuilder.js.map +0 -1
  168. package/dist/sidebar/CustomColumnBuilder.css +0 -58
  169. package/dist/sidebar/CustomColumnBuilder.css.map +0 -1
  170. package/dist/sidebar/CustomColumnBuilder.js +0 -384
  171. package/dist/sidebar/CustomColumnBuilder.js.map +0 -1
  172. package/dist/sidebar/CustomColumnInput.js +0 -90
  173. package/dist/sidebar/CustomColumnInput.js.map +0 -1
  174. package/dist/sidebar/InputEditor.css +0 -35
  175. package/dist/sidebar/InputEditor.css.map +0 -1
  176. package/dist/sidebar/InputEditor.js +0 -177
  177. package/dist/sidebar/InputEditor.js.map +0 -1
  178. package/dist/sidebar/OptionType.js +0 -19
  179. package/dist/sidebar/OptionType.js.map +0 -1
  180. package/dist/sidebar/RollupRows.css +0 -120
  181. package/dist/sidebar/RollupRows.css.map +0 -1
  182. package/dist/sidebar/RollupRows.js +0 -519
  183. package/dist/sidebar/RollupRows.js.map +0 -1
  184. package/dist/sidebar/SelectDistinctBuilder.css +0 -41
  185. package/dist/sidebar/SelectDistinctBuilder.css.map +0 -1
  186. package/dist/sidebar/SelectDistinctBuilder.js +0 -155
  187. package/dist/sidebar/SelectDistinctBuilder.js.map +0 -1
  188. package/dist/sidebar/TableCsvExporter.css +0 -32
  189. package/dist/sidebar/TableCsvExporter.css.map +0 -1
  190. package/dist/sidebar/TableCsvExporter.js +0 -399
  191. package/dist/sidebar/TableCsvExporter.js.map +0 -1
  192. package/dist/sidebar/TableSaver.js +0 -487
  193. package/dist/sidebar/TableSaver.js.map +0 -1
  194. package/dist/sidebar/aggregations/AggregationEdit.css +0 -61
  195. package/dist/sidebar/aggregations/AggregationEdit.css.map +0 -1
  196. package/dist/sidebar/aggregations/AggregationEdit.js +0 -155
  197. package/dist/sidebar/aggregations/AggregationEdit.js.map +0 -1
  198. package/dist/sidebar/aggregations/AggregationOperation.js +0 -19
  199. package/dist/sidebar/aggregations/AggregationOperation.js.map +0 -1
  200. package/dist/sidebar/aggregations/AggregationUtils.js +0 -59
  201. package/dist/sidebar/aggregations/AggregationUtils.js.map +0 -1
  202. package/dist/sidebar/aggregations/Aggregations.css +0 -43
  203. package/dist/sidebar/aggregations/Aggregations.css.map +0 -1
  204. package/dist/sidebar/aggregations/Aggregations.js +0 -178
  205. package/dist/sidebar/aggregations/Aggregations.js.map +0 -1
  206. package/dist/sidebar/aggregations/index.js +0 -2
  207. package/dist/sidebar/aggregations/index.js.map +0 -1
  208. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +0 -123
  209. package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +0 -1
  210. package/dist/sidebar/conditional-formatting/ConditionEditor.js +0 -243
  211. package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +0 -1
  212. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.css +0 -22
  213. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.css.map +0 -1
  214. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +0 -109
  215. package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +0 -1
  216. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +0 -18
  217. package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +0 -1
  218. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css +0 -57
  219. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css.map +0 -1
  220. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +0 -150
  221. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +0 -1
  222. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +0 -635
  223. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +0 -1
  224. package/dist/sidebar/conditional-formatting/RowFormatEditor.js +0 -122
  225. package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +0 -1
  226. package/dist/sidebar/conditional-formatting/StyleEditor.css +0 -55
  227. package/dist/sidebar/conditional-formatting/StyleEditor.css.map +0 -1
  228. package/dist/sidebar/conditional-formatting/StyleEditor.js +0 -150
  229. package/dist/sidebar/conditional-formatting/StyleEditor.js.map +0 -1
  230. package/dist/sidebar/icons/BarIcon.js +0 -24
  231. package/dist/sidebar/icons/BarIcon.js.map +0 -1
  232. package/dist/sidebar/icons/FormatColumnWhereIcon.js +0 -42
  233. package/dist/sidebar/icons/FormatColumnWhereIcon.js.map +0 -1
  234. package/dist/sidebar/icons/FormatRowWhereIcon.js +0 -36
  235. package/dist/sidebar/icons/FormatRowWhereIcon.js.map +0 -1
  236. package/dist/sidebar/icons/HistogramIcon.js +0 -24
  237. package/dist/sidebar/icons/HistogramIcon.js.map +0 -1
  238. package/dist/sidebar/icons/LineIcon.js +0 -27
  239. package/dist/sidebar/icons/LineIcon.js.map +0 -1
  240. package/dist/sidebar/icons/PieIcon.js +0 -24
  241. package/dist/sidebar/icons/PieIcon.js.map +0 -1
  242. package/dist/sidebar/icons/ScatterIcon.js +0 -74
  243. package/dist/sidebar/icons/ScatterIcon.js.map +0 -1
  244. package/dist/sidebar/icons/index.js +0 -8
  245. package/dist/sidebar/icons/index.js.map +0 -1
  246. package/dist/sidebar/index.js +0 -18
  247. package/dist/sidebar/index.js.map +0 -1
  248. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css +0 -68
  249. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css.map +0 -1
  250. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js +0 -964
  251. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +0 -1
  252. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js +0 -132
  253. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilderUtils.js.map +0 -1
  254. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css +0 -29
  255. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css.map +0 -1
  256. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js +0 -188
  257. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.js.map +0 -1
  258. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js +0 -81
  259. package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingItem.js.map +0 -1
  260. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js +0 -30
  261. package/dist/sidebar/visibility-ordering-builder/sortable-tree/PointerSensorWithInteraction.js.map +0 -1
  262. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js +0 -158
  263. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTree.js.map +0 -1
  264. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js +0 -146
  265. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeInner.js.map +0 -1
  266. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js +0 -59
  267. package/dist/sidebar/visibility-ordering-builder/sortable-tree/SortableTreeItem.js.map +0 -1
  268. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css +0 -139
  269. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +0 -1
  270. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js +0 -44
  271. package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.js.map +0 -1
  272. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js +0 -129
  273. package/dist/sidebar/visibility-ordering-builder/sortable-tree/keyboardCoordinates.js.map +0 -1
  274. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js +0 -4
  275. package/dist/sidebar/visibility-ordering-builder/sortable-tree/types.js.map +0 -1
  276. package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js +0 -261
  277. 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":"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"}
@@ -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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"}