@deephaven/iris-grid 0.13.3-beta.2 → 0.13.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/AdvancedFilterCreator.d.ts +63 -69
  2. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  3. package/dist/AdvancedFilterCreator.js +73 -79
  4. package/dist/AdvancedFilterCreator.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.d.ts +45 -45
  6. package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValue.js +36 -32
  8. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  9. package/dist/AdvancedFilterCreatorSelectValueList.d.ts +52 -47
  10. package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
  11. package/dist/AdvancedFilterCreatorSelectValueList.js +39 -24
  12. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  13. package/dist/ColumnStatistics.d.ts +22 -34
  14. package/dist/ColumnStatistics.d.ts.map +1 -1
  15. package/dist/ColumnStatistics.js +12 -8
  16. package/dist/ColumnStatistics.js.map +1 -1
  17. package/dist/CrossColumnSearch.d.ts +24 -26
  18. package/dist/CrossColumnSearch.d.ts.map +1 -1
  19. package/dist/CrossColumnSearch.js +13 -9
  20. package/dist/CrossColumnSearch.js.map +1 -1
  21. package/dist/FilterInputField.d.ts +51 -48
  22. package/dist/FilterInputField.d.ts.map +1 -1
  23. package/dist/FilterInputField.js +27 -30
  24. package/dist/FilterInputField.js.map +1 -1
  25. package/dist/IrisGrid.d.ts +453 -409
  26. package/dist/IrisGrid.d.ts.map +1 -1
  27. package/dist/IrisGrid.js +449 -514
  28. package/dist/IrisGrid.js.map +1 -1
  29. package/dist/IrisGridCellOverflowModal.d.ts +1 -1
  30. package/dist/IrisGridCellOverflowModal.d.ts.map +1 -1
  31. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  32. package/dist/IrisGridCopyHandler.d.ts +46 -52
  33. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  34. package/dist/IrisGridCopyHandler.js +38 -22
  35. package/dist/IrisGridCopyHandler.js.map +1 -1
  36. package/dist/IrisGridMetricCalculator.d.ts +4 -5
  37. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  38. package/dist/IrisGridMetricCalculator.js +1 -5
  39. package/dist/IrisGridMetricCalculator.js.map +1 -1
  40. package/dist/IrisGridModel.d.ts +35 -37
  41. package/dist/IrisGridModel.d.ts.map +1 -1
  42. package/dist/IrisGridModel.js +3 -19
  43. package/dist/IrisGridModel.js.map +1 -1
  44. package/dist/IrisGridModelFactory.d.ts +5 -7
  45. package/dist/IrisGridModelFactory.d.ts.map +1 -1
  46. package/dist/IrisGridModelFactory.js +5 -5
  47. package/dist/IrisGridModelFactory.js.map +1 -1
  48. package/dist/IrisGridModelUpdater.d.ts +11 -13
  49. package/dist/IrisGridModelUpdater.d.ts.map +1 -1
  50. package/dist/IrisGridModelUpdater.js.map +1 -1
  51. package/dist/IrisGridPartitionSelector.d.ts +39 -38
  52. package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
  53. package/dist/IrisGridPartitionSelector.js +24 -18
  54. package/dist/IrisGridPartitionSelector.js.map +1 -1
  55. package/dist/IrisGridProxyModel.d.ts +32 -111
  56. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  57. package/dist/IrisGridProxyModel.js +170 -212
  58. package/dist/IrisGridProxyModel.js.map +1 -1
  59. package/dist/IrisGridRenderer.d.ts +31 -59
  60. package/dist/IrisGridRenderer.d.ts.map +1 -1
  61. package/dist/IrisGridRenderer.js +46 -92
  62. package/dist/IrisGridRenderer.js.map +1 -1
  63. package/dist/IrisGridTableModel.d.ts +147 -48
  64. package/dist/IrisGridTableModel.d.ts.map +1 -1
  65. package/dist/IrisGridTableModel.js +1381 -58
  66. package/dist/IrisGridTableModel.js.map +1 -1
  67. package/dist/IrisGridTestUtils.d.ts +14 -18
  68. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  69. package/dist/IrisGridTestUtils.js +1 -29
  70. package/dist/IrisGridTestUtils.js.map +1 -1
  71. package/dist/IrisGridTheme.d.ts +3 -35
  72. package/dist/IrisGridTheme.d.ts.map +1 -1
  73. package/dist/IrisGridTheme.js.map +1 -1
  74. package/dist/IrisGridTreeTableModel.d.ts +7 -26
  75. package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
  76. package/dist/IrisGridTreeTableModel.js +14 -24
  77. package/dist/IrisGridTreeTableModel.js.map +1 -1
  78. package/dist/IrisGridUtils.d.ts +162 -257
  79. package/dist/IrisGridUtils.d.ts.map +1 -1
  80. package/dist/IrisGridUtils.js +95 -132
  81. package/dist/IrisGridUtils.js.map +1 -1
  82. package/dist/MissingKeyError.d.ts +3 -5
  83. package/dist/MissingKeyError.d.ts.map +1 -1
  84. package/dist/MissingKeyError.js.map +1 -1
  85. package/dist/PartitionSelectorSearch.d.ts +40 -61
  86. package/dist/PartitionSelectorSearch.d.ts.map +1 -1
  87. package/dist/PartitionSelectorSearch.js +15 -25
  88. package/dist/PartitionSelectorSearch.js.map +1 -1
  89. package/dist/PendingDataBottomBar.d.ts +6 -3
  90. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  91. package/dist/PendingDataBottomBar.js.map +1 -1
  92. package/dist/TableViewportUpdater.d.ts +55 -39
  93. package/dist/TableViewportUpdater.d.ts.map +1 -1
  94. package/dist/TableViewportUpdater.js +64 -42
  95. package/dist/TableViewportUpdater.js.map +1 -1
  96. package/dist/TreeTableViewportUpdater.d.ts +37 -29
  97. package/dist/TreeTableViewportUpdater.d.ts.map +1 -1
  98. package/dist/TreeTableViewportUpdater.js +50 -39
  99. package/dist/TreeTableViewportUpdater.js.map +1 -1
  100. package/dist/index.d.ts +0 -9
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +0 -9
  103. package/dist/index.js.map +1 -1
  104. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.d.ts.map +1 -1
  105. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  106. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts +1 -1
  107. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts.map +1 -1
  108. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +0 -2
  109. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  110. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +1 -1
  111. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  112. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +130 -41
  113. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  114. package/dist/mousehandlers/IrisGridContextMenuHandler.js +317 -426
  115. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  116. package/dist/mousehandlers/IrisGridFilterMouseHandler.d.ts.map +1 -1
  117. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +2 -2
  118. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  119. package/dist/mousehandlers/IrisGridSortMouseHandler.js +1 -1
  120. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  121. package/dist/mousehandlers/PendingMouseHandler.d.ts +4 -8
  122. package/dist/mousehandlers/PendingMouseHandler.d.ts.map +1 -1
  123. package/dist/mousehandlers/PendingMouseHandler.js +5 -4
  124. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  125. package/dist/sidebar/ChartBuilder.d.ts +33 -48
  126. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  127. package/dist/sidebar/ChartBuilder.js +27 -28
  128. package/dist/sidebar/ChartBuilder.js.map +1 -1
  129. package/dist/sidebar/CustomColumnBuilder.d.ts +41 -51
  130. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  131. package/dist/sidebar/CustomColumnBuilder.js +18 -22
  132. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  133. package/dist/sidebar/CustomColumnInput.d.ts +36 -26
  134. package/dist/sidebar/CustomColumnInput.d.ts.map +1 -1
  135. package/dist/sidebar/CustomColumnInput.js +20 -11
  136. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  137. package/dist/sidebar/InputEditor.d.ts +35 -34
  138. package/dist/sidebar/InputEditor.d.ts.map +1 -1
  139. package/dist/sidebar/InputEditor.js +24 -43
  140. package/dist/sidebar/InputEditor.js.map +1 -1
  141. package/dist/sidebar/RollupRows.d.ts +52 -67
  142. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  143. package/dist/sidebar/RollupRows.js +53 -51
  144. package/dist/sidebar/RollupRows.js.map +1 -1
  145. package/dist/sidebar/SelectDistinctBuilder.d.ts +21 -27
  146. package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
  147. package/dist/sidebar/SelectDistinctBuilder.js +10 -6
  148. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  149. package/dist/sidebar/TableCsvExporter.d.ts +39 -42
  150. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  151. package/dist/sidebar/TableCsvExporter.js +20 -12
  152. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  153. package/dist/sidebar/TableSaver.d.ts +60 -59
  154. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  155. package/dist/sidebar/TableSaver.js +68 -154
  156. package/dist/sidebar/TableSaver.js.map +1 -1
  157. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +45 -56
  158. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  159. package/dist/sidebar/VisibilityOrderingBuilder.js +29 -34
  160. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  161. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  162. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  163. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +1 -2
  164. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  165. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  166. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +5 -6
  167. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  168. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +0 -5
  169. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  170. package/dist/sidebar/icons/index.d.ts +7 -7
  171. package/dist/sidebar/icons/index.d.ts.map +1 -1
  172. package/dist/sidebar/icons/index.js.map +1 -1
  173. package/dist/sidebar/index.d.ts +12 -12
  174. package/dist/sidebar/index.d.ts.map +1 -1
  175. package/dist/sidebar/index.js.map +1 -1
  176. package/package.json +16 -17
  177. package/dist/CommonTypes.d.ts +0 -58
  178. package/dist/CommonTypes.d.ts.map +0 -1
  179. package/dist/CommonTypes.js +0 -2
  180. package/dist/CommonTypes.js.map +0 -1
  181. package/dist/IrisGridTableModelTemplate.d.ts +0 -219
  182. package/dist/IrisGridTableModelTemplate.d.ts.map +0 -1
  183. package/dist/IrisGridTableModelTemplate.js +0 -1623
  184. package/dist/IrisGridTableModelTemplate.js.map +0 -1
@@ -1,59 +1,64 @@
1
- import React, { PureComponent } from 'react';
2
- import { FilterCondition, Table } from '@deephaven/jsapi-shim';
3
- import { Formatter } from '@deephaven/jsapi-utils';
4
- import { SelectValueList, SelectItem } from '@deephaven/components';
5
- interface AdvancedFilterCreatorSelectValueListProps<T> {
6
- selectedValues: T[];
7
- table: Table;
8
- filters: FilterCondition[];
9
- invertSelection: boolean;
10
- onChange: (selectedValues: T[], invertSelection: boolean) => void;
11
- formatter: Formatter;
12
- }
13
- interface AdvancedFilterCreatorSelectValueListState<T> {
14
- itemCount: number;
15
- items: SelectItem<T>[];
16
- offset: number;
17
- selectedValues: T[];
18
- isLoading: boolean;
19
- }
1
+ export default AdvancedFilterCreatorSelectValueList;
20
2
  /**
21
3
  * Select values from a long scrollable list.
22
4
  * Swaps items in and out for infinite scrolling
23
5
  */
24
- declare class AdvancedFilterCreatorSelectValueList<T = unknown> extends PureComponent<AdvancedFilterCreatorSelectValueListProps<T>, AdvancedFilterCreatorSelectValueListState<T>> {
25
- static defaultProps: {
26
- table: null;
27
- invertSelection: boolean;
28
- selectedValues: never[];
29
- onChange: () => void;
30
- };
6
+ declare class AdvancedFilterCreatorSelectValueList extends React.PureComponent<any, any, any> {
31
7
  /**
32
8
  * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.
33
- * @param value The value to search for
34
- * @param values The array of values to search within
9
+ * @param {Any} value The value to search for
10
+ * @param {Array} values The array of values to search within
35
11
  */
36
- static indexOf(value: {
37
- valueof?: unknown;
38
- }, values: {
39
- valueof?: unknown;
40
- }[]): number;
41
- constructor(props: AdvancedFilterCreatorSelectValueListProps<T>);
42
- componentDidMount(): void;
43
- componentDidUpdate(prevProps: AdvancedFilterCreatorSelectValueListProps<T>): void;
44
- componentWillUnmount(): void;
45
- list: SelectValueList<T> | null;
46
- handleSelect(itemIndex: number, value: T): void;
47
- handleViewportChange(top: number, bottom: number): void;
12
+ static indexOf(value: Any, values: any[]): number;
13
+ constructor(props: any);
14
+ handleSelect(itemIndex: any, value: any): void;
15
+ handleViewportChange(top: any, bottom: any): void;
48
16
  handleSelectionUpdate(): void;
49
- handleTableUpdate(event: CustomEvent): void;
50
- isValueSelected(value: T): boolean;
51
- startListening(table: Table): void;
52
- stopListening(table: Table): void;
17
+ handleTableUpdate(event: any): void;
18
+ list: SelectValueList<any> | null;
19
+ isValueSelected(value: any): boolean;
20
+ startListening(table: any): void;
21
+ stopListening(table: any): void;
53
22
  resetViewport(): void;
54
23
  updateItemSelection(): void;
55
- updateViewport(top: number, bottom: number, isLoading?: boolean): void;
56
- render(): React.ReactElement;
24
+ updateViewport(top: any, bottom: any, isLoading?: boolean): void;
57
25
  }
58
- export default AdvancedFilterCreatorSelectValueList;
26
+ declare namespace AdvancedFilterCreatorSelectValueList {
27
+ namespace propTypes {
28
+ const table: PropTypes.Requireable<PropTypes.InferProps<{
29
+ addEventListener: PropTypes.Requireable<(...args: any[]) => any>;
30
+ removeEventListener: PropTypes.Requireable<(...args: any[]) => any>;
31
+ applyFilter: PropTypes.Requireable<(...args: any[]) => any>;
32
+ columns: PropTypes.Requireable<(PropTypes.InferProps<{
33
+ name: PropTypes.Requireable<string>;
34
+ type: PropTypes.Requireable<string>;
35
+ }> | null | undefined)[]>;
36
+ setViewport: PropTypes.Requireable<(...args: any[]) => any>;
37
+ size: PropTypes.Requireable<number>;
38
+ }>>;
39
+ const invertSelection: PropTypes.Requireable<boolean>;
40
+ const selectedValues: PropTypes.Requireable<any[]>;
41
+ const onChange: PropTypes.Requireable<(...args: any[]) => any>;
42
+ const filters: PropTypes.Validator<(PropTypes.InferProps<{
43
+ not: PropTypes.Validator<(...args: any[]) => any>;
44
+ and: PropTypes.Validator<(...args: any[]) => any>;
45
+ or: PropTypes.Validator<(...args: any[]) => any>;
46
+ }> | null | undefined)[]>;
47
+ const formatter: PropTypes.Validator<Formatter>;
48
+ }
49
+ namespace defaultProps {
50
+ const table_1: null;
51
+ export { table_1 as table };
52
+ const invertSelection_1: boolean;
53
+ export { invertSelection_1 as invertSelection };
54
+ const selectedValues_1: never[];
55
+ export { selectedValues_1 as selectedValues };
56
+ export function onChange_1(): void;
57
+ export { onChange_1 as onChange };
58
+ }
59
+ }
60
+ import React from "react";
61
+ import { SelectValueList } from "@deephaven/components";
62
+ import PropTypes from "prop-types";
63
+ import { Formatter } from "packages/jsapi-utils/src/Formatter";
59
64
  //# sourceMappingURL=AdvancedFilterCreatorSelectValueList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdvancedFilterCreatorSelectValueList.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreatorSelectValueList.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAW,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAEL,eAAe,EACf,UAAU,EACX,MAAM,uBAAuB,CAAC;AAK/B,UAAU,yCAAyC,CAAC,CAAC;IACnD,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,OAAO,KAAK,IAAI,CAAC;IAClE,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,UAAU,yCAAyC,CAAC,CAAC;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AACD;;;GAGG;AACH,cAAM,oCAAoC,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,aAAa,CAC3E,yCAAyC,CAAC,CAAC,CAAC,EAC5C,yCAAyC,CAAC,CAAC,CAAC,CAC7C;IACC,MAAM,CAAC,YAAY;;;;wBAIH,IAAI;MAClB;IAEF;;;;OAIG;IACH,MAAM,CAAC,OAAO,CACZ,KAAK,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,EAC5B,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,GAC9B,MAAM;gBAkBG,KAAK,EAAE,yCAAyC,CAAC,CAAC,CAAC;IAqB/D,iBAAiB,IAAI,IAAI;IAKzB,kBAAkB,CAChB,SAAS,EAAE,yCAAyC,CAAC,CAAC,CAAC,GACtD,IAAI;IAsBP,oBAAoB,IAAI,IAAI;IAK5B,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAEhC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAiC/C,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIvD,qBAAqB,IAAI,IAAI;IAI7B,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IA6B3C,eAAe,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAalC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIlC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIjC,aAAa,IAAI,IAAI;IAMrB,mBAAmB,IAAI,IAAI;IAc3B,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,IAAI;IAkBpE,MAAM,IAAI,KAAK,CAAC,YAAY;CA6B7B;AAED,eAAe,oCAAoC,CAAC"}
1
+ {"version":3,"file":"AdvancedFilterCreatorSelectValueList.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreatorSelectValueList.jsx"],"names":[],"mappings":";AAWA;;;GAGG;AACH;IACE;;;;OAIG;IACH,kDAgBC;IAED,wBAmBC;IAiCD,+CA+BC;IAED,kDAEC;IAED,8BAEC;IAED,oCA2BC;IAhHC,kCAAgB;IAkHlB,qCAWC;IAED,iCAIC;IAED,gCAIC;IAED,sBAIC;IAED,4BAYC;IAED,iEAgBC;CA+BF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4BW,mCAAQ"}
@@ -1,22 +1,22 @@
1
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
1
  /* eslint react/no-did-update-set-state: "off" */
4
2
  import React, { PureComponent } from 'react';
3
+ import PropTypes from 'prop-types';
5
4
  import { CSSTransition } from 'react-transition-group';
6
- import dh from '@deephaven/jsapi-shim';
5
+ import dh, { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';
6
+ import { Formatter } from '@deephaven/jsapi-utils';
7
7
  import { LoadingSpinner, SelectValueList } from '@deephaven/components';
8
8
  import Log from '@deephaven/log';
9
9
  var log = Log.module('AdvancedFilterCreatorSelectValueList');
10
-
11
10
  /**
12
11
  * Select values from a long scrollable list.
13
12
  * Swaps items in and out for infinite scrolling
14
13
  */
14
+
15
15
  class AdvancedFilterCreatorSelectValueList extends PureComponent {
16
16
  /**
17
17
  * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.
18
- * @param value The value to search for
19
- * @param values The array of values to search within
18
+ * @param {Any} value The value to search for
19
+ * @param {Array} values The array of values to search within
20
20
  */
21
21
  static indexOf(value, values) {
22
22
  for (var i = 0; i < values.length; i += 1) {
@@ -32,9 +32,6 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
32
32
 
33
33
  constructor(props) {
34
34
  super(props);
35
-
36
- _defineProperty(this, "list", void 0);
37
-
38
35
  this.handleSelect = this.handleSelect.bind(this);
39
36
  this.handleViewportChange = this.handleViewportChange.bind(this);
40
37
  this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);
@@ -92,10 +89,7 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
92
89
  }
93
90
 
94
91
  componentWillUnmount() {
95
- var {
96
- table
97
- } = this.props;
98
- this.stopListening(table);
92
+ this.stopListening();
99
93
  }
100
94
 
101
95
  handleSelect(itemIndex, value) {
@@ -105,7 +99,7 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
105
99
  var {
106
100
  selectedValues
107
101
  } = this.state;
108
- selectedValues = [...selectedValues];
102
+ selectedValues = [].concat(selectedValues);
109
103
  var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);
110
104
 
111
105
  if (selectedIndex >= 0) {
@@ -126,7 +120,7 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
126
120
  var {
127
121
  items
128
122
  } = this.state;
129
- items = [...items];
123
+ items = [].concat(items);
130
124
  var visibleItemIndex = itemIndex - offset;
131
125
 
132
126
  if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {
@@ -198,15 +192,19 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
198
192
  }
199
193
 
200
194
  startListening(table) {
201
- table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
195
+ if (table != null) {
196
+ table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
197
+ }
202
198
  }
203
199
 
204
200
  stopListening(table) {
205
- table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
201
+ if (table != null) {
202
+ table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
203
+ }
206
204
  }
207
205
 
208
206
  resetViewport() {
209
- if (this.list && this.list.topRow != null && this.list.bottomRow != null) {
207
+ if (this.list) {
210
208
  this.updateViewport(this.list.topRow, this.list.bottomRow, true);
211
209
  }
212
210
  }
@@ -215,7 +213,7 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
215
213
  var {
216
214
  items
217
215
  } = this.state;
218
- items = [...items];
216
+ items = [].concat(items);
219
217
 
220
218
  for (var i = 0; i < items.length; i += 1) {
221
219
  var item = items[i];
@@ -250,7 +248,7 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
250
248
  var topRow = Math.max(0, top - viewportSize * 3);
251
249
  var bottomRow = Math.max(topRow, bottom + viewportSize * 3);
252
250
  log.debug2('Setting viewport', topRow, ',', bottomRow);
253
- table.setViewport(topRow, bottomRow);
251
+ table.setViewport(topRow, bottomRow, null);
254
252
  }
255
253
 
256
254
  render() {
@@ -286,12 +284,29 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
286
284
 
287
285
  }
288
286
 
289
- _defineProperty(AdvancedFilterCreatorSelectValueList, "defaultProps", {
287
+ AdvancedFilterCreatorSelectValueList.propTypes = {
288
+ table: PropTypes.shape({
289
+ addEventListener: PropTypes.func,
290
+ removeEventListener: PropTypes.func,
291
+ applyFilter: PropTypes.func,
292
+ columns: PropTypes.arrayOf(PropTypes.shape({
293
+ name: PropTypes.string,
294
+ type: PropTypes.string
295
+ })),
296
+ setViewport: PropTypes.func,
297
+ size: PropTypes.number
298
+ }),
299
+ invertSelection: PropTypes.bool,
300
+ selectedValues: PropTypes.arrayOf(PropTypes.any),
301
+ onChange: PropTypes.func,
302
+ filters: PropTypes.arrayOf(APIPropTypes.FilterCondition).isRequired,
303
+ formatter: PropTypes.instanceOf(Formatter).isRequired
304
+ };
305
+ AdvancedFilterCreatorSelectValueList.defaultProps = {
290
306
  table: null,
291
307
  invertSelection: true,
292
308
  selectedValues: [],
293
- onChange: () => undefined
294
- });
295
-
309
+ onChange: () => {}
310
+ };
296
311
  export default AdvancedFilterCreatorSelectValueList;
297
312
  //# sourceMappingURL=AdvancedFilterCreatorSelectValueList.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/AdvancedFilterCreatorSelectValueList.tsx"],"names":["React","PureComponent","CSSTransition","dh","LoadingSpinner","SelectValueList","Log","log","module","AdvancedFilterCreatorSelectValueList","indexOf","value","values","i","length","v","valueOf","constructor","props","handleSelect","bind","handleViewportChange","handleSelectionUpdate","handleTableUpdate","list","selectedValues","state","itemCount","items","offset","isLoading","componentDidMount","table","startListening","componentDidUpdate","prevProps","filters","invertSelection","stopListening","resetViewport","setState","applyFilter","componentWillUnmount","itemIndex","selectedIndex","splice","push","isSelected","visibleItemIndex","onChange","top","bottom","updateViewport","updateItemSelection","event","data","detail","formatter","column","columns","r","rows","row","get","displayValue","getFormattedString","type","name","isValueSelected","debug2","size","addEventListener","Table","EVENT_UPDATED","removeEventListener","topRow","bottomRow","item","viewportSize","Math","max","setViewport","render","undefined"],"mappings":"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","sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport dh, { FilterCondition, Table } from '@deephaven/jsapi-shim';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport {\n LoadingSpinner,\n SelectValueList,\n SelectItem,\n} from '@deephaven/components';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('AdvancedFilterCreatorSelectValueList');\n\ninterface AdvancedFilterCreatorSelectValueListProps<T> {\n selectedValues: T[];\n table: Table;\n filters: FilterCondition[];\n invertSelection: boolean;\n onChange: (selectedValues: T[], invertSelection: boolean) => void;\n formatter: Formatter;\n}\n\ninterface AdvancedFilterCreatorSelectValueListState<T> {\n itemCount: number;\n items: SelectItem<T>[];\n offset: number;\n selectedValues: T[];\n isLoading: boolean;\n}\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList<T = unknown> extends PureComponent<\n AdvancedFilterCreatorSelectValueListProps<T>,\n AdvancedFilterCreatorSelectValueListState<T>\n> {\n static defaultProps = {\n table: null,\n invertSelection: true,\n selectedValues: [],\n onChange: (): void => undefined,\n };\n\n /**\n * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.\n * @param value The value to search for\n * @param values The array of values to search within\n */\n static indexOf(\n value: { valueof?: unknown },\n values: { valueof?: unknown }[]\n ): number {\n for (let i = 0; i < values.length; i += 1) {\n const v = values[i];\n if (\n v === value ||\n (v != null &&\n v.valueOf &&\n value != null &&\n value.valueOf &&\n v.valueOf() === value.valueOf())\n ) {\n return i;\n }\n }\n\n return -1;\n }\n\n constructor(props: AdvancedFilterCreatorSelectValueListProps<T>) {\n super(props);\n\n this.handleSelect = this.handleSelect.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n\n this.list = null;\n\n const { selectedValues } = this.props;\n\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true,\n };\n }\n\n componentDidMount(): void {\n const { table } = this.props;\n this.startListening(table);\n }\n\n componentDidUpdate(\n prevProps: AdvancedFilterCreatorSelectValueListProps<T>\n ): void {\n const { filters, invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n this.stopListening(prevProps.table);\n this.startListening(table);\n this.resetViewport();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ selectedValues: [] }, this.handleSelectionUpdate);\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues }, this.handleSelectionUpdate);\n }\n\n if (prevProps.filters !== filters) {\n table.applyFilter(filters);\n this.resetViewport();\n }\n }\n\n componentWillUnmount(): void {\n const { table } = this.props;\n this.stopListening(table);\n }\n\n list: SelectValueList<T> | null;\n\n handleSelect(itemIndex: number, value: T): void {\n const { invertSelection } = this.props;\n let { selectedValues } = this.state;\n selectedValues = [...selectedValues];\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n\n let isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n\n const { offset } = this.state;\n let { items } = this.state;\n items = [...items];\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n\n this.setState({ items, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleViewportChange(top: number, bottom: number): void {\n this.updateViewport(top, bottom);\n }\n\n handleSelectionUpdate(): void {\n this.updateItemSelection();\n }\n\n handleTableUpdate(event: CustomEvent): void {\n const data = event.detail;\n const { offset } = data;\n\n const items = [];\n const { table, formatter } = this.props;\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n const displayValue = formatter.getFormattedString(\n value,\n column.type,\n column.name\n );\n const isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected,\n });\n }\n\n log.debug2('Received table update:', offset, items.length);\n\n const itemCount = table.size;\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n isValueSelected(value: T): boolean {\n const { invertSelection } = this.props;\n const { selectedValues } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n\n startListening(table: Table): void {\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n\n stopListening(table: Table): void {\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n\n resetViewport(): void {\n if (this.list && this.list.topRow != null && this.list.bottomRow != null) {\n this.updateViewport(this.list.topRow, this.list.bottomRow, true);\n }\n }\n\n updateItemSelection(): void {\n let { items } = this.state;\n\n items = [...items];\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value } = item;\n item.isSelected = this.isValueSelected(value);\n }\n\n this.setState({ items });\n }\n\n updateViewport(top: number, bottom: number, isLoading = false): void {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n if (isLoading) {\n this.setState({ isLoading: true });\n }\n\n const viewportSize = bottom - top + 1;\n const topRow = Math.max(0, top - viewportSize * 3);\n const bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow);\n }\n\n render(): React.ReactElement {\n const { offset, isLoading, items, itemCount } = this.state;\n\n return (\n <div className=\"select-value-list-wrapper\">\n <SelectValueList\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n ref={list => {\n this.list = list;\n }}\n />\n <CSSTransition\n in={isLoading}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"loading-list\">\n <LoadingSpinner className=\"loading-spinner-large\" />\n </div>\n </CSSTransition>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValueList;\n"],"file":"AdvancedFilterCreatorSelectValueList.js"}
1
+ {"version":3,"sources":["../src/AdvancedFilterCreatorSelectValueList.jsx"],"names":["React","PureComponent","PropTypes","CSSTransition","dh","APIPropTypes","Formatter","LoadingSpinner","SelectValueList","Log","log","module","AdvancedFilterCreatorSelectValueList","indexOf","value","values","i","length","v","valueOf","constructor","props","handleSelect","bind","handleViewportChange","handleSelectionUpdate","handleTableUpdate","list","selectedValues","state","itemCount","items","offset","isLoading","componentDidMount","table","startListening","componentDidUpdate","prevProps","filters","invertSelection","stopListening","resetViewport","setState","applyFilter","componentWillUnmount","itemIndex","concat","selectedIndex","splice","push","isSelected","visibleItemIndex","onChange","top","bottom","updateViewport","updateItemSelection","event","data","detail","formatter","column","columns","r","rows","row","get","displayValue","getFormattedString","type","name","isValueSelected","debug2","size","addEventListener","Table","EVENT_UPDATED","removeEventListener","topRow","bottomRow","item","viewportSize","Math","max","setViewport","render","propTypes","shape","func","arrayOf","string","number","bool","any","FilterCondition","isRequired","instanceOf","defaultProps"],"mappings":"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","sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { CSSTransition } from 'react-transition-group';\nimport dh, { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport { LoadingSpinner, SelectValueList } from '@deephaven/components';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('AdvancedFilterCreatorSelectValueList');\n\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList extends PureComponent {\n /**\n * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.\n * @param {Any} value The value to search for\n * @param {Array} values The array of values to search within\n */\n static indexOf(value, values) {\n for (let i = 0; i < values.length; i += 1) {\n const v = values[i];\n if (\n v === value ||\n (v != null &&\n v.valueOf &&\n value != null &&\n value.valueOf &&\n v.valueOf() === value.valueOf())\n ) {\n return i;\n }\n }\n\n return -1;\n }\n\n constructor(props) {\n super(props);\n\n this.handleSelect = this.handleSelect.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n\n this.list = null;\n\n const { selectedValues } = this.props;\n\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true,\n };\n }\n\n componentDidMount() {\n const { table } = this.props;\n this.startListening(table);\n }\n\n componentDidUpdate(prevProps) {\n const { filters, invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n this.stopListening(prevProps.table);\n this.startListening(table);\n this.resetViewport();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ selectedValues: [] }, this.handleSelectionUpdate);\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues }, this.handleSelectionUpdate);\n }\n\n if (prevProps.filters !== filters) {\n table.applyFilter(filters);\n this.resetViewport();\n }\n }\n\n componentWillUnmount() {\n this.stopListening();\n }\n\n handleSelect(itemIndex, value) {\n const { invertSelection } = this.props;\n let { selectedValues } = this.state;\n selectedValues = [].concat(selectedValues);\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n\n let isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n\n const { offset } = this.state;\n let { items } = this.state;\n items = [].concat(items);\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n\n this.setState({ items, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleViewportChange(top, bottom) {\n this.updateViewport(top, bottom);\n }\n\n handleSelectionUpdate() {\n this.updateItemSelection();\n }\n\n handleTableUpdate(event) {\n const data = event.detail;\n const { offset } = data;\n\n const items = [];\n const { table, formatter } = this.props;\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n const displayValue = formatter.getFormattedString(\n value,\n column.type,\n column.name\n );\n const isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected,\n });\n }\n\n log.debug2('Received table update:', offset, items.length);\n\n const itemCount = table.size;\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n isValueSelected(value) {\n const { invertSelection } = this.props;\n const { selectedValues } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n\n startListening(table) {\n if (table != null) {\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n }\n\n stopListening(table) {\n if (table != null) {\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n }\n\n resetViewport() {\n if (this.list) {\n this.updateViewport(this.list.topRow, this.list.bottomRow, true);\n }\n }\n\n updateItemSelection() {\n let { items } = this.state;\n\n items = [].concat(items);\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value } = item;\n item.isSelected = this.isValueSelected(value);\n }\n\n this.setState({ items });\n }\n\n updateViewport(top, bottom, isLoading = false) {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n if (isLoading) {\n this.setState({ isLoading: true });\n }\n\n const viewportSize = bottom - top + 1;\n const topRow = Math.max(0, top - viewportSize * 3);\n const bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow, null);\n }\n\n render() {\n const { offset, isLoading, items, itemCount } = this.state;\n\n return (\n <div className=\"select-value-list-wrapper\">\n <SelectValueList\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n ref={list => {\n this.list = list;\n }}\n />\n <CSSTransition\n in={isLoading}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"loading-list\">\n <LoadingSpinner className=\"loading-spinner-large\" />\n </div>\n </CSSTransition>\n </div>\n );\n }\n}\n\nAdvancedFilterCreatorSelectValueList.propTypes = {\n table: PropTypes.shape({\n addEventListener: PropTypes.func,\n removeEventListener: PropTypes.func,\n\n applyFilter: PropTypes.func,\n columns: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n type: PropTypes.string,\n })\n ),\n setViewport: PropTypes.func,\n size: PropTypes.number,\n }),\n invertSelection: PropTypes.bool,\n selectedValues: PropTypes.arrayOf(PropTypes.any),\n onChange: PropTypes.func,\n filters: PropTypes.arrayOf(APIPropTypes.FilterCondition).isRequired,\n formatter: PropTypes.instanceOf(Formatter).isRequired,\n};\n\nAdvancedFilterCreatorSelectValueList.defaultProps = {\n table: null,\n invertSelection: true,\n selectedValues: [],\n onChange: () => {},\n};\n\nexport default AdvancedFilterCreatorSelectValueList;\n"],"file":"AdvancedFilterCreatorSelectValueList.js"}
@@ -1,40 +1,28 @@
1
- import React, { Component, Key } from 'react';
2
- import { Column, ColumnStatistics as APIColumnStatistics } from '@deephaven/jsapi-shim';
3
- import { CancelablePromise } from '@deephaven/utils';
4
- import './ColumnStatistics.scss';
5
- import IrisGridModel from './IrisGridModel';
6
- interface Statistic {
7
- operation: Key;
8
- className?: string;
9
- value: unknown;
10
- type: string;
11
- }
12
- interface ColumnStatisticsProps {
13
- column: Column;
14
- model: IrisGridModel;
15
- onStatistics: () => void;
16
- }
17
- interface ColumnStatisticsState {
18
- error: unknown;
19
- loading: boolean;
20
- statistics: Statistic[] | null;
21
- numRows: number;
22
- copied: boolean;
23
- }
24
- declare class ColumnStatistics extends Component<ColumnStatisticsProps, ColumnStatisticsState> {
1
+ export default ColumnStatistics;
2
+ declare class ColumnStatistics extends React.Component<any, any, any> {
25
3
  /** Automatically generate the statistics when the row count is below this threshold */
26
4
  static AUTO_GENERATE_LIMIT: number;
27
- static getStatsLabel(operation: string): string;
28
- constructor(props: ColumnStatisticsProps);
29
- componentDidMount(): void;
30
- componentWillUnmount(): void;
31
- cancelablePromise: CancelablePromise<APIColumnStatistics> | null;
5
+ static getStatsLabel(operation: any): any;
6
+ constructor(props: any);
7
+ handleError(error: any): void;
8
+ handleGenerateStatistics(): void;
9
+ handleStatistics(stats: any): void;
32
10
  handleCopyHeader(): void;
11
+ cancelablePromise: import("@deephaven/utils").CancelablePromise<any> | null;
33
12
  maybeGenerateStatistics(): void;
34
- handleGenerateStatistics(): void;
35
- handleStatistics(stats: APIColumnStatistics): void;
36
- handleError(error: Error): void;
37
- render(): React.ReactElement;
38
13
  }
39
- export default ColumnStatistics;
14
+ declare namespace ColumnStatistics {
15
+ namespace propTypes {
16
+ const model: PropTypes.Validator<any>;
17
+ const column: PropTypes.Validator<PropTypes.InferProps<{
18
+ name: PropTypes.Validator<string>;
19
+ type: PropTypes.Validator<string>;
20
+ description: PropTypes.Requireable<string>;
21
+ constituentType: PropTypes.Requireable<string>;
22
+ }>>;
23
+ const onStatistics: PropTypes.Validator<(...args: any[]) => any>;
24
+ }
25
+ }
26
+ import React from "react";
27
+ import PropTypes from "prop-types";
40
28
  //# sourceMappingURL=ColumnStatistics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnStatistics.d.ts","sourceRoot":"","sources":["../src/ColumnStatistics.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAe9C,OAAO,EACL,MAAM,EACN,gBAAgB,IAAI,mBAAmB,EACxC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAgB,MAAM,kBAAkB,CAAC;AAEnE,OAAO,yBAAyB,CAAC;AACjC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAO5C,UAAU,SAAS;IACjB,SAAS,EAAE,GAAG,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,qBAAqB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AACD,UAAU,qBAAqB;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,cAAM,gBAAiB,SAAQ,SAAS,CACtC,qBAAqB,EACrB,qBAAqB,CACtB;IACC,uFAAuF;IACvF,MAAM,CAAC,mBAAmB,SAAU;IAEpC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;gBAUnC,KAAK,EAAE,qBAAqB;IAmBxC,iBAAiB,IAAI,IAAI;IAIzB,oBAAoB,IAAI,IAAI;IAM5B,iBAAiB,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC;IAEjE,gBAAgB,IAAI,IAAI;IAIxB,uBAAuB,IAAI,IAAI;IAY/B,wBAAwB,IAAI,IAAI;IAYhC,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAgClD,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAc/B,MAAM,IAAI,KAAK,CAAC,YAAY;CAwG7B;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"ColumnStatistics.d.ts","sourceRoot":"","sources":["../src/ColumnStatistics.jsx"],"names":[],"mappings":";AA2BA;IACE,uFAAuF;IACvF,mCAAoC;IAEpC,0CAQC;IAED,wBAiBC;IAwED,8BAYC;IAxDD,iCAUC;IAED,mCA8BC;IA1DD,yBAEC;IAvBC,4EAA6B;IAyB/B,gCAUC;CAmKF"}
@@ -1,13 +1,15 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
2
 
3
3
  import React, { Component } from 'react';
4
+ import PropTypes from 'prop-types';
4
5
  import classNames from 'classnames';
5
6
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
6
7
  import { Button, ContextActionUtils, LoadingSpinner } from '@deephaven/components';
7
8
  import { dhFreeze, dhRefresh, vsCopy, vsLock, vsPassFilled } from '@deephaven/icons';
9
+ import { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';
8
10
  import Log from '@deephaven/log';
9
11
  import { PromiseUtils } from '@deephaven/utils';
10
- import { isExpandableGridModel } from '@deephaven/grid';
12
+ import IrisGridModel from "./IrisGridModel.js";
11
13
  import "./ColumnStatistics.css";
12
14
  var log = Log.module('ColumnStatistics');
13
15
  var STATS_LABEL_OVERRIDES = {
@@ -24,9 +26,6 @@ class ColumnStatistics extends Component {
24
26
 
25
27
  constructor(props) {
26
28
  super(props);
27
-
28
- _defineProperty(this, "cancelablePromise", void 0);
29
-
30
29
  this.handleError = this.handleError.bind(this);
31
30
  this.handleGenerateStatistics = this.handleGenerateStatistics.bind(this);
32
31
  this.handleStatistics = this.handleStatistics.bind(this);
@@ -118,7 +117,7 @@ class ColumnStatistics extends Component {
118
117
  }
119
118
 
120
119
  handleError(error) {
121
- if (error && PromiseUtils.isCanceled(error)) {
120
+ if (error && error.isCanceled) {
122
121
  log.debug('Called handleError on a cancelled promise result');
123
122
  return;
124
123
  }
@@ -168,7 +167,7 @@ class ColumnStatistics extends Component {
168
167
  }
169
168
  }
170
169
 
171
- var rowCountLabel = isExpandableGridModel(model) && model.hasExpandableRows ? 'Expanded Rows' : 'Number of Rows';
170
+ var rowCountLabel = model.hasExpandableRows ? 'Expanded Rows' : 'Number of Rows';
172
171
  var formattedRowCount = model.displayString(numRows, 'long');
173
172
  var columnIndex = model.getColumnIndexByName(column.name);
174
173
  return /*#__PURE__*/React.createElement("div", {
@@ -185,9 +184,9 @@ class ColumnStatistics extends Component {
185
184
  ContextActionUtils.copyToClipboard(column.name).then(this.handleCopyHeader).catch(e => log.error('Unable to column name', e));
186
185
  },
187
186
  tooltip: copied ? 'Copied text' : 'Copy column name'
188
- })), description != null && /*#__PURE__*/React.createElement("div", {
187
+ })), description && /*#__PURE__*/React.createElement("div", {
189
188
  className: "column-statistics-description"
190
- }, description), columnIndex != null && !model.isColumnMovable(columnIndex) && /*#__PURE__*/React.createElement("div", {
189
+ }, description), !model.isColumnMovable(columnIndex) && /*#__PURE__*/React.createElement("div", {
191
190
  className: "column-statistics-status"
192
191
  }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
193
192
  icon: model.isColumnFrozen(columnIndex) ? dhFreeze : vsLock,
@@ -222,5 +221,10 @@ class ColumnStatistics extends Component {
222
221
 
223
222
  _defineProperty(ColumnStatistics, "AUTO_GENERATE_LIMIT", 100000);
224
223
 
224
+ ColumnStatistics.propTypes = {
225
+ model: PropTypes.instanceOf(IrisGridModel).isRequired,
226
+ column: APIPropTypes.Column.isRequired,
227
+ onStatistics: PropTypes.func.isRequired
228
+ };
225
229
  export default ColumnStatistics;
226
230
  //# sourceMappingURL=ColumnStatistics.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ColumnStatistics.tsx"],"names":["React","Component","classNames","FontAwesomeIcon","Button","ContextActionUtils","LoadingSpinner","dhFreeze","dhRefresh","vsCopy","vsLock","vsPassFilled","Log","PromiseUtils","isExpandableGridModel","log","module","STATS_LABEL_OVERRIDES","SIZE","ColumnStatistics","getStatsLabel","operation","split","map","w","toUpperCase","substr","toLowerCase","join","constructor","props","handleError","bind","handleGenerateStatistics","handleStatistics","handleCopyHeader","cancelablePromise","state","error","loading","statistics","numRows","copied","componentDidMount","maybeGenerateStatistics","componentWillUnmount","cancel","setState","model","rowCount","isColumnStatisticsAvailable","AUTO_GENERATE_LIMIT","column","makeCancelable","columnStatistics","then","catch","stats","debug","onStatistics","statisticsMap","forEach","value","push","type","getType","uniqueValues","className","isCanceled","render","showGenerateStatistics","statisticElements","columnType","substring","lastIndexOf","description","i","length","formattedValue","displayString","name","statisticElement","rowCountLabel","hasExpandableRows","formattedRowCount","columnIndex","getColumnIndexByName","copyToClipboard","e","isColumnMovable","isColumnFrozen"],"mappings":"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","sourcesContent":["import React, { Component, Key } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n ContextActionUtils,\n LoadingSpinner,\n} from '@deephaven/components';\nimport {\n dhFreeze,\n dhRefresh,\n vsCopy,\n vsLock,\n vsPassFilled,\n} from '@deephaven/icons';\nimport {\n Column,\n ColumnStatistics as APIColumnStatistics,\n} from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { CancelablePromise, PromiseUtils } from '@deephaven/utils';\nimport { isExpandableGridModel } from '@deephaven/grid';\nimport './ColumnStatistics.scss';\nimport IrisGridModel from './IrisGridModel';\n\nconst log = Log.module('ColumnStatistics');\nconst STATS_LABEL_OVERRIDES: Record<string, string> = {\n SIZE: 'Number of Rows',\n};\n\ninterface Statistic {\n operation: Key;\n className?: string;\n value: unknown;\n type: string;\n}\n\ninterface ColumnStatisticsProps {\n column: Column;\n model: IrisGridModel;\n onStatistics: () => void;\n}\ninterface ColumnStatisticsState {\n error: unknown;\n loading: boolean;\n statistics: Statistic[] | null;\n numRows: number;\n copied: boolean;\n}\n\nclass ColumnStatistics extends Component<\n ColumnStatisticsProps,\n ColumnStatisticsState\n> {\n /** Automatically generate the statistics when the row count is below this threshold */\n static AUTO_GENERATE_LIMIT = 100000;\n\n static getStatsLabel(operation: string): string {\n return (\n STATS_LABEL_OVERRIDES[operation] ??\n operation\n .split(' ')\n .map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())\n .join(' ')\n );\n }\n\n constructor(props: ColumnStatisticsProps) {\n super(props);\n\n this.handleError = this.handleError.bind(this);\n this.handleGenerateStatistics = this.handleGenerateStatistics.bind(this);\n this.handleStatistics = this.handleStatistics.bind(this);\n this.handleCopyHeader = this.handleCopyHeader.bind(this);\n\n this.cancelablePromise = null;\n\n this.state = {\n error: null,\n loading: false,\n statistics: null,\n numRows: 0,\n copied: false,\n };\n }\n\n componentDidMount(): void {\n this.maybeGenerateStatistics();\n }\n\n componentWillUnmount(): void {\n if (this.cancelablePromise) {\n this.cancelablePromise.cancel();\n }\n }\n\n cancelablePromise: CancelablePromise<APIColumnStatistics> | null;\n\n handleCopyHeader(): void {\n this.setState({ copied: true });\n }\n\n maybeGenerateStatistics(): void {\n const { model } = this.props;\n\n const numRows = model.rowCount;\n this.setState({ numRows });\n if (!model.isColumnStatisticsAvailable) {\n this.setState({ loading: false });\n } else if (numRows < ColumnStatistics.AUTO_GENERATE_LIMIT) {\n this.handleGenerateStatistics();\n }\n }\n\n handleGenerateStatistics(): void {\n this.setState({ loading: true });\n\n const { column, model } = this.props;\n\n this.cancelablePromise = PromiseUtils.makeCancelable(\n model.columnStatistics(column)\n );\n\n this.cancelablePromise.then(this.handleStatistics).catch(this.handleError);\n }\n\n handleStatistics(stats: APIColumnStatistics): void {\n log.debug('Received statistics', stats);\n\n const { model, onStatistics } = this.props;\n const statistics: Statistic[] = [];\n\n stats.statisticsMap.forEach((value, operation) => {\n statistics.push({\n operation: ColumnStatistics.getStatsLabel(operation),\n value,\n type: stats.getType(operation),\n });\n });\n\n stats.uniqueValues.forEach((value, operation) => {\n statistics.push({\n operation,\n className: 'column-statistics-unique-value',\n value,\n type: 'long',\n });\n });\n\n this.setState({\n loading: false,\n statistics,\n numRows: model.rowCount,\n });\n\n onStatistics();\n }\n\n handleError(error: Error): void {\n if (error && PromiseUtils.isCanceled(error)) {\n log.debug('Called handleError on a cancelled promise result');\n return;\n }\n\n log.error('Error generating statistics', error);\n this.setState({\n error,\n loading: false,\n statistics: null,\n });\n }\n\n render(): React.ReactElement {\n const { column, model } = this.props;\n const { error, loading, statistics, numRows, copied } = this.state;\n const showGenerateStatistics =\n !loading &&\n error == null &&\n statistics == null &&\n model.isColumnStatisticsAvailable;\n const statisticElements = [];\n const columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n const description = column.description === null ? null : column.description;\n if (statistics != null) {\n for (let i = 0; i < statistics.length; i += 1) {\n const { operation, className, value, type } = statistics[i];\n const formattedValue = !type\n ? model.displayString(value, column.type, column.name)\n : model.displayString(value, type);\n const statisticElement = (\n <React.Fragment key={operation}>\n <div\n className={classNames('column-statistic-operation', className)}\n >\n {operation}\n </div>\n <div className=\"column-statistic-value\">{formattedValue}</div>\n </React.Fragment>\n );\n statisticElements.push(statisticElement);\n }\n }\n const rowCountLabel =\n isExpandableGridModel(model) && model.hasExpandableRows\n ? 'Expanded Rows'\n : 'Number of Rows';\n const formattedRowCount = model.displayString(numRows, 'long');\n const columnIndex = model.getColumnIndexByName(column.name);\n return (\n <div className=\"column-statistics\">\n <div className=\"column-statistics-title\">\n {column.name}\n <span className=\"column-statistics-type\">&nbsp;({columnType})</span>\n <Button\n kind=\"ghost\"\n className=\"column-statistics-copy\"\n icon={copied ? vsPassFilled : vsCopy}\n onClick={() => {\n ContextActionUtils.copyToClipboard(column.name)\n .then(this.handleCopyHeader)\n .catch(e => log.error('Unable to column name', e));\n }}\n tooltip={copied ? 'Copied text' : 'Copy column name'}\n />\n </div>\n {description != null && (\n <div className=\"column-statistics-description\">{description}</div>\n )}\n {columnIndex != null && !model.isColumnMovable(columnIndex) && (\n <div className=\"column-statistics-status\">\n <FontAwesomeIcon\n icon={model.isColumnFrozen(columnIndex) ? dhFreeze : vsLock}\n className=\"mr-1\"\n />\n {model.isColumnFrozen(columnIndex) ? 'Frozen' : 'Not movable'}\n </div>\n )}\n <div className=\"column-statistics-grid\">\n {statistics == null && (\n <>\n <div className=\"column-statistic-operation\">{rowCountLabel}</div>\n <div className=\"column-statistic-value\">{formattedRowCount}</div>\n </>\n )}\n\n {statisticElements}\n </div>\n {showGenerateStatistics && (\n <button\n type=\"button\"\n className=\"btn btn-link px-0\"\n onClick={this.handleGenerateStatistics}\n >\n Generate Stats\n </button>\n )}\n {error && <div className=\"error-message\">{`${error}`}</div>}\n {statistics && !loading && (\n <button\n type=\"button\"\n className=\"btn btn-link px-0\"\n onClick={this.handleGenerateStatistics}\n >\n <FontAwesomeIcon icon={dhRefresh} className=\"mr-1\" />\n Refresh\n </button>\n )}\n {loading && (\n <div className=\"column-statistics-loading\">\n <LoadingSpinner className=\"mr-2\" />\n Calculating Stats...\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default ColumnStatistics;\n"],"file":"ColumnStatistics.js"}
1
+ {"version":3,"sources":["../src/ColumnStatistics.jsx"],"names":["React","Component","PropTypes","classNames","FontAwesomeIcon","Button","ContextActionUtils","LoadingSpinner","dhFreeze","dhRefresh","vsCopy","vsLock","vsPassFilled","APIPropTypes","Log","PromiseUtils","IrisGridModel","log","module","STATS_LABEL_OVERRIDES","SIZE","ColumnStatistics","getStatsLabel","operation","split","map","w","toUpperCase","substr","toLowerCase","join","constructor","props","handleError","bind","handleGenerateStatistics","handleStatistics","handleCopyHeader","cancelablePromise","state","error","loading","statistics","numRows","copied","componentDidMount","maybeGenerateStatistics","componentWillUnmount","cancel","setState","model","rowCount","isColumnStatisticsAvailable","AUTO_GENERATE_LIMIT","column","makeCancelable","columnStatistics","then","catch","stats","debug","onStatistics","statisticsMap","forEach","value","push","type","getType","uniqueValues","className","isCanceled","render","showGenerateStatistics","statisticElements","columnType","substring","lastIndexOf","description","i","length","formattedValue","displayString","name","statisticElement","rowCountLabel","hasExpandableRows","formattedRowCount","columnIndex","getColumnIndexByName","copyToClipboard","e","isColumnMovable","isColumnFrozen","propTypes","instanceOf","isRequired","Column","func"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n ContextActionUtils,\n LoadingSpinner,\n} from '@deephaven/components';\nimport {\n dhFreeze,\n dhRefresh,\n vsCopy,\n vsLock,\n vsPassFilled,\n} from '@deephaven/icons';\nimport { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport IrisGridModel from './IrisGridModel';\nimport './ColumnStatistics.scss';\n\nconst log = Log.module('ColumnStatistics');\nconst STATS_LABEL_OVERRIDES = {\n SIZE: 'Number of Rows',\n};\n\nclass ColumnStatistics extends Component {\n /** Automatically generate the statistics when the row count is below this threshold */\n static AUTO_GENERATE_LIMIT = 100000;\n\n static getStatsLabel(operation) {\n return (\n STATS_LABEL_OVERRIDES[operation] ??\n operation\n .split(' ')\n .map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())\n .join(' ')\n );\n }\n\n constructor(props) {\n super(props);\n\n this.handleError = this.handleError.bind(this);\n this.handleGenerateStatistics = this.handleGenerateStatistics.bind(this);\n this.handleStatistics = this.handleStatistics.bind(this);\n this.handleCopyHeader = this.handleCopyHeader.bind(this);\n\n this.cancelablePromise = null;\n\n this.state = {\n error: null,\n loading: false,\n statistics: null,\n numRows: 0,\n copied: false,\n };\n }\n\n componentDidMount() {\n this.maybeGenerateStatistics();\n }\n\n componentWillUnmount() {\n if (this.cancelablePromise) {\n this.cancelablePromise.cancel();\n }\n }\n\n handleCopyHeader() {\n this.setState({ copied: true });\n }\n\n maybeGenerateStatistics() {\n const { model } = this.props;\n\n const numRows = model.rowCount;\n this.setState({ numRows });\n if (!model.isColumnStatisticsAvailable) {\n this.setState({ loading: false });\n } else if (numRows < ColumnStatistics.AUTO_GENERATE_LIMIT) {\n this.handleGenerateStatistics();\n }\n }\n\n handleGenerateStatistics() {\n this.setState({ loading: true });\n\n const { column, model } = this.props;\n\n this.cancelablePromise = PromiseUtils.makeCancelable(\n model.columnStatistics(column)\n );\n\n this.cancelablePromise.then(this.handleStatistics).catch(this.handleError);\n }\n\n handleStatistics(stats) {\n log.debug('Received statistics', stats);\n\n const { model, onStatistics } = this.props;\n const statistics = [];\n\n stats.statisticsMap.forEach((value, operation) => {\n statistics.push({\n operation: ColumnStatistics.getStatsLabel(operation),\n value,\n type: stats.getType(operation),\n });\n });\n\n stats.uniqueValues.forEach((value, operation) => {\n statistics.push({\n operation,\n className: 'column-statistics-unique-value',\n value,\n type: 'long',\n });\n });\n\n this.setState({\n loading: false,\n statistics,\n numRows: model.rowCount,\n });\n\n onStatistics();\n }\n\n handleError(error) {\n if (error && error.isCanceled) {\n log.debug('Called handleError on a cancelled promise result');\n return;\n }\n\n log.error('Error generating statistics', error);\n this.setState({\n error,\n loading: false,\n statistics: null,\n });\n }\n\n render() {\n const { column, model } = this.props;\n const { error, loading, statistics, numRows, copied } = this.state;\n const showGenerateStatistics =\n !loading &&\n error == null &&\n statistics == null &&\n model.isColumnStatisticsAvailable;\n const statisticElements = [];\n const columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n const description = column.description === null ? null : column.description;\n if (statistics != null) {\n for (let i = 0; i < statistics.length; i += 1) {\n const { operation, className, value, type } = statistics[i];\n const formattedValue = !type\n ? model.displayString(value, column.type, column.name)\n : model.displayString(value, type);\n const statisticElement = (\n <React.Fragment key={operation}>\n <div\n className={classNames('column-statistic-operation', className)}\n >\n {operation}\n </div>\n <div className=\"column-statistic-value\">{formattedValue}</div>\n </React.Fragment>\n );\n statisticElements.push(statisticElement);\n }\n }\n const rowCountLabel = model.hasExpandableRows\n ? 'Expanded Rows'\n : 'Number of Rows';\n const formattedRowCount = model.displayString(numRows, 'long');\n const columnIndex = model.getColumnIndexByName(column.name);\n return (\n <div className=\"column-statistics\">\n <div className=\"column-statistics-title\">\n {column.name}\n <span className=\"column-statistics-type\">&nbsp;({columnType})</span>\n <Button\n kind=\"ghost\"\n className=\"column-statistics-copy\"\n icon={copied ? vsPassFilled : vsCopy}\n onClick={() => {\n ContextActionUtils.copyToClipboard(column.name)\n .then(this.handleCopyHeader)\n .catch(e => log.error('Unable to column name', e));\n }}\n tooltip={copied ? 'Copied text' : 'Copy column name'}\n />\n </div>\n {description && (\n <div className=\"column-statistics-description\">{description}</div>\n )}\n {!model.isColumnMovable(columnIndex) && (\n <div className=\"column-statistics-status\">\n <FontAwesomeIcon\n icon={model.isColumnFrozen(columnIndex) ? dhFreeze : vsLock}\n className=\"mr-1\"\n />\n {model.isColumnFrozen(columnIndex) ? 'Frozen' : 'Not movable'}\n </div>\n )}\n <div className=\"column-statistics-grid\">\n {statistics == null && (\n <>\n <div className=\"column-statistic-operation\">{rowCountLabel}</div>\n <div className=\"column-statistic-value\">{formattedRowCount}</div>\n </>\n )}\n\n {statisticElements}\n </div>\n {showGenerateStatistics && (\n <button\n type=\"button\"\n className=\"btn btn-link px-0\"\n onClick={this.handleGenerateStatistics}\n >\n Generate Stats\n </button>\n )}\n {error && <div className=\"error-message\">{`${error}`}</div>}\n {statistics && !loading && (\n <button\n type=\"button\"\n className=\"btn btn-link px-0\"\n onClick={this.handleGenerateStatistics}\n >\n <FontAwesomeIcon icon={dhRefresh} className=\"mr-1\" />\n Refresh\n </button>\n )}\n {loading && (\n <div className=\"column-statistics-loading\">\n <LoadingSpinner className=\"mr-2\" />\n Calculating Stats...\n </div>\n )}\n </div>\n );\n }\n}\n\nColumnStatistics.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n column: APIPropTypes.Column.isRequired,\n onStatistics: PropTypes.func.isRequired,\n};\n\nexport default ColumnStatistics;\n"],"file":"ColumnStatistics.js"}
@@ -1,31 +1,29 @@
1
- import React, { PureComponent } from 'react';
2
- import { SearchInput } from '@deephaven/components';
3
- import { Column, FilterCondition } from '@deephaven/jsapi-shim';
4
- import './CrossColumnSearch.scss';
5
- import { ColumnName } from './CommonTypes';
6
- interface CrossColumnSearchProps {
7
- value: string;
8
- selectedColumns: ColumnName[];
9
- invertSelection: boolean;
10
- onChange: (value: string, selectedColumns: ColumnName[], invertSelection: boolean) => void;
11
- columns: Column[];
12
- }
13
- interface CrossColumnSearchState {
14
- isConfigureColumnsShown: boolean;
15
- }
16
- declare class CrossColumnSearch extends PureComponent<CrossColumnSearchProps, CrossColumnSearchState> {
17
- static createSearchFilter(searchValue: string, selectedColumns: ColumnName[], columns: Column[], invertSelection: boolean): FilterCondition | undefined;
18
- constructor(props: CrossColumnSearchProps);
19
- searchField: React.RefObject<SearchInput>;
20
- focus(): void;
21
- handleSearchValueChange(event: React.ChangeEvent<HTMLInputElement>): void;
22
- sendColumnChange(selectedColumns: ColumnName[], invertSelection: boolean): void;
23
- setInvertSelection(invertSelection: boolean): void;
24
- toggleColumn(name: string): void;
1
+ export default CrossColumnSearch;
2
+ declare class CrossColumnSearch extends React.PureComponent<any, any, any> {
3
+ static createSearchFilter(searchValue: any, selectedColumns: any, columns: any, invertSelection: any): import("@deephaven/jsapi-shim").FilterCondition | null;
4
+ constructor(props: any);
5
+ handleSearchValueChange(event: any): void;
6
+ toggleColumn(name: any): void;
25
7
  selectAll(): void;
26
8
  clear(): void;
27
9
  selectNumbers(): void;
28
- render(): React.ReactElement;
10
+ searchField: React.RefObject<any>;
11
+ focus(): void;
12
+ sendColumnChange(selectedColumns: any, invertSelection: any): void;
13
+ setInvertSelection(invertSelection: any): void;
29
14
  }
30
- export default CrossColumnSearch;
15
+ declare namespace CrossColumnSearch {
16
+ namespace propTypes {
17
+ const value: PropTypes.Validator<string>;
18
+ const selectedColumns: PropTypes.Validator<(string | null | undefined)[]>;
19
+ const invertSelection: PropTypes.Validator<boolean>;
20
+ const onChange: PropTypes.Validator<(...args: any[]) => any>;
21
+ const columns: PropTypes.Validator<(PropTypes.InferProps<{
22
+ name: PropTypes.Validator<string>;
23
+ type: PropTypes.Validator<string>;
24
+ }> | null | undefined)[]>;
25
+ }
26
+ }
27
+ import React from "react";
28
+ import PropTypes from "prop-types";
31
29
  //# sourceMappingURL=CrossColumnSearch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CrossColumnSearch.d.ts","sourceRoot":"","sources":["../src/CrossColumnSearch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAoB,WAAW,EAAW,MAAM,uBAAuB,CAAC;AAS/E,OAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,UAAU,sBAAsB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,CACR,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,UAAU,EAAE,EAC7B,eAAe,EAAE,OAAO,KACrB,IAAI,CAAC;IACV,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,UAAU,sBAAsB;IAC9B,uBAAuB,EAAE,OAAO,CAAC;CAClC;AACD,cAAM,iBAAkB,SAAQ,aAAa,CAC3C,sBAAsB,EACtB,sBAAsB,CACvB;IACC,MAAM,CAAC,kBAAkB,CACvB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,UAAU,EAAE,EAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,eAAe,EAAE,OAAO,GACvB,eAAe,GAAG,SAAS;gBAsBlB,KAAK,EAAE,sBAAsB;IAezC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAE1C,KAAK,IAAI,IAAI;IAIb,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAKzE,gBAAgB,CACd,eAAe,EAAE,UAAU,EAAE,EAC7B,eAAe,EAAE,OAAO,GACvB,IAAI;IAKP,kBAAkB,CAAC,eAAe,EAAE,OAAO,GAAG,IAAI;IAKlD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAchC,SAAS,IAAI,IAAI;IAIjB,KAAK,IAAI,IAAI;IAIb,aAAa,IAAI,IAAI;IAUrB,MAAM,IAAI,KAAK,CAAC,YAAY;CAqJ7B;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"CrossColumnSearch.d.ts","sourceRoot":"","sources":["../src/CrossColumnSearch.jsx"],"names":[],"mappings":";AAgBA;IACE,8JAyBC;IAED,wBAaC;IAMD,0CAGC;IAYD,8BAYC;IAED,kBAEC;IAED,cAEC;IAED,sBAQC;IAxDC,kCAAoC;IAOtC,cAEC;IAOD,mEAGC;IAED,+CAGC;CAuLF"}