Skip to content

Commit 7071163

Browse files
authored
DataGrid: fix focus overlay for filter row (T1287288) (DevExpress#29725) (DevExpress#29740)
1 parent 7ff17c5 commit 7071163

File tree

6 files changed

+57
-3
lines changed

6 files changed

+57
-3
lines changed
5.37 KB
Loading

e2e/testcafe-devextreme/tests/dataGrid/filterRow/filterRow.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import url from '../../../helpers/getPageUrl';
55
import { createWidget } from '../../../helpers/createWidget';
66
import { changeTheme } from '../../../helpers/changeTheme';
77
import { getNumberData, getData } from '../helpers/generateDataSourceData';
8+
import { Themes } from '../../../helpers/themes';
89

910
fixture.disablePageReloads`FilterRow`
1011
.page(url(__dirname, '../../container.html'));
@@ -157,3 +158,38 @@ test('Filter Row\'s Reset button does not work after a custom filter is set in F
157158
],
158159
});
159160
});
161+
162+
// T1287288
163+
test('Focus overlay should be visible in filter row when focusedRowEnabled is enabled (Fluent SaaS)', async (t) => {
164+
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
165+
const dataGrid = new DataGrid('#container');
166+
const filterEditor = dataGrid.getFilterEditor(1, FilterTextBox);
167+
168+
await t
169+
.click(dataGrid.getDataCell(0, 0).element)
170+
.click(filterEditor.input)
171+
// assert
172+
.expect(filterEditor.input.focused)
173+
.ok()
174+
.expect(await takeScreenshot(`filter-row-focus-overlay (${Themes.fluentBlue}).png`, dataGrid.element))
175+
.ok()
176+
.expect(compareResults.isValid())
177+
.ok(compareResults.errorMessages());
178+
}).before(async () => {
179+
await changeTheme(Themes.fluentBlue);
180+
181+
return createWidget('dxDataGrid', {
182+
dataSource: [
183+
{ ID: 1, Field: 'Item 1' },
184+
{ ID: 2, Field: 'Item 2' },
185+
{ ID: 3, Field: 'Item 3' },
186+
],
187+
keyExpr: 'ID',
188+
focusedRowEnabled: true,
189+
filterRow: { visible: true },
190+
showBorders: true,
191+
columns: ['ID', 'Field'],
192+
});
193+
}).after(async () => {
194+
await changeTheme('generic.light');
195+
});

packages/devextreme/js/__internal/grids/grid_core/column_headers/m_column_headers.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import domAdapter from '@js/core/dom_adapter';
2+
import type { dxElementWrapper } from '@js/core/renderer';
23
import $ from '@js/core/renderer';
34
import { extend } from '@js/core/utils/extend';
45
import { each } from '@js/core/utils/iterator';
@@ -639,6 +640,11 @@ export class ColumnHeadersView extends ColumnsView {
639640
}
640641
}
641642
}
643+
644+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
645+
public isFilterRowCell($cell: dxElementWrapper): boolean {
646+
return false;
647+
}
642648
}
643649

644650
export const columnHeadersModule = {

packages/devextreme/js/__internal/grids/grid_core/editor_factory/m_editor_factory.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import eventsEngine from '@js/events/core/events_engine';
1414
import pointerEvents from '@js/events/pointer';
1515
import { addNamespace, normalizeKeyName } from '@js/events/utils/index';
1616
import EditorFactoryMixin from '@js/ui/shared/ui.editor_factory_mixin';
17+
import type { ColumnHeadersView } from '@ts/grids/grid_core/column_headers/m_column_headers';
1718
import type {
1819
ColumnsResizerViewController,
1920
} from '@ts/grids/grid_core/columns_resizing_reordering/m_columns_resizing_reordering';
@@ -78,6 +79,8 @@ export class EditorFactory extends ViewControllerWithMixin {
7879

7980
protected _validatingController!: ValidatingController;
8081

82+
protected _columnHeadersView!: ColumnHeadersView;
83+
8184
private _subscribedContainerRoot!: Node;
8285

8386
public init() {
@@ -89,6 +92,7 @@ export class EditorFactory extends ViewControllerWithMixin {
8992
this._keyboardNavigationController = this.getController('keyboardNavigation');
9093
this._columnsController = this.getController('columns');
9194
this._validatingController = this.getController('validating');
95+
this._columnHeadersView = this.getView('columnHeadersView');
9296
this._rowsView = this.getView('rowsView');
9397

9498
this._updateFocusHandler = this._updateFocusHandler || this.createAction(this._updateFocus.bind(this));

packages/devextreme/js/__internal/grids/grid_core/filter/m_filter_row.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,6 +769,10 @@ const columnHeadersView = (Base: ModuleType<ColumnHeadersView>) => class ColumnH
769769
}
770770
});
771771
}
772+
773+
public isFilterRowCell($cell): boolean {
774+
return !!$cell.closest(`.${this.addWidgetPrefix(FILTER_ROW_CLASS)}`).length;
775+
}
772776
};
773777

774778
const data = (Base: ModuleType<DataController>) => class DataControllerFilterRowExtender extends Base {

packages/devextreme/js/__internal/grids/grid_core/focus/m_focus.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -505,15 +505,19 @@ const keyboardNavigation = (Base: ModuleType<KeyboardNavigationController>) => c
505505
const editorFactory = (Base: ModuleType<EditorFactory>) => class FocusEditorFactoryExtender extends Base {
506506
protected renderFocusOverlay($element, isHideBorder) {
507507
const focusedRowEnabled = this.option('focusedRowEnabled');
508-
let $cell;
509508

510-
if (!focusedRowEnabled || !this._keyboardNavigationController?.isRowFocusType() || this._editingController.isEditing()) {
509+
if (
510+
!focusedRowEnabled
511+
|| !this._keyboardNavigationController?.isRowFocusType()
512+
|| this._editingController.isEditing()
513+
|| this._columnHeadersView.isFilterRowCell($element)
514+
) {
511515
super.renderFocusOverlay($element, isHideBorder);
512516
} else if (focusedRowEnabled) {
513517
const isRowElement = this._keyboardNavigationController._getElementType($element) === 'row';
514518

515519
if (isRowElement && !$element.hasClass(ROW_FOCUSED_CLASS)) {
516-
$cell = this._keyboardNavigationController.getFirstValidCellInRow($element);
520+
const $cell = this._keyboardNavigationController.getFirstValidCellInRow($element);
517521
this._keyboardNavigationController.focus($cell);
518522
}
519523
}

0 commit comments

Comments
 (0)