@deephaven/iris-grid 0.38.1-beta.7 → 0.38.1
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/README.md +2 -4
- package/dist/AdvancedFilterCreator.d.ts +2 -3
- package/dist/AdvancedFilterCreator.d.ts.map +1 -1
- package/dist/AdvancedFilterCreator.js +4 -8
- package/dist/AdvancedFilterCreator.js.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.d.ts +3 -4
- package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.js +4 -5
- package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.d.ts +2 -4
- package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.js +3 -11
- package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts +1 -3
- package/dist/AdvancedFilterCreatorSelectValueList.d.ts.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValueList.js +5 -7
- package/dist/AdvancedFilterCreatorSelectValueList.js.map +1 -1
- package/dist/ColumnStatistics.d.ts +1 -1
- package/dist/ColumnStatistics.d.ts.map +1 -1
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CommonTypes.d.ts +1 -1
- package/dist/CommonTypes.d.ts.map +1 -1
- package/dist/CommonTypes.js.map +1 -1
- package/dist/CrossColumnSearch.d.ts +2 -2
- package/dist/CrossColumnSearch.d.ts.map +1 -1
- package/dist/CrossColumnSearch.js +2 -1
- package/dist/CrossColumnSearch.js.map +1 -1
- package/dist/GotoRow.d.ts +1 -3
- package/dist/GotoRow.d.ts.map +1 -1
- package/dist/GotoRow.js +0 -1
- package/dist/GotoRow.js.map +1 -1
- package/dist/IrisGrid.css +0 -3
- package/dist/IrisGrid.css.map +1 -1
- package/dist/IrisGrid.d.ts +6 -8
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +33 -46
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridMetricCalculator.d.ts +1 -1
- package/dist/IrisGridMetricCalculator.d.ts.map +1 -1
- package/dist/IrisGridMetricCalculator.js.map +1 -1
- package/dist/IrisGridModel.d.ts +1 -1
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridModelFactory.d.ts +2 -2
- package/dist/IrisGridModelFactory.d.ts.map +1 -1
- package/dist/IrisGridModelFactory.js +3 -3
- package/dist/IrisGridModelFactory.js.map +1 -1
- package/dist/IrisGridModelUpdater.d.ts +2 -3
- package/dist/IrisGridModelUpdater.d.ts.map +1 -1
- package/dist/IrisGridModelUpdater.js +2 -2
- package/dist/IrisGridModelUpdater.js.map +1 -1
- package/dist/IrisGridPartitionSelector.d.ts +1 -2
- package/dist/IrisGridPartitionSelector.d.ts.map +1 -1
- package/dist/IrisGridPartitionSelector.js +0 -2
- package/dist/IrisGridPartitionSelector.js.map +1 -1
- package/dist/IrisGridProxyModel.d.ts +2 -3
- package/dist/IrisGridProxyModel.d.ts.map +1 -1
- package/dist/IrisGridProxyModel.js +9 -11
- package/dist/IrisGridProxyModel.js.map +1 -1
- package/dist/IrisGridRenderer.d.ts +27 -19
- package/dist/IrisGridRenderer.d.ts.map +1 -1
- package/dist/IrisGridRenderer.js +205 -64
- package/dist/IrisGridRenderer.js.map +1 -1
- package/dist/IrisGridTableModel.d.ts +2 -2
- package/dist/IrisGridTableModel.d.ts.map +1 -1
- package/dist/IrisGridTableModel.js +6 -6
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts +3 -8
- package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +15 -36
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTestUtils.d.ts +3 -2
- package/dist/IrisGridTestUtils.d.ts.map +1 -1
- package/dist/IrisGridTestUtils.js +6 -5
- package/dist/IrisGridTestUtils.js.map +1 -1
- package/dist/IrisGridTheme.d.ts.map +1 -1
- package/dist/IrisGridTheme.js +1 -4
- package/dist/IrisGridTheme.js.map +1 -1
- package/dist/IrisGridTheme.module.css +0 -3
- package/dist/IrisGridTheme.module.css.map +1 -1
- package/dist/IrisGridTreeTableModel.d.ts +1 -1
- package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/IrisGridUtils.d.ts +85 -88
- package/dist/IrisGridUtils.d.ts.map +1 -1
- package/dist/IrisGridUtils.js +558 -569
- package/dist/IrisGridUtils.js.map +1 -1
- package/dist/PartitionSelectorSearch.d.ts +1 -2
- package/dist/PartitionSelectorSearch.d.ts.map +1 -1
- package/dist/PartitionSelectorSearch.js +1 -3
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/TableViewportUpdater.d.ts +1 -1
- package/dist/TableViewportUpdater.d.ts.map +1 -1
- package/dist/TableViewportUpdater.js.map +1 -1
- package/dist/TreeTableViewportUpdater.d.ts +1 -2
- package/dist/TreeTableViewportUpdater.d.ts.map +1 -1
- package/dist/TreeTableViewportUpdater.js +1 -1
- package/dist/TreeTableViewportUpdater.js.map +1 -1
- package/dist/mousehandlers/IrisGridColumnSelectMouseHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +9 -10
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +28 -41
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridTokenMouseHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js +3 -18
- package/dist/mousehandlers/IrisGridTokenMouseHandler.js.map +1 -1
- package/dist/sidebar/ChartBuilder.d.ts +11 -12
- package/dist/sidebar/ChartBuilder.d.ts.map +1 -1
- package/dist/sidebar/ChartBuilder.js +81 -98
- package/dist/sidebar/ChartBuilder.js.map +1 -1
- package/dist/sidebar/RollupRows.d.ts +1 -1
- package/dist/sidebar/RollupRows.d.ts.map +1 -1
- package/dist/sidebar/RollupRows.js.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.d.ts +1 -1
- package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.d.ts +2 -3
- package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +3 -3
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/TableSaver.d.ts +1 -2
- package/dist/sidebar/TableSaver.d.ts.map +1 -1
- package/dist/sidebar/TableSaver.js +1 -4
- package/dist/sidebar/TableSaver.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.d.ts +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.d.ts.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.d.ts +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.d.ts.map +1 -1
- package/dist/sidebar/aggregations/AggregationUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts +0 -2
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js +0 -2
- package/dist/sidebar/conditional-formatting/ColumnFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts +0 -2
- package/dist/sidebar/conditional-formatting/ConditionEditor.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionEditor.js +2 -3
- package/dist/sidebar/conditional-formatting/ConditionEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js +0 -2
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.d.ts +2 -2
- package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingAPIUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts +3 -3
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js +3 -3
- package/dist/sidebar/conditional-formatting/ConditionalFormattingUtils.js.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts +0 -2
- package/dist/sidebar/conditional-formatting/RowFormatEditor.d.ts.map +1 -1
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js +0 -2
- package/dist/sidebar/conditional-formatting/RowFormatEditor.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.js.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.d.ts.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/utilities.js.map +1 -1
- package/package.json +15 -16
- package/dist/IrisGridCellRendererUtils.d.ts +0 -7
- package/dist/IrisGridCellRendererUtils.d.ts.map +0 -1
- package/dist/IrisGridCellRendererUtils.js +0 -20
- package/dist/IrisGridCellRendererUtils.js.map +0 -1
- package/dist/IrisGridDataBarCellRenderer.d.ts +0 -7
- package/dist/IrisGridDataBarCellRenderer.d.ts.map +0 -1
- package/dist/IrisGridDataBarCellRenderer.js +0 -10
- package/dist/IrisGridDataBarCellRenderer.js.map +0 -1
- package/dist/IrisGridIcons.d.ts +0 -4
- package/dist/IrisGridIcons.d.ts.map +0 -1
- package/dist/IrisGridIcons.js +0 -25
- package/dist/IrisGridIcons.js.map +0 -1
- package/dist/IrisGridTextCellRenderer.d.ts +0 -20
- package/dist/IrisGridTextCellRenderer.d.ts.map +0 -1
- package/dist/IrisGridTextCellRenderer.js +0 -139
- package/dist/IrisGridTextCellRenderer.js.map +0 -1
package/README.md
CHANGED
|
@@ -11,13 +11,11 @@ npm install --save @deephaven/iris-grid
|
|
|
11
11
|
|
|
12
12
|
Then, import and use the component from the package:
|
|
13
13
|
```
|
|
14
|
-
import { useApi } from '@deephaven/jsapi-bootstrap';
|
|
15
14
|
import { IrisGrid, IrisGridModelFactory } from '@deephaven/iris-grid';
|
|
16
15
|
|
|
17
16
|
// In your initialization, create the model async
|
|
18
|
-
const
|
|
19
|
-
const model = await IrisGridModelFactory.makeModel(dh, table);
|
|
17
|
+
const model = await IrisGridModelFactory.makeModel(table);
|
|
20
18
|
|
|
21
19
|
// In your render function
|
|
22
|
-
<IrisGrid
|
|
20
|
+
<IrisGrid model={model} />
|
|
23
21
|
```
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React, { PureComponent } from 'react';
|
|
2
2
|
import { OperatorValue as FilterOperatorValue, TypeValue as FilterTypeValue } from '@deephaven/filters';
|
|
3
|
-
import { Formatter,
|
|
3
|
+
import { Formatter, SortDirection } from '@deephaven/jsapi-utils';
|
|
4
4
|
import { CancelablePromise } from '@deephaven/utils';
|
|
5
|
-
import
|
|
5
|
+
import { Column, FilterCondition, Table } from '@deephaven/jsapi-shim';
|
|
6
6
|
import './AdvancedFilterCreator.scss';
|
|
7
7
|
import IrisGridModel from './IrisGridModel';
|
|
8
8
|
import { AdvancedFilterOptions } from './CommonTypes';
|
|
@@ -16,7 +16,6 @@ interface AdvancedFilterCreatorProps {
|
|
|
16
16
|
options: AdvancedFilterOptions;
|
|
17
17
|
sortDirection: SortDirection;
|
|
18
18
|
formatter: Formatter;
|
|
19
|
-
tableUtils: TableUtils;
|
|
20
19
|
}
|
|
21
20
|
interface AdvancedFilterItem {
|
|
22
21
|
selectedType?: FilterTypeValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedFilterCreator.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreator.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI7C,OAAO,EAEL,aAAa,IAAI,mBAAmB,EACpC,SAAS,IAAI,eAAe,EAE7B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,SAAS,
|
|
1
|
+
{"version":3,"file":"AdvancedFilterCreator.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreator.tsx"],"names":[],"mappings":"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"}
|
|
@@ -325,8 +325,7 @@ class AdvancedFilterCreator extends PureComponent {
|
|
|
325
325
|
var {
|
|
326
326
|
column,
|
|
327
327
|
onFilterChange,
|
|
328
|
-
model
|
|
329
|
-
tableUtils
|
|
328
|
+
model
|
|
330
329
|
} = this.props;
|
|
331
330
|
var {
|
|
332
331
|
formatter
|
|
@@ -347,7 +346,7 @@ class AdvancedFilterCreator extends PureComponent {
|
|
|
347
346
|
invertSelection,
|
|
348
347
|
selectedValues
|
|
349
348
|
};
|
|
350
|
-
var filter =
|
|
349
|
+
var filter = TableUtils.makeAdvancedFilter(column, options, formatter.timeZone);
|
|
351
350
|
onFilterChange(column, filter, options);
|
|
352
351
|
}
|
|
353
352
|
render() {
|
|
@@ -356,8 +355,7 @@ class AdvancedFilterCreator extends PureComponent {
|
|
|
356
355
|
column,
|
|
357
356
|
model,
|
|
358
357
|
sortDirection,
|
|
359
|
-
formatter
|
|
360
|
-
tableUtils
|
|
358
|
+
formatter
|
|
361
359
|
} = this.props;
|
|
362
360
|
var {
|
|
363
361
|
filterItems,
|
|
@@ -391,8 +389,7 @@ class AdvancedFilterCreator extends PureComponent {
|
|
|
391
389
|
onDelete: _this.getFilterDeleteHandler(i),
|
|
392
390
|
selectedType: selectedType,
|
|
393
391
|
value: value,
|
|
394
|
-
formatter: formatter
|
|
395
|
-
tableUtils: tableUtils
|
|
392
|
+
formatter: formatter
|
|
396
393
|
});
|
|
397
394
|
filterItemElements.push(element);
|
|
398
395
|
if (i < filterOperators.length) {
|
|
@@ -486,7 +483,6 @@ class AdvancedFilterCreator extends PureComponent {
|
|
|
486
483
|
}, "(", columnType, ")")), filterItemElements, isValuesTableAvailable && valuesTableError == null && /*#__PURE__*/React.createElement(React.Fragment, null, !isBoolean && /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement("div", {
|
|
487
484
|
className: "form-group"
|
|
488
485
|
}, /*#__PURE__*/React.createElement(AdvancedFilterCreatorSelectValue, {
|
|
489
|
-
dh: dh,
|
|
490
486
|
table: valuesTable,
|
|
491
487
|
onChange: this.handleSelectValueChange,
|
|
492
488
|
invertSelection: invertSelection,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedFilterCreator.js","names":["React","PureComponent","classNames","FontAwesomeIcon","memoize","Operator","FilterOperator","assertOperatorValue","assertFilterOperatorValue","dhSortAmountDown","dhNewCircleLargeFilled","TableUtils","Button","ContextActionUtils","Log","PromiseUtils","shortid","AdvancedFilterCreatorFilterItem","AdvancedFilterCreatorSelectValue","log","module","AdvancedFilterCreator","makeFilterItem","key","constructor","props","columnType","getFilterTypes","handleAddAnd","bind","handleAddOr","handleChangeFilterOperator","handleDone","handleFilterChange","handleFilterDelete","handleSelectValueChange","handleReset","handleSortDown","handleSortUp","handleSubmit","handleFocusTrapStart","handleFocusTrapEnd","handleUpdateTimeout","focusTrapContainer","createRef","options","filterOperators","invertSelection","selectedValues","filterItems","map","selectedType","value","length","push","state","valuesTableError","valuesTable","undefined","componentDidMount","initValuesTable","componentWillUnmount","debounceTimeout","clearTimeout","sendUpdate","valuesTablePromise","cancel","getFilterChangeHandler","index","getFilterDeleteHandler","model","column","isValuesTableAvailable","debug","makeCancelableTablePromise","then","sort","columns","asc","applySort","setState","catch","error","isCanceled","current","querySelector","focus","inputs","querySelectorAll","element","concat","and","or","operator","startUpdateTimer","filterIndex","splice","event","addToExisting","isModifierKeyDown","sortTable","sortDirection","descending","ascending","stopUpdateTimer","preventDefault","onDone","shouldShowAddFilter","filterItem","direction","onSortChange","setTimeout","debounceFilterUpdate","onFilterChange","tableUtils","formatter","items","filter","operators","i","slice","makeAdvancedFilter","timeZone","render","isBoolean","isBooleanType","type","isDateType","filterTypes","substring","lastIndexOf","filterItemElements","filterOperator","isAndFilter","operatorElement","active","showAddFilterItem","addFilterItem","hidden","name","dh"],"sources":["../src/AdvancedFilterCreator.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n// disabled for tab-index on focus traps, which are intentionally non-interactive\n\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport memoize from 'memoize-one';\nimport {\n Operator as FilterOperator,\n OperatorValue as FilterOperatorValue,\n TypeValue as FilterTypeValue,\n assertOperatorValue as assertFilterOperatorValue,\n} from '@deephaven/filters';\nimport { dhSortAmountDown, dhNewCircleLargeFilled } from '@deephaven/icons';\nimport {\n Formatter,\n TableUtils,\n SortDirection,\n FilterItem,\n} from '@deephaven/jsapi-utils';\nimport { Button, ContextActionUtils } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { CancelablePromise, PromiseUtils } from '@deephaven/utils';\nimport type { Column, FilterCondition, Table } from '@deephaven/jsapi-types';\nimport shortid from 'shortid';\nimport AdvancedFilterCreatorFilterItem from './AdvancedFilterCreatorFilterItem';\nimport AdvancedFilterCreatorSelectValue from './AdvancedFilterCreatorSelectValue';\nimport './AdvancedFilterCreator.scss';\nimport IrisGridModel from './IrisGridModel';\nimport { AdvancedFilterOptions } from './CommonTypes';\n\nconst log = Log.module('AdvancedFilterCreator');\n\ntype FilterChangeHandler = (\n selectedType: FilterTypeValue,\n value: string\n) => void;\n\ninterface AdvancedFilterCreatorProps {\n model: IrisGridModel;\n column: Column;\n onFilterChange: (\n column: Column,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ) => void;\n onSortChange: (\n column: Column,\n direction: SortDirection,\n addToExisting?: boolean\n ) => void;\n onDone: () => void;\n options: AdvancedFilterOptions;\n sortDirection: SortDirection;\n formatter: Formatter;\n tableUtils: TableUtils;\n}\n\ninterface AdvancedFilterItem {\n selectedType?: FilterTypeValue;\n value?: string;\n key: string;\n}\n\ninterface AdvancedFilterCreatorState {\n // Filter items\n filterItems: AdvancedFilterItem[];\n\n // And/Or between the filter items\n filterOperators: FilterOperatorValue[];\n\n invertSelection: boolean;\n\n selectedValues: unknown[];\n\n valuesTableError: null;\n valuesTable?: Table;\n}\n\nclass AdvancedFilterCreator extends PureComponent<\n AdvancedFilterCreatorProps,\n AdvancedFilterCreatorState\n> {\n static debounceFilterUpdate = 250;\n\n static defaultProps = {\n options: {\n filterItems: null,\n filterOperators: null,\n invertSelection: true,\n selectedValues: [],\n },\n sortDirection: null,\n };\n\n static makeFilterItem(): AdvancedFilterItem {\n return { key: shortid() };\n }\n\n constructor(props: AdvancedFilterCreatorProps) {\n super(props);\n\n this.handleAddAnd = this.handleAddAnd.bind(this);\n this.handleAddOr = this.handleAddOr.bind(this);\n this.handleChangeFilterOperator = this.handleChangeFilterOperator.bind(\n this\n );\n this.handleDone = this.handleDone.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterDelete = this.handleFilterDelete.bind(this);\n this.handleSelectValueChange = this.handleSelectValueChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSortDown = this.handleSortDown.bind(this);\n this.handleSortUp = this.handleSortUp.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleFocusTrapStart = this.handleFocusTrapStart.bind(this);\n this.handleFocusTrapEnd = this.handleFocusTrapEnd.bind(this);\n this.handleUpdateTimeout = this.handleUpdateTimeout.bind(this);\n\n this.focusTrapContainer = React.createRef();\n\n const { options } = props;\n let { filterOperators, invertSelection, selectedValues } = options;\n\n // can be null or an empty array\n const filterItems: AdvancedFilterItem[] =\n options.filterItems?.map(({ selectedType, value }) => ({\n selectedType,\n value,\n key: shortid(),\n })) ?? [];\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n if (filterOperators == null) {\n filterOperators = [];\n }\n if (invertSelection == null) {\n invertSelection = true;\n }\n if (selectedValues == null) {\n selectedValues = [];\n }\n\n this.state = {\n // Filter items\n filterItems,\n\n // And/Or between the filter items\n filterOperators,\n\n invertSelection,\n\n selectedValues,\n\n valuesTableError: null,\n valuesTable: undefined,\n };\n }\n\n componentDidMount(): void {\n this.initValuesTable();\n }\n\n componentWillUnmount(): void {\n if (this.debounceTimeout != null) {\n clearTimeout(this.debounceTimeout);\n this.sendUpdate();\n }\n if (this.valuesTablePromise != null) {\n this.valuesTablePromise.cancel();\n }\n }\n\n focusTrapContainer: React.RefObject<HTMLFormElement>;\n\n debounceTimeout?: ReturnType<typeof setTimeout>;\n\n valuesTablePromise?: CancelablePromise<Table>;\n\n getFilterChangeHandler(index: number): FilterChangeHandler {\n return this.handleFilterChange.bind(this, index);\n }\n\n getFilterDeleteHandler(index: number): () => void {\n return this.handleFilterDelete.bind(this, index);\n }\n\n getFilterTypes = memoize((columnType: string): FilterTypeValue[] =>\n TableUtils.getFilterTypes(columnType)\n );\n\n initValuesTable(): void {\n const { model, column } = this.props;\n if (!model.isValuesTableAvailable) {\n log.debug('No values table for this model, just ignore');\n return;\n }\n\n this.valuesTablePromise = TableUtils.makeCancelableTablePromise(\n model.valuesTable(column)\n );\n this.valuesTablePromise\n .then(valuesTable => {\n const sort = valuesTable.columns[0].sort().asc();\n valuesTable.applySort([sort]);\n\n this.setState({ valuesTable });\n })\n .catch(error => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error('Unable to open values table', error);\n this.setState({ valuesTableError: error });\n });\n }\n\n handleFocusTrapEnd(): void {\n (this.focusTrapContainer?.current?.querySelector(\n 'button,select,input,textarea'\n ) as HTMLElement).focus();\n }\n\n handleFocusTrapStart(): void {\n const inputs = this.focusTrapContainer?.current?.querySelectorAll(\n 'button,select,input,textarea'\n );\n if (inputs && inputs.length > 0) {\n const element = inputs[inputs.length - 1] as HTMLElement;\n element.focus();\n }\n }\n\n handleAddAnd(): void {\n let { filterItems, filterOperators } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.and);\n this.setState({ filterItems, filterOperators });\n }\n\n handleAddOr(): void {\n let { filterItems, filterOperators } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.or);\n this.setState({ filterItems, filterOperators });\n }\n\n handleChangeFilterOperator(index: number, operator: string): void {\n let { filterOperators } = this.state;\n filterOperators = [...filterOperators];\n\n assertFilterOperatorValue(operator);\n\n filterOperators[index] = operator;\n\n this.setState({ filterOperators });\n\n this.startUpdateTimer();\n }\n\n handleFilterChange(\n filterIndex: number,\n selectedType: FilterTypeValue,\n value: string\n ): void {\n let { filterItems } = this.state;\n filterItems = [...filterItems];\n const { key } = filterItems[filterIndex];\n filterItems[filterIndex] = { key, selectedType, value };\n\n this.setState({ filterItems });\n\n this.startUpdateTimer();\n }\n\n handleFilterDelete(filterIndex: number): void {\n let { filterItems, filterOperators } = this.state;\n filterItems = [...filterItems];\n filterOperators = [...filterOperators];\n if (filterIndex < filterItems.length) {\n filterItems.splice(filterIndex, 1);\n }\n\n if (filterIndex < filterOperators.length) {\n filterOperators.splice(filterIndex, 1);\n } else if (filterIndex === filterOperators.length) {\n // When deleting the last filter item, we also need to remove the last filter operator\n filterOperators.splice(filterOperators.length - 1, 1);\n }\n\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n\n this.setState({ filterItems, filterOperators });\n\n this.startUpdateTimer();\n }\n\n handleSelectValueChange(\n selectedValues: unknown[],\n invertSelection: boolean\n ): void {\n this.setState({ selectedValues, invertSelection });\n\n this.startUpdateTimer();\n }\n\n handleReset(): void {\n log.debug('Resetting Advanced Filter');\n\n this.setState({\n filterItems: [AdvancedFilterCreator.makeFilterItem()],\n filterOperators: [],\n selectedValues: [],\n invertSelection: true,\n });\n\n this.startUpdateTimer();\n }\n\n handleSortDown(event: React.MouseEvent<HTMLButtonElement>): void {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.descending, addToExisting);\n }\n\n handleSortUp(event: React.MouseEvent<HTMLButtonElement>): void {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.ascending, addToExisting);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n log.debug('Submitting Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n\n event.preventDefault();\n }\n\n handleDone(event: React.MouseEvent<HTMLButtonElement>): void {\n log.debug('Submitting and Closing Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n\n const { onDone } = this.props;\n onDone();\n\n event.preventDefault();\n }\n\n handleUpdateTimeout(): void {\n this.debounceTimeout = undefined;\n this.sendUpdate();\n }\n\n /**\n * Convenience function to check if the previous filter has been inputted, and\n * we should show the add filter buttons (+ AND OR)\n * @returns true If the add filter buttons should be shown, false otherwise\n */\n shouldShowAddFilter(): boolean {\n const { filterItems } = this.state;\n if (filterItems.length === 0) {\n return false;\n }\n\n const filterItem = filterItems[filterItems.length - 1];\n const { selectedType, value } = filterItem;\n\n return (\n selectedType != null &&\n selectedType.length > 0 &&\n value != null &&\n value.length > 0\n );\n }\n\n /**\n * Sorts the table in the specified direction. If already sorted in that direction, remove it.\n * @param direction The sort direction, ASC or DESC\n * @param addToExisting Add to the existing sort, or replace the existing table sort\n */\n sortTable(direction: SortDirection, addToExisting = false): void {\n const { column, onSortChange } = this.props;\n onSortChange(column, direction, addToExisting);\n }\n\n startUpdateTimer(): void {\n this.stopUpdateTimer();\n\n this.debounceTimeout = setTimeout(\n this.handleUpdateTimeout,\n AdvancedFilterCreator.debounceFilterUpdate\n );\n }\n\n stopUpdateTimer(): void {\n if (this.debounceTimeout !== undefined) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n }\n\n sendUpdate(): void {\n const {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues,\n } = this.state;\n const { column, onFilterChange, model, tableUtils } = this.props;\n const { formatter } = model;\n\n const items = filterItems.filter(\n ({ selectedType, value }) =>\n selectedType != null && value != null && value !== ''\n ) as FilterItem[];\n\n const operators = filterOperators\n .filter(\n (operator, i) =>\n operator != null &&\n filterItems[i].selectedType != null &&\n filterItems[i].value != null &&\n filterItems[i].value !== ''\n )\n .slice(0, items.length - 1);\n // slice last operator, user may have set an operator but not a value\n\n const options = {\n filterItems: items,\n filterOperators: operators,\n invertSelection,\n selectedValues,\n };\n\n const filter = tableUtils.makeAdvancedFilter(\n column,\n options,\n formatter.timeZone\n );\n\n onFilterChange(column, filter, options);\n }\n\n render(): JSX.Element {\n const { column, model, sortDirection, formatter, tableUtils } = this.props;\n const {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues,\n valuesTable,\n valuesTableError,\n } = this.state;\n const { isValuesTableAvailable } = model;\n const isBoolean = TableUtils.isBooleanType(column.type);\n const isDateType = TableUtils.isDateType(column.type);\n const filterTypes = this.getFilterTypes(column.type);\n const columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n const filterItemElements = [];\n if (!isBoolean && filterTypes.length) {\n for (let i = 0; i < filterItems.length; i += 1) {\n const filterItem = filterItems[i];\n const { key, selectedType, value } = filterItem;\n\n const element = (\n <AdvancedFilterCreatorFilterItem\n key={key}\n column={column}\n filterTypes={filterTypes}\n onChange={this.getFilterChangeHandler(i)}\n onDelete={this.getFilterDeleteHandler(i)}\n selectedType={selectedType}\n value={value}\n formatter={formatter}\n tableUtils={tableUtils}\n />\n );\n filterItemElements.push(element);\n\n if (i < filterOperators.length) {\n const filterOperator = filterOperators[i];\n const isAndFilter = filterOperator === FilterOperator.and;\n const operatorElement = (\n <div\n key={`filterOperator${key}`}\n className=\"form-row justify-content-end advanced-filter-creator-filter-operator\"\n >\n <Button\n kind=\"ghost\"\n className={classNames('filter-operator', {\n active: isAndFilter,\n })}\n onClick={() =>\n this.handleChangeFilterOperator(i, FilterOperator.and)\n }\n >\n AND\n </Button>\n <Button\n kind=\"ghost\"\n className={classNames('filter-operator', {\n active: !isAndFilter,\n })}\n onClick={() =>\n this.handleChangeFilterOperator(i, FilterOperator.or)\n }\n >\n OR\n </Button>\n </div>\n );\n filterItemElements.push(operatorElement);\n }\n }\n }\n const showAddFilterItem = this.shouldShowAddFilter();\n const addFilterItem = (\n <div\n key=\"addFilterItem\"\n className={classNames('form-row justify-content-end add-filter-item', {\n hidden: !showAddFilterItem,\n })}\n >\n <span className=\"text-muted\">\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n </span>\n <Button\n kind=\"ghost\"\n className=\"btn-filter-item\"\n onClick={this.handleAddAnd}\n disabled={!showAddFilterItem}\n tooltip=\"Add filter with AND\"\n >\n AND\n </Button>\n <Button\n kind=\"ghost\"\n className=\"btn-filter-item\"\n onClick={this.handleAddOr}\n disabled={!showAddFilterItem}\n tooltip=\"Add filter with OR\"\n >\n OR\n </Button>\n </div>\n );\n filterItemElements.push(addFilterItem);\n\n return (\n <div className=\"advanced-filter-creator\" role=\"presentation\">\n <div tabIndex={0} onFocus={this.handleFocusTrapStart} />\n <form onSubmit={this.handleSubmit} ref={this.focusTrapContainer}>\n <div className=\"title-bar\">\n <h6 className=\"advanced-filter-title\">Advanced Filters</h6>\n <div className=\"advanced-filter-menu-buttons\">\n <Button\n kind=\"ghost\"\n className={classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.descending,\n })}\n onClick={this.handleSortDown}\n icon={dhSortAmountDown}\n tooltip={`Sort ${column.name} Descending`}\n />\n <Button\n kind=\"ghost\"\n className={classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.ascending,\n })}\n onClick={this.handleSortUp}\n icon={\n <FontAwesomeIcon icon={dhSortAmountDown} rotation={180} />\n }\n tooltip={`Sort ${column.name} Ascending`}\n />\n </div>\n </div>\n <hr />\n <div className=\"advanced-filter-column-name\">\n {column.name} \n <span className=\"column-type\">({columnType})</span>\n </div>\n {filterItemElements}\n {isValuesTableAvailable && valuesTableError == null && (\n <>\n {!isBoolean && <hr />}\n <div className=\"form-group\">\n <AdvancedFilterCreatorSelectValue\n dh={dh}\n table={valuesTable}\n onChange={this.handleSelectValueChange}\n invertSelection={invertSelection}\n selectedValues={selectedValues}\n formatter={formatter}\n showSearch={!isDateType}\n timeZone={formatter.timeZone}\n />\n </div>\n </>\n )}\n <div className=\"form-row justify-content-end\">\n <Button\n kind=\"secondary\"\n className=\"mr-2\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n <Button kind=\"primary\" onClick={this.handleDone}>\n Done\n </Button>\n </div>\n </form>\n <div tabIndex={0} onFocus={this.handleFocusTrapEnd} />\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreator;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdvancedFilterCreator.js","names":["React","PureComponent","classNames","FontAwesomeIcon","memoize","Operator","FilterOperator","assertOperatorValue","assertFilterOperatorValue","dhSortAmountDown","dhNewCircleLargeFilled","TableUtils","Button","ContextActionUtils","Log","PromiseUtils","shortid","AdvancedFilterCreatorFilterItem","AdvancedFilterCreatorSelectValue","log","module","AdvancedFilterCreator","makeFilterItem","key","constructor","props","columnType","getFilterTypes","handleAddAnd","bind","handleAddOr","handleChangeFilterOperator","handleDone","handleFilterChange","handleFilterDelete","handleSelectValueChange","handleReset","handleSortDown","handleSortUp","handleSubmit","handleFocusTrapStart","handleFocusTrapEnd","handleUpdateTimeout","focusTrapContainer","createRef","options","filterOperators","invertSelection","selectedValues","filterItems","map","selectedType","value","length","push","state","valuesTableError","valuesTable","undefined","componentDidMount","initValuesTable","componentWillUnmount","debounceTimeout","clearTimeout","sendUpdate","valuesTablePromise","cancel","getFilterChangeHandler","index","getFilterDeleteHandler","model","column","isValuesTableAvailable","debug","makeCancelableTablePromise","then","sort","columns","asc","applySort","setState","catch","error","isCanceled","current","querySelector","focus","inputs","querySelectorAll","element","concat","and","or","operator","startUpdateTimer","filterIndex","splice","event","addToExisting","isModifierKeyDown","sortTable","sortDirection","descending","ascending","stopUpdateTimer","preventDefault","onDone","shouldShowAddFilter","filterItem","direction","onSortChange","setTimeout","debounceFilterUpdate","onFilterChange","formatter","items","filter","operators","i","slice","makeAdvancedFilter","timeZone","render","isBoolean","isBooleanType","type","isDateType","filterTypes","substring","lastIndexOf","filterItemElements","filterOperator","isAndFilter","operatorElement","active","showAddFilterItem","addFilterItem","hidden","name"],"sources":["../src/AdvancedFilterCreator.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n// disabled for tab-index on focus traps, which are intentionally non-interactive\n\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport memoize from 'memoize-one';\nimport {\n Operator as FilterOperator,\n OperatorValue as FilterOperatorValue,\n TypeValue as FilterTypeValue,\n assertOperatorValue as assertFilterOperatorValue,\n} from '@deephaven/filters';\nimport { dhSortAmountDown, dhNewCircleLargeFilled } from '@deephaven/icons';\nimport {\n Formatter,\n TableUtils,\n SortDirection,\n FilterItem,\n} from '@deephaven/jsapi-utils';\nimport { Button, ContextActionUtils } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { CancelablePromise, PromiseUtils } from '@deephaven/utils';\nimport { Column, FilterCondition, Table } from '@deephaven/jsapi-shim';\nimport shortid from 'shortid';\nimport AdvancedFilterCreatorFilterItem from './AdvancedFilterCreatorFilterItem';\nimport AdvancedFilterCreatorSelectValue from './AdvancedFilterCreatorSelectValue';\nimport './AdvancedFilterCreator.scss';\nimport IrisGridModel from './IrisGridModel';\nimport { AdvancedFilterOptions } from './CommonTypes';\n\nconst log = Log.module('AdvancedFilterCreator');\n\ntype FilterChangeHandler = (\n selectedType: FilterTypeValue,\n value: string\n) => void;\n\ninterface AdvancedFilterCreatorProps {\n model: IrisGridModel;\n column: Column;\n onFilterChange: (\n column: Column,\n filter: FilterCondition | null,\n options: AdvancedFilterOptions\n ) => void;\n onSortChange: (\n column: Column,\n direction: SortDirection,\n addToExisting?: boolean\n ) => void;\n onDone: () => void;\n options: AdvancedFilterOptions;\n sortDirection: SortDirection;\n formatter: Formatter;\n}\n\ninterface AdvancedFilterItem {\n selectedType?: FilterTypeValue;\n value?: string;\n key: string;\n}\n\ninterface AdvancedFilterCreatorState {\n // Filter items\n filterItems: AdvancedFilterItem[];\n\n // And/Or between the filter items\n filterOperators: FilterOperatorValue[];\n\n invertSelection: boolean;\n\n selectedValues: unknown[];\n\n valuesTableError: null;\n valuesTable?: Table;\n}\n\nclass AdvancedFilterCreator extends PureComponent<\n AdvancedFilterCreatorProps,\n AdvancedFilterCreatorState\n> {\n static debounceFilterUpdate = 250;\n\n static defaultProps = {\n options: {\n filterItems: null,\n filterOperators: null,\n invertSelection: true,\n selectedValues: [],\n },\n sortDirection: null,\n };\n\n static makeFilterItem(): AdvancedFilterItem {\n return { key: shortid() };\n }\n\n constructor(props: AdvancedFilterCreatorProps) {\n super(props);\n\n this.handleAddAnd = this.handleAddAnd.bind(this);\n this.handleAddOr = this.handleAddOr.bind(this);\n this.handleChangeFilterOperator = this.handleChangeFilterOperator.bind(\n this\n );\n this.handleDone = this.handleDone.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleFilterDelete = this.handleFilterDelete.bind(this);\n this.handleSelectValueChange = this.handleSelectValueChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSortDown = this.handleSortDown.bind(this);\n this.handleSortUp = this.handleSortUp.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleFocusTrapStart = this.handleFocusTrapStart.bind(this);\n this.handleFocusTrapEnd = this.handleFocusTrapEnd.bind(this);\n this.handleUpdateTimeout = this.handleUpdateTimeout.bind(this);\n\n this.focusTrapContainer = React.createRef();\n\n const { options } = props;\n let { filterOperators, invertSelection, selectedValues } = options;\n\n // can be null or an empty array\n const filterItems: AdvancedFilterItem[] =\n options.filterItems?.map(({ selectedType, value }) => ({\n selectedType,\n value,\n key: shortid(),\n })) ?? [];\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n if (filterOperators == null) {\n filterOperators = [];\n }\n if (invertSelection == null) {\n invertSelection = true;\n }\n if (selectedValues == null) {\n selectedValues = [];\n }\n\n this.state = {\n // Filter items\n filterItems,\n\n // And/Or between the filter items\n filterOperators,\n\n invertSelection,\n\n selectedValues,\n\n valuesTableError: null,\n valuesTable: undefined,\n };\n }\n\n componentDidMount(): void {\n this.initValuesTable();\n }\n\n componentWillUnmount(): void {\n if (this.debounceTimeout != null) {\n clearTimeout(this.debounceTimeout);\n this.sendUpdate();\n }\n if (this.valuesTablePromise != null) {\n this.valuesTablePromise.cancel();\n }\n }\n\n focusTrapContainer: React.RefObject<HTMLFormElement>;\n\n debounceTimeout?: ReturnType<typeof setTimeout>;\n\n valuesTablePromise?: CancelablePromise<Table>;\n\n getFilterChangeHandler(index: number): FilterChangeHandler {\n return this.handleFilterChange.bind(this, index);\n }\n\n getFilterDeleteHandler(index: number): () => void {\n return this.handleFilterDelete.bind(this, index);\n }\n\n getFilterTypes = memoize((columnType: string): FilterTypeValue[] =>\n TableUtils.getFilterTypes(columnType)\n );\n\n initValuesTable(): void {\n const { model, column } = this.props;\n if (!model.isValuesTableAvailable) {\n log.debug('No values table for this model, just ignore');\n return;\n }\n\n this.valuesTablePromise = TableUtils.makeCancelableTablePromise(\n model.valuesTable(column)\n );\n this.valuesTablePromise\n .then(valuesTable => {\n const sort = valuesTable.columns[0].sort().asc();\n valuesTable.applySort([sort]);\n\n this.setState({ valuesTable });\n })\n .catch(error => {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n\n log.error('Unable to open values table', error);\n this.setState({ valuesTableError: error });\n });\n }\n\n handleFocusTrapEnd(): void {\n (this.focusTrapContainer?.current?.querySelector(\n 'button,select,input,textarea'\n ) as HTMLElement).focus();\n }\n\n handleFocusTrapStart(): void {\n const inputs = this.focusTrapContainer?.current?.querySelectorAll(\n 'button,select,input,textarea'\n );\n if (inputs && inputs.length > 0) {\n const element = inputs[inputs.length - 1] as HTMLElement;\n element.focus();\n }\n }\n\n handleAddAnd(): void {\n let { filterItems, filterOperators } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.and);\n this.setState({ filterItems, filterOperators });\n }\n\n handleAddOr(): void {\n let { filterItems, filterOperators } = this.state;\n filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.or);\n this.setState({ filterItems, filterOperators });\n }\n\n handleChangeFilterOperator(index: number, operator: string): void {\n let { filterOperators } = this.state;\n filterOperators = [...filterOperators];\n\n assertFilterOperatorValue(operator);\n\n filterOperators[index] = operator;\n\n this.setState({ filterOperators });\n\n this.startUpdateTimer();\n }\n\n handleFilterChange(\n filterIndex: number,\n selectedType: FilterTypeValue,\n value: string\n ): void {\n let { filterItems } = this.state;\n filterItems = [...filterItems];\n const { key } = filterItems[filterIndex];\n filterItems[filterIndex] = { key, selectedType, value };\n\n this.setState({ filterItems });\n\n this.startUpdateTimer();\n }\n\n handleFilterDelete(filterIndex: number): void {\n let { filterItems, filterOperators } = this.state;\n filterItems = [...filterItems];\n filterOperators = [...filterOperators];\n if (filterIndex < filterItems.length) {\n filterItems.splice(filterIndex, 1);\n }\n\n if (filterIndex < filterOperators.length) {\n filterOperators.splice(filterIndex, 1);\n } else if (filterIndex === filterOperators.length) {\n // When deleting the last filter item, we also need to remove the last filter operator\n filterOperators.splice(filterOperators.length - 1, 1);\n }\n\n if (filterItems.length === 0) {\n filterItems.push(AdvancedFilterCreator.makeFilterItem());\n }\n\n this.setState({ filterItems, filterOperators });\n\n this.startUpdateTimer();\n }\n\n handleSelectValueChange(\n selectedValues: unknown[],\n invertSelection: boolean\n ): void {\n this.setState({ selectedValues, invertSelection });\n\n this.startUpdateTimer();\n }\n\n handleReset(): void {\n log.debug('Resetting Advanced Filter');\n\n this.setState({\n filterItems: [AdvancedFilterCreator.makeFilterItem()],\n filterOperators: [],\n selectedValues: [],\n invertSelection: true,\n });\n\n this.startUpdateTimer();\n }\n\n handleSortDown(event: React.MouseEvent<HTMLButtonElement>): void {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.descending, addToExisting);\n }\n\n handleSortUp(event: React.MouseEvent<HTMLButtonElement>): void {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.ascending, addToExisting);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n log.debug('Submitting Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n\n event.preventDefault();\n }\n\n handleDone(event: React.MouseEvent<HTMLButtonElement>): void {\n log.debug('Submitting and Closing Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n\n const { onDone } = this.props;\n onDone();\n\n event.preventDefault();\n }\n\n handleUpdateTimeout(): void {\n this.debounceTimeout = undefined;\n this.sendUpdate();\n }\n\n /**\n * Convenience function to check if the previous filter has been inputted, and\n * we should show the add filter buttons (+ AND OR)\n * @returns true If the add filter buttons should be shown, false otherwise\n */\n shouldShowAddFilter(): boolean {\n const { filterItems } = this.state;\n if (filterItems.length === 0) {\n return false;\n }\n\n const filterItem = filterItems[filterItems.length - 1];\n const { selectedType, value } = filterItem;\n\n return (\n selectedType != null &&\n selectedType.length > 0 &&\n value != null &&\n value.length > 0\n );\n }\n\n /**\n * Sorts the table in the specified direction. If already sorted in that direction, remove it.\n * @param direction The sort direction, ASC or DESC\n * @param addToExisting Add to the existing sort, or replace the existing table sort\n */\n sortTable(direction: SortDirection, addToExisting = false): void {\n const { column, onSortChange } = this.props;\n onSortChange(column, direction, addToExisting);\n }\n\n startUpdateTimer(): void {\n this.stopUpdateTimer();\n\n this.debounceTimeout = setTimeout(\n this.handleUpdateTimeout,\n AdvancedFilterCreator.debounceFilterUpdate\n );\n }\n\n stopUpdateTimer(): void {\n if (this.debounceTimeout !== undefined) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = undefined;\n }\n }\n\n sendUpdate(): void {\n const {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues,\n } = this.state;\n const { column, onFilterChange, model } = this.props;\n const { formatter } = model;\n\n const items = filterItems.filter(\n ({ selectedType, value }) =>\n selectedType != null && value != null && value !== ''\n ) as FilterItem[];\n\n const operators = filterOperators\n .filter(\n (operator, i) =>\n operator != null &&\n filterItems[i].selectedType != null &&\n filterItems[i].value != null &&\n filterItems[i].value !== ''\n )\n .slice(0, items.length - 1);\n // slice last operator, user may have set an operator but not a value\n\n const options = {\n filterItems: items,\n filterOperators: operators,\n invertSelection,\n selectedValues,\n };\n\n const filter = TableUtils.makeAdvancedFilter(\n column,\n options,\n formatter.timeZone\n );\n\n onFilterChange(column, filter, options);\n }\n\n render(): JSX.Element {\n const { column, model, sortDirection, formatter } = this.props;\n const {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues,\n valuesTable,\n valuesTableError,\n } = this.state;\n const { isValuesTableAvailable } = model;\n const isBoolean = TableUtils.isBooleanType(column.type);\n const isDateType = TableUtils.isDateType(column.type);\n const filterTypes = this.getFilterTypes(column.type);\n const columnType = column.type.substring(column.type.lastIndexOf('.') + 1);\n const filterItemElements = [];\n if (!isBoolean && filterTypes.length) {\n for (let i = 0; i < filterItems.length; i += 1) {\n const filterItem = filterItems[i];\n const { key, selectedType, value } = filterItem;\n\n const element = (\n <AdvancedFilterCreatorFilterItem\n key={key}\n column={column}\n filterTypes={filterTypes}\n onChange={this.getFilterChangeHandler(i)}\n onDelete={this.getFilterDeleteHandler(i)}\n selectedType={selectedType}\n value={value}\n formatter={formatter}\n />\n );\n filterItemElements.push(element);\n\n if (i < filterOperators.length) {\n const filterOperator = filterOperators[i];\n const isAndFilter = filterOperator === FilterOperator.and;\n const operatorElement = (\n <div\n key={`filterOperator${key}`}\n className=\"form-row justify-content-end advanced-filter-creator-filter-operator\"\n >\n <Button\n kind=\"ghost\"\n className={classNames('filter-operator', {\n active: isAndFilter,\n })}\n onClick={() =>\n this.handleChangeFilterOperator(i, FilterOperator.and)\n }\n >\n AND\n </Button>\n <Button\n kind=\"ghost\"\n className={classNames('filter-operator', {\n active: !isAndFilter,\n })}\n onClick={() =>\n this.handleChangeFilterOperator(i, FilterOperator.or)\n }\n >\n OR\n </Button>\n </div>\n );\n filterItemElements.push(operatorElement);\n }\n }\n }\n const showAddFilterItem = this.shouldShowAddFilter();\n const addFilterItem = (\n <div\n key=\"addFilterItem\"\n className={classNames('form-row justify-content-end add-filter-item', {\n hidden: !showAddFilterItem,\n })}\n >\n <span className=\"text-muted\">\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n </span>\n <Button\n kind=\"ghost\"\n className=\"btn-filter-item\"\n onClick={this.handleAddAnd}\n disabled={!showAddFilterItem}\n tooltip=\"Add filter with AND\"\n >\n AND\n </Button>\n <Button\n kind=\"ghost\"\n className=\"btn-filter-item\"\n onClick={this.handleAddOr}\n disabled={!showAddFilterItem}\n tooltip=\"Add filter with OR\"\n >\n OR\n </Button>\n </div>\n );\n filterItemElements.push(addFilterItem);\n\n return (\n <div className=\"advanced-filter-creator\" role=\"presentation\">\n <div tabIndex={0} onFocus={this.handleFocusTrapStart} />\n <form onSubmit={this.handleSubmit} ref={this.focusTrapContainer}>\n <div className=\"title-bar\">\n <h6 className=\"advanced-filter-title\">Advanced Filters</h6>\n <div className=\"advanced-filter-menu-buttons\">\n <Button\n kind=\"ghost\"\n className={classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.descending,\n })}\n onClick={this.handleSortDown}\n icon={dhSortAmountDown}\n tooltip={`Sort ${column.name} Descending`}\n />\n <Button\n kind=\"ghost\"\n className={classNames('sort-operator', {\n active: sortDirection === TableUtils.sortDirection.ascending,\n })}\n onClick={this.handleSortUp}\n icon={\n <FontAwesomeIcon icon={dhSortAmountDown} rotation={180} />\n }\n tooltip={`Sort ${column.name} Ascending`}\n />\n </div>\n </div>\n <hr />\n <div className=\"advanced-filter-column-name\">\n {column.name} \n <span className=\"column-type\">({columnType})</span>\n </div>\n {filterItemElements}\n {isValuesTableAvailable && valuesTableError == null && (\n <>\n {!isBoolean && <hr />}\n <div className=\"form-group\">\n <AdvancedFilterCreatorSelectValue<unknown>\n table={valuesTable}\n onChange={this.handleSelectValueChange}\n invertSelection={invertSelection}\n selectedValues={selectedValues}\n formatter={formatter}\n showSearch={!isDateType}\n timeZone={formatter.timeZone}\n />\n </div>\n </>\n )}\n <div className=\"form-row justify-content-end\">\n <Button\n kind=\"secondary\"\n className=\"mr-2\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n <Button kind=\"primary\" onClick={this.handleDone}>\n Done\n </Button>\n </div>\n </form>\n <div tabIndex={0} onFocus={this.handleFocusTrapEnd} />\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreator;\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { PureComponent } from 'react';
|
|
2
2
|
import { TypeValue as FilterTypeValue } from '@deephaven/filters';
|
|
3
|
-
import
|
|
4
|
-
import { AdvancedFilterItemType, Formatter
|
|
3
|
+
import { Column } from '@deephaven/jsapi-shim';
|
|
4
|
+
import { AdvancedFilterItemType, Formatter } from '@deephaven/jsapi-utils';
|
|
5
5
|
import './AdvancedFilterCreatorFilterItem.scss';
|
|
6
6
|
export interface AdvancedFilterCreatorFilterItemProps {
|
|
7
7
|
column: Column;
|
|
@@ -11,7 +11,6 @@ export interface AdvancedFilterCreatorFilterItemProps {
|
|
|
11
11
|
selectedType?: FilterTypeValue;
|
|
12
12
|
value?: string;
|
|
13
13
|
formatter: Formatter;
|
|
14
|
-
tableUtils: TableUtils;
|
|
15
14
|
}
|
|
16
15
|
export type AdvancedFilterCreatorFilterItemState = AdvancedFilterItemType;
|
|
17
16
|
export declare class AdvancedFilterCreatorFilterItem extends PureComponent<AdvancedFilterCreatorFilterItemProps, AdvancedFilterCreatorFilterItemState> {
|
|
@@ -23,7 +22,7 @@ export declare class AdvancedFilterCreatorFilterItem extends PureComponent<Advan
|
|
|
23
22
|
handleTypeChange(event: React.ChangeEvent<HTMLSelectElement>): void;
|
|
24
23
|
handleValueChange(event: React.ChangeEvent<HTMLInputElement>): void;
|
|
25
24
|
handleDelete(): void;
|
|
26
|
-
getCachedIsValid: (column: Column, operation: FilterTypeValue, value: string, timeZone: string
|
|
25
|
+
getCachedIsValid: (column: Column, operation: FilterTypeValue, value: string, timeZone: string) => boolean;
|
|
27
26
|
render(): JSX.Element;
|
|
28
27
|
}
|
|
29
28
|
export default AdvancedFilterCreatorFilterItem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedFilterCreatorFilterItem.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreatorFilterItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAKL,SAAS,IAAI,eAAe,EAC7B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,
|
|
1
|
+
{"version":3,"file":"AdvancedFilterCreatorFilterItem.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreatorFilterItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAKL,SAAS,IAAI,eAAe,EAC7B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,SAAS,EAEV,MAAM,wBAAwB,CAAC;AAIhC,OAAO,wCAAwC,CAAC;AAIhD,MAAM,WAAW,oCAAoC;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,QAAQ,IAAI,IAAI,CAAC;IACjB,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,MAAM,oCAAoC,GAAG,sBAAsB,CAAC;AAE1E,qBAAa,+BAAgC,SAAQ,aAAa,CAChE,oCAAoC,EACpC,oCAAoC,CACrC;IACC,MAAM,CAAC,iBAAiB,CACtB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,eAAe,GAC1B,MAAM;gBAwBG,KAAK,EAAE,oCAAoC;IAgBvD,iBAAiB,IAAI,IAAI;IAIzB,kBAAkB,CAAC,SAAS,EAAE,oCAAoC,GAAG,IAAI;IAUzE,YAAY,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAEvC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAanE,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAanE,YAAY,IAAI,IAAI;IAOpB,gBAAgB,WAEJ,MAAM,aACH,eAAe,SACnB,MAAM,YACH,MAAM,KACf,OAAO,CAgBV;IAEF,MAAM,IAAI,GAAG,CAAC,OAAO;CAkEtB;AAED,eAAe,+BAA+B,CAAC"}
|
|
@@ -36,10 +36,10 @@ export class AdvancedFilterCreatorFilterItem extends PureComponent {
|
|
|
36
36
|
constructor(props) {
|
|
37
37
|
super(props);
|
|
38
38
|
_defineProperty(this, "typeDropdown", void 0);
|
|
39
|
-
_defineProperty(this, "getCachedIsValid", memoizeOne((column, operation, value, timeZone
|
|
39
|
+
_defineProperty(this, "getCachedIsValid", memoizeOne((column, operation, value, timeZone) => {
|
|
40
40
|
try {
|
|
41
41
|
// We don't want to show an error for an empty value
|
|
42
|
-
return !value ||
|
|
42
|
+
return !value || TableUtils.makeAdvancedValueFilter(column, operation, value, timeZone) != null;
|
|
43
43
|
} catch (e) {
|
|
44
44
|
return false;
|
|
45
45
|
}
|
|
@@ -125,8 +125,7 @@ export class AdvancedFilterCreatorFilterItem extends PureComponent {
|
|
|
125
125
|
var {
|
|
126
126
|
column,
|
|
127
127
|
filterTypes,
|
|
128
|
-
formatter
|
|
129
|
-
tableUtils
|
|
128
|
+
formatter
|
|
130
129
|
} = this.props;
|
|
131
130
|
var {
|
|
132
131
|
selectedType,
|
|
@@ -134,7 +133,7 @@ export class AdvancedFilterCreatorFilterItem extends PureComponent {
|
|
|
134
133
|
} = this.state;
|
|
135
134
|
var showValueInput = !TableUtils.isBooleanType(column.type);
|
|
136
135
|
var typeOptionElements = [];
|
|
137
|
-
var isValid = this.getCachedIsValid(column, selectedType, value, formatter.timeZone
|
|
136
|
+
var isValid = this.getCachedIsValid(column, selectedType, value, formatter.timeZone);
|
|
138
137
|
for (var i = 0; i < filterTypes.length; i += 1) {
|
|
139
138
|
var _type = filterTypes[i];
|
|
140
139
|
var label = AdvancedFilterCreatorFilterItem.getLabelForFilter(column.type, _type);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedFilterCreatorFilterItem.js","names":["React","PureComponent","Button","getLabelForBooleanFilter","getLabelForDateFilter","getLabelForNumberFilter","getLabelForTextFilter","vsTrash","TableUtils","Log","classNames","memoizeOne","log","module","AdvancedFilterCreatorFilterItem","getLabelForFilter","columnType","filterType","isNumberType","isCharType","isTextType","isDateType","isBooleanType","Error","e","warn","constructor","props","column","operation","value","timeZone","tableUtils","makeAdvancedValueFilter","handleDelete","bind","handleTypeChange","handleValueChange","typeDropdown","filterTypes","selectedType","state","componentDidMount","focus","componentDidUpdate","prevProps","undefined","setState","event","target","debug2","onChange","length","debug","onDelete","render","formatter","showValueInput","type","typeOptionElements","isValid","getCachedIsValid","i","label","element","push","error"],"sources":["../src/AdvancedFilterCreatorFilterItem.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { Button } from '@deephaven/components';\nimport {\n getLabelForBooleanFilter,\n getLabelForDateFilter,\n getLabelForNumberFilter,\n getLabelForTextFilter,\n TypeValue as FilterTypeValue,\n} from '@deephaven/filters';\nimport { vsTrash } from '@deephaven/icons';\nimport type { Column } from '@deephaven/jsapi-types';\nimport {\n AdvancedFilterItemType,\n Formatter,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport classNames from 'classnames';\nimport memoizeOne from 'memoize-one';\nimport './AdvancedFilterCreatorFilterItem.scss';\n\nconst log = Log.module('AdvancedFilterCreatorFilterItem');\n\nexport interface AdvancedFilterCreatorFilterItemProps {\n column: Column;\n filterTypes: FilterTypeValue[];\n onChange(type: FilterTypeValue, value: string): void;\n onDelete(): void;\n selectedType?: FilterTypeValue;\n value?: string;\n formatter: Formatter;\n tableUtils: TableUtils;\n}\n\nexport type AdvancedFilterCreatorFilterItemState = AdvancedFilterItemType;\n\nexport class AdvancedFilterCreatorFilterItem extends PureComponent<\n AdvancedFilterCreatorFilterItemProps,\n AdvancedFilterCreatorFilterItemState\n> {\n static getLabelForFilter(\n columnType: string,\n filterType: FilterTypeValue\n ): string {\n try {\n if (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isCharType(columnType)\n ) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getLabelForBooleanFilter(filterType);\n }\n throw new Error(`Unrecognized column type: ${columnType}`);\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n\n constructor(props: AdvancedFilterCreatorFilterItemProps) {\n super(props);\n\n this.handleDelete = this.handleDelete.bind(this);\n this.handleTypeChange = this.handleTypeChange.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.typeDropdown = null;\n\n const { value = '', filterTypes, selectedType = filterTypes[0] } = props;\n\n this.state = {\n selectedType,\n value,\n };\n }\n\n componentDidMount(): void {\n this.typeDropdown?.focus();\n }\n\n componentDidUpdate(prevProps: AdvancedFilterCreatorFilterItemProps): void {\n const { value, selectedType } = this.props;\n if (selectedType !== undefined && prevProps.selectedType !== selectedType) {\n this.setState({ selectedType });\n }\n if (value !== undefined && prevProps.value !== value) {\n this.setState({ value });\n }\n }\n\n typeDropdown: HTMLSelectElement | null;\n\n handleTypeChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const selectedType = event.target.value as FilterTypeValue;\n log.debug2('typeChange', selectedType);\n this.setState({ selectedType });\n\n const { onChange } = this.props;\n const { value } = this.state;\n if (value != null && value.length > 0) {\n // Don't send an update unless there's already a value entered\n onChange(selectedType, value);\n }\n }\n\n handleValueChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('valueChange');\n const { value } = event.target;\n this.setState({ value });\n\n const { onChange } = this.props;\n const { selectedType } = this.state;\n if (selectedType != null) {\n // Don't send an update unless they've already selected a type\n onChange(selectedType, value);\n }\n }\n\n handleDelete(): void {\n log.debug('delete');\n\n const { onDelete } = this.props;\n onDelete();\n }\n\n getCachedIsValid = memoizeOne(\n (\n column: Column,\n operation: FilterTypeValue,\n value: string,\n timeZone: string,\n tableUtils: TableUtils\n ): boolean => {\n try {\n // We don't want to show an error for an empty value\n return (\n !value ||\n tableUtils.makeAdvancedValueFilter(\n column,\n operation,\n value,\n timeZone\n ) != null\n );\n } catch (e) {\n return false;\n }\n }\n );\n\n render(): JSX.Element {\n const { column, filterTypes, formatter, tableUtils } = this.props;\n const { selectedType, value } = this.state;\n const showValueInput = !TableUtils.isBooleanType(column.type);\n const typeOptionElements = [];\n const isValid = this.getCachedIsValid(\n column,\n selectedType,\n value,\n formatter.timeZone,\n tableUtils\n );\n for (let i = 0; i < filterTypes.length; i += 1) {\n const type = filterTypes[i];\n const label = AdvancedFilterCreatorFilterItem.getLabelForFilter(\n column.type,\n type\n );\n const element = (\n <option key={type} value={type}>\n {label}\n </option>\n );\n typeOptionElements.push(element);\n }\n\n return (\n <div className=\"advanced-filter-creator-filter-item\">\n <div className=\"form-row\">\n <div className=\"form-group col\">\n <select\n className=\"form-control custom-select\"\n value={selectedType}\n onChange={this.handleTypeChange}\n ref={typeDropdown => {\n this.typeDropdown = typeDropdown;\n }}\n >\n {typeOptionElements}\n </select>\n </div>\n {showValueInput && (\n <div className=\"form-group col\">\n <div className=\"input-group\">\n <input\n type=\"text\"\n className={classNames('form-control', { error: !isValid })}\n placeholder=\"Enter value\"\n value={value}\n onChange={this.handleValueChange}\n />\n </div>\n </div>\n )}\n <div className=\"form-group col-1 px-0\">\n <Button\n kind=\"ghost\"\n className=\"w-100 h-100 p-0 m-0\"\n onClick={this.handleDelete}\n icon={vsTrash}\n tooltip=\"Remove Filter\"\n />\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorFilterItem;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdvancedFilterCreatorFilterItem.js","names":["React","PureComponent","Button","getLabelForBooleanFilter","getLabelForDateFilter","getLabelForNumberFilter","getLabelForTextFilter","vsTrash","TableUtils","Log","classNames","memoizeOne","log","module","AdvancedFilterCreatorFilterItem","getLabelForFilter","columnType","filterType","isNumberType","isCharType","isTextType","isDateType","isBooleanType","Error","e","warn","constructor","props","column","operation","value","timeZone","makeAdvancedValueFilter","handleDelete","bind","handleTypeChange","handleValueChange","typeDropdown","filterTypes","selectedType","state","componentDidMount","focus","componentDidUpdate","prevProps","undefined","setState","event","target","debug2","onChange","length","debug","onDelete","render","formatter","showValueInput","type","typeOptionElements","isValid","getCachedIsValid","i","label","element","push","error"],"sources":["../src/AdvancedFilterCreatorFilterItem.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { Button } from '@deephaven/components';\nimport {\n getLabelForBooleanFilter,\n getLabelForDateFilter,\n getLabelForNumberFilter,\n getLabelForTextFilter,\n TypeValue as FilterTypeValue,\n} from '@deephaven/filters';\nimport { vsTrash } from '@deephaven/icons';\nimport { Column } from '@deephaven/jsapi-shim';\nimport {\n AdvancedFilterItemType,\n Formatter,\n TableUtils,\n} from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport classNames from 'classnames';\nimport memoizeOne from 'memoize-one';\nimport './AdvancedFilterCreatorFilterItem.scss';\n\nconst log = Log.module('AdvancedFilterCreatorFilterItem');\n\nexport interface AdvancedFilterCreatorFilterItemProps {\n column: Column;\n filterTypes: FilterTypeValue[];\n onChange(type: FilterTypeValue, value: string): void;\n onDelete(): void;\n selectedType?: FilterTypeValue;\n value?: string;\n formatter: Formatter;\n}\n\nexport type AdvancedFilterCreatorFilterItemState = AdvancedFilterItemType;\n\nexport class AdvancedFilterCreatorFilterItem extends PureComponent<\n AdvancedFilterCreatorFilterItemProps,\n AdvancedFilterCreatorFilterItemState\n> {\n static getLabelForFilter(\n columnType: string,\n filterType: FilterTypeValue\n ): string {\n try {\n if (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isCharType(columnType)\n ) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n return getLabelForBooleanFilter(filterType);\n }\n throw new Error(`Unrecognized column type: ${columnType}`);\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n\n constructor(props: AdvancedFilterCreatorFilterItemProps) {\n super(props);\n\n this.handleDelete = this.handleDelete.bind(this);\n this.handleTypeChange = this.handleTypeChange.bind(this);\n this.handleValueChange = this.handleValueChange.bind(this);\n this.typeDropdown = null;\n\n const { value = '', filterTypes, selectedType = filterTypes[0] } = props;\n\n this.state = {\n selectedType,\n value,\n };\n }\n\n componentDidMount(): void {\n this.typeDropdown?.focus();\n }\n\n componentDidUpdate(prevProps: AdvancedFilterCreatorFilterItemProps): void {\n const { value, selectedType } = this.props;\n if (selectedType !== undefined && prevProps.selectedType !== selectedType) {\n this.setState({ selectedType });\n }\n if (value !== undefined && prevProps.value !== value) {\n this.setState({ value });\n }\n }\n\n typeDropdown: HTMLSelectElement | null;\n\n handleTypeChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const selectedType = event.target.value as FilterTypeValue;\n log.debug2('typeChange', selectedType);\n this.setState({ selectedType });\n\n const { onChange } = this.props;\n const { value } = this.state;\n if (value != null && value.length > 0) {\n // Don't send an update unless there's already a value entered\n onChange(selectedType, value);\n }\n }\n\n handleValueChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('valueChange');\n const { value } = event.target;\n this.setState({ value });\n\n const { onChange } = this.props;\n const { selectedType } = this.state;\n if (selectedType != null) {\n // Don't send an update unless they've already selected a type\n onChange(selectedType, value);\n }\n }\n\n handleDelete(): void {\n log.debug('delete');\n\n const { onDelete } = this.props;\n onDelete();\n }\n\n getCachedIsValid = memoizeOne(\n (\n column: Column,\n operation: FilterTypeValue,\n value: string,\n timeZone: string\n ): boolean => {\n try {\n // We don't want to show an error for an empty value\n return (\n !value ||\n TableUtils.makeAdvancedValueFilter(\n column,\n operation,\n value,\n timeZone\n ) != null\n );\n } catch (e) {\n return false;\n }\n }\n );\n\n render(): JSX.Element {\n const { column, filterTypes, formatter } = this.props;\n const { selectedType, value } = this.state;\n const showValueInput = !TableUtils.isBooleanType(column.type);\n const typeOptionElements = [];\n const isValid = this.getCachedIsValid(\n column,\n selectedType,\n value,\n formatter.timeZone\n );\n for (let i = 0; i < filterTypes.length; i += 1) {\n const type = filterTypes[i];\n const label = AdvancedFilterCreatorFilterItem.getLabelForFilter(\n column.type,\n type\n );\n const element = (\n <option key={type} value={type}>\n {label}\n </option>\n );\n typeOptionElements.push(element);\n }\n\n return (\n <div className=\"advanced-filter-creator-filter-item\">\n <div className=\"form-row\">\n <div className=\"form-group col\">\n <select\n className=\"form-control custom-select\"\n value={selectedType}\n onChange={this.handleTypeChange}\n ref={typeDropdown => {\n this.typeDropdown = typeDropdown;\n }}\n >\n {typeOptionElements}\n </select>\n </div>\n {showValueInput && (\n <div className=\"form-group col\">\n <div className=\"input-group\">\n <input\n type=\"text\"\n className={classNames('form-control', { error: !isValid })}\n placeholder=\"Enter value\"\n value={value}\n onChange={this.handleValueChange}\n />\n </div>\n </div>\n )}\n <div className=\"form-group col-1 px-0\">\n <Button\n kind=\"ghost\"\n className=\"w-100 h-100 p-0 m-0\"\n onClick={this.handleDelete}\n icon={vsTrash}\n tooltip=\"Remove Filter\"\n />\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorFilterItem;\n"],"mappings":"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"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import React, { PureComponent } from 'react';
|
|
2
|
-
import { Formatter
|
|
3
|
-
import
|
|
2
|
+
import { Formatter } from '@deephaven/jsapi-utils';
|
|
3
|
+
import { FilterCondition, Table } from '@deephaven/jsapi-shim';
|
|
4
4
|
import './AdvancedFilterCreatorSelectValue.scss';
|
|
5
5
|
import { ColumnName } from './CommonTypes';
|
|
6
6
|
interface AdvancedFilterCreatorSelectValueProps<T> {
|
|
7
|
-
dh: DhType;
|
|
8
7
|
invertSelection: boolean;
|
|
9
8
|
selectedValues: T[];
|
|
10
9
|
table?: Table;
|
|
@@ -34,7 +33,6 @@ declare class AdvancedFilterCreatorSelectValue<T = unknown> extends PureComponen
|
|
|
34
33
|
componentDidUpdate(prevProps: AdvancedFilterCreatorSelectValueProps<T>, prevState: AdvancedFilterCreatorSelectValueState<T>): void;
|
|
35
34
|
componentWillUnmount(): void;
|
|
36
35
|
searchTablePromise?: Promise<Table>;
|
|
37
|
-
tableUtils: TableUtils;
|
|
38
36
|
updateFilterTimer?: ReturnType<typeof setTimeout>;
|
|
39
37
|
getColumnName(): ColumnName;
|
|
40
38
|
getDisplayedValuesCount(): number | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedFilterCreatorSelectValue.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreatorSelectValue.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG7C,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"AdvancedFilterCreatorSelectValue.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreatorSelectValue.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG7C,OAAO,EAAE,SAAS,EAAc,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG/D,OAAO,yCAAyC,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,UAAU,qCAAqC,CAAC,CAAC;IAC/C,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,OAAO,KAAK,IAAI,CAAC;IAClE,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,qCAAqC,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,cAAM,gCAAgC,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,aAAa,CACvE,qCAAqC,CAAC,CAAC,CAAC,EACxC,qCAAqC,CAAC,CAAC,CAAC,CACzC;IACC,MAAM,CAAC,kBAAkB,SAAO;IAEhC,MAAM,CAAC,YAAY;;;wBAGH,IAAI;;MAElB;gBAEU,KAAK,EAAE,qCAAqC,CAAC,CAAC,CAAC;IAmB3D,iBAAiB,IAAI,IAAI;IAIzB,kBAAkB,CAChB,SAAS,EAAE,qCAAqC,CAAC,CAAC,CAAC,EACnD,SAAS,EAAE,qCAAqC,CAAC,CAAC,CAAC,GAClD,IAAI;IA8BP,oBAAoB,IAAI,IAAI;IAU5B,kBAAkB,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAEpC,iBAAiB,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAElD,aAAa,IAAI,UAAU;IAQ3B,uBAAuB,IAAI,MAAM,GAAG,IAAI;IAYxC,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAqBtC,eAAe,IAAI,IAAI;IAkBvB,gBAAgB,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI;IAOrE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAKpE,oBAAoB,IAAI,IAAI;IAI5B,mBAAmB,IAAI,IAAI;IAI3B,yBAAyB,IAAI,IAAI;IAKjC,cAAc,CAAC,eAAe,EAAE,OAAO,GAAG,IAAI;IAS9C,sBAAsB,IAAI,IAAI;IAS9B,qBAAqB,IAAI,IAAI;IAO7B,iBAAiB,IAAI,IAAI;IAqCzB,MAAM,IAAI,KAAK,CAAC,YAAY;CA+D7B;AAED,eAAe,gCAAgC,CAAC"}
|
|
@@ -13,7 +13,6 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
|
|
|
13
13
|
constructor(props) {
|
|
14
14
|
super(props);
|
|
15
15
|
_defineProperty(this, "searchTablePromise", void 0);
|
|
16
|
-
_defineProperty(this, "tableUtils", void 0);
|
|
17
16
|
_defineProperty(this, "updateFilterTimer", void 0);
|
|
18
17
|
this.handleSelectAllClick = this.handleSelectAllClick.bind(this);
|
|
19
18
|
this.handleClearAllClick = this.handleClearAllClick.bind(this);
|
|
@@ -21,11 +20,9 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
|
|
|
21
20
|
this.handleSearchChange = this.handleSearchChange.bind(this);
|
|
22
21
|
this.handleUpdateFilterTimeout = this.handleUpdateFilterTimeout.bind(this);
|
|
23
22
|
var {
|
|
24
|
-
dh,
|
|
25
23
|
invertSelection,
|
|
26
24
|
selectedValues
|
|
27
25
|
} = props;
|
|
28
|
-
this.tableUtils = new TableUtils(dh);
|
|
29
26
|
this.state = {
|
|
30
27
|
filters: [],
|
|
31
28
|
invertSelection,
|
|
@@ -198,9 +195,6 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
|
|
|
198
195
|
var {
|
|
199
196
|
timeZone
|
|
200
197
|
} = this.props;
|
|
201
|
-
var {
|
|
202
|
-
tableUtils
|
|
203
|
-
} = this;
|
|
204
198
|
var column = table === null || table === void 0 ? void 0 : table.columns[0];
|
|
205
199
|
var filters = [];
|
|
206
200
|
if (column == null) {
|
|
@@ -211,14 +205,14 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
|
|
|
211
205
|
var filter = null;
|
|
212
206
|
if (TableUtils.isCharType(column.type)) {
|
|
213
207
|
// Just exact match for char
|
|
214
|
-
filter =
|
|
208
|
+
filter = TableUtils.makeQuickFilter(column, searchText);
|
|
215
209
|
} else if (TableUtils.isTextType(column.type)) {
|
|
216
210
|
// case insensitive & contains search text
|
|
217
|
-
filter =
|
|
211
|
+
filter = TableUtils.makeQuickFilter(column, "~".concat(searchText), timeZone);
|
|
218
212
|
} else {
|
|
219
213
|
// greater than or equal search for everything else
|
|
220
214
|
// we may want to be smarter with some other types (like dates)
|
|
221
|
-
filter =
|
|
215
|
+
filter = TableUtils.makeQuickFilter(column, ">=".concat(searchText), timeZone);
|
|
222
216
|
}
|
|
223
217
|
if (filter != null) {
|
|
224
218
|
filters.push(filter);
|
|
@@ -241,7 +235,6 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
|
|
|
241
235
|
table
|
|
242
236
|
} = this.state;
|
|
243
237
|
var {
|
|
244
|
-
dh,
|
|
245
238
|
formatter,
|
|
246
239
|
showSearch
|
|
247
240
|
} = this.props;
|
|
@@ -264,7 +257,6 @@ class AdvancedFilterCreatorSelectValue extends PureComponent {
|
|
|
264
257
|
value: searchText,
|
|
265
258
|
onChange: this.handleSearchChange
|
|
266
259
|
})), /*#__PURE__*/React.createElement(AdvancedFilterCreatorSelectValueList, {
|
|
267
|
-
dh: dh,
|
|
268
260
|
table: table,
|
|
269
261
|
filters: filters,
|
|
270
262
|
invertSelection: invertSelection,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedFilterCreatorSelectValue.js","names":["React","PureComponent","CSSTransition","classNames","TableUtils","Button","AdvancedFilterCreatorSelectValueList","AdvancedFilterCreatorSelectValue","constructor","props","handleSelectAllClick","bind","handleClearAllClick","handleListChange","handleSearchChange","handleUpdateFilterTimeout","dh","invertSelection","selectedValues","tableUtils","state","filters","searchText","componentDidMount","initSearchTable","componentDidUpdate","prevProps","prevState","table","setState","searchTable","close","startUpdateFilterTimer","componentWillUnmount","searchTablePromise","undefined","stopUpdateFilterTimer","getColumnName","columns","name","getDisplayedValuesCount","totalSize","length","getDisplayedValueText","count","formatter","formattedCount","getFormattedString","formattedTableSize","prefix","copy","then","onChange","event","target","value","resetSelection","updateFilterTimer","updateTableFilter","setTimeout","searchDebounceTime","clearTimeout","timeZone","column","error","filter","isCharType","type","makeQuickFilter","isTextType","push","render","showSearch","columnName","displayedValuesText","placeholderText"],"sources":["../src/AdvancedFilterCreatorSelectValue.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport classNames from 'classnames';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport type {\n dh as DhType,\n FilterCondition,\n Table,\n} from '@deephaven/jsapi-types';\nimport { Button } from '@deephaven/components';\nimport AdvancedFilterCreatorSelectValueList from './AdvancedFilterCreatorSelectValueList';\nimport './AdvancedFilterCreatorSelectValue.scss';\nimport { ColumnName } from './CommonTypes';\n\ninterface AdvancedFilterCreatorSelectValueProps<T> {\n dh: DhType;\n invertSelection: boolean;\n selectedValues: T[];\n table?: Table;\n formatter: Formatter;\n onChange: (selectedValues: T[], invertSelection: boolean) => void;\n showSearch: boolean;\n timeZone: string;\n}\n\ninterface AdvancedFilterCreatorSelectValueState<T> {\n error?: string;\n filters: FilterCondition[];\n invertSelection: boolean;\n selectedValues: T[];\n searchText: string;\n table?: Table;\n}\n\nclass AdvancedFilterCreatorSelectValue<T = unknown> extends PureComponent<\n AdvancedFilterCreatorSelectValueProps<T>,\n AdvancedFilterCreatorSelectValueState<T>\n> {\n static searchDebounceTime = 250;\n\n static defaultProps = {\n invertSelection: true,\n selectedValues: [],\n onChange: (): void => undefined,\n showSearch: true,\n };\n\n constructor(props: AdvancedFilterCreatorSelectValueProps<T>) {\n super(props);\n\n this.handleSelectAllClick = this.handleSelectAllClick.bind(this);\n this.handleClearAllClick = this.handleClearAllClick.bind(this);\n this.handleListChange = this.handleListChange.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUpdateFilterTimeout = this.handleUpdateFilterTimeout.bind(this);\n\n const { dh, invertSelection, selectedValues } = props;\n\n this.tableUtils = new TableUtils(dh);\n\n this.state = {\n filters: [],\n invertSelection,\n selectedValues,\n searchText: '',\n };\n }\n\n componentDidMount(): void {\n this.initSearchTable();\n }\n\n componentDidUpdate(\n prevProps: AdvancedFilterCreatorSelectValueProps<T>,\n prevState: AdvancedFilterCreatorSelectValueState<T>\n ): void {\n const { invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n this.initSearchTable();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ invertSelection });\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues });\n }\n\n const { table: searchTable, searchText } = this.state;\n\n if (searchTable !== prevState.table) {\n if (prevState.table != null) {\n prevState.table.close();\n }\n if (searchTable != null) {\n this.startUpdateFilterTimer();\n }\n }\n\n if (searchText !== prevState.searchText) {\n this.startUpdateFilterTimer();\n }\n }\n\n componentWillUnmount(): void {\n const { table } = this.state;\n if (table != null) {\n table.close();\n }\n this.searchTablePromise = undefined;\n\n this.stopUpdateFilterTimer();\n }\n\n searchTablePromise?: Promise<Table>;\n\n tableUtils: TableUtils;\n\n updateFilterTimer?: ReturnType<typeof setTimeout>;\n\n getColumnName(): ColumnName {\n const { table } = this.props;\n if (table != null) {\n return table.columns[0].name;\n }\n return '';\n }\n\n getDisplayedValuesCount(): number | null {\n const { invertSelection, selectedValues, table } = this.state;\n if (table == null) {\n return null;\n }\n\n if (invertSelection) {\n return table.totalSize - selectedValues.length;\n }\n return selectedValues.length;\n }\n\n getDisplayedValueText(): string | null {\n const count = this.getDisplayedValuesCount();\n const { table } = this.state;\n\n const { formatter } = this.props;\n\n if (count != null && table != null) {\n const formattedCount = formatter.getFormattedString(count, 'long');\n const formattedTableSize = formatter.getFormattedString(\n table.totalSize,\n 'long'\n );\n let prefix = '';\n if (count < 1000000) {\n prefix = 'Displaying ';\n }\n return `${prefix}${formattedCount} of ${formattedTableSize}`;\n }\n return null;\n }\n\n initSearchTable(): void {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n const searchTablePromise = table.copy();\n this.searchTablePromise = searchTablePromise;\n this.searchTablePromise.then(searchTable => {\n if (this.searchTablePromise === searchTablePromise) {\n this.setState({ table: searchTable });\n this.searchTablePromise = undefined;\n } else {\n searchTable.close();\n }\n });\n }\n\n handleListChange(selectedValues: T[], invertSelection: boolean): void {\n this.setState({ selectedValues, invertSelection });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleSearchChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const searchText = event.target.value;\n this.setState({ searchText });\n }\n\n handleSelectAllClick(): void {\n this.resetSelection(true);\n }\n\n handleClearAllClick(): void {\n this.resetSelection(false);\n }\n\n handleUpdateFilterTimeout(): void {\n this.updateFilterTimer = undefined;\n this.updateTableFilter();\n }\n\n resetSelection(invertSelection: boolean): void {\n const selectedValues: T[] = [];\n\n this.setState({ invertSelection, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n startUpdateFilterTimer(): void {\n this.stopUpdateFilterTimer();\n\n this.updateFilterTimer = setTimeout(\n this.handleUpdateFilterTimeout,\n AdvancedFilterCreatorSelectValue.searchDebounceTime\n );\n }\n\n stopUpdateFilterTimer(): void {\n if (this.updateFilterTimer != null) {\n clearTimeout(this.updateFilterTimer);\n this.updateFilterTimer = undefined;\n }\n }\n\n updateTableFilter(): void {\n const { table, searchText } = this.state;\n const { timeZone } = this.props;\n const { tableUtils } = this;\n const column = table?.columns[0];\n const filters = [];\n if (column == null) {\n return;\n }\n let error;\n if (searchText.length > 0) {\n let filter = null;\n if (TableUtils.isCharType(column.type)) {\n // Just exact match for char\n filter = tableUtils.makeQuickFilter(column, searchText);\n } else if (TableUtils.isTextType(column.type)) {\n // case insensitive & contains search text\n filter = tableUtils.makeQuickFilter(column, `~${searchText}`, timeZone);\n } else {\n // greater than or equal search for everything else\n // we may want to be smarter with some other types (like dates)\n filter = tableUtils.makeQuickFilter(\n column,\n `>=${searchText}`,\n timeZone\n );\n }\n\n if (filter != null) {\n filters.push(filter);\n } else {\n error = 'Invalid search text';\n }\n }\n\n this.setState({ filters, error });\n }\n\n render(): React.ReactElement {\n const {\n error,\n filters,\n invertSelection,\n selectedValues,\n searchText,\n table,\n } = this.state;\n const { dh, formatter, showSearch } = this.props;\n const columnName = this.getColumnName();\n const displayedValuesText = this.getDisplayedValueText();\n const placeholderText = columnName ? `Find ${columnName}...` : '';\n\n return (\n <div className=\"advanced-filter-creator-select-value\">\n <div className={showSearch ? 'form-group' : ''}>\n <label htmlFor=\"advanced-filter-creator-select-value-input\">\n Select Values\n </label>\n {showSearch && (\n <input\n type=\"text\"\n className={classNames('form-control', {\n 'is-invalid': error != null,\n })}\n id=\"advanced-filter-creator-select-value-input\"\n placeholder={placeholderText}\n value={searchText}\n onChange={this.handleSearchChange}\n />\n )}\n </div>\n <AdvancedFilterCreatorSelectValueList\n dh={dh}\n table={table}\n filters={filters}\n invertSelection={invertSelection}\n selectedValues={selectedValues}\n formatter={formatter}\n onChange={this.handleListChange}\n />\n <div className=\"advanced-filter-creator-select-meta-row\">\n <div>\n <Button kind=\"ghost\" onClick={this.handleSelectAllClick}>\n Select All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleClearAllClick}>\n Clear\n </Button>\n </div>\n <CSSTransition\n in={displayedValuesText != null}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"row-count-info\">{displayedValuesText}</div>\n </CSSTransition>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValue;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdvancedFilterCreatorSelectValue.js","names":["React","PureComponent","CSSTransition","classNames","TableUtils","Button","AdvancedFilterCreatorSelectValueList","AdvancedFilterCreatorSelectValue","constructor","props","handleSelectAllClick","bind","handleClearAllClick","handleListChange","handleSearchChange","handleUpdateFilterTimeout","invertSelection","selectedValues","state","filters","searchText","componentDidMount","initSearchTable","componentDidUpdate","prevProps","prevState","table","setState","searchTable","close","startUpdateFilterTimer","componentWillUnmount","searchTablePromise","undefined","stopUpdateFilterTimer","getColumnName","columns","name","getDisplayedValuesCount","totalSize","length","getDisplayedValueText","count","formatter","formattedCount","getFormattedString","formattedTableSize","prefix","copy","then","onChange","event","target","value","resetSelection","updateFilterTimer","updateTableFilter","setTimeout","searchDebounceTime","clearTimeout","timeZone","column","error","filter","isCharType","type","makeQuickFilter","isTextType","push","render","showSearch","columnName","displayedValuesText","placeholderText"],"sources":["../src/AdvancedFilterCreatorSelectValue.tsx"],"sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport classNames from 'classnames';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport { FilterCondition, Table } from '@deephaven/jsapi-shim';\nimport { Button } from '@deephaven/components';\nimport AdvancedFilterCreatorSelectValueList from './AdvancedFilterCreatorSelectValueList';\nimport './AdvancedFilterCreatorSelectValue.scss';\nimport { ColumnName } from './CommonTypes';\n\ninterface AdvancedFilterCreatorSelectValueProps<T> {\n invertSelection: boolean;\n selectedValues: T[];\n table?: Table;\n formatter: Formatter;\n onChange: (selectedValues: T[], invertSelection: boolean) => void;\n showSearch: boolean;\n timeZone: string;\n}\n\ninterface AdvancedFilterCreatorSelectValueState<T> {\n error?: string;\n filters: FilterCondition[];\n invertSelection: boolean;\n selectedValues: T[];\n searchText: string;\n table?: Table;\n}\n\nclass AdvancedFilterCreatorSelectValue<T = unknown> extends PureComponent<\n AdvancedFilterCreatorSelectValueProps<T>,\n AdvancedFilterCreatorSelectValueState<T>\n> {\n static searchDebounceTime = 250;\n\n static defaultProps = {\n invertSelection: true,\n selectedValues: [],\n onChange: (): void => undefined,\n showSearch: true,\n };\n\n constructor(props: AdvancedFilterCreatorSelectValueProps<T>) {\n super(props);\n\n this.handleSelectAllClick = this.handleSelectAllClick.bind(this);\n this.handleClearAllClick = this.handleClearAllClick.bind(this);\n this.handleListChange = this.handleListChange.bind(this);\n this.handleSearchChange = this.handleSearchChange.bind(this);\n this.handleUpdateFilterTimeout = this.handleUpdateFilterTimeout.bind(this);\n\n const { invertSelection, selectedValues } = props;\n\n this.state = {\n filters: [],\n invertSelection,\n selectedValues,\n searchText: '',\n };\n }\n\n componentDidMount(): void {\n this.initSearchTable();\n }\n\n componentDidUpdate(\n prevProps: AdvancedFilterCreatorSelectValueProps<T>,\n prevState: AdvancedFilterCreatorSelectValueState<T>\n ): void {\n const { invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n this.initSearchTable();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ invertSelection });\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues });\n }\n\n const { table: searchTable, searchText } = this.state;\n\n if (searchTable !== prevState.table) {\n if (prevState.table != null) {\n prevState.table.close();\n }\n if (searchTable != null) {\n this.startUpdateFilterTimer();\n }\n }\n\n if (searchText !== prevState.searchText) {\n this.startUpdateFilterTimer();\n }\n }\n\n componentWillUnmount(): void {\n const { table } = this.state;\n if (table != null) {\n table.close();\n }\n this.searchTablePromise = undefined;\n\n this.stopUpdateFilterTimer();\n }\n\n searchTablePromise?: Promise<Table>;\n\n updateFilterTimer?: ReturnType<typeof setTimeout>;\n\n getColumnName(): ColumnName {\n const { table } = this.props;\n if (table != null) {\n return table.columns[0].name;\n }\n return '';\n }\n\n getDisplayedValuesCount(): number | null {\n const { invertSelection, selectedValues, table } = this.state;\n if (table == null) {\n return null;\n }\n\n if (invertSelection) {\n return table.totalSize - selectedValues.length;\n }\n return selectedValues.length;\n }\n\n getDisplayedValueText(): string | null {\n const count = this.getDisplayedValuesCount();\n const { table } = this.state;\n\n const { formatter } = this.props;\n\n if (count != null && table != null) {\n const formattedCount = formatter.getFormattedString(count, 'long');\n const formattedTableSize = formatter.getFormattedString(\n table.totalSize,\n 'long'\n );\n let prefix = '';\n if (count < 1000000) {\n prefix = 'Displaying ';\n }\n return `${prefix}${formattedCount} of ${formattedTableSize}`;\n }\n return null;\n }\n\n initSearchTable(): void {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n const searchTablePromise = table.copy();\n this.searchTablePromise = searchTablePromise;\n this.searchTablePromise.then(searchTable => {\n if (this.searchTablePromise === searchTablePromise) {\n this.setState({ table: searchTable });\n this.searchTablePromise = undefined;\n } else {\n searchTable.close();\n }\n });\n }\n\n handleListChange(selectedValues: T[], invertSelection: boolean): void {\n this.setState({ selectedValues, invertSelection });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleSearchChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const searchText = event.target.value;\n this.setState({ searchText });\n }\n\n handleSelectAllClick(): void {\n this.resetSelection(true);\n }\n\n handleClearAllClick(): void {\n this.resetSelection(false);\n }\n\n handleUpdateFilterTimeout(): void {\n this.updateFilterTimer = undefined;\n this.updateTableFilter();\n }\n\n resetSelection(invertSelection: boolean): void {\n const selectedValues: T[] = [];\n\n this.setState({ invertSelection, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n startUpdateFilterTimer(): void {\n this.stopUpdateFilterTimer();\n\n this.updateFilterTimer = setTimeout(\n this.handleUpdateFilterTimeout,\n AdvancedFilterCreatorSelectValue.searchDebounceTime\n );\n }\n\n stopUpdateFilterTimer(): void {\n if (this.updateFilterTimer != null) {\n clearTimeout(this.updateFilterTimer);\n this.updateFilterTimer = undefined;\n }\n }\n\n updateTableFilter(): void {\n const { table, searchText } = this.state;\n const { timeZone } = this.props;\n const column = table?.columns[0];\n const filters = [];\n if (column == null) {\n return;\n }\n let error;\n if (searchText.length > 0) {\n let filter = null;\n if (TableUtils.isCharType(column.type)) {\n // Just exact match for char\n filter = TableUtils.makeQuickFilter(column, searchText);\n } else if (TableUtils.isTextType(column.type)) {\n // case insensitive & contains search text\n filter = TableUtils.makeQuickFilter(column, `~${searchText}`, timeZone);\n } else {\n // greater than or equal search for everything else\n // we may want to be smarter with some other types (like dates)\n filter = TableUtils.makeQuickFilter(\n column,\n `>=${searchText}`,\n timeZone\n );\n }\n\n if (filter != null) {\n filters.push(filter);\n } else {\n error = 'Invalid search text';\n }\n }\n\n this.setState({ filters, error });\n }\n\n render(): React.ReactElement {\n const {\n error,\n filters,\n invertSelection,\n selectedValues,\n searchText,\n table,\n } = this.state;\n const { formatter, showSearch } = this.props;\n const columnName = this.getColumnName();\n const displayedValuesText = this.getDisplayedValueText();\n const placeholderText = columnName ? `Find ${columnName}...` : '';\n\n return (\n <div className=\"advanced-filter-creator-select-value\">\n <div className={showSearch ? 'form-group' : ''}>\n <label htmlFor=\"advanced-filter-creator-select-value-input\">\n Select Values\n </label>\n {showSearch && (\n <input\n type=\"text\"\n className={classNames('form-control', {\n 'is-invalid': error != null,\n })}\n id=\"advanced-filter-creator-select-value-input\"\n placeholder={placeholderText}\n value={searchText}\n onChange={this.handleSearchChange}\n />\n )}\n </div>\n <AdvancedFilterCreatorSelectValueList\n table={table}\n filters={filters}\n invertSelection={invertSelection}\n selectedValues={selectedValues}\n formatter={formatter}\n onChange={this.handleListChange}\n />\n <div className=\"advanced-filter-creator-select-meta-row\">\n <div>\n <Button kind=\"ghost\" onClick={this.handleSelectAllClick}>\n Select All\n </Button>\n <Button kind=\"ghost\" onClick={this.handleClearAllClick}>\n Clear\n </Button>\n </div>\n <CSSTransition\n in={displayedValuesText != null}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"row-count-info\">{displayedValuesText}</div>\n </CSSTransition>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorSelectValue;\n"],"mappings":"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"}
|