Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import errors from '@js/ui/widget/ui.errors';
import { findChanges } from '@ts/core/utils/m_array_compare';
import { fromPromise } from '@ts/core/utils/m_deferred';
import type { ChangingEvent, DataSource, StoreLoadOptions } from '@ts/data/data_source/types';
import type { ColumnsChanges } from '@ts/grids/grid_core/columns_controller/types';
import type { Column, ColumnsChanges } from '@ts/grids/grid_core/columns_controller/types';
import type DataSourceAdapter from '@ts/grids/grid_core/data_source_adapter/m_data_source_adapter';
import type {
ChangedEvent, DataSourceAdapterProvider, LoadOperation, OperationTypes, RawItemData,
Expand All @@ -30,10 +30,8 @@ import { isLocalStore } from '@ts/grids/grid_core/data_source_adapter/utils/stor
import type { EditingController } from '@ts/grids/grid_core/editing/m_editing';
import type { EditorFactory } from '@ts/grids/grid_core/editor_factory/m_editor_factory';
import type { ErrorHandlingController } from '@ts/grids/grid_core/error_handling/m_error_handling';
import type { ApplyFilterViewController } from '@ts/grids/grid_core/filter/m_filter_row';
import type { FilterSyncController } from '@ts/grids/grid_core/filter/m_filter_sync';
import type { FocusController } from '@ts/grids/grid_core/focus/m_focus';
import type { HeaderFilterController } from '@ts/grids/grid_core/header_filter/m_header_filter';
import type { KeyboardNavigationController } from '@ts/grids/grid_core/keyboard_navigation/m_keyboard_navigation';
import modules from '@ts/grids/grid_core/m_modules';
import type {
Expand Down Expand Up @@ -141,9 +139,7 @@ export class DataController extends DataHelperMixin(modules.Controller) {

protected _filterSyncController!: FilterSyncController;

protected _headerFilterController!: HeaderFilterController;

protected _applyFilterController!: ApplyFilterViewController;
private _filterExcludedColumn: Column | null = null;

protected _keyboardNavigationController!: KeyboardNavigationController;

Expand All @@ -168,10 +164,8 @@ export class DataController extends DataHelperMixin(modules.Controller) {
this._editorFactoryController = this.getController('editorFactory');
this._errorHandlingController = this.getController('errorHandling');
this._filterSyncController = this.getController('filterSync');
this._applyFilterController = this.getController('applyFilter');
this._keyboardNavigationController = this.getController('keyboardNavigation');
this._focusController = this.getController('focus');
this._headerFilterController = this.getController('headerFilter');
this._selectionController = this.getController('selection');
this._stateStoringController = this.getController('stateStoring');

Expand Down Expand Up @@ -353,6 +347,22 @@ export class DataController extends DataHelperMixin(modules.Controller) {
return this.combinedFilter(undefined, returnDataField);
}

public getFilterExcludedColumn(): Column | null {
return this._filterExcludedColumn;
}

public getCombinedFilterWithExcludedColumn(
excludedColumn: Column | null,
returnDataField?: boolean,
): DataFilter {
this._filterExcludedColumn = excludedColumn;
try {
return this.getCombinedFilter(returnDataField);
} finally {
this._filterExcludedColumn = null;
}
}

private combinedFilter(filter: DataFilter, returnDataField?: boolean): DataFilter {
if (!this._dataSource) {
return filter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -550,9 +550,7 @@ const columnHeadersView = (Base: ModuleType<ColumnHeadersView>) => class ColumnH
const dataSource = this._dataController.dataSource();

if (options.lookup && this.option('syncLookupFilterValues')) {
this._applyFilterViewController.setCurrentColumnForFiltering(options);
const filter = this._dataController.getCombinedFilter();
this._applyFilterViewController.setCurrentColumnForFiltering(null);
const filter = this._dataController.getCombinedFilterWithExcludedColumn(options);

const lookupDataSource = gridCoreUtils.getWrappedLookupDataSource(options, dataSource, filter);
const lookupOptions = {
Expand Down Expand Up @@ -766,7 +764,6 @@ const columnHeadersView = (Base: ModuleType<ColumnHeadersView>) => class ColumnH

const columns = this._columnsController.getVisibleColumns();
const dataSource = this._dataController.dataSource();
const applyFilterViewController = this._applyFilterViewController;
const rowIndex = this.element().find(`.${this.addWidgetPrefix(FILTER_ROW_CLASS)}`).index();

if (rowIndex === -1) {
Expand All @@ -782,9 +779,7 @@ const columnHeadersView = (Base: ModuleType<ColumnHeadersView>) => class ColumnH
const editor = getEditorInstance($cell?.find('.dx-editor-container'));

if (editor) {
applyFilterViewController.setCurrentColumnForFiltering(column);
const filter = this._dataController.getCombinedFilter() || null;
applyFilterViewController.setCurrentColumnForFiltering(null);
const filter = this._dataController.getCombinedFilterWithExcludedColumn(column) || null;

const editorDataSource = editor.option('dataSource');
const shouldUpdateFilter = !filterChanged
Expand Down Expand Up @@ -832,10 +827,10 @@ const data = (Base: ModuleType<DataController>) => class DataControllerFilterRow
const filters = [super._calculateAdditionalFilter()];
const columns = this._columnsController.getVisibleColumns(null, true);

const applyFilterController = this._applyFilterController;
const excludedColumn = this.getFilterExcludedColumn();

each(columns, function () {
const shouldSkip = applyFilterController.getCurrentColumnForFiltering()?.index === this.index;
const shouldSkip = excludedColumn?.index === this.index;
if (this.allowFiltering && this.calculateFilterExpression && isDefined(this.filterValue) && !shouldSkip) {
Comment thread
bit-byte0 marked this conversation as resolved.
const filter = this.createFilterExpression(this.filterValue, this.selectedFilterOperation || this.defaultFilterOperation, 'filterRow');
filters.push(filter);
Expand All @@ -849,8 +844,6 @@ const data = (Base: ModuleType<DataController>) => class DataControllerFilterRow
export class ApplyFilterViewController extends modules.ViewController {
private _headerPanel: any;

private _currentColumn: any;

private _columnsController!: ColumnsController;

public init() {
Expand Down Expand Up @@ -901,14 +894,6 @@ export class ApplyFilterViewController extends modules.ViewController {
this._getHeaderPanel().enableApplyButton(false);
}
}

public setCurrentColumnForFiltering(column) {
this._currentColumn = column;
}

public getCurrentColumnForFiltering() {
return this._currentColumn;
}
}

const columnsResizer = (Base: ModuleType<ColumnsResizerViewController>) => class FilterRowColumnsResizerExtender extends Base {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -313,13 +313,11 @@ const data = (Base: ModuleType<DataController>) => class DataControllerFilterSyn
let filterValue = this.option('filterValue');

if (this.isFilterSyncActive()) {
const currentColumnForHeaderFilter = this._headerFilterController.getCurrentColumn();
const currentColumnForFilterRow = this._applyFilterController.getCurrentColumnForFiltering();
const currentColumn = currentColumnForHeaderFilter || currentColumnForFilterRow;
const needRemoveCurrentColumnFilter = currentColumnForHeaderFilter || isDefined(currentColumnForFilterRow?.filterValue);
const excludedColumn = this.getFilterExcludedColumn();
const needRemoveCurrentColumnFilter = isDefined(excludedColumn);

if (needRemoveCurrentColumnFilter && filterValue) {
filterValue = removeFieldConditionsFromFilter(filterValue, getColumnIdentifier(currentColumn));
filterValue = removeFieldConditionsFromFilter(filterValue, getColumnIdentifier(excludedColumn));
}
}
const customOperations = this._filterSyncController.getCustomFilterOperations();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,6 @@ export class HeaderFilterController extends Modules.ViewController {

private _headerFilterView!: HeaderFilterView;

private _currentColumn: any;

public init() {
this._columnsController = this.getController('columns');
this._dataController = this.getController('data');
Expand Down Expand Up @@ -253,9 +251,7 @@ export class HeaderFilterController extends Modules.ViewController {
isLookup = true;

if (this.option('syncLookupFilterValues')) {
this._currentColumn = column;
const filter = this._dataController.getCombinedFilter();
this._currentColumn = null;
const filter = this._dataController.getCombinedFilterWithExcludedColumn(column);

options.dataSource = gridCoreUtils.getWrappedLookupDataSource(column, dataSource, filter);
} else {
Expand All @@ -264,9 +260,7 @@ export class HeaderFilterController extends Modules.ViewController {
} else {
const cutoffLevel = Array.isArray(group) ? group.length - 1 : 0;

this._currentColumn = column;
const filter = this._dataController.getCombinedFilter();
this._currentColumn = null;
const filter = this._dataController.getCombinedFilterWithExcludedColumn(column);

options.dataSource = {
filter,
Expand Down Expand Up @@ -327,10 +321,6 @@ export class HeaderFilterController extends Modules.ViewController {
return options.dataSource;
}

public getCurrentColumn() {
return this._currentColumn;
}

public showHeaderFilterMenu(columnIndex, isGroupPanel) {
const columnsController = this._columnsController;
const column = extend(true, {}, this._columnsController.getColumns()[columnIndex]);
Expand Down Expand Up @@ -516,13 +506,12 @@ const data = (Base: ModuleType<DataController>) => class DataControllerFilterRow
const that = this;
const filters = [super._calculateAdditionalFilter()];
const columns = that._columnsController.getVisibleColumns(null, true);
const headerFilterController = this._headerFilterController;
const currentColumn = headerFilterController.getCurrentColumn();
const excludedColumn = this.getFilterExcludedColumn();

each(columns, (_, column) => {
Comment thread
bit-byte0 marked this conversation as resolved.
let filter;

if (currentColumn && currentColumn.index === column.index) {
if (excludedColumn && excludedColumn.index === column.index) {
return;
}

Expand Down
4 changes: 4 additions & 0 deletions packages/devextreme/testing/helpers/gridBaseMocks.js
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,10 @@ module.exports = function($, gridCore, columnResizingReordering, domUtils, commo

getCombinedFilter: commonUtils.noop,

getFilterExcludedColumn: commonUtils.noop,

getCombinedFilterWithExcludedColumn: commonUtils.noop,

getRowIndexByKey: function(key) {
return gridCore.getIndexByKey(key, options.items);
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -729,12 +729,8 @@ QUnit.module('getCombinedFilter', {
filterValue: [['Test', 'anyof', [1, 2, 3]], 'and', filterRowFilter]
});

this.headerFilterController.getCurrentColumn = function() {
return { dataField: 'Test' };
};

// assert
assert.deepEqual(this.getCombinedFilter(true), undefined, 'combined filter');
assert.deepEqual(this.dataController.getCombinedFilterWithExcludedColumn({ dataField: 'Test' }, true), undefined, 'combined filter');
});

QUnit.test('add currentColumn header filter value when filterSyncEnabled = false', function(assert) {
Expand All @@ -749,12 +745,8 @@ QUnit.module('getCombinedFilter', {
filterValue: [['Test', 'anyof', [1, 2, 3]], 'and', filterRowFilter]
});

this.headerFilterController.getCurrentColumn = function() {
return { dataField: 'Test' };
};

// assert
assert.deepEqual(this.getCombinedFilter(true), [
assert.deepEqual(this.dataController.getCombinedFilterWithExcludedColumn({ dataField: 'Test' }, true), [
[
['Test', '=', 1],
'or',
Expand Down
Loading