diff --git a/packages/iris-grid/src/AdvancedFilterCreator.test.tsx b/packages/iris-grid/src/AdvancedFilterCreator.test.tsx index 8bf2dbf6ac..0b5f21004e 100644 --- a/packages/iris-grid/src/AdvancedFilterCreator.test.tsx +++ b/packages/iris-grid/src/AdvancedFilterCreator.test.tsx @@ -54,7 +54,7 @@ function makeAdvancedFilterCreatorWrapper( selectedValues: [], }, model: irisGridTestUtils.makeModel(), - column: irisGridTestUtils.makeColumn(), + column: irisGridTestUtils.makeColumn('0'), // needs to match column name in makeModel so that columnIndex can be found when rendering formatter: new Formatter(dh), } ) { diff --git a/packages/iris-grid/src/AdvancedFilterCreator.tsx b/packages/iris-grid/src/AdvancedFilterCreator.tsx index 927f57d7ec..850f2fbb7e 100644 --- a/packages/iris-grid/src/AdvancedFilterCreator.tsx +++ b/packages/iris-grid/src/AdvancedFilterCreator.tsx @@ -20,7 +20,11 @@ import { } from '@deephaven/jsapi-utils'; import { Button, ContextActionUtils } from '@deephaven/components'; import Log from '@deephaven/log'; -import { CancelablePromise, PromiseUtils } from '@deephaven/utils'; +import { + assertNotNull, + CancelablePromise, + PromiseUtils, +} from '@deephaven/utils'; import type { Column, FilterCondition, Table } from '@deephaven/jsapi-types'; import shortid from 'shortid'; import AdvancedFilterCreatorFilterItem from './AdvancedFilterCreatorFilterItem'; @@ -75,6 +79,8 @@ interface AdvancedFilterCreatorState { valuesTableError: null; valuesTable?: Table; + + isSortable: boolean; } class AdvancedFilterCreator extends PureComponent< @@ -119,7 +125,7 @@ class AdvancedFilterCreator extends PureComponent< this.focusTrapContainer = React.createRef(); - const { options } = props; + const { model, column, options } = props; let { filterOperators, invertSelection, selectedValues } = options; // can be null or an empty array @@ -142,6 +148,10 @@ class AdvancedFilterCreator extends PureComponent< selectedValues = []; } + const columnIndex = model.getColumnIndexByName(column.name); + assertNotNull(columnIndex); + const isSortable = model.isColumnSortable(columnIndex); + this.state = { // Filter items filterItems, @@ -155,6 +165,8 @@ class AdvancedFilterCreator extends PureComponent< valuesTableError: null, valuesTable: undefined, + + isSortable, }; } @@ -202,9 +214,10 @@ class AdvancedFilterCreator extends PureComponent< ); this.valuesTablePromise .then(valuesTable => { - const sort = valuesTable.columns[0].sort().asc(); - valuesTable.applySort([sort]); - + if (valuesTable.columns[0].isSortable ?? true) { + const sort = valuesTable.columns[0].sort().asc(); + valuesTable.applySort([sort]); + } this.setState({ valuesTable }); }) .catch(error => { @@ -384,7 +397,10 @@ class AdvancedFilterCreator extends PureComponent< */ sortTable(direction: SortDirection, addToExisting = false): void { const { column, onSortChange } = this.props; - onSortChange(column, direction, addToExisting); + const { isSortable } = this.state; + if (isSortable) { + onSortChange(column, direction, addToExisting); + } } startUpdateTimer(): void { @@ -454,6 +470,7 @@ class AdvancedFilterCreator extends PureComponent< selectedValues, valuesTable, valuesTableError, + isSortable, } = this.state; const { dh, isValuesTableAvailable } = model; const isBoolean = TableUtils.isBooleanType(column.type); @@ -564,7 +581,10 @@ class AdvancedFilterCreator extends PureComponent< })} onClick={this.handleSortDown} icon={dhSortAmountDown} - tooltip={`Sort ${column.name} Descending`} + tooltip={ + isSortable ? `Sort ${column.name} Descending` : 'Not sortable' + } + disabled={!isSortable} />