@deephaven/iris-grid 0.13.5 → 0.13.8

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.
@@ -1,6 +1,9 @@
1
1
  export default AdvancedFilterCreator;
2
2
  declare class AdvancedFilterCreator extends React.PureComponent<any, any, any> {
3
3
  static debounceFilterUpdate: number;
4
+ static makeFilterItem(): {
5
+ key: string;
6
+ };
4
7
  constructor(props: any);
5
8
  handleAddAnd(): void;
6
9
  handleAddOr(): void;
@@ -18,17 +21,11 @@ declare class AdvancedFilterCreator extends React.PureComponent<any, any, any> {
18
21
  handleUpdateTimeout(): void;
19
22
  focusTrapContainer: React.RefObject<any>;
20
23
  debounceTimeout: NodeJS.Timeout | null;
21
- filterKey: number;
22
24
  valuesTablePromise: import("@deephaven/utils").CancelablePromise<import("@deephaven/jsapi-shim").Table> | null;
23
25
  getFilterChangeHandler(index: any): (selectedType?: any, value?: any) => void;
24
26
  getFilterDeleteHandler(index: any): () => void;
25
27
  getFilterTypes: (this: any, columnType: any) => import("@deephaven/filters").Type[];
26
28
  initValuesTable(): void;
27
- makeFilterItem(updateKey?: boolean): {
28
- selectedType: string;
29
- value: string;
30
- key: number;
31
- };
32
29
  /**
33
30
  * Convenience function to check if the previous filter has been inputted, and
34
31
  * we should show the add filter buttons (+ AND OR)
@@ -1 +1 @@
1
- {"version":3,"file":"AdvancedFilterCreator.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreator.jsx"],"names":[],"mappings":";AAqBA;IACE,oCAAkC;IAElC,wBA2DC;IAmED,qBAKC;IAED,oBAKC;IAED,6CAWC;IA0ED,6BASC;IAjFD,0EASC;IAED,2CAsBC;IAED,yEAIC;IAED,oBAWC;IAED,iCAGC;IAED,+BAGC;IAED,+BAMC;IAxGD,6BAKC;IAZD,2BAKC;IAuHD,4BAGC;IA3NC,yCAA2C;IAC3C,uCAA2B;IAC3B,kBAAkB;IAClB,+GAA8B;IAoDhC,8EAEC;IAED,+CAEC;IAED,oFAA8E;IAE9E,wBAyBC;IAmID;;;;MAMC;IAED;;;;OAIG;IACH,+BAeC;IAED;;;;OAIG;IACH,6CAFW,OAAO,QAKjB;IAED,yBAOC;IAED,wBAKC;IAED,mBAwBC;CAyLF"}
1
+ {"version":3,"file":"AdvancedFilterCreator.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreator.jsx"],"names":[],"mappings":";AAsBA;IACE,oCAAkC;IAElC;;MAEC;IAED,wBA2DC;IAmED,qBAKC;IAED,oBAKC;IAED,6CAWC;IA0ED,6BASC;IAjFD,0EASC;IAED,2CAsBC;IAED,yEAIC;IAED,oBAWC;IAED,iCAGC;IAED,+BAGC;IAED,+BAMC;IAxGD,6BAKC;IAZD,2BAKC;IAuHD,4BAGC;IA3NC,yCAA2C;IAC3C,uCAA2B;IAC3B,+GAA8B;IAqDhC,8EAEC;IAED,+CAEC;IAED,oFAA8E;IAE9E,wBAyBC;IAmID;;;;OAIG;IACH,+BAeC;IAED;;;;OAIG;IACH,6CAFW,OAAO,QAKjB;IAED,yBAOC;IAED,wBAKC;IAED,mBAwCC;CA0LF"}
@@ -4,9 +4,10 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
4
4
  // disabled for tab-index on focus traps, which are intentionally non-interactive
5
5
  import React, { PureComponent } from 'react';
6
6
  import classNames from 'classnames';
7
+ import memoize from 'memoize-one';
7
8
  import PropTypes from 'prop-types';
9
+ import shortid from 'shortid';
8
10
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
- import memoize from 'memoize-one';
10
11
  import { Operator as FilterOperator } from '@deephaven/filters';
11
12
  import { dhSortAmountDown, dhNewCircleLargeFilled } from '@deephaven/icons';
12
13
  import { Formatter, TableUtils } from '@deephaven/jsapi-utils';
@@ -20,7 +21,15 @@ import "./AdvancedFilterCreator.css";
20
21
  var log = Log.module('AdvancedFilterCreator');
21
22
 
22
23
  class AdvancedFilterCreator extends PureComponent {
24
+ static makeFilterItem() {
25
+ return {
26
+ key: shortid()
27
+ };
28
+ }
29
+
23
30
  constructor(props) {
31
+ var _options$filterItems$, _options$filterItems;
32
+
24
33
  super(props);
25
34
 
26
35
  _defineProperty(this, "getFilterTypes", memoize(columnType => TableUtils.getFilterTypes(columnType)));
@@ -41,20 +50,29 @@ class AdvancedFilterCreator extends PureComponent {
41
50
  this.handleUpdateTimeout = this.handleUpdateTimeout.bind(this);
42
51
  this.focusTrapContainer = /*#__PURE__*/React.createRef();
43
52
  this.debounceTimeout = null;
44
- this.filterKey = 0;
45
53
  this.valuesTablePromise = null;
46
54
  var {
47
55
  options
48
56
  } = props;
49
57
  var {
50
- filterItems,
51
58
  filterOperators,
52
59
  invertSelection,
53
60
  selectedValues
54
61
  } = options;
62
+ var filterItems = (_options$filterItems$ = (_options$filterItems = options.filterItems) === null || _options$filterItems === void 0 ? void 0 : _options$filterItems.map(_ref => {
63
+ var {
64
+ selectedType,
65
+ value
66
+ } = _ref;
67
+ return {
68
+ selectedType,
69
+ value,
70
+ key: shortid()
71
+ };
72
+ })) !== null && _options$filterItems$ !== void 0 ? _options$filterItems$ : [];
55
73
 
56
- if (filterItems == null) {
57
- filterItems = [this.makeFilterItem()];
74
+ if (filterItems.length === 0) {
75
+ filterItems.push(AdvancedFilterCreator.makeFilterItem());
58
76
  }
59
77
 
60
78
  if (filterOperators == null) {
@@ -149,7 +167,7 @@ class AdvancedFilterCreator extends PureComponent {
149
167
  filterItems,
150
168
  filterOperators
151
169
  } = this.state;
152
- filterItems = filterItems.concat(this.makeFilterItem());
170
+ filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());
153
171
  filterOperators = filterOperators.concat(FilterOperator.and);
154
172
  this.setState({
155
173
  filterItems,
@@ -162,7 +180,7 @@ class AdvancedFilterCreator extends PureComponent {
162
180
  filterItems,
163
181
  filterOperators
164
182
  } = this.state;
165
- filterItems = filterItems.concat(this.makeFilterItem());
183
+ filterItems = filterItems.concat(AdvancedFilterCreator.makeFilterItem());
166
184
  filterOperators = filterOperators.concat(FilterOperator.or);
167
185
  this.setState({
168
186
  filterItems,
@@ -225,7 +243,7 @@ class AdvancedFilterCreator extends PureComponent {
225
243
  }
226
244
 
227
245
  if (filterItems.length === 0) {
228
- filterItems.push(this.makeFilterItem());
246
+ filterItems.push(AdvancedFilterCreator.makeFilterItem());
229
247
  }
230
248
 
231
249
  this.setState({
@@ -246,7 +264,7 @@ class AdvancedFilterCreator extends PureComponent {
246
264
  handleReset() {
247
265
  log.debug('Resetting Advanced Filter');
248
266
  this.setState({
249
- filterItems: [this.makeFilterItem()],
267
+ filterItems: [AdvancedFilterCreator.makeFilterItem()],
250
268
  filterOperators: [],
251
269
  selectedValues: [],
252
270
  invertSelection: true
@@ -286,21 +304,6 @@ class AdvancedFilterCreator extends PureComponent {
286
304
  this.debounceTimeout = null;
287
305
  this.sendUpdate();
288
306
  }
289
-
290
- makeFilterItem() {
291
- var updateKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
292
- var key = this.filterKey;
293
-
294
- if (updateKey) {
295
- this.filterKey += 1;
296
- }
297
-
298
- return {
299
- selectedType: '',
300
- value: '',
301
- key
302
- };
303
- }
304
307
  /**
305
308
  * Convenience function to check if the previous filter has been inputted, and
306
309
  * we should show the add filter buttons (+ AND OR)
@@ -367,9 +370,18 @@ class AdvancedFilterCreator extends PureComponent {
367
370
  var {
368
371
  formatter
369
372
  } = model;
373
+ var items = filterItems.filter(_ref2 => {
374
+ var {
375
+ selectedType,
376
+ value
377
+ } = _ref2;
378
+ return selectedType != null && value != null && value !== '';
379
+ });
380
+ var operators = filterOperators.filter((operator, i) => operator != null && filterItems[i].selectedType != null && filterItems[i].value != null && filterItems[i].value !== '').slice(0, items.length - 1); // slice last operator, user may have set an operator but not a value
381
+
370
382
  var options = {
371
- filterItems,
372
- filterOperators,
383
+ filterItems: items,
384
+ filterOperators: operators,
373
385
  invertSelection,
374
386
  selectedValues
375
387
  };
@@ -416,7 +428,8 @@ class AdvancedFilterCreator extends PureComponent {
416
428
  onChange: this.getFilterChangeHandler(i),
417
429
  onDelete: this.getFilterDeleteHandler(i),
418
430
  selectedType: selectedType,
419
- value: value
431
+ value: value,
432
+ formatter: formatter
420
433
  });
421
434
  filterItemElements.push(element);
422
435
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/AdvancedFilterCreator.jsx"],"names":["React","PureComponent","classNames","PropTypes","FontAwesomeIcon","memoize","Operator","FilterOperator","dhSortAmountDown","dhNewCircleLargeFilled","Formatter","TableUtils","ContextActionUtils","Tooltip","Log","PromiseUtils","AdvancedFilterCreatorFilterItem","AdvancedFilterCreatorSelectValue","IrisGridModel","log","module","AdvancedFilterCreator","constructor","props","columnType","getFilterTypes","handleAddAnd","bind","handleAddOr","handleChangeFilterOperator","handleDone","handleFilterChange","handleFilterDelete","handleSelectValueChange","handleReset","handleSortDown","handleSortUp","handleSubmit","handleFocusTrapStart","handleFocusTrapEnd","handleUpdateTimeout","focusTrapContainer","createRef","debounceTimeout","filterKey","valuesTablePromise","options","filterItems","filterOperators","invertSelection","selectedValues","makeFilterItem","state","valuesTableError","valuesTable","componentDidMount","initValuesTable","componentWillUnmount","clearTimeout","sendUpdate","cancel","getFilterChangeHandler","index","getFilterDeleteHandler","model","column","isValuesTableAvailable","debug","makeCancelableTablePromise","then","sort","columns","asc","applySort","setState","catch","error","isCanceled","inputs","current","querySelectorAll","focus","length","concat","and","or","event","parseInt","target","dataset","operator","startUpdateTimer","filterIndex","selectedType","value","key","splice","push","addToExisting","isModifierKeyDown","sortTable","sortDirection","descending","ascending","stopUpdateTimer","preventDefault","onDone","updateKey","shouldShowAddFilter","filterItem","direction","onSortChange","setTimeout","debounceFilterUpdate","onFilterChange","formatter","filter","makeAdvancedFilter","timeZone","render","isBoolean","isBooleanType","type","isDateType","filterTypes","substring","lastIndexOf","filterItemElements","i","element","filterOperator","isAndFilter","operatorElement","active","showAddFilterItem","addFilterItem","hidden","name","propTypes","instanceOf","isRequired","shape","string","func","arrayOf","bool","any","defaultProps"],"mappings":"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","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 PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport memoize from 'memoize-one';\nimport { Operator as FilterOperator } from '@deephaven/filters';\nimport { dhSortAmountDown, dhNewCircleLargeFilled } from '@deephaven/icons';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport { ContextActionUtils, Tooltip } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport AdvancedFilterCreatorFilterItem from './AdvancedFilterCreatorFilterItem';\nimport AdvancedFilterCreatorSelectValue from './AdvancedFilterCreatorSelectValue';\nimport IrisGridModel from './IrisGridModel';\nimport './AdvancedFilterCreator.scss';\n\nconst log = Log.module('AdvancedFilterCreator');\n\nclass AdvancedFilterCreator extends PureComponent {\n static debounceFilterUpdate = 250;\n\n constructor(props) {\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 this.debounceTimeout = null;\n this.filterKey = 0;\n this.valuesTablePromise = null;\n\n const { options } = props;\n let {\n filterItems,\n filterOperators,\n invertSelection,\n selectedValues,\n } = options;\n if (filterItems == null) {\n filterItems = [this.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: null,\n };\n }\n\n componentDidMount() {\n this.initValuesTable();\n }\n\n componentWillUnmount() {\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 getFilterChangeHandler(index) {\n return this.handleFilterChange.bind(this, index);\n }\n\n getFilterDeleteHandler(index) {\n return this.handleFilterDelete.bind(this, index);\n }\n\n getFilterTypes = memoize(columnType => TableUtils.getFilterTypes(columnType));\n\n initValuesTable() {\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() {\n const inputs = this.focusTrapContainer.current.querySelectorAll(\n 'button,select,input,textarea'\n );\n inputs[0].focus();\n }\n\n handleFocusTrapStart() {\n const inputs = this.focusTrapContainer.current.querySelectorAll(\n 'button,select,input,textarea'\n );\n inputs[inputs.length - 1].focus();\n }\n\n handleAddAnd() {\n let { filterItems, filterOperators } = this.state;\n filterItems = filterItems.concat(this.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.and);\n this.setState({ filterItems, filterOperators });\n }\n\n handleAddOr() {\n let { filterItems, filterOperators } = this.state;\n filterItems = filterItems.concat(this.makeFilterItem());\n filterOperators = filterOperators.concat(FilterOperator.or);\n this.setState({ filterItems, filterOperators });\n }\n\n handleChangeFilterOperator(event) {\n const index = parseInt(event.target.dataset.index, 10);\n const { operator } = event.target.dataset;\n\n let { filterOperators } = this.state;\n filterOperators = [].concat(filterOperators);\n filterOperators[index] = operator;\n\n this.setState({ filterOperators });\n\n this.startUpdateTimer();\n }\n\n handleFilterChange(filterIndex, selectedType, value) {\n let { filterItems } = this.state;\n filterItems = [].concat(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) {\n let { filterItems, filterOperators } = this.state;\n filterItems = [].concat(filterItems);\n filterOperators = [].concat(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(this.makeFilterItem());\n }\n\n this.setState({ filterItems, filterOperators });\n\n this.startUpdateTimer();\n }\n\n handleSelectValueChange(selectedValues, invertSelection) {\n this.setState({ selectedValues, invertSelection });\n\n this.startUpdateTimer();\n }\n\n handleReset() {\n log.debug('Resetting Advanced Filter');\n\n this.setState({\n filterItems: [this.makeFilterItem()],\n filterOperators: [],\n selectedValues: [],\n invertSelection: true,\n });\n\n this.startUpdateTimer();\n }\n\n handleSortDown(event) {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.descending, addToExisting);\n }\n\n handleSortUp(event) {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.ascending, addToExisting);\n }\n\n handleSubmit(event) {\n log.debug('Submitting Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n\n event.preventDefault();\n }\n\n handleDone(event) {\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() {\n this.debounceTimeout = null;\n this.sendUpdate();\n }\n\n makeFilterItem(updateKey = true) {\n const key = this.filterKey;\n if (updateKey) {\n this.filterKey += 1;\n }\n return { selectedType: '', value: '', key };\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() {\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 {String} direction The sort direction, ASC or DESC\n * @param {boolean} addToExisting Add to the existing sort, or replace the existing table sort\n */\n sortTable(direction, addToExisting = false) {\n const { column, onSortChange } = this.props;\n onSortChange(column, direction, addToExisting);\n }\n\n startUpdateTimer() {\n this.stopUpdateTimer();\n\n this.debounceTimeout = setTimeout(\n this.handleUpdateTimeout,\n AdvancedFilterCreator.debounceFilterUpdate\n );\n }\n\n stopUpdateTimer() {\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = null;\n }\n }\n\n sendUpdate() {\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 options = {\n filterItems,\n filterOperators,\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() {\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 />\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 type=\"button\"\n className={classNames('btn btn-link filter-operator', {\n active: isAndFilter,\n })}\n onClick={this.handleChangeFilterOperator}\n data-index={i}\n data-operator={FilterOperator.and}\n >\n AND\n </button>\n <button\n type=\"button\"\n className={classNames('btn btn-link filter-operator', {\n active: !isAndFilter,\n })}\n onClick={this.handleChangeFilterOperator}\n data-index={i}\n data-operator={FilterOperator.or}\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 type=\"button\"\n className=\"btn btn-link btn-filter-item\"\n onClick={this.handleAddAnd}\n disabled={!showAddFilterItem}\n >\n AND\n <Tooltip>Add filter with AND</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-filter-item\"\n onClick={this.handleAddOr}\n disabled={!showAddFilterItem}\n >\n OR\n <Tooltip>Add filter with OR</Tooltip>\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 type=\"button\"\n className={classNames(\n 'btn btn-link btn-link-icon sort-operator',\n {\n active:\n sortDirection === TableUtils.sortDirection.descending,\n }\n )}\n onClick={this.handleSortDown}\n >\n <FontAwesomeIcon icon={dhSortAmountDown} />\n <Tooltip>Sort {column.name} Descending</Tooltip>\n </button>\n <button\n type=\"button\"\n className={classNames(\n 'btn btn-link btn-link-icon sort-operator',\n {\n active:\n sortDirection === TableUtils.sortDirection.ascending,\n }\n )}\n onClick={this.handleSortUp}\n >\n <FontAwesomeIcon rotation={180} icon={dhSortAmountDown} />\n <Tooltip>Sort {column.name} Ascending</Tooltip>\n </button>\n </div>\n </div>\n <hr />\n <div className=\"advanced-filter-column-name\">\n {column.name}&nbsp;\n <span className=\"column-type\">({columnType})</span>\n </div>\n {filterItemElements}\n {isValuesTableAvailable && !valuesTableError && (\n <>\n {!isBoolean && <hr />}\n <div className=\"form-group\">\n <AdvancedFilterCreatorSelectValue\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 type=\"button\"\n className=\"btn btn-outline-primary mr-2\"\n onClick={this.handleReset}\n >\n Reset\n </button>\n <button\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={this.handleDone}\n >\n Done\n </button>\n </div>\n </form>\n <div tabIndex=\"0\" onFocus={this.handleFocusTrapEnd} />\n </div>\n );\n }\n}\n\nAdvancedFilterCreator.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n column: PropTypes.shape({ name: PropTypes.string, type: PropTypes.string })\n .isRequired,\n onFilterChange: PropTypes.func.isRequired,\n onSortChange: PropTypes.func.isRequired,\n onDone: PropTypes.func.isRequired,\n options: PropTypes.shape({\n filterItems: PropTypes.arrayOf(PropTypes.shape({})),\n filterOperators: PropTypes.arrayOf(PropTypes.shape({})),\n invertSelection: PropTypes.bool,\n selectedValues: PropTypes.arrayOf(PropTypes.any),\n }),\n sortDirection: PropTypes.string,\n formatter: PropTypes.instanceOf(Formatter).isRequired,\n};\n\nAdvancedFilterCreator.defaultProps = {\n options: {\n filterItems: null,\n filterOperators: null,\n invertSelection: true,\n selectedValues: [],\n },\n sortDirection: null,\n};\n\nexport default AdvancedFilterCreator;\n"],"file":"AdvancedFilterCreator.js"}
1
+ {"version":3,"sources":["../src/AdvancedFilterCreator.jsx"],"names":["React","PureComponent","classNames","memoize","PropTypes","shortid","FontAwesomeIcon","Operator","FilterOperator","dhSortAmountDown","dhNewCircleLargeFilled","Formatter","TableUtils","ContextActionUtils","Tooltip","Log","PromiseUtils","AdvancedFilterCreatorFilterItem","AdvancedFilterCreatorSelectValue","IrisGridModel","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","debounceTimeout","valuesTablePromise","options","filterOperators","invertSelection","selectedValues","filterItems","map","selectedType","value","length","push","state","valuesTableError","valuesTable","componentDidMount","initValuesTable","componentWillUnmount","clearTimeout","sendUpdate","cancel","getFilterChangeHandler","index","getFilterDeleteHandler","model","column","isValuesTableAvailable","debug","makeCancelableTablePromise","then","sort","columns","asc","applySort","setState","catch","error","isCanceled","inputs","current","querySelectorAll","focus","concat","and","or","event","parseInt","target","dataset","operator","startUpdateTimer","filterIndex","splice","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","element","filterOperator","isAndFilter","operatorElement","active","showAddFilterItem","addFilterItem","hidden","name","propTypes","instanceOf","isRequired","shape","string","func","arrayOf","bool","any","defaultProps"],"mappings":"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","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 memoize from 'memoize-one';\nimport PropTypes from 'prop-types';\nimport shortid from 'shortid';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Operator as FilterOperator } from '@deephaven/filters';\nimport { dhSortAmountDown, dhNewCircleLargeFilled } from '@deephaven/icons';\nimport { Formatter, TableUtils } from '@deephaven/jsapi-utils';\nimport { ContextActionUtils, Tooltip } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport AdvancedFilterCreatorFilterItem from './AdvancedFilterCreatorFilterItem';\nimport AdvancedFilterCreatorSelectValue from './AdvancedFilterCreatorSelectValue';\nimport IrisGridModel from './IrisGridModel';\nimport './AdvancedFilterCreator.scss';\n\nconst log = Log.module('AdvancedFilterCreator');\n\nclass AdvancedFilterCreator extends PureComponent {\n static debounceFilterUpdate = 250;\n\n static makeFilterItem() {\n return { key: shortid() };\n }\n\n constructor(props) {\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 this.debounceTimeout = null;\n this.valuesTablePromise = null;\n\n const { options } = props;\n let { filterOperators, invertSelection, selectedValues } = options;\n const filterItems =\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: null,\n };\n }\n\n componentDidMount() {\n this.initValuesTable();\n }\n\n componentWillUnmount() {\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 getFilterChangeHandler(index) {\n return this.handleFilterChange.bind(this, index);\n }\n\n getFilterDeleteHandler(index) {\n return this.handleFilterDelete.bind(this, index);\n }\n\n getFilterTypes = memoize(columnType => TableUtils.getFilterTypes(columnType));\n\n initValuesTable() {\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() {\n const inputs = this.focusTrapContainer.current.querySelectorAll(\n 'button,select,input,textarea'\n );\n inputs[0].focus();\n }\n\n handleFocusTrapStart() {\n const inputs = this.focusTrapContainer.current.querySelectorAll(\n 'button,select,input,textarea'\n );\n inputs[inputs.length - 1].focus();\n }\n\n handleAddAnd() {\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() {\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(event) {\n const index = parseInt(event.target.dataset.index, 10);\n const { operator } = event.target.dataset;\n\n let { filterOperators } = this.state;\n filterOperators = [].concat(filterOperators);\n filterOperators[index] = operator;\n\n this.setState({ filterOperators });\n\n this.startUpdateTimer();\n }\n\n handleFilterChange(filterIndex, selectedType, value) {\n let { filterItems } = this.state;\n filterItems = [].concat(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) {\n let { filterItems, filterOperators } = this.state;\n filterItems = [].concat(filterItems);\n filterOperators = [].concat(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(selectedValues, invertSelection) {\n this.setState({ selectedValues, invertSelection });\n\n this.startUpdateTimer();\n }\n\n handleReset() {\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) {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.descending, addToExisting);\n }\n\n handleSortUp(event) {\n const addToExisting = ContextActionUtils.isModifierKeyDown(event);\n this.sortTable(TableUtils.sortDirection.ascending, addToExisting);\n }\n\n handleSubmit(event) {\n log.debug('Submitting Advanced Filter');\n this.stopUpdateTimer();\n this.sendUpdate();\n\n event.preventDefault();\n }\n\n handleDone(event) {\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() {\n this.debounceTimeout = null;\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() {\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 {String} direction The sort direction, ASC or DESC\n * @param {boolean} addToExisting Add to the existing sort, or replace the existing table sort\n */\n sortTable(direction, addToExisting = false) {\n const { column, onSortChange } = this.props;\n onSortChange(column, direction, addToExisting);\n }\n\n startUpdateTimer() {\n this.stopUpdateTimer();\n\n this.debounceTimeout = setTimeout(\n this.handleUpdateTimeout,\n AdvancedFilterCreator.debounceFilterUpdate\n );\n }\n\n stopUpdateTimer() {\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = null;\n }\n }\n\n sendUpdate() {\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 );\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() {\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 type=\"button\"\n className={classNames('btn btn-link filter-operator', {\n active: isAndFilter,\n })}\n onClick={this.handleChangeFilterOperator}\n data-index={i}\n data-operator={FilterOperator.and}\n >\n AND\n </button>\n <button\n type=\"button\"\n className={classNames('btn btn-link filter-operator', {\n active: !isAndFilter,\n })}\n onClick={this.handleChangeFilterOperator}\n data-index={i}\n data-operator={FilterOperator.or}\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 type=\"button\"\n className=\"btn btn-link btn-filter-item\"\n onClick={this.handleAddAnd}\n disabled={!showAddFilterItem}\n >\n AND\n <Tooltip>Add filter with AND</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-filter-item\"\n onClick={this.handleAddOr}\n disabled={!showAddFilterItem}\n >\n OR\n <Tooltip>Add filter with OR</Tooltip>\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 type=\"button\"\n className={classNames(\n 'btn btn-link btn-link-icon sort-operator',\n {\n active:\n sortDirection === TableUtils.sortDirection.descending,\n }\n )}\n onClick={this.handleSortDown}\n >\n <FontAwesomeIcon icon={dhSortAmountDown} />\n <Tooltip>Sort {column.name} Descending</Tooltip>\n </button>\n <button\n type=\"button\"\n className={classNames(\n 'btn btn-link btn-link-icon sort-operator',\n {\n active:\n sortDirection === TableUtils.sortDirection.ascending,\n }\n )}\n onClick={this.handleSortUp}\n >\n <FontAwesomeIcon rotation={180} icon={dhSortAmountDown} />\n <Tooltip>Sort {column.name} Ascending</Tooltip>\n </button>\n </div>\n </div>\n <hr />\n <div className=\"advanced-filter-column-name\">\n {column.name}&nbsp;\n <span className=\"column-type\">({columnType})</span>\n </div>\n {filterItemElements}\n {isValuesTableAvailable && !valuesTableError && (\n <>\n {!isBoolean && <hr />}\n <div className=\"form-group\">\n <AdvancedFilterCreatorSelectValue\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 type=\"button\"\n className=\"btn btn-outline-primary mr-2\"\n onClick={this.handleReset}\n >\n Reset\n </button>\n <button\n type=\"button\"\n className=\"btn btn-primary\"\n onClick={this.handleDone}\n >\n Done\n </button>\n </div>\n </form>\n <div tabIndex=\"0\" onFocus={this.handleFocusTrapEnd} />\n </div>\n );\n }\n}\n\nAdvancedFilterCreator.propTypes = {\n model: PropTypes.instanceOf(IrisGridModel).isRequired,\n column: PropTypes.shape({ name: PropTypes.string, type: PropTypes.string })\n .isRequired,\n onFilterChange: PropTypes.func.isRequired,\n onSortChange: PropTypes.func.isRequired,\n onDone: PropTypes.func.isRequired,\n options: PropTypes.shape({\n filterItems: PropTypes.arrayOf(PropTypes.shape({})),\n filterOperators: PropTypes.arrayOf(PropTypes.shape({})),\n invertSelection: PropTypes.bool,\n selectedValues: PropTypes.arrayOf(PropTypes.any),\n }),\n sortDirection: PropTypes.string,\n formatter: PropTypes.instanceOf(Formatter).isRequired,\n};\n\nAdvancedFilterCreator.defaultProps = {\n options: {\n filterItems: null,\n filterOperators: null,\n invertSelection: true,\n selectedValues: [],\n },\n sortDirection: null,\n};\n\nexport default AdvancedFilterCreator;\n"],"file":"AdvancedFilterCreator.js"}
@@ -0,0 +1,8 @@
1
+ .advanced-filter-creator-filter-item input.error {
2
+ color: #f95d84;
3
+ }
4
+ .advanced-filter-creator-filter-item input.error:focus {
5
+ box-shadow: inset 0 0 0 2px #f95d84, 0 0 0 0.2rem rgba(72, 120, 234, 0.35);
6
+ }
7
+
8
+ /*# sourceMappingURL=AdvancedFilterCreatorFilterItem.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../src/AdvancedFilterCreatorFilterItem.scss","../../components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAGE;EACE,OCDE;;ADEF;EACE","file":"AdvancedFilterCreatorFilterItem.css"}
@@ -1,15 +1,16 @@
1
1
  import React, { PureComponent } from 'react';
2
2
  import { TypeValue as FilterTypeValue } from '@deephaven/filters';
3
- import { AdvancedFilterItemType } from '@deephaven/jsapi-utils';
3
+ import { Column } from '@deephaven/jsapi-shim';
4
+ import { AdvancedFilterItemType, Formatter } from '@deephaven/jsapi-utils';
5
+ import './AdvancedFilterCreatorFilterItem.scss';
4
6
  export interface AdvancedFilterCreatorFilterItemProps {
5
- column: {
6
- type: string;
7
- };
7
+ column: Column;
8
8
  filterTypes: FilterTypeValue[];
9
9
  onChange(type: FilterTypeValue, value: string): void;
10
10
  onDelete(): void;
11
11
  selectedType?: FilterTypeValue;
12
12
  value?: string;
13
+ formatter: Formatter;
13
14
  }
14
15
  export declare type AdvancedFilterCreatorFilterItemState = AdvancedFilterItemType;
15
16
  export declare class AdvancedFilterCreatorFilterItem extends PureComponent<AdvancedFilterCreatorFilterItemProps, AdvancedFilterCreatorFilterItemState> {
@@ -21,6 +22,7 @@ export declare class AdvancedFilterCreatorFilterItem extends PureComponent<Advan
21
22
  handleTypeChange(event: React.ChangeEvent<HTMLSelectElement>): void;
22
23
  handleValueChange(event: React.ChangeEvent<HTMLInputElement>): void;
23
24
  handleDelete(): void;
25
+ getCachedIsValid: (column: Column, operation: FilterTypeValue, value: string, timeZone: string) => boolean;
24
26
  render(): JSX.Element;
25
27
  }
26
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;AAG7C,OAAO,EAKL,SAAS,IAAI,eAAe,EAC7B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,sBAAsB,EAAc,MAAM,wBAAwB,CAAC;AAK5E,MAAM,WAAW,oCAAoC;IACnD,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,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;CAChB;AAED,oBAAY,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;IAWzE,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,MAAM,IAAI,GAAG,CAAC,OAAO;CA6DtB;AAED,eAAe,+BAA+B,CAAC"}
1
+ {"version":3,"file":"AdvancedFilterCreatorFilterItem.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreatorFilterItem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG7C,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,oBAAY,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;IAWzE,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;CAmEtB;AAED,eAAe,+BAA+B,CAAC"}
@@ -8,6 +8,9 @@ import { getLabelForBooleanFilter, getLabelForDateFilter, getLabelForNumberFilte
8
8
  import { vsTrash } from '@deephaven/icons';
9
9
  import { TableUtils } from '@deephaven/jsapi-utils';
10
10
  import Log from '@deephaven/log';
11
+ import classNames from 'classnames';
12
+ import memoizeOne from 'memoize-one';
13
+ import "./AdvancedFilterCreatorFilterItem.css";
11
14
  var log = Log.module('AdvancedFilterCreatorFilterItem');
12
15
  export class AdvancedFilterCreatorFilterItem extends PureComponent {
13
16
  static getLabelForFilter(columnType, filterType) {
@@ -40,18 +43,27 @@ export class AdvancedFilterCreatorFilterItem extends PureComponent {
40
43
 
41
44
  _defineProperty(this, "typeDropdown", void 0);
42
45
 
46
+ _defineProperty(this, "getCachedIsValid", memoizeOne((column, operation, value, timeZone) => {
47
+ try {
48
+ // We don't want to show an error for an empty value
49
+ return !value || TableUtils.makeAdvancedValueFilter(column, operation, value, timeZone) != null;
50
+ } catch (e) {
51
+ return false;
52
+ }
53
+ }));
54
+
43
55
  this.handleDelete = this.handleDelete.bind(this);
44
56
  this.handleTypeChange = this.handleTypeChange.bind(this);
45
57
  this.handleValueChange = this.handleValueChange.bind(this);
46
58
  this.typeDropdown = null;
47
59
  var {
48
- value = '',
60
+ value: _value = '',
49
61
  filterTypes,
50
62
  selectedType = filterTypes[0]
51
63
  } = props;
52
64
  this.state = {
53
65
  selectedType,
54
- value
66
+ value: _value
55
67
  };
56
68
  }
57
69
 
@@ -63,22 +75,26 @@ export class AdvancedFilterCreatorFilterItem extends PureComponent {
63
75
 
64
76
  componentDidUpdate(prevProps) {
65
77
  var {
66
- value = '',
67
- filterTypes,
68
- selectedType = filterTypes[0]
78
+ value,
79
+ selectedType
69
80
  } = this.props;
70
81
 
71
- if (prevProps.selectedType !== selectedType || prevProps.value !== value) {
82
+ if (selectedType !== undefined && prevProps.selectedType !== selectedType) {
83
+ this.setState({
84
+ selectedType
85
+ });
86
+ }
87
+
88
+ if (value !== undefined && prevProps.value !== value) {
72
89
  this.setState({
73
- selectedType,
74
90
  value
75
91
  });
76
92
  }
77
93
  }
78
94
 
79
95
  handleTypeChange(event) {
80
- log.debug2('typeChange');
81
96
  var selectedType = event.target.value;
97
+ log.debug2('typeChange', selectedType);
82
98
  this.setState({
83
99
  selectedType
84
100
  });
@@ -127,7 +143,8 @@ export class AdvancedFilterCreatorFilterItem extends PureComponent {
127
143
  render() {
128
144
  var {
129
145
  column,
130
- filterTypes
146
+ filterTypes,
147
+ formatter
131
148
  } = this.props;
132
149
  var {
133
150
  selectedType,
@@ -135,6 +152,7 @@ export class AdvancedFilterCreatorFilterItem extends PureComponent {
135
152
  } = this.state;
136
153
  var showValueInput = !TableUtils.isBooleanType(column.type);
137
154
  var typeOptionElements = [];
155
+ var isValid = this.getCachedIsValid(column, selectedType, value, formatter.timeZone);
138
156
 
139
157
  for (var i = 0; i < filterTypes.length; i += 1) {
140
158
  var _type = filterTypes[i];
@@ -165,7 +183,9 @@ export class AdvancedFilterCreatorFilterItem extends PureComponent {
165
183
  className: "input-group"
166
184
  }, /*#__PURE__*/React.createElement("input", {
167
185
  type: "text",
168
- className: "form-control",
186
+ className: classNames('form-control', {
187
+ error: !isValid
188
+ }),
169
189
  placeholder: "Enter value",
170
190
  value: value,
171
191
  onChange: this.handleValueChange
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/AdvancedFilterCreatorFilterItem.tsx"],"names":["React","PureComponent","FontAwesomeIcon","Tooltip","getLabelForBooleanFilter","getLabelForDateFilter","getLabelForNumberFilter","getLabelForTextFilter","vsTrash","TableUtils","Log","log","module","AdvancedFilterCreatorFilterItem","getLabelForFilter","columnType","filterType","isNumberType","isCharType","isTextType","isDateType","isBooleanType","Error","e","warn","constructor","props","handleDelete","bind","handleTypeChange","handleValueChange","typeDropdown","value","filterTypes","selectedType","state","componentDidMount","focus","componentDidUpdate","prevProps","setState","event","debug2","target","onChange","length","debug","onDelete","render","column","showValueInput","type","typeOptionElements","i","label","element","push"],"mappings":";;AAAA;AACA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,OAAT,QAAwB,uBAAxB;AACA,SACEC,wBADF,EAEEC,qBAFF,EAGEC,uBAHF,EAIEC,qBAJF,QAMO,oBANP;AAOA,SAASC,OAAT,QAAwB,kBAAxB;AACA,SAAiCC,UAAjC,QAAmD,wBAAnD;AACA,OAAOC,GAAP,MAAgB,gBAAhB;AAEA,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAJ,CAAW,iCAAX,CAAZ;AAaA,OAAO,MAAMC,+BAAN,SAA8CZ,aAA9C,CAGL;AACwB,SAAjBa,iBAAiB,CACtBC,UADsB,EAEtBC,UAFsB,EAGd;AACR,QAAI;AACF,UACEP,UAAU,CAACQ,YAAX,CAAwBF,UAAxB,KACAN,UAAU,CAACS,UAAX,CAAsBH,UAAtB,CAFF,EAGE;AACA,eAAOT,uBAAuB,CAACU,UAAD,CAA9B;AACD;;AACD,UAAIP,UAAU,CAACU,UAAX,CAAsBJ,UAAtB,CAAJ,EAAuC;AACrC,eAAOR,qBAAqB,CAACS,UAAD,CAA5B;AACD;;AACD,UAAIP,UAAU,CAACW,UAAX,CAAsBL,UAAtB,CAAJ,EAAuC;AACrC,eAAOV,qBAAqB,CAACW,UAAD,CAA5B;AACD;;AACD,UAAIP,UAAU,CAACY,aAAX,CAAyBN,UAAzB,CAAJ,EAA0C;AACxC,eAAOX,wBAAwB,CAACY,UAAD,CAA/B;AACD;;AACD,YAAM,IAAIM,KAAJ,qCAAuCP,UAAvC,EAAN;AACD,KAjBD,CAiBE,OAAOQ,CAAP,EAAU;AACVZ,MAAAA,GAAG,CAACa,IAAJ,CAASD,CAAT;AACA,aAAO,EAAP;AACD;AACF;;AAEDE,EAAAA,WAAW,CAACC,KAAD,EAA8C;AACvD,UAAMA,KAAN;;AADuD;;AAGvD,SAAKC,YAAL,GAAoB,KAAKA,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKC,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBD,IAAtB,CAA2B,IAA3B,CAAxB;AACA,SAAKE,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBF,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKG,YAAL,GAAoB,IAApB;AAEA,QAAM;AAAEC,MAAAA,KAAK,GAAG,EAAV;AAAcC,MAAAA,WAAd;AAA2BC,MAAAA,YAAY,GAAGD,WAAW,CAAC,CAAD;AAArD,QAA6DP,KAAnE;AAEA,SAAKS,KAAL,GAAa;AACXD,MAAAA,YADW;AAEXF,MAAAA;AAFW,KAAb;AAID;;AAEDI,EAAAA,iBAAiB,GAAS;AAAA;;AACxB,+BAAKL,YAAL,0EAAmBM,KAAnB;AACD;;AAEDC,EAAAA,kBAAkB,CAACC,SAAD,EAAwD;AACxE,QAAM;AACJP,MAAAA,KAAK,GAAG,EADJ;AAEJC,MAAAA,WAFI;AAGJC,MAAAA,YAAY,GAAGD,WAAW,CAAC,CAAD;AAHtB,QAIF,KAAKP,KAJT;;AAKA,QAAIa,SAAS,CAACL,YAAV,KAA2BA,YAA3B,IAA2CK,SAAS,CAACP,KAAV,KAAoBA,KAAnE,EAA0E;AACxE,WAAKQ,QAAL,CAAc;AAAEN,QAAAA,YAAF;AAAgBF,QAAAA;AAAhB,OAAd;AACD;AACF;;AAIDH,EAAAA,gBAAgB,CAACY,KAAD,EAAoD;AAClE9B,IAAAA,GAAG,CAAC+B,MAAJ,CAAW,YAAX;AACA,QAAMR,YAAY,GAAGO,KAAK,CAACE,MAAN,CAAaX,KAAlC;AACA,SAAKQ,QAAL,CAAc;AAAEN,MAAAA;AAAF,KAAd;AAEA,QAAM;AAAEU,MAAAA;AAAF,QAAe,KAAKlB,KAA1B;AACA,QAAM;AAAEM,MAAAA;AAAF,QAAY,KAAKG,KAAvB;;AACA,QAAIH,KAAK,IAAI,IAAT,IAAiBA,KAAK,CAACa,MAAN,GAAe,CAApC,EAAuC;AACrC;AACAD,MAAAA,QAAQ,CAACV,YAAD,EAAeF,KAAf,CAAR;AACD;AACF;;AAEDF,EAAAA,iBAAiB,CAACW,KAAD,EAAmD;AAClE9B,IAAAA,GAAG,CAAC+B,MAAJ,CAAW,aAAX;AACA,QAAM;AAAEV,MAAAA;AAAF,QAAYS,KAAK,CAACE,MAAxB;AACA,SAAKH,QAAL,CAAc;AAAER,MAAAA;AAAF,KAAd;AAEA,QAAM;AAAEY,MAAAA;AAAF,QAAe,KAAKlB,KAA1B;AACA,QAAM;AAAEQ,MAAAA;AAAF,QAAmB,KAAKC,KAA9B;;AACA,QAAID,YAAY,IAAI,IAApB,EAA0B;AACxB;AACAU,MAAAA,QAAQ,CAACV,YAAD,EAAeF,KAAf,CAAR;AACD;AACF;;AAEDL,EAAAA,YAAY,GAAS;AACnBhB,IAAAA,GAAG,CAACmC,KAAJ,CAAU,QAAV;AAEA,QAAM;AAAEC,MAAAA;AAAF,QAAe,KAAKrB,KAA1B;AACAqB,IAAAA,QAAQ;AACT;;AAEDC,EAAAA,MAAM,GAAgB;AACpB,QAAM;AAAEC,MAAAA,MAAF;AAAUhB,MAAAA;AAAV,QAA0B,KAAKP,KAArC;AACA,QAAM;AAAEQ,MAAAA,YAAF;AAAgBF,MAAAA;AAAhB,QAA0B,KAAKG,KAArC;AACA,QAAMe,cAAc,GAAG,CAACzC,UAAU,CAACY,aAAX,CAAyB4B,MAAM,CAACE,IAAhC,CAAxB;AACA,QAAMC,kBAAkB,GAAG,EAA3B;;AACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGpB,WAAW,CAACY,MAAhC,EAAwCQ,CAAC,IAAI,CAA7C,EAAgD;AAC9C,UAAMF,KAAI,GAAGlB,WAAW,CAACoB,CAAD,CAAxB;AACA,UAAMC,KAAK,GAAGzC,+BAA+B,CAACC,iBAAhC,CACZmC,MAAM,CAACE,IADK,EAEZA,KAFY,CAAd;AAIA,UAAMI,OAAO,gBACX;AAAQ,QAAA,GAAG,EAAEJ,KAAb;AAAmB,QAAA,KAAK,EAAEA;AAA1B,SACGG,KADH,CADF;AAKAF,MAAAA,kBAAkB,CAACI,IAAnB,CAAwBD,OAAxB;AACD;;AAED,wBACE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AACE,MAAA,SAAS,EAAC,4BADZ;AAEE,MAAA,KAAK,EAAErB,YAFT;AAGE,MAAA,QAAQ,EAAE,KAAKL,gBAHjB;AAIE,MAAA,GAAG,EAAEE,YAAY,IAAI;AACnB,aAAKA,YAAL,GAAoBA,YAApB;AACD;AANH,OAQGqB,kBARH,CADF,CADF,EAaGF,cAAc,iBACb;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AACE,MAAA,IAAI,EAAC,MADP;AAEE,MAAA,SAAS,EAAC,cAFZ;AAGE,MAAA,WAAW,EAAC,aAHd;AAIE,MAAA,KAAK,EAAElB,KAJT;AAKE,MAAA,QAAQ,EAAE,KAAKF;AALjB,MADF,CADF,CAdJ,eA0BE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,gDAFZ;AAGE,MAAA,OAAO,EAAE,KAAKH;AAHhB,oBAKE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEnB;AAAvB,MALF,eAME,oBAAC,OAAD,wBANF,CADF,CA1BF,CADF,CADF;AAyCD;;AA1JD;AA6JF,eAAeK,+BAAf","sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Tooltip } 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 { AdvancedFilterItemType, TableUtils } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('AdvancedFilterCreatorFilterItem');\n\nexport interface AdvancedFilterCreatorFilterItemProps {\n column: { type: string };\n filterTypes: FilterTypeValue[];\n onChange(type: FilterTypeValue, value: string): void;\n onDelete(): void;\n selectedType?: FilterTypeValue;\n value?: string;\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 {\n value = '',\n filterTypes,\n selectedType = filterTypes[0],\n } = this.props;\n if (prevProps.selectedType !== selectedType || prevProps.value !== value) {\n this.setState({ selectedType, value });\n }\n }\n\n typeDropdown: HTMLSelectElement | null;\n\n handleTypeChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n log.debug2('typeChange');\n const selectedType = event.target.value as FilterTypeValue;\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 render(): JSX.Element {\n const { column, filterTypes } = this.props;\n const { selectedType, value } = this.state;\n const showValueInput = !TableUtils.isBooleanType(column.type);\n const typeOptionElements = [];\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=\"form-control\"\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 type=\"button\"\n className=\"btn btn-link btn-link-icon w-100 h-100 p-0 m-0\"\n onClick={this.handleDelete}\n >\n <FontAwesomeIcon icon={vsTrash} />\n <Tooltip>Remove Filter</Tooltip>\n </button>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorFilterItem;\n"],"file":"AdvancedFilterCreatorFilterItem.js"}
1
+ {"version":3,"sources":["../src/AdvancedFilterCreatorFilterItem.tsx"],"names":["React","PureComponent","FontAwesomeIcon","Tooltip","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"],"mappings":"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","sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Tooltip } 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\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 type=\"button\"\n className=\"btn btn-link btn-link-icon w-100 h-100 p-0 m-0\"\n onClick={this.handleDelete}\n >\n <FontAwesomeIcon icon={vsTrash} />\n <Tooltip>Remove Filter</Tooltip>\n </button>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default AdvancedFilterCreatorFilterItem;\n"],"file":"AdvancedFilterCreatorFilterItem.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"AdvancedFilterCreatorSelectValueList.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreatorSelectValueList.jsx"],"names":[],"mappings":";AAWA;;;GAGG;AACH;IACE;;;;OAIG;IACH,kDAgBC;IAED,wBAmBC;IAiCD,+CA+BC;IAED,kDAEC;IAED,8BAEC;IAED,oCA2BC;IAhHC,kCAAgB;IAkHlB,qCAWC;IAED,iCAIC;IAED,gCAIC;IAED,sBAIC;IAED,4BAYC;IAED,iEAgBC;CA+BF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4BW,mCAAQ"}
1
+ {"version":3,"file":"AdvancedFilterCreatorSelectValueList.d.ts","sourceRoot":"","sources":["../src/AdvancedFilterCreatorSelectValueList.jsx"],"names":[],"mappings":";AAWA;;;GAGG;AACH;IACE;;;;OAIG;IACH,kDAgBC;IAED,wBAmBC;IAiCD,+CA+BC;IAED,kDAEC;IAED,8BAEC;IAED,oCA4BC;IAjHC,kCAAgB;IAmHlB,qCAWC;IAED,iCAIC;IAED,gCAIC;IAED,sBAIC;IAED,4BAYC;IAED,iEAgBC;CA+BF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4BW,mCAAQ"}
@@ -83,7 +83,7 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
83
83
  }
84
84
 
85
85
  if (prevProps.filters !== filters) {
86
- table.applyFilter(filters);
86
+ table === null || table === void 0 ? void 0 : table.applyFilter(filters);
87
87
  this.resetViewport();
88
88
  }
89
89
  }
@@ -146,15 +146,16 @@ class AdvancedFilterCreatorSelectValueList extends PureComponent {
146
146
  }
147
147
 
148
148
  handleTableUpdate(event) {
149
+ var {
150
+ table,
151
+ formatter
152
+ } = this.props;
153
+ if (!table) return;
149
154
  var data = event.detail;
150
155
  var {
151
156
  offset
152
157
  } = data;
153
158
  var items = [];
154
- var {
155
- table,
156
- formatter
157
- } = this.props;
158
159
  var column = table.columns[0];
159
160
 
160
161
  for (var r = 0; r < data.rows.length; r += 1) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/AdvancedFilterCreatorSelectValueList.jsx"],"names":["React","PureComponent","PropTypes","CSSTransition","dh","APIPropTypes","Formatter","LoadingSpinner","SelectValueList","Log","log","module","AdvancedFilterCreatorSelectValueList","indexOf","value","values","i","length","v","valueOf","constructor","props","handleSelect","bind","handleViewportChange","handleSelectionUpdate","handleTableUpdate","list","selectedValues","state","itemCount","items","offset","isLoading","componentDidMount","table","startListening","componentDidUpdate","prevProps","filters","invertSelection","stopListening","resetViewport","setState","applyFilter","componentWillUnmount","itemIndex","concat","selectedIndex","splice","push","isSelected","visibleItemIndex","onChange","top","bottom","updateViewport","updateItemSelection","event","data","detail","formatter","column","columns","r","rows","row","get","displayValue","getFormattedString","type","name","isValueSelected","debug2","size","addEventListener","Table","EVENT_UPDATED","removeEventListener","topRow","bottomRow","item","viewportSize","Math","max","setViewport","render","propTypes","shape","func","arrayOf","string","number","bool","any","FilterCondition","isRequired","instanceOf","defaultProps"],"mappings":"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","sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { CSSTransition } from 'react-transition-group';\nimport dh, { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport { LoadingSpinner, SelectValueList } from '@deephaven/components';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('AdvancedFilterCreatorSelectValueList');\n\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList extends PureComponent {\n /**\n * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.\n * @param {Any} value The value to search for\n * @param {Array} values The array of values to search within\n */\n static indexOf(value, values) {\n for (let i = 0; i < values.length; i += 1) {\n const v = values[i];\n if (\n v === value ||\n (v != null &&\n v.valueOf &&\n value != null &&\n value.valueOf &&\n v.valueOf() === value.valueOf())\n ) {\n return i;\n }\n }\n\n return -1;\n }\n\n constructor(props) {\n super(props);\n\n this.handleSelect = this.handleSelect.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n\n this.list = null;\n\n const { selectedValues } = this.props;\n\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true,\n };\n }\n\n componentDidMount() {\n const { table } = this.props;\n this.startListening(table);\n }\n\n componentDidUpdate(prevProps) {\n const { filters, invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n this.stopListening(prevProps.table);\n this.startListening(table);\n this.resetViewport();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ selectedValues: [] }, this.handleSelectionUpdate);\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues }, this.handleSelectionUpdate);\n }\n\n if (prevProps.filters !== filters) {\n table.applyFilter(filters);\n this.resetViewport();\n }\n }\n\n componentWillUnmount() {\n this.stopListening();\n }\n\n handleSelect(itemIndex, value) {\n const { invertSelection } = this.props;\n let { selectedValues } = this.state;\n selectedValues = [].concat(selectedValues);\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n\n let isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n\n const { offset } = this.state;\n let { items } = this.state;\n items = [].concat(items);\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n\n this.setState({ items, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleViewportChange(top, bottom) {\n this.updateViewport(top, bottom);\n }\n\n handleSelectionUpdate() {\n this.updateItemSelection();\n }\n\n handleTableUpdate(event) {\n const data = event.detail;\n const { offset } = data;\n\n const items = [];\n const { table, formatter } = this.props;\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n const displayValue = formatter.getFormattedString(\n value,\n column.type,\n column.name\n );\n const isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected,\n });\n }\n\n log.debug2('Received table update:', offset, items.length);\n\n const itemCount = table.size;\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n isValueSelected(value) {\n const { invertSelection } = this.props;\n const { selectedValues } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n\n startListening(table) {\n if (table != null) {\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n }\n\n stopListening(table) {\n if (table != null) {\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n }\n\n resetViewport() {\n if (this.list) {\n this.updateViewport(this.list.topRow, this.list.bottomRow, true);\n }\n }\n\n updateItemSelection() {\n let { items } = this.state;\n\n items = [].concat(items);\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value } = item;\n item.isSelected = this.isValueSelected(value);\n }\n\n this.setState({ items });\n }\n\n updateViewport(top, bottom, isLoading = false) {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n if (isLoading) {\n this.setState({ isLoading: true });\n }\n\n const viewportSize = bottom - top + 1;\n const topRow = Math.max(0, top - viewportSize * 3);\n const bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow, null);\n }\n\n render() {\n const { offset, isLoading, items, itemCount } = this.state;\n\n return (\n <div className=\"select-value-list-wrapper\">\n <SelectValueList\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n ref={list => {\n this.list = list;\n }}\n />\n <CSSTransition\n in={isLoading}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"loading-list\">\n <LoadingSpinner className=\"loading-spinner-large\" />\n </div>\n </CSSTransition>\n </div>\n );\n }\n}\n\nAdvancedFilterCreatorSelectValueList.propTypes = {\n table: PropTypes.shape({\n addEventListener: PropTypes.func,\n removeEventListener: PropTypes.func,\n\n applyFilter: PropTypes.func,\n columns: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n type: PropTypes.string,\n })\n ),\n setViewport: PropTypes.func,\n size: PropTypes.number,\n }),\n invertSelection: PropTypes.bool,\n selectedValues: PropTypes.arrayOf(PropTypes.any),\n onChange: PropTypes.func,\n filters: PropTypes.arrayOf(APIPropTypes.FilterCondition).isRequired,\n formatter: PropTypes.instanceOf(Formatter).isRequired,\n};\n\nAdvancedFilterCreatorSelectValueList.defaultProps = {\n table: null,\n invertSelection: true,\n selectedValues: [],\n onChange: () => {},\n};\n\nexport default AdvancedFilterCreatorSelectValueList;\n"],"file":"AdvancedFilterCreatorSelectValueList.js"}
1
+ {"version":3,"sources":["../src/AdvancedFilterCreatorSelectValueList.jsx"],"names":["React","PureComponent","PropTypes","CSSTransition","dh","APIPropTypes","Formatter","LoadingSpinner","SelectValueList","Log","log","module","AdvancedFilterCreatorSelectValueList","indexOf","value","values","i","length","v","valueOf","constructor","props","handleSelect","bind","handleViewportChange","handleSelectionUpdate","handleTableUpdate","list","selectedValues","state","itemCount","items","offset","isLoading","componentDidMount","table","startListening","componentDidUpdate","prevProps","filters","invertSelection","stopListening","resetViewport","setState","applyFilter","componentWillUnmount","itemIndex","concat","selectedIndex","splice","push","isSelected","visibleItemIndex","onChange","top","bottom","updateViewport","updateItemSelection","event","formatter","data","detail","column","columns","r","rows","row","get","displayValue","getFormattedString","type","name","isValueSelected","debug2","size","addEventListener","Table","EVENT_UPDATED","removeEventListener","topRow","bottomRow","item","viewportSize","Math","max","setViewport","render","propTypes","shape","func","arrayOf","string","number","bool","any","FilterCondition","isRequired","instanceOf","defaultProps"],"mappings":"AAAA;AACA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,aAAT,QAA8B,wBAA9B;AACA,OAAOC,EAAP,IAAaF,SAAS,IAAIG,YAA1B,QAA8C,uBAA9C;AACA,SAASC,SAAT,QAA0B,wBAA1B;AACA,SAASC,cAAT,EAAyBC,eAAzB,QAAgD,uBAAhD;AACA,OAAOC,GAAP,MAAgB,gBAAhB;AAEA,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAJ,CAAW,sCAAX,CAAZ;AAEA;AACA;AACA;AACA;;AACA,MAAMC,oCAAN,SAAmDX,aAAnD,CAAiE;AAC/D;AACF;AACA;AACA;AACA;AACgB,SAAPY,OAAO,CAACC,KAAD,EAAQC,MAAR,EAAgB;AAC5B,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGD,MAAM,CAACE,MAA3B,EAAmCD,CAAC,IAAI,CAAxC,EAA2C;AACzC,UAAME,CAAC,GAAGH,MAAM,CAACC,CAAD,CAAhB;;AACA,UACEE,CAAC,KAAKJ,KAAN,IACCI,CAAC,IAAI,IAAL,IACCA,CAAC,CAACC,OADH,IAECL,KAAK,IAAI,IAFV,IAGCA,KAAK,CAACK,OAHP,IAICD,CAAC,CAACC,OAAF,OAAgBL,KAAK,CAACK,OAAN,EANpB,EAOE;AACA,eAAOH,CAAP;AACD;AACF;;AAED,WAAO,CAAC,CAAR;AACD;;AAEDI,EAAAA,WAAW,CAACC,KAAD,EAAQ;AACjB,UAAMA,KAAN;AAEA,SAAKC,YAAL,GAAoB,KAAKA,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKC,oBAAL,GAA4B,KAAKA,oBAAL,CAA0BD,IAA1B,CAA+B,IAA/B,CAA5B;AACA,SAAKE,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BF,IAA3B,CAAgC,IAAhC,CAA7B;AACA,SAAKG,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBH,IAAvB,CAA4B,IAA5B,CAAzB;AAEA,SAAKI,IAAL,GAAY,IAAZ;AAEA,QAAM;AAAEC,MAAAA;AAAF,QAAqB,KAAKP,KAAhC;AAEA,SAAKQ,KAAL,GAAa;AACXC,MAAAA,SAAS,EAAE,CADA;AAEXC,MAAAA,KAAK,EAAE,EAFI;AAGXC,MAAAA,MAAM,EAAE,CAHG;AAIXJ,MAAAA,cAJW;AAKXK,MAAAA,SAAS,EAAE;AALA,KAAb;AAOD;;AAEDC,EAAAA,iBAAiB,GAAG;AAClB,QAAM;AAAEC,MAAAA;AAAF,QAAY,KAAKd,KAAvB;AACA,SAAKe,cAAL,CAAoBD,KAApB;AACD;;AAEDE,EAAAA,kBAAkB,CAACC,SAAD,EAAY;AAC5B,QAAM;AAAEC,MAAAA,OAAF;AAAWC,MAAAA,eAAX;AAA4BZ,MAAAA,cAA5B;AAA4CO,MAAAA;AAA5C,QAAsD,KAAKd,KAAjE;;AACA,QAAIiB,SAAS,CAACH,KAAV,KAAoBA,KAAxB,EAA+B;AAC7B,WAAKM,aAAL,CAAmBH,SAAS,CAACH,KAA7B;AACA,WAAKC,cAAL,CAAoBD,KAApB;AACA,WAAKO,aAAL;AACD;;AAED,QAAIJ,SAAS,CAACE,eAAV,KAA8BA,eAAlC,EAAmD;AACjD,WAAKG,QAAL,CAAc;AAAEf,QAAAA,cAAc,EAAE;AAAlB,OAAd,EAAsC,KAAKH,qBAA3C;AACD;;AAED,QAAIa,SAAS,CAACV,cAAV,KAA6BA,cAAjC,EAAiD;AAC/C,WAAKe,QAAL,CAAc;AAAEf,QAAAA;AAAF,OAAd,EAAkC,KAAKH,qBAAvC;AACD;;AAED,QAAIa,SAAS,CAACC,OAAV,KAAsBA,OAA1B,EAAmC;AACjCJ,MAAAA,KAAK,SAAL,IAAAA,KAAK,WAAL,YAAAA,KAAK,CAAES,WAAP,CAAmBL,OAAnB;AACA,WAAKG,aAAL;AACD;AACF;;AAEDG,EAAAA,oBAAoB,GAAG;AACrB,SAAKJ,aAAL;AACD;;AAEDnB,EAAAA,YAAY,CAACwB,SAAD,EAAYhC,KAAZ,EAAmB;AAC7B,QAAM;AAAE0B,MAAAA;AAAF,QAAsB,KAAKnB,KAAjC;AACA,QAAI;AAAEO,MAAAA;AAAF,QAAqB,KAAKC,KAA9B;AACAD,IAAAA,cAAc,GAAG,GAAGmB,MAAH,CAAUnB,cAAV,CAAjB;AACA,QAAMoB,aAAa,GAAGpC,oCAAoC,CAACC,OAArC,CACpBC,KADoB,EAEpBc,cAFoB,CAAtB;;AAIA,QAAIoB,aAAa,IAAI,CAArB,EAAwB;AACtBpB,MAAAA,cAAc,CAACqB,MAAf,CAAsBD,aAAtB,EAAqC,CAArC;AACD,KAFD,MAEO;AACLpB,MAAAA,cAAc,CAACsB,IAAf,CAAoBpC,KAApB;AACD;;AAED,QAAIqC,UAAU,GAAGH,aAAa,GAAG,CAAjC;;AACA,QAAIR,eAAJ,EAAqB;AACnBW,MAAAA,UAAU,GAAG,CAACA,UAAd;AACD;;AAED,QAAM;AAAEnB,MAAAA;AAAF,QAAa,KAAKH,KAAxB;AACA,QAAI;AAAEE,MAAAA;AAAF,QAAY,KAAKF,KAArB;AACAE,IAAAA,KAAK,GAAG,GAAGgB,MAAH,CAAUhB,KAAV,CAAR;AACA,QAAMqB,gBAAgB,GAAGN,SAAS,GAAGd,MAArC;;AACA,QAAIoB,gBAAgB,IAAI,CAApB,IAAyBA,gBAAgB,GAAGrB,KAAK,CAACd,MAAtD,EAA8D;AAC5Dc,MAAAA,KAAK,CAACqB,gBAAD,CAAL,CAAwBD,UAAxB,GAAqCA,UAArC;AACD;;AAED,SAAKR,QAAL,CAAc;AAAEZ,MAAAA,KAAF;AAASH,MAAAA;AAAT,KAAd;AAEA,QAAM;AAAEyB,MAAAA;AAAF,QAAe,KAAKhC,KAA1B;AACAgC,IAAAA,QAAQ,CAACzB,cAAD,EAAiBY,eAAjB,CAAR;AACD;;AAEDhB,EAAAA,oBAAoB,CAAC8B,GAAD,EAAMC,MAAN,EAAc;AAChC,SAAKC,cAAL,CAAoBF,GAApB,EAAyBC,MAAzB;AACD;;AAED9B,EAAAA,qBAAqB,GAAG;AACtB,SAAKgC,mBAAL;AACD;;AAED/B,EAAAA,iBAAiB,CAACgC,KAAD,EAAQ;AACvB,QAAM;AAAEvB,MAAAA,KAAF;AAASwB,MAAAA;AAAT,QAAuB,KAAKtC,KAAlC;AACA,QAAI,CAACc,KAAL,EAAY;AAEZ,QAAMyB,IAAI,GAAGF,KAAK,CAACG,MAAnB;AACA,QAAM;AAAE7B,MAAAA;AAAF,QAAa4B,IAAnB;AACA,QAAM7B,KAAK,GAAG,EAAd;AACA,QAAM+B,MAAM,GAAG3B,KAAK,CAAC4B,OAAN,CAAc,CAAd,CAAf;;AACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,IAAI,CAACK,IAAL,CAAUhD,MAA9B,EAAsC+C,CAAC,IAAI,CAA3C,EAA8C;AAC5C,UAAME,GAAG,GAAGN,IAAI,CAACK,IAAL,CAAUD,CAAV,CAAZ;AACA,UAAMlD,KAAK,GAAGoD,GAAG,CAACC,GAAJ,CAAQL,MAAR,CAAd;AACA,UAAMM,YAAY,GAAGT,SAAS,CAACU,kBAAV,CACnBvD,KADmB,EAEnBgD,MAAM,CAACQ,IAFY,EAGnBR,MAAM,CAACS,IAHY,CAArB;AAKA,UAAMpB,UAAU,GAAG,KAAKqB,eAAL,CAAqB1D,KAArB,CAAnB;AACAiB,MAAAA,KAAK,CAACmB,IAAN,CAAW;AACTkB,QAAAA,YADS;AAETtD,QAAAA,KAFS;AAGTqC,QAAAA;AAHS,OAAX;AAKD;;AAEDzC,IAAAA,GAAG,CAAC+D,MAAJ,CAAW,wBAAX,EAAqCzC,MAArC,EAA6CD,KAAK,CAACd,MAAnD;AAEA,QAAMa,SAAS,GAAGK,KAAK,CAACuC,IAAxB;AACA,SAAK/B,QAAL,CAAc;AAAEb,MAAAA,SAAF;AAAaC,MAAAA,KAAb;AAAoBC,MAAAA,MAApB;AAA4BC,MAAAA,SAAS,EAAE;AAAvC,KAAd;AACD;;AAEDuC,EAAAA,eAAe,CAAC1D,KAAD,EAAQ;AACrB,QAAM;AAAE0B,MAAAA;AAAF,QAAsB,KAAKnB,KAAjC;AACA,QAAM;AAAEO,MAAAA;AAAF,QAAqB,KAAKC,KAAhC,CAFqB,CAIrB;;AACA,QAAMmB,aAAa,GAAGpC,oCAAoC,CAACC,OAArC,CACpBC,KADoB,EAEpBc,cAFoB,CAAtB;AAKA,WAAOY,eAAe,GAAGQ,aAAa,GAAG,CAAnB,GAAuBA,aAAa,IAAI,CAA9D;AACD;;AAEDZ,EAAAA,cAAc,CAACD,KAAD,EAAQ;AACpB,QAAIA,KAAK,IAAI,IAAb,EAAmB;AACjBA,MAAAA,KAAK,CAACwC,gBAAN,CAAuBvE,EAAE,CAACwE,KAAH,CAASC,aAAhC,EAA+C,KAAKnD,iBAApD;AACD;AACF;;AAEDe,EAAAA,aAAa,CAACN,KAAD,EAAQ;AACnB,QAAIA,KAAK,IAAI,IAAb,EAAmB;AACjBA,MAAAA,KAAK,CAAC2C,mBAAN,CAA0B1E,EAAE,CAACwE,KAAH,CAASC,aAAnC,EAAkD,KAAKnD,iBAAvD;AACD;AACF;;AAEDgB,EAAAA,aAAa,GAAG;AACd,QAAI,KAAKf,IAAT,EAAe;AACb,WAAK6B,cAAL,CAAoB,KAAK7B,IAAL,CAAUoD,MAA9B,EAAsC,KAAKpD,IAAL,CAAUqD,SAAhD,EAA2D,IAA3D;AACD;AACF;;AAEDvB,EAAAA,mBAAmB,GAAG;AACpB,QAAI;AAAE1B,MAAAA;AAAF,QAAY,KAAKF,KAArB;AAEAE,IAAAA,KAAK,GAAG,GAAGgB,MAAH,CAAUhB,KAAV,CAAR;;AAEA,SAAK,IAAIf,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGe,KAAK,CAACd,MAA1B,EAAkCD,CAAC,IAAI,CAAvC,EAA0C;AACxC,UAAMiE,IAAI,GAAGlD,KAAK,CAACf,CAAD,CAAlB;AACA,UAAM;AAAEF,QAAAA;AAAF,UAAYmE,IAAlB;AACAA,MAAAA,IAAI,CAAC9B,UAAL,GAAkB,KAAKqB,eAAL,CAAqB1D,KAArB,CAAlB;AACD;;AAED,SAAK6B,QAAL,CAAc;AAAEZ,MAAAA;AAAF,KAAd;AACD;;AAEDyB,EAAAA,cAAc,CAACF,GAAD,EAAMC,MAAN,EAAiC;AAAA,QAAnBtB,SAAmB,uEAAP,KAAO;AAC7C,QAAM;AAAEE,MAAAA;AAAF,QAAY,KAAKd,KAAvB;;AACA,QAAIc,KAAK,IAAI,IAAb,EAAmB;AACjB;AACD;;AAED,QAAIF,SAAJ,EAAe;AACb,WAAKU,QAAL,CAAc;AAAEV,QAAAA,SAAS,EAAE;AAAb,OAAd;AACD;;AAED,QAAMiD,YAAY,GAAG3B,MAAM,GAAGD,GAAT,GAAe,CAApC;AACA,QAAMyB,MAAM,GAAGI,IAAI,CAACC,GAAL,CAAS,CAAT,EAAY9B,GAAG,GAAG4B,YAAY,GAAG,CAAjC,CAAf;AACA,QAAMF,SAAS,GAAGG,IAAI,CAACC,GAAL,CAASL,MAAT,EAAiBxB,MAAM,GAAG2B,YAAY,GAAG,CAAzC,CAAlB;AAEAxE,IAAAA,GAAG,CAAC+D,MAAJ,CAAW,kBAAX,EAA+BM,MAA/B,EAAuC,GAAvC,EAA4CC,SAA5C;AACA7C,IAAAA,KAAK,CAACkD,WAAN,CAAkBN,MAAlB,EAA0BC,SAA1B,EAAqC,IAArC;AACD;;AAEDM,EAAAA,MAAM,GAAG;AACP,QAAM;AAAEtD,MAAAA,MAAF;AAAUC,MAAAA,SAAV;AAAqBF,MAAAA,KAArB;AAA4BD,MAAAA;AAA5B,QAA0C,KAAKD,KAArD;AAEA,wBACE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE,oBAAC,eAAD;AACE,MAAA,SAAS,EAAEC,SADb;AAEE,MAAA,KAAK,EAAEC,KAFT;AAGE,MAAA,MAAM,EAAEC,MAHV;AAIE,MAAA,QAAQ,EAAE,KAAKV,YAJjB;AAKE,MAAA,gBAAgB,EAAE,KAAKE,oBALzB;AAME,MAAA,GAAG,EAAEG,IAAI,IAAI;AACX,aAAKA,IAAL,GAAYA,IAAZ;AACD;AARH,MADF,eAWE,oBAAC,aAAD;AACE,MAAA,EAAE,EAAEM,SADN;AAEE,MAAA,OAAO,EAAE,GAFX;AAGE,MAAA,UAAU,EAAC,MAHb;AAIE,MAAA,YAAY,MAJd;AAKE,MAAA,aAAa;AALf,oBAOE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE,oBAAC,cAAD;AAAgB,MAAA,SAAS,EAAC;AAA1B,MADF,CAPF,CAXF,CADF;AAyBD;;AA9O8D;;AAiPjErB,oCAAoC,CAAC2E,SAArC,GAAiD;AAC/CpD,EAAAA,KAAK,EAAEjC,SAAS,CAACsF,KAAV,CAAgB;AACrBb,IAAAA,gBAAgB,EAAEzE,SAAS,CAACuF,IADP;AAErBX,IAAAA,mBAAmB,EAAE5E,SAAS,CAACuF,IAFV;AAIrB7C,IAAAA,WAAW,EAAE1C,SAAS,CAACuF,IAJF;AAKrB1B,IAAAA,OAAO,EAAE7D,SAAS,CAACwF,OAAV,CACPxF,SAAS,CAACsF,KAAV,CAAgB;AACdjB,MAAAA,IAAI,EAAErE,SAAS,CAACyF,MADF;AAEdrB,MAAAA,IAAI,EAAEpE,SAAS,CAACyF;AAFF,KAAhB,CADO,CALY;AAWrBN,IAAAA,WAAW,EAAEnF,SAAS,CAACuF,IAXF;AAYrBf,IAAAA,IAAI,EAAExE,SAAS,CAAC0F;AAZK,GAAhB,CADwC;AAe/CpD,EAAAA,eAAe,EAAEtC,SAAS,CAAC2F,IAfoB;AAgB/CjE,EAAAA,cAAc,EAAE1B,SAAS,CAACwF,OAAV,CAAkBxF,SAAS,CAAC4F,GAA5B,CAhB+B;AAiB/CzC,EAAAA,QAAQ,EAAEnD,SAAS,CAACuF,IAjB2B;AAkB/ClD,EAAAA,OAAO,EAAErC,SAAS,CAACwF,OAAV,CAAkBrF,YAAY,CAAC0F,eAA/B,EAAgDC,UAlBV;AAmB/CrC,EAAAA,SAAS,EAAEzD,SAAS,CAAC+F,UAAV,CAAqB3F,SAArB,EAAgC0F;AAnBI,CAAjD;AAsBApF,oCAAoC,CAACsF,YAArC,GAAoD;AAClD/D,EAAAA,KAAK,EAAE,IAD2C;AAElDK,EAAAA,eAAe,EAAE,IAFiC;AAGlDZ,EAAAA,cAAc,EAAE,EAHkC;AAIlDyB,EAAAA,QAAQ,EAAE,MAAM,CAAE;AAJgC,CAApD;AAOA,eAAezC,oCAAf","sourcesContent":["/* eslint react/no-did-update-set-state: \"off\" */\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { CSSTransition } from 'react-transition-group';\nimport dh, { PropTypes as APIPropTypes } from '@deephaven/jsapi-shim';\nimport { Formatter } from '@deephaven/jsapi-utils';\nimport { LoadingSpinner, SelectValueList } from '@deephaven/components';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('AdvancedFilterCreatorSelectValueList');\n\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass AdvancedFilterCreatorSelectValueList extends PureComponent {\n /**\n * Get the index of a value in an array. Has some special handling for some types, like DateTimes and Longs.\n * @param {Any} value The value to search for\n * @param {Array} values The array of values to search within\n */\n static indexOf(value, values) {\n for (let i = 0; i < values.length; i += 1) {\n const v = values[i];\n if (\n v === value ||\n (v != null &&\n v.valueOf &&\n value != null &&\n value.valueOf &&\n v.valueOf() === value.valueOf())\n ) {\n return i;\n }\n }\n\n return -1;\n }\n\n constructor(props) {\n super(props);\n\n this.handleSelect = this.handleSelect.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n\n this.list = null;\n\n const { selectedValues } = this.props;\n\n this.state = {\n itemCount: 0,\n items: [],\n offset: 0,\n selectedValues,\n isLoading: true,\n };\n }\n\n componentDidMount() {\n const { table } = this.props;\n this.startListening(table);\n }\n\n componentDidUpdate(prevProps) {\n const { filters, invertSelection, selectedValues, table } = this.props;\n if (prevProps.table !== table) {\n this.stopListening(prevProps.table);\n this.startListening(table);\n this.resetViewport();\n }\n\n if (prevProps.invertSelection !== invertSelection) {\n this.setState({ selectedValues: [] }, this.handleSelectionUpdate);\n }\n\n if (prevProps.selectedValues !== selectedValues) {\n this.setState({ selectedValues }, this.handleSelectionUpdate);\n }\n\n if (prevProps.filters !== filters) {\n table?.applyFilter(filters);\n this.resetViewport();\n }\n }\n\n componentWillUnmount() {\n this.stopListening();\n }\n\n handleSelect(itemIndex, value) {\n const { invertSelection } = this.props;\n let { selectedValues } = this.state;\n selectedValues = [].concat(selectedValues);\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n if (selectedIndex >= 0) {\n selectedValues.splice(selectedIndex, 1);\n } else {\n selectedValues.push(value);\n }\n\n let isSelected = selectedIndex < 0;\n if (invertSelection) {\n isSelected = !isSelected;\n }\n\n const { offset } = this.state;\n let { items } = this.state;\n items = [].concat(items);\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n items[visibleItemIndex].isSelected = isSelected;\n }\n\n this.setState({ items, selectedValues });\n\n const { onChange } = this.props;\n onChange(selectedValues, invertSelection);\n }\n\n handleViewportChange(top, bottom) {\n this.updateViewport(top, bottom);\n }\n\n handleSelectionUpdate() {\n this.updateItemSelection();\n }\n\n handleTableUpdate(event) {\n const { table, formatter } = this.props;\n if (!table) return;\n\n const data = event.detail;\n const { offset } = data;\n const items = [];\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n const displayValue = formatter.getFormattedString(\n value,\n column.type,\n column.name\n );\n const isSelected = this.isValueSelected(value);\n items.push({\n displayValue,\n value,\n isSelected,\n });\n }\n\n log.debug2('Received table update:', offset, items.length);\n\n const itemCount = table.size;\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n isValueSelected(value) {\n const { invertSelection } = this.props;\n const { selectedValues } = this.state;\n\n // Need to check if any of the valueOf matches, timestamp value that is equal\n const selectedIndex = AdvancedFilterCreatorSelectValueList.indexOf(\n value,\n selectedValues\n );\n\n return invertSelection ? selectedIndex < 0 : selectedIndex >= 0;\n }\n\n startListening(table) {\n if (table != null) {\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n }\n\n stopListening(table) {\n if (table != null) {\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n }\n }\n\n resetViewport() {\n if (this.list) {\n this.updateViewport(this.list.topRow, this.list.bottomRow, true);\n }\n }\n\n updateItemSelection() {\n let { items } = this.state;\n\n items = [].concat(items);\n\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value } = item;\n item.isSelected = this.isValueSelected(value);\n }\n\n this.setState({ items });\n }\n\n updateViewport(top, bottom, isLoading = false) {\n const { table } = this.props;\n if (table == null) {\n return;\n }\n\n if (isLoading) {\n this.setState({ isLoading: true });\n }\n\n const viewportSize = bottom - top + 1;\n const topRow = Math.max(0, top - viewportSize * 3);\n const bottomRow = Math.max(topRow, bottom + viewportSize * 3);\n\n log.debug2('Setting viewport', topRow, ',', bottomRow);\n table.setViewport(topRow, bottomRow, null);\n }\n\n render() {\n const { offset, isLoading, items, itemCount } = this.state;\n\n return (\n <div className=\"select-value-list-wrapper\">\n <SelectValueList\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n ref={list => {\n this.list = list;\n }}\n />\n <CSSTransition\n in={isLoading}\n timeout={250}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"loading-list\">\n <LoadingSpinner className=\"loading-spinner-large\" />\n </div>\n </CSSTransition>\n </div>\n );\n }\n}\n\nAdvancedFilterCreatorSelectValueList.propTypes = {\n table: PropTypes.shape({\n addEventListener: PropTypes.func,\n removeEventListener: PropTypes.func,\n\n applyFilter: PropTypes.func,\n columns: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n type: PropTypes.string,\n })\n ),\n setViewport: PropTypes.func,\n size: PropTypes.number,\n }),\n invertSelection: PropTypes.bool,\n selectedValues: PropTypes.arrayOf(PropTypes.any),\n onChange: PropTypes.func,\n filters: PropTypes.arrayOf(APIPropTypes.FilterCondition).isRequired,\n formatter: PropTypes.instanceOf(Formatter).isRequired,\n};\n\nAdvancedFilterCreatorSelectValueList.defaultProps = {\n table: null,\n invertSelection: true,\n selectedValues: [],\n onChange: () => {},\n};\n\nexport default AdvancedFilterCreatorSelectValueList;\n"],"file":"AdvancedFilterCreatorSelectValueList.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/iris-grid",
3
- "version": "0.13.5",
3
+ "version": "0.13.8",
4
4
  "description": "Deephaven Iris Grid",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -30,13 +30,13 @@
30
30
  "start": "cross-env NODE_ENV=development npm run watch"
31
31
  },
32
32
  "dependencies": {
33
- "@deephaven/components": "^0.13.5",
34
- "@deephaven/console": "^0.13.5",
33
+ "@deephaven/components": "^0.13.8",
34
+ "@deephaven/console": "^0.13.8",
35
35
  "@deephaven/filters": "^0.13.0",
36
36
  "@deephaven/grid": "^0.13.2",
37
37
  "@deephaven/icons": "^0.13.0",
38
38
  "@deephaven/jsapi-shim": "^0.13.0",
39
- "@deephaven/jsapi-utils": "^0.13.0",
39
+ "@deephaven/jsapi-utils": "^0.13.8",
40
40
  "@deephaven/log": "^0.13.0",
41
41
  "@deephaven/react-hooks": "^0.13.0",
42
42
  "@deephaven/storage": "^0.13.0",
@@ -73,5 +73,5 @@
73
73
  "publishConfig": {
74
74
  "access": "public"
75
75
  },
76
- "gitHead": "1f0a13603448c8b065a69410451f1044cbba6704"
76
+ "gitHead": "ea8c14d4815cb3575341bbfce4834e90eac01921"
77
77
  }