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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/AdvancedFilterCreator.d.ts +69 -63
  2. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  3. package/dist/AdvancedFilterCreator.js +79 -73
  4. package/dist/AdvancedFilterCreator.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorSelectValue.d.ts +45 -45
  6. package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
  7. package/dist/AdvancedFilterCreatorSelectValue.js +32 -36
  8. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  9. package/dist/AdvancedFilterCreatorSelectValueList.d.ts +47 -52
  10. package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
  11. package/dist/AdvancedFilterCreatorSelectValueList.js +24 -39
  12. package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
  13. package/dist/ColumnStatistics.d.ts +34 -22
  14. package/dist/ColumnStatistics.d.ts.map +1 -1
  15. package/dist/ColumnStatistics.js +8 -12
  16. package/dist/ColumnStatistics.js.map +1 -1
  17. package/dist/CommonTypes.d.ts +58 -0
  18. package/dist/CommonTypes.d.ts.map +1 -0
  19. package/dist/CommonTypes.js +2 -0
  20. package/dist/CommonTypes.js.map +1 -0
  21. package/dist/CrossColumnSearch.d.ts +26 -24
  22. package/dist/CrossColumnSearch.d.ts.map +1 -1
  23. package/dist/CrossColumnSearch.js +9 -13
  24. package/dist/CrossColumnSearch.js.map +1 -1
  25. package/dist/FilterInputField.d.ts +48 -51
  26. package/dist/FilterInputField.d.ts.map +1 -1
  27. package/dist/FilterInputField.js +30 -27
  28. package/dist/FilterInputField.js.map +1 -1
  29. package/dist/IrisGrid.d.ts +409 -453
  30. package/dist/IrisGrid.d.ts.map +1 -1
  31. package/dist/IrisGrid.js +514 -449
  32. package/dist/IrisGrid.js.map +1 -1
  33. package/dist/IrisGridCellOverflowModal.d.ts +1 -1
  34. package/dist/IrisGridCellOverflowModal.d.ts.map +1 -1
  35. package/dist/IrisGridCellOverflowModal.js.map +1 -1
  36. package/dist/IrisGridCopyHandler.d.ts +52 -46
  37. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  38. package/dist/IrisGridCopyHandler.js +22 -38
  39. package/dist/IrisGridCopyHandler.js.map +1 -1
  40. package/dist/IrisGridMetricCalculator.d.ts +5 -4
  41. package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
  42. package/dist/IrisGridMetricCalculator.js +5 -1
  43. package/dist/IrisGridMetricCalculator.js.map +1 -1
  44. package/dist/IrisGridModel.d.ts +37 -35
  45. package/dist/IrisGridModel.d.ts.map +1 -1
  46. package/dist/IrisGridModel.js +19 -3
  47. package/dist/IrisGridModel.js.map +1 -1
  48. package/dist/IrisGridModelFactory.d.ts +7 -5
  49. package/dist/IrisGridModelFactory.d.ts.map +1 -1
  50. package/dist/IrisGridModelFactory.js +5 -5
  51. package/dist/IrisGridModelFactory.js.map +1 -1
  52. package/dist/IrisGridModelUpdater.d.ts +13 -11
  53. package/dist/IrisGridModelUpdater.d.ts.map +1 -1
  54. package/dist/IrisGridModelUpdater.js.map +1 -1
  55. package/dist/IrisGridPartitionSelector.d.ts +38 -39
  56. package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
  57. package/dist/IrisGridPartitionSelector.js +18 -24
  58. package/dist/IrisGridPartitionSelector.js.map +1 -1
  59. package/dist/IrisGridProxyModel.d.ts +111 -32
  60. package/dist/IrisGridProxyModel.d.ts.map +1 -1
  61. package/dist/IrisGridProxyModel.js +212 -170
  62. package/dist/IrisGridProxyModel.js.map +1 -1
  63. package/dist/IrisGridRenderer.d.ts +59 -31
  64. package/dist/IrisGridRenderer.d.ts.map +1 -1
  65. package/dist/IrisGridRenderer.js +92 -46
  66. package/dist/IrisGridRenderer.js.map +1 -1
  67. package/dist/IrisGridTableModel.d.ts +48 -147
  68. package/dist/IrisGridTableModel.d.ts.map +1 -1
  69. package/dist/IrisGridTableModel.js +58 -1381
  70. package/dist/IrisGridTableModel.js.map +1 -1
  71. package/dist/IrisGridTableModelTemplate.d.ts +219 -0
  72. package/dist/IrisGridTableModelTemplate.d.ts.map +1 -0
  73. package/dist/IrisGridTableModelTemplate.js +1623 -0
  74. package/dist/IrisGridTableModelTemplate.js.map +1 -0
  75. package/dist/IrisGridTestUtils.d.ts +18 -14
  76. package/dist/IrisGridTestUtils.d.ts.map +1 -1
  77. package/dist/IrisGridTestUtils.js +29 -1
  78. package/dist/IrisGridTestUtils.js.map +1 -1
  79. package/dist/IrisGridTheme.d.ts +35 -3
  80. package/dist/IrisGridTheme.d.ts.map +1 -1
  81. package/dist/IrisGridTheme.js.map +1 -1
  82. package/dist/IrisGridTreeTableModel.d.ts +26 -7
  83. package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
  84. package/dist/IrisGridTreeTableModel.js +24 -14
  85. package/dist/IrisGridTreeTableModel.js.map +1 -1
  86. package/dist/IrisGridUtils.d.ts +257 -162
  87. package/dist/IrisGridUtils.d.ts.map +1 -1
  88. package/dist/IrisGridUtils.js +132 -95
  89. package/dist/IrisGridUtils.js.map +1 -1
  90. package/dist/MissingKeyError.d.ts +5 -3
  91. package/dist/MissingKeyError.d.ts.map +1 -1
  92. package/dist/MissingKeyError.js.map +1 -1
  93. package/dist/PartitionSelectorSearch.d.ts +61 -40
  94. package/dist/PartitionSelectorSearch.d.ts.map +1 -1
  95. package/dist/PartitionSelectorSearch.js +25 -15
  96. package/dist/PartitionSelectorSearch.js.map +1 -1
  97. package/dist/PendingDataBottomBar.d.ts +3 -6
  98. package/dist/PendingDataBottomBar.d.ts.map +1 -1
  99. package/dist/PendingDataBottomBar.js.map +1 -1
  100. package/dist/TableViewportUpdater.d.ts +39 -55
  101. package/dist/TableViewportUpdater.d.ts.map +1 -1
  102. package/dist/TableViewportUpdater.js +42 -64
  103. package/dist/TableViewportUpdater.js.map +1 -1
  104. package/dist/TreeTableViewportUpdater.d.ts +29 -37
  105. package/dist/TreeTableViewportUpdater.d.ts.map +1 -1
  106. package/dist/TreeTableViewportUpdater.js +39 -50
  107. package/dist/TreeTableViewportUpdater.js.map +1 -1
  108. package/dist/index.d.ts +9 -0
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +9 -0
  111. package/dist/index.js.map +1 -1
  112. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.d.ts.map +1 -1
  113. package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
  114. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts +1 -1
  115. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts.map +1 -1
  116. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +2 -0
  117. package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
  118. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +1 -1
  119. package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
  120. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +41 -130
  121. package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
  122. package/dist/mousehandlers/IrisGridContextMenuHandler.js +426 -317
  123. package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
  124. package/dist/mousehandlers/IrisGridFilterMouseHandler.d.ts.map +1 -1
  125. package/dist/mousehandlers/IrisGridFilterMouseHandler.js +2 -2
  126. package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
  127. package/dist/mousehandlers/IrisGridSortMouseHandler.js +1 -1
  128. package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
  129. package/dist/mousehandlers/PendingMouseHandler.d.ts +8 -4
  130. package/dist/mousehandlers/PendingMouseHandler.d.ts.map +1 -1
  131. package/dist/mousehandlers/PendingMouseHandler.js +4 -5
  132. package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
  133. package/dist/sidebar/ChartBuilder.d.ts +48 -33
  134. package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
  135. package/dist/sidebar/ChartBuilder.js +28 -27
  136. package/dist/sidebar/ChartBuilder.js.map +1 -1
  137. package/dist/sidebar/CustomColumnBuilder.d.ts +51 -41
  138. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  139. package/dist/sidebar/CustomColumnBuilder.js +22 -18
  140. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  141. package/dist/sidebar/CustomColumnInput.d.ts +26 -36
  142. package/dist/sidebar/CustomColumnInput.d.ts.map +1 -1
  143. package/dist/sidebar/CustomColumnInput.js +11 -20
  144. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  145. package/dist/sidebar/InputEditor.d.ts +34 -35
  146. package/dist/sidebar/InputEditor.d.ts.map +1 -1
  147. package/dist/sidebar/InputEditor.js +43 -24
  148. package/dist/sidebar/InputEditor.js.map +1 -1
  149. package/dist/sidebar/RollupRows.d.ts +67 -52
  150. package/dist/sidebar/RollupRows.d.ts.map +1 -1
  151. package/dist/sidebar/RollupRows.js +51 -53
  152. package/dist/sidebar/RollupRows.js.map +1 -1
  153. package/dist/sidebar/SelectDistinctBuilder.d.ts +27 -21
  154. package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
  155. package/dist/sidebar/SelectDistinctBuilder.js +6 -10
  156. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  157. package/dist/sidebar/TableCsvExporter.d.ts +42 -39
  158. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  159. package/dist/sidebar/TableCsvExporter.js +12 -20
  160. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  161. package/dist/sidebar/TableSaver.d.ts +59 -60
  162. package/dist/sidebar/TableSaver.d.ts.map +1 -1
  163. package/dist/sidebar/TableSaver.js +154 -68
  164. package/dist/sidebar/TableSaver.js.map +1 -1
  165. package/dist/sidebar/VisibilityOrderingBuilder.d.ts +56 -45
  166. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  167. package/dist/sidebar/VisibilityOrderingBuilder.js +34 -29
  168. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  169. package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
  170. package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
  171. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +2 -1
  172. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  173. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  174. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +6 -5
  175. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
  176. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +5 -0
  177. package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
  178. package/dist/sidebar/icons/index.d.ts +7 -7
  179. package/dist/sidebar/icons/index.d.ts.map +1 -1
  180. package/dist/sidebar/icons/index.js.map +1 -1
  181. package/dist/sidebar/index.d.ts +12 -12
  182. package/dist/sidebar/index.d.ts.map +1 -1
  183. package/dist/sidebar/index.js.map +1 -1
  184. package/package.json +17 -16
@@ -1,64 +1,59 @@
1
- export default AdvancedFilterCreatorSelectValueList;
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
+ }
2
20
  /**
3
21
  * Select values from a long scrollable list.
4
22
  * Swaps items in and out for infinite scrolling
5
23
  */
6
- declare class AdvancedFilterCreatorSelectValueList extends React.PureComponent<any, any, any> {
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
+ };
7
31
  /**
8
32
  * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.
9
- * @param {Any} value The value to search for
10
- * @param {Array} values The array of values to search within
33
+ * @param value The value to search for
34
+ * @param values The array of values to search within
11
35
  */
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;
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;
16
48
  handleSelectionUpdate(): 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;
49
+ handleTableUpdate(event: CustomEvent): void;
50
+ isValueSelected(value: T): boolean;
51
+ startListening(table: Table): void;
52
+ stopListening(table: Table): void;
22
53
  resetViewport(): void;
23
54
  updateItemSelection(): void;
24
- updateViewport(top: any, bottom: any, isLoading?: boolean): void;
55
+ updateViewport(top: number, bottom: number, isLoading?: boolean): void;
56
+ render(): React.ReactElement;
25
57
  }
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";
58
+ export default AdvancedFilterCreatorSelectValueList;
64
59
  //# sourceMappingURL=AdvancedFilterCreatorSelectValueList.d.ts.map
@@ -1 +1 @@
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
+ {"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,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
+
1
3
  /* eslint react/no-did-update-set-state: "off" */
2
4
  import React, { PureComponent } from 'react';
3
- import PropTypes from 'prop-types';
4
5
  import { CSSTransition } from 'react-transition-group';
5
- import dh, { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';
6
- import { Formatter } from '@deephaven/jsapi-utils';
6
+ import dh from '@deephaven/jsapi-shim';
7
7
  import { LoadingSpinner, SelectValueList } from '@deephaven/components';
8
8
  import Log from '@deephaven/log';
9
9
  var log = Log.module('AdvancedFilterCreatorSelectValueList');
10
+
10
11
  /**
11
12
  * Select values from a long scrollable list.
12
13
  * Swaps items in and out for infinite scrolling
13
14
  */
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 {Any} value The value to search for
19
- * @param {Array} values The array of values to search within
18
+ * @param value The value to search for
19
+ * @param 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,6 +32,9 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
32
32
 
33
33
  constructor(props) {
34
34
  super(props);
35
+
36
+ _defineProperty(this, "list", void 0);
37
+
35
38
  this.handleSelect = this.handleSelect.bind(this);
36
39
  this.handleViewportChange = this.handleViewportChange.bind(this);
37
40
  this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);
@@ -89,7 +92,10 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
89
92
  }
90
93
 
91
94
  componentWillUnmount() {
92
- this.stopListening();
95
+ var {
96
+ table
97
+ } = this.props;
98
+ this.stopListening(table);
93
99
  }
94
100
 
95
101
  handleSelect(itemIndex, value) {
@@ -99,7 +105,7 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
99
105
  var {
100
106
  selectedValues
101
107
  } = this.state;
102
- selectedValues = [].concat(selectedValues);
108
+ selectedValues = [...selectedValues];
103
109
  var selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(value, selectedValues);
104
110
 
105
111
  if (selectedIndex >= 0) {
@@ -120,7 +126,7 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
120
126
  var {
121
127
  items
122
128
  } = this.state;
123
- items = [].concat(items);
129
+ items = [...items];
124
130
  var visibleItemIndex = itemIndex - offset;
125
131
 
126
132
  if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {
@@ -192,19 +198,15 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
192
198
  }
193
199
 
194
200
  startListening(table) {
195
- if (table != null) {
196
- table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
197
- }
201
+ table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
198
202
  }
199
203
 
200
204
  stopListening(table) {
201
- if (table != null) {
202
- table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
203
- }
205
+ table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
204
206
  }
205
207
 
206
208
  resetViewport() {
207
- if (this.list) {
209
+ if (this.list && this.list.topRow != null && this.list.bottomRow != null) {
208
210
  this.updateViewport(this.list.topRow, this.list.bottomRow, true);
209
211
  }
210
212
  }
@@ -213,7 +215,7 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
213
215
  var {
214
216
  items
215
217
  } = this.state;
216
- items = [].concat(items);
218
+ items = [...items];
217
219
 
218
220
  for (var i = 0; i < items.length; i += 1) {
219
221
  var item = items[i];
@@ -248,7 +250,7 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
248
250
  var topRow = Math.max(0, top - viewportSize * 3);
249
251
  var bottomRow = Math.max(topRow, bottom + viewportSize * 3);
250
252
  log.debug2('Setting viewport', topRow, ',', bottomRow);
251
- table.setViewport(topRow, bottomRow, null);
253
+ table.setViewport(topRow, bottomRow);
252
254
  }
253
255
 
254
256
  render() {
@@ -284,29 +286,12 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
284
286
 
285
287
  }
286
288
 
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 = {
289
+ _defineProperty(AdvancedFilterCreatorSelectValueList, "defaultProps", {
306
290
  table: null,
307
291
  invertSelection: true,
308
292
  selectedValues: [],
309
- onChange: () => {}
310
- };
293
+ onChange: () => undefined
294
+ });
295
+
311
296
  export default AdvancedFilterCreatorSelectValueList;
312
297
  //# sourceMappingURL=AdvancedFilterCreatorSelectValueList.js.map
@@ -1 +1 @@
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
+ {"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,28 +1,40 @@
1
- export default ColumnStatistics;
2
- declare class ColumnStatistics extends React.Component<any, any, any> {
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> {
3
25
  /** Automatically generate the statistics when the row count is below this threshold */
4
26
  static AUTO_GENERATE_LIMIT: number;
5
- static getStatsLabel(operation: any): any;
6
- constructor(props: any);
7
- handleError(error: any): void;
8
- handleGenerateStatistics(): void;
9
- handleStatistics(stats: any): void;
27
+ static getStatsLabel(operation: string): string;
28
+ constructor(props: ColumnStatisticsProps);
29
+ componentDidMount(): void;
30
+ componentWillUnmount(): void;
31
+ cancelablePromise: CancelablePromise<APIColumnStatistics> | null;
10
32
  handleCopyHeader(): void;
11
- cancelablePromise: import("@deephaven/utils").CancelablePromise<any> | null;
12
33
  maybeGenerateStatistics(): void;
34
+ handleGenerateStatistics(): void;
35
+ handleStatistics(stats: APIColumnStatistics): void;
36
+ handleError(error: Error): void;
37
+ render(): React.ReactElement;
13
38
  }
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";
39
+ export default ColumnStatistics;
28
40
  //# sourceMappingURL=ColumnStatistics.d.ts.map
@@ -1 +1 @@
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
+ {"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,15 +1,13 @@
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';
5
4
  import classNames from 'classnames';
6
5
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
7
6
  import { Button, ContextActionUtils, LoadingSpinner } from '@deephaven/components';
8
7
  import { dhFreeze, dhRefresh, vsCopy, vsLock, vsPassFilled } from '@deephaven/icons';
9
- import { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';
10
8
  import Log from '@deephaven/log';
11
9
  import { PromiseUtils } from '@deephaven/utils';
12
- import IrisGridModel from "./IrisGridModel.js";
10
+ import { isExpandableGridModel } from '@deephaven/grid';
13
11
  import "./ColumnStatistics.css";
14
12
  var log = Log.module('ColumnStatistics');
15
13
  var STATS_LABEL_OVERRIDES = {
@@ -26,6 +24,9 @@ class ColumnStatistics extends Component {
26
24
 
27
25
  constructor(props) {
28
26
  super(props);
27
+
28
+ _defineProperty(this, "cancelablePromise", void 0);
29
+
29
30
  this.handleError = this.handleError.bind(this);
30
31
  this.handleGenerateStatistics = this.handleGenerateStatistics.bind(this);
31
32
  this.handleStatistics = this.handleStatistics.bind(this);
@@ -117,7 +118,7 @@ class ColumnStatistics extends Component {
117
118
  }
118
119
 
119
120
  handleError(error) {
120
- if (error && error.isCanceled) {
121
+ if (error && PromiseUtils.isCanceled(error)) {
121
122
  log.debug('Called handleError on a cancelled promise result');
122
123
  return;
123
124
  }
@@ -167,7 +168,7 @@ class ColumnStatistics extends Component {
167
168
  }
168
169
  }
169
170
 
170
- var rowCountLabel = model.hasExpandableRows ? 'Expanded Rows' : 'Number of Rows';
171
+ var rowCountLabel = isExpandableGridModel(model) && model.hasExpandableRows ? 'Expanded Rows' : 'Number of Rows';
171
172
  var formattedRowCount = model.displayString(numRows, 'long');
172
173
  var columnIndex = model.getColumnIndexByName(column.name);
173
174
  return /*#__PURE__*/React.createElement("div", {
@@ -184,9 +185,9 @@ class ColumnStatistics extends Component {
184
185
  ContextActionUtils.copyToClipboard(column.name).then(this.handleCopyHeader).catch(e => log.error('Unable to column name', e));
185
186
  },
186
187
  tooltip: copied ? 'Copied text' : 'Copy column name'
187
- })), description && /*#__PURE__*/React.createElement("div", {
188
+ })), description != null && /*#__PURE__*/React.createElement("div", {
188
189
  className: "column-statistics-description"
189
- }, description), !model.isColumnMovable(columnIndex) && /*#__PURE__*/React.createElement("div", {
190
+ }, description), columnIndex != null && !model.isColumnMovable(columnIndex) && /*#__PURE__*/React.createElement("div", {
190
191
  className: "column-statistics-status"
191
192
  }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
192
193
  icon: model.isColumnFrozen(columnIndex) ? dhFreeze : vsLock,
@@ -221,10 +222,5 @@ class ColumnStatistics extends Component {
221
222
 
222
223
  _defineProperty(ColumnStatistics, "AUTO_GENERATE_LIMIT", 100000);
223
224
 
224
- ColumnStatistics.propTypes = {
225
- model: PropTypes.instanceOf(IrisGridModel).isRequired,
226
- column: APIPropTypes.Column.isRequired,
227
- onStatistics: PropTypes.func.isRequired
228
- };
229
225
  export default ColumnStatistics;
230
226
  //# sourceMappingURL=ColumnStatistics.js.map
@@ -1 +1 @@
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
+ {"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"}
@@ -0,0 +1,58 @@
1
+ import { AdvancedFilterOptions } from '@deephaven/jsapi-utils';
2
+ import { ModelIndex } from '@deephaven/grid';
3
+ import { TotalsTableConfig, FilterCondition, Format } from '@deephaven/jsapi-shim';
4
+ import { Shortcut } from '@deephaven/components';
5
+ import { IconDefinition } from '@deephaven/icons';
6
+ import AggregationOperation from './sidebar/aggregations/AggregationOperation';
7
+ import { OptionType } from './sidebar';
8
+ export type { AdvancedFilterOptions };
9
+ export declare type ColumnName = string;
10
+ export declare type AdvancedFilterMap = Map<ModelIndex, AdvancedFilter>;
11
+ export declare type QuickFilterMap = Map<ModelIndex, QuickFilter>;
12
+ export declare type AggregationMap = Record<AggregationOperation, ColumnName[]>;
13
+ export declare type OperationMap = Record<ColumnName, AggregationOperation[]>;
14
+ export declare type QuickFilter = {
15
+ text: string;
16
+ filter: FilterCondition | null;
17
+ };
18
+ export declare type AdvancedFilter = {
19
+ filter: FilterCondition | null;
20
+ options: AdvancedFilterOptions;
21
+ };
22
+ export declare type Action = {
23
+ action: () => void;
24
+ shortcut: Shortcut;
25
+ };
26
+ export declare type OptionItem = {
27
+ type: OptionType;
28
+ title: string;
29
+ subtitle?: string;
30
+ icon?: IconDefinition;
31
+ isOn?: boolean;
32
+ onChange?: () => void;
33
+ };
34
+ export interface UITotalsTableConfig extends TotalsTableConfig {
35
+ operationOrder: AggregationOperation[];
36
+ showOnTop: boolean;
37
+ }
38
+ export declare type InputFilter = {
39
+ name: string;
40
+ type: string;
41
+ value: string;
42
+ };
43
+ export interface UIRow {
44
+ data: Map<ModelIndex, CellData>;
45
+ }
46
+ export declare type UIViewportData<R extends UIRow = UIRow> = {
47
+ offset: number;
48
+ rows: R[];
49
+ };
50
+ export declare type RowData<T = unknown> = Map<number, {
51
+ value: T;
52
+ }>;
53
+ export declare type CellData = {
54
+ value: unknown;
55
+ format?: Format;
56
+ };
57
+ export declare type PendingDataMap<R extends UIRow = UIRow> = Map<ModelIndex, R>;
58
+ //# sourceMappingURL=CommonTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommonTypes.d.ts","sourceRoot":"","sources":["../src/CommonTypes.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,MAAM,EACP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,oBAAoB,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,YAAY,EAAE,qBAAqB,EAAE,CAAC;AACtC,oBAAY,UAAU,GAAG,MAAM,CAAC;AAChC,oBAAY,iBAAiB,GAAG,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAChE,oBAAY,cAAc,GAAG,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAC1D,oBAAY,cAAc,GAAG,MAAM,CAAC,oBAAoB,EAAE,UAAU,EAAE,CAAC,CAAC;AACxE,oBAAY,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAEtE,oBAAY,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,oBAAY,cAAc,GAAG;IAC3B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,qBAAqB,CAAC;CAChC,CAAC;AAEF,oBAAY,MAAM,GAAG;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,cAAc,EAAE,oBAAoB,EAAE,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,oBAAY,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;CACjC;AAED,oBAAY,cAAc,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,EAAE,CAAC;CACX,CAAC;AACF,oBAAY,OAAO,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAE7D,oBAAY,QAAQ,GAAG;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,oBAAY,cAAc,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CommonTypes.js.map