@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.
- package/dist/AdvancedFilterCreator.d.ts +63 -69
- package/dist/AdvancedFilterCreator.d.ts.map +1 -1
- package/dist/AdvancedFilterCreator.js +73 -79
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.d.ts +45 -45
- package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +36 -32
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts +52 -47
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +39 -24
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnStatistics.d.ts +22 -34
- package/dist/ColumnStatistics.d.ts.map +1 -1
- package/dist/ColumnStatistics.js +12 -8
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CrossColumnSearch.d.ts +24 -26
- package/dist/CrossColumnSearch.d.ts.map +1 -1
- package/dist/CrossColumnSearch.js +13 -9
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/FilterInputField.d.ts +51 -48
- package/dist/FilterInputField.d.ts.map +1 -1
- package/dist/FilterInputField.js +27 -30
- package/dist/FilterInputField.js.map +1 -1
- package/dist/IrisGrid.d.ts +453 -409
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +449 -514
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridCellOverflowModal.d.ts +1 -1
- package/dist/IrisGridCellOverflowModal.d.ts.map +1 -1
- package/dist/IrisGridCellOverflowModal.js.map +1 -1
- package/dist/IrisGridCopyHandler.d.ts +46 -52
- package/dist/IrisGridCopyHandler.d.ts.map +1 -1
- package/dist/IrisGridCopyHandler.js +38 -22
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.d.ts +4 -5
- package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
- package/dist/IrisGridMetricCalculator.js +1 -5
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.d.ts +35 -37
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +3 -19
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.d.ts +5 -7
- package/dist/IrisGridModelFactory.d.ts.map +1 -1
- package/dist/IrisGridModelFactory.js +5 -5
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.d.ts +11 -13
- package/dist/IrisGridModelUpdater.d.ts.map +1 -1
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.d.ts +39 -38
- package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
- package/dist/IrisGridPartitionSelector.js +24 -18
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.d.ts +32 -111
- package/dist/IrisGridProxyModel.d.ts.map +1 -1
- package/dist/IrisGridProxyModel.js +170 -212
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.d.ts +31 -59
- package/dist/IrisGridRenderer.d.ts.map +1 -1
- package/dist/IrisGridRenderer.js +46 -92
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.d.ts +147 -48
- package/dist/IrisGridTableModel.d.ts.map +1 -1
- package/dist/IrisGridTableModel.js +1381 -58
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTestUtils.d.ts +14 -18
- package/dist/IrisGridTestUtils.d.ts.map +1 -1
- package/dist/IrisGridTestUtils.js +1 -29
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTheme.d.ts +3 -35
- package/dist/IrisGridTheme.d.ts.map +1 -1
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridTreeTableModel.d.ts +7 -26
- package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
- package/dist/IrisGridTreeTableModel.js +14 -24
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.d.ts +162 -257
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +95 -132
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/MissingKeyError.d.ts +3 -5
- package/dist/MissingKeyError.d.ts.map +1 -1
- package/dist/MissingKeyError.js.map +1 -1
- package/dist/PartitionSelectorSearch.d.ts +40 -61
- package/dist/PartitionSelectorSearch.d.ts.map +1 -1
- package/dist/PartitionSelectorSearch.js +15 -25
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.d.ts +6 -3
- package/dist/PendingDataBottomBar.d.ts.map +1 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/TableViewportUpdater.d.ts +55 -39
- package/dist/TableViewportUpdater.d.ts.map +1 -1
- package/dist/TableViewportUpdater.js +64 -42
- package/dist/TableViewportUpdater.js.map +1 -1
- package/dist/TreeTableViewportUpdater.d.ts +37 -29
- package/dist/TreeTableViewportUpdater.d.ts.map +1 -1
- package/dist/TreeTableViewportUpdater.js +50 -39
- package/dist/TreeTableViewportUpdater.js.map +1 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -9
- package/dist/index.js.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridCellOverflowMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js +0 -2
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js +1 -1
- package/dist/mousehandlers/IrisGridColumnTooltipMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +130 -41
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +317 -426
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js +2 -2
- package/dist/mousehandlers/IrisGridFilterMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js +1 -1
- package/dist/mousehandlers/IrisGridSortMouseHandler.js.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.d.ts +4 -8
- package/dist/mousehandlers/PendingMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/PendingMouseHandler.js +5 -4
- package/dist/mousehandlers/PendingMouseHandler.js.map +1 -1
- package/dist/sidebar/ChartBuilder.d.ts +33 -48
- package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
- package/dist/sidebar/ChartBuilder.js +27 -28
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.d.ts +41 -51
- package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +18 -22
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/CustomColumnInput.d.ts +36 -26
- package/dist/sidebar/CustomColumnInput.d.ts.map +1 -1
- package/dist/sidebar/CustomColumnInput.js +20 -11
- package/dist/sidebar/CustomColumnInput.js.map +1 -1
- package/dist/sidebar/InputEditor.d.ts +35 -34
- package/dist/sidebar/InputEditor.d.ts.map +1 -1
- package/dist/sidebar/InputEditor.js +24 -43
- package/dist/sidebar/InputEditor.js.map +1 -1
- package/dist/sidebar/RollupRows.d.ts +52 -67
- package/dist/sidebar/RollupRows.d.ts.map +1 -1
- package/dist/sidebar/RollupRows.js +53 -51
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.d.ts +21 -27
- package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js +10 -6
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.d.ts +39 -42
- package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +20 -12
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.d.ts +60 -59
- package/dist/sidebar/TableSaver.d.ts.map +1 -1
- package/dist/sidebar/TableSaver.js +68 -154
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.d.ts +45 -56
- package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
- package/dist/sidebar/VisibilityOrderingBuilder.js +29 -34
- package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.d.ts.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts +1 -2
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +5 -6
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +0 -5
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/icons/index.d.ts +7 -7
- package/dist/sidebar/icons/index.d.ts.map +1 -1
- package/dist/sidebar/icons/index.js.map +1 -1
- package/dist/sidebar/index.d.ts +12 -12
- package/dist/sidebar/index.d.ts.map +1 -1
- package/dist/sidebar/index.js.map +1 -1
- package/package.json +16 -17
- package/dist/CommonTypes.d.ts +0 -58
- package/dist/CommonTypes.d.ts.map +0 -1
- package/dist/CommonTypes.js +0 -2
- package/dist/CommonTypes.js.map +0 -1
- package/dist/IrisGridTableModelTemplate.d.ts +0 -219
- package/dist/IrisGridTableModelTemplate.d.ts.map +0 -1
- package/dist/IrisGridTableModelTemplate.js +0 -1623
- package/dist/IrisGridTableModelTemplate.js.map +0 -1
|
@@ -1,59 +1,64 @@
|
|
|
1
|
-
|
|
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
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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:
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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:
|
|
56
|
-
render(): React.ReactElement;
|
|
24
|
+
updateViewport(top: any, bottom: any, isLoading?: boolean): void;
|
|
57
25
|
}
|
|
58
|
-
|
|
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.
|
|
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
|
-
|
|
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 = [
|
|
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 = [
|
|
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
|
|
195
|
+
if (table != null) {
|
|
196
|
+
table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);
|
|
197
|
+
}
|
|
202
198
|
}
|
|
203
199
|
|
|
204
200
|
stopListening(table) {
|
|
205
|
-
table
|
|
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
|
|
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 = [
|
|
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
|
-
|
|
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: () =>
|
|
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
|
-
|
|
2
|
-
|
|
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:
|
|
28
|
-
constructor(props:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
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.
|
|
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"}
|
package/dist/ColumnStatistics.js
CHANGED
|
@@ -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
|
|
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 &&
|
|
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 =
|
|
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
|
|
187
|
+
})), description && /*#__PURE__*/React.createElement("div", {
|
|
189
188
|
className: "column-statistics-description"
|
|
190
|
-
}, description),
|
|
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\"> ({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\"> ({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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
10
|
+
searchField: React.RefObject<any>;
|
|
11
|
+
focus(): void;
|
|
12
|
+
sendColumnChange(selectedColumns: any, invertSelection: any): void;
|
|
13
|
+
setInvertSelection(invertSelection: any): void;
|
|
29
14
|
}
|
|
30
|
-
|
|
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.
|
|
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"}
|