From f4063c806665f0b8ddedbcf427e9facabce15c75 Mon Sep 17 00:00:00 2001 From: otito Date: Thu, 9 Jan 2025 10:40:12 -0500 Subject: [PATCH 1/8] ready for review --- .../filter/headerfilter/HeaderFilterModel.ts | 24 ++++++++-- .../filter/headerfilter/values/ValuesTab.scss | 13 ++++++ .../filter/headerfilter/values/ValuesTab.ts | 29 +++++++++++- .../headerfilter/values/ValuesTabModel.ts | 46 +++++++++++++------ 4 files changed, 90 insertions(+), 22 deletions(-) diff --git a/desktop/cmp/grid/impl/filter/headerfilter/HeaderFilterModel.ts b/desktop/cmp/grid/impl/filter/headerfilter/HeaderFilterModel.ts index 1a12fae6b..0b9d3eab6 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/HeaderFilterModel.ts +++ b/desktop/cmp/grid/impl/filter/headerfilter/HeaderFilterModel.ts @@ -9,7 +9,7 @@ import {TabContainerModel} from '@xh/hoist/cmp/tab'; import {HoistModel, managed, lookup} from '@xh/hoist/core'; import {action, computed} from '@xh/hoist/mobx'; import {wait} from '@xh/hoist/promise'; -import {isEmpty} from 'lodash'; +import {castArray, isEmpty, map} from 'lodash'; import {GridFilterFieldSpec} from '@xh/hoist/cmp/grid'; import {customTab} from './custom/CustomTab'; import {CustomTabModel} from './custom/CustomTabModel'; @@ -125,10 +125,15 @@ export class HeaderFilterModel extends HoistModel { const {tabContainerModel, customTabModel, valuesTabModel} = this, {activeTabId} = tabContainerModel, valuesIsActive = activeTabId === 'valuesFilter', - activeTabModel = valuesIsActive ? valuesTabModel : customTabModel, otherTabModel = valuesIsActive ? customTabModel : valuesTabModel; - this.setColumnFilters(activeTabModel.filter); + valuesIsActive + ? this.setValueTabColumnFilters( + valuesTabModel.filter, + valuesTabModel.combineCurrentFilters + ) + : this.setCustomTabColumnFilters(customTabModel.filter); + if (close) { this.parent.close(); } else { @@ -139,7 +144,7 @@ export class HeaderFilterModel extends HoistModel { @action clear(close: boolean = true) { - this.setColumnFilters(null); + this.filterModel.setColumnFilters(this.field, null); if (close) { this.parent.close(); } else { @@ -164,7 +169,16 @@ export class HeaderFilterModel extends HoistModel { tabContainerModel.activateTab(toTabId); } - private setColumnFilters(filters) { + private setValueTabColumnFilters(filter, combine = false) { + const oldValues = map(this.columnFilters, 'value').flat(), + newValues = castArray(filter.value); + this.filterModel.setColumnFilters(this.field, { + ...filter, + value: combine ? [...oldValues, ...newValues] : newValues + }); + } + + private setCustomTabColumnFilters(filters) { this.filterModel.setColumnFilters(this.field, filters); } diff --git a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.scss b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.scss index bf14d1049..ed765040c 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.scss +++ b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.scss @@ -1,4 +1,17 @@ .xh-values-filter-tab { + .store-filter-header { + padding: 5px 7px; + border-bottom: 1px solid var(--xh-grid-header-border-color); + row-gap: 5px; + .bp5-control-indicator { + font-size: 1em; + } + span { + font-size: var(--xh-grid-compact-header-font-size-px); + color: var(--xh-grid-header-text-color); + } + } + &__hidden-values-message { display: flex; padding: var(--xh-pad-half-px); diff --git a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts index 3cd386243..fa1d4f41c 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts +++ b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts @@ -5,10 +5,11 @@ * Copyright © 2025 Extremely Heavy Industries Inc. */ import {grid} from '@xh/hoist/cmp/grid'; -import {div, placeholder, vframe} from '@xh/hoist/cmp/layout'; +import {div, hframe, placeholder, span, vbox, vframe} from '@xh/hoist/cmp/layout'; import {storeFilterField} from '@xh/hoist/cmp/store'; import {hoistCmp, uses} from '@xh/hoist/core'; import {button} from '@xh/hoist/desktop/cmp/button'; +import {checkbox} from '@xh/hoist/desktop/cmp/input'; import {panel} from '@xh/hoist/desktop/cmp/panel'; import {toolbar} from '@xh/hoist/desktop/cmp/toolbar'; import {Icon} from '@xh/hoist/icon'; @@ -47,7 +48,31 @@ const tbar = hoistCmp.factory(() => { const body = hoistCmp.factory(({model}) => { const {isCustomFilter} = model.headerFilterModel; if (isCustomFilter) return customFilterPlaceholder(); - return vframe(grid(), hiddenValuesMessage()); + return vframe(storeFilterSelect(), grid(), hiddenValuesMessage()); +}); + +const storeFilterSelect = hoistCmp.factory(({model}) => { + return vbox({ + className: 'store-filter-header', + items: [ + hframe( + checkbox({ + disabled: model.gridModel.store.empty, + displayUnsetState: true, + value: model.allVisibleRecsChecked, + onChange: () => model.toggleAllRecsChecked() + }), + span(`(Select All${model.filterText ? ' Search Results' : ''})`) + ), + hframe({ + omit: !model.filterText || model.gridModel.store.empty, + items: [ + checkbox({bind: 'combineCurrentFilters'}), + span(`Add current selection to filter`) + ] + }) + ] + }); }); const customFilterPlaceholder = hoistCmp.factory(({model}) => { diff --git a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts index aeeda0dd1..ac3e82bf1 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts +++ b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts @@ -10,7 +10,7 @@ import {FieldFilterSpec} from '@xh/hoist/data'; import {HeaderFilterModel} from '../HeaderFilterModel'; import {checkbox} from '@xh/hoist/desktop/cmp/input'; import {action, bindable, computed, makeObservable, observable} from '@xh/hoist/mobx'; -import {castArray, difference, isEmpty, partition, uniq, without} from 'lodash'; +import {castArray, difference, isEmpty, map, partition, uniq, without} from 'lodash'; export class ValuesTabModel extends HoistModel { override xhImpl = true; @@ -26,6 +26,10 @@ export class ValuesTabModel extends HoistModel { /** Bound search term for `StoreFilterField` */ @bindable filterText: string = null; + /** Available only when commit on change is false merge + * current filter with pendingValues on commit*/ + @bindable combineCurrentFilters: boolean = false; + /** FieldFilter output by this model. */ @computed.struct get filter(): FieldFilterSpec { @@ -81,11 +85,18 @@ export class ValuesTabModel extends HoistModel { this.headerFilterModel = headerFilterModel; this.gridModel = this.createGridModel(); - this.addReaction({ - track: () => this.pendingValues, - run: () => this.syncGrid(), - fireImmediately: true - }); + this.addReaction( + { + track: () => this.pendingValues, + run: () => this.syncGrid(), + fireImmediately: true + }, + { + track: () => this.filterText, + run: () => this.setPending(), + debounce: 500 + } + ); } syncWithFilter() { @@ -95,6 +106,7 @@ export class ValuesTabModel extends HoistModel { @action reset() { this.filterText = null; + this.combineCurrentFilters = false; this.fieldSpec.loadValues(); } @@ -115,6 +127,18 @@ export class ValuesTabModel extends HoistModel { //------------------- // Implementation //------------------- + private setPending() { + this.combineCurrentFilters = false; + if (!this.filterText) { + this.doSyncWithFilter(); + this.syncGrid(); + return; + } + const {records} = this.gridModel.store, + values = map(records, record => record.get('value')); + this.pendingValues = uniq(values); + } + private getFilter() { const {gridFilterModel, pendingValues, values, valueCount, field} = this, included = pendingValues.map(it => gridFilterModel.fromDisplayValue(it)), @@ -217,17 +241,10 @@ export class ValuesTabModel extends HoistModel { onRowClicked: ({data: record}) => { this.setRecsChecked(!record.get('isChecked'), record.get('value')); }, + hideHeaders: true, columns: [ { field: 'isChecked', - headerName: ({gridModel}) => { - return checkbox({ - disabled: gridModel.store.empty, - displayUnsetState: true, - value: this.allVisibleRecsChecked, - onChange: () => this.toggleAllRecsChecked() - }); - }, width: 28, autosizable: false, pinned: true, @@ -245,7 +262,6 @@ export class ValuesTabModel extends HoistModel { }, { field: 'value', - displayName: '(Select All)', align: 'left', comparator: (v1, v2, sortDir, abs, {defaultComparator}) => { const mul = sortDir === 'desc' ? -1 : 1; From 82e2ff9b95874e130493d5e4c571da2e87109695 Mon Sep 17 00:00:00 2001 From: otito Date: Thu, 9 Jan 2025 12:04:06 -0500 Subject: [PATCH 2/8] fixes pre PR --- .../grid/impl/filter/headerfilter/values/ValuesTab.ts | 10 ++++++---- .../impl/filter/headerfilter/values/ValuesTabModel.ts | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts index fa1d4f41c..f2e97a3ab 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts +++ b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts @@ -52,20 +52,22 @@ const body = hoistCmp.factory(({model}) => { }); const storeFilterSelect = hoistCmp.factory(({model}) => { + const {gridModel, allVisibleRecsChecked, filterText, headerFilterModel} = model, + {store} = gridModel; return vbox({ className: 'store-filter-header', items: [ hframe( checkbox({ - disabled: model.gridModel.store.empty, + disabled: store.empty, displayUnsetState: true, - value: model.allVisibleRecsChecked, + value: allVisibleRecsChecked, onChange: () => model.toggleAllRecsChecked() }), - span(`(Select All${model.filterText ? ' Search Results' : ''})`) + span(`(Select All${filterText ? ' Search Results' : ''})`) ), hframe({ - omit: !model.filterText || model.gridModel.store.empty, + omit: !filterText || store.empty || headerFilterModel.commitOnChange, items: [ checkbox({bind: 'combineCurrentFilters'}), span(`Add current selection to filter`) diff --git a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts index ac3e82bf1..c63b705f9 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts +++ b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts @@ -94,7 +94,7 @@ export class ValuesTabModel extends HoistModel { { track: () => this.filterText, run: () => this.setPending(), - debounce: 500 + debounce: 300 } ); } @@ -135,7 +135,7 @@ export class ValuesTabModel extends HoistModel { return; } const {records} = this.gridModel.store, - values = map(records, record => record.get('value')); + values = map(records, it => it.get('value')); this.pendingValues = uniq(values); } From f1d2990e497248acb1624115c8ebde75d1d56404 Mon Sep 17 00:00:00 2001 From: otito Date: Thu, 9 Jan 2025 13:43:50 -0500 Subject: [PATCH 3/8] trimming code --- .../filter/headerfilter/HeaderFilterModel.ts | 24 ++++--------------- .../filter/headerfilter/values/ValuesTab.ts | 2 +- .../headerfilter/values/ValuesTabModel.ts | 18 +++++++------- 3 files changed, 14 insertions(+), 30 deletions(-) diff --git a/desktop/cmp/grid/impl/filter/headerfilter/HeaderFilterModel.ts b/desktop/cmp/grid/impl/filter/headerfilter/HeaderFilterModel.ts index 0b9d3eab6..1a12fae6b 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/HeaderFilterModel.ts +++ b/desktop/cmp/grid/impl/filter/headerfilter/HeaderFilterModel.ts @@ -9,7 +9,7 @@ import {TabContainerModel} from '@xh/hoist/cmp/tab'; import {HoistModel, managed, lookup} from '@xh/hoist/core'; import {action, computed} from '@xh/hoist/mobx'; import {wait} from '@xh/hoist/promise'; -import {castArray, isEmpty, map} from 'lodash'; +import {isEmpty} from 'lodash'; import {GridFilterFieldSpec} from '@xh/hoist/cmp/grid'; import {customTab} from './custom/CustomTab'; import {CustomTabModel} from './custom/CustomTabModel'; @@ -125,15 +125,10 @@ export class HeaderFilterModel extends HoistModel { const {tabContainerModel, customTabModel, valuesTabModel} = this, {activeTabId} = tabContainerModel, valuesIsActive = activeTabId === 'valuesFilter', + activeTabModel = valuesIsActive ? valuesTabModel : customTabModel, otherTabModel = valuesIsActive ? customTabModel : valuesTabModel; - valuesIsActive - ? this.setValueTabColumnFilters( - valuesTabModel.filter, - valuesTabModel.combineCurrentFilters - ) - : this.setCustomTabColumnFilters(customTabModel.filter); - + this.setColumnFilters(activeTabModel.filter); if (close) { this.parent.close(); } else { @@ -144,7 +139,7 @@ export class HeaderFilterModel extends HoistModel { @action clear(close: boolean = true) { - this.filterModel.setColumnFilters(this.field, null); + this.setColumnFilters(null); if (close) { this.parent.close(); } else { @@ -169,16 +164,7 @@ export class HeaderFilterModel extends HoistModel { tabContainerModel.activateTab(toTabId); } - private setValueTabColumnFilters(filter, combine = false) { - const oldValues = map(this.columnFilters, 'value').flat(), - newValues = castArray(filter.value); - this.filterModel.setColumnFilters(this.field, { - ...filter, - value: combine ? [...oldValues, ...newValues] : newValues - }); - } - - private setCustomTabColumnFilters(filters) { + private setColumnFilters(filters) { this.filterModel.setColumnFilters(this.field, filters); } diff --git a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts index f2e97a3ab..f5112634e 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts +++ b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts @@ -69,7 +69,7 @@ const storeFilterSelect = hoistCmp.factory(({model}) => { hframe({ omit: !filterText || store.empty || headerFilterModel.commitOnChange, items: [ - checkbox({bind: 'combineCurrentFilters'}), + checkbox({onChange: () => model.setPendingValues(true)}), span(`Add current selection to filter`) ] }) diff --git a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts index c63b705f9..aac5b64fb 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts +++ b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts @@ -10,7 +10,7 @@ import {FieldFilterSpec} from '@xh/hoist/data'; import {HeaderFilterModel} from '../HeaderFilterModel'; import {checkbox} from '@xh/hoist/desktop/cmp/input'; import {action, bindable, computed, makeObservable, observable} from '@xh/hoist/mobx'; -import {castArray, difference, isEmpty, map, partition, uniq, without} from 'lodash'; +import {castArray, difference, flatten, isEmpty, map, partition, uniq, without} from 'lodash'; export class ValuesTabModel extends HoistModel { override xhImpl = true; @@ -26,10 +26,6 @@ export class ValuesTabModel extends HoistModel { /** Bound search term for `StoreFilterField` */ @bindable filterText: string = null; - /** Available only when commit on change is false merge - * current filter with pendingValues on commit*/ - @bindable combineCurrentFilters: boolean = false; - /** FieldFilter output by this model. */ @computed.struct get filter(): FieldFilterSpec { @@ -93,7 +89,7 @@ export class ValuesTabModel extends HoistModel { }, { track: () => this.filterText, - run: () => this.setPending(), + run: () => this.setPendingValues(), debounce: 300 } ); @@ -106,7 +102,6 @@ export class ValuesTabModel extends HoistModel { @action reset() { this.filterText = null; - this.combineCurrentFilters = false; this.fieldSpec.loadValues(); } @@ -127,16 +122,19 @@ export class ValuesTabModel extends HoistModel { //------------------- // Implementation //------------------- - private setPending() { - this.combineCurrentFilters = false; + @action + setPendingValues(combine = false) { if (!this.filterText) { this.doSyncWithFilter(); this.syncGrid(); return; } + const {records} = this.gridModel.store, + currentFilterValues = flatten(map(this.columnFilters, 'value')), values = map(records, it => it.get('value')); - this.pendingValues = uniq(values); + + this.pendingValues = uniq(combine ? [...currentFilterValues, ...values] : values); } private getFilter() { From 4c916e9329cb1d60e266714560e3c5048d9b5ff4 Mon Sep 17 00:00:00 2001 From: otito Date: Thu, 9 Jan 2025 15:38:39 -0500 Subject: [PATCH 4/8] done --- .../grid/impl/filter/headerfilter/values/ValuesTabModel.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts index aac5b64fb..cda6a925f 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts +++ b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts @@ -62,6 +62,10 @@ export class ValuesTabModel extends HoistModel { return this.headerFilterModel.filterModel; } + get commitOnChange() { + return this.headerFilterModel.commitOnChange; + } + get values() { return this.fieldSpec.values; } From 18d9f6ed58fe971a4544288629800ada26378563 Mon Sep 17 00:00:00 2001 From: otito Date: Thu, 9 Jan 2025 16:09:39 -0500 Subject: [PATCH 5/8] done --- .../grid/impl/filter/headerfilter/values/ValuesTabModel.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts index cda6a925f..aac5b64fb 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts +++ b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts @@ -62,10 +62,6 @@ export class ValuesTabModel extends HoistModel { return this.headerFilterModel.filterModel; } - get commitOnChange() { - return this.headerFilterModel.commitOnChange; - } - get values() { return this.fieldSpec.values; } From 1432952314884f8266ca3085a9a7c729a9613ad0 Mon Sep 17 00:00:00 2001 From: otito Date: Thu, 9 Jan 2025 16:52:03 -0500 Subject: [PATCH 6/8] post CR with colin state change --- .../impl/filter/headerfilter/values/ValuesTab.ts | 2 +- .../filter/headerfilter/values/ValuesTabModel.ts | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts index f5112634e..f2e97a3ab 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts +++ b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts @@ -69,7 +69,7 @@ const storeFilterSelect = hoistCmp.factory(({model}) => { hframe({ omit: !filterText || store.empty || headerFilterModel.commitOnChange, items: [ - checkbox({onChange: () => model.setPendingValues(true)}), + checkbox({bind: 'combineCurrentFilters'}), span(`Add current selection to filter`) ] }) diff --git a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts index aac5b64fb..97dabfc51 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts +++ b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts @@ -26,6 +26,10 @@ export class ValuesTabModel extends HoistModel { /** Bound search term for `StoreFilterField` */ @bindable filterText: string = null; + /** Available only when commit on change is false merge + * current filter with pendingValues on commit*/ + @bindable combineCurrentFilters: boolean = false; + /** FieldFilter output by this model. */ @computed.struct get filter(): FieldFilterSpec { @@ -88,7 +92,7 @@ export class ValuesTabModel extends HoistModel { fireImmediately: true }, { - track: () => this.filterText, + track: () => [this.filterText, this.combineCurrentFilters], run: () => this.setPendingValues(), debounce: 300 } @@ -123,7 +127,7 @@ export class ValuesTabModel extends HoistModel { // Implementation //------------------- @action - setPendingValues(combine = false) { + setPendingValues() { if (!this.filterText) { this.doSyncWithFilter(); this.syncGrid(); @@ -134,7 +138,9 @@ export class ValuesTabModel extends HoistModel { currentFilterValues = flatten(map(this.columnFilters, 'value')), values = map(records, it => it.get('value')); - this.pendingValues = uniq(combine ? [...currentFilterValues, ...values] : values); + this.pendingValues = uniq( + this.combineCurrentFilters ? [...currentFilterValues, ...values] : values + ); } private getFilter() { From 16d74c321d4b5111d05759c37bcba301708e9873 Mon Sep 17 00:00:00 2001 From: otito Date: Fri, 10 Jan 2025 09:22:08 -0500 Subject: [PATCH 7/8] comment layout correction --- .../grid/impl/filter/headerfilter/values/ValuesTabModel.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts index 97dabfc51..ddfbd5f25 100644 --- a/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts +++ b/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts @@ -26,8 +26,10 @@ export class ValuesTabModel extends HoistModel { /** Bound search term for `StoreFilterField` */ @bindable filterText: string = null; - /** Available only when commit on change is false merge - * current filter with pendingValues on commit*/ + /* + * Available only when commit on change is false merge + * current filter with pendingValues on commit + */ @bindable combineCurrentFilters: boolean = false; /** FieldFilter output by this model. */ From 06796ccf8a673909a3c40c17abcd4b59938ec4d7 Mon Sep 17 00:00:00 2001 From: otito Date: Fri, 17 Jan 2025 14:06:04 -0500 Subject: [PATCH 8/8] post review changes set commit on change to false add change log --- CHANGELOG.md | 7 +++++++ cmp/grid/Types.ts | 5 ++++- cmp/grid/filter/GridFilterModel.ts | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d77234b9e..68e0e9162 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## v72.0.0-SNAPSHOT - unreleased +### 🎁 New Features + +* Improvements to Grid columns `HeaderFilter` component: + * `GridFilterModel` `commitOnChage` now set to `false` by default + * Addition of ability to append terms to active filter **only** when `commitOnChage:false` + * Column header filtering functionality now similar to Excel on Windows + ## v71.0.0 - 2025-01-08 ### 💥 Breaking Changes (upgrade difficulty: 🟠 MEDIUM - Hoist core update, import adjustments) diff --git a/cmp/grid/Types.ts b/cmp/grid/Types.ts index ed937b528..c6b5e5afe 100644 --- a/cmp/grid/Types.ts +++ b/cmp/grid/Types.ts @@ -90,7 +90,10 @@ export interface GridFilterModelConfig { */ bind?: Store | View; - /** True (default) to update filters immediately after each change made in the column-based filter UI.*/ + /** + * True to update filters immediately after each change made in the column-based filter UI. + * Defaults to False. + */ commitOnChange?: boolean; /** diff --git a/cmp/grid/filter/GridFilterModel.ts b/cmp/grid/filter/GridFilterModel.ts index dd16ec7ab..5122b5c53 100644 --- a/cmp/grid/filter/GridFilterModel.ts +++ b/cmp/grid/filter/GridFilterModel.ts @@ -46,7 +46,7 @@ export class GridFilterModel extends HoistModel { static BLANK_PLACEHOLDER = '[blank]'; constructor( - {bind, commitOnChange = true, fieldSpecs, fieldSpecDefaults}: GridFilterModelConfig, + {bind, commitOnChange = false, fieldSpecs, fieldSpecDefaults}: GridFilterModelConfig, gridModel: GridModel ) { super();