Skip to content

Commit bb42546

Browse files
authored
DataGrid - Validation message is hidden if there is only one Master-Detail row and the row is collapsed (T1287261) (#29934)
1 parent 370f725 commit bb42546

File tree

4 files changed

+45
-4
lines changed

4 files changed

+45
-4
lines changed

e2e/testcafe-devextreme/tests/dataGrid/validation/cellEditing.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,35 @@ fixture.disablePageReloads`Validation`
9292
await changeTheme(Themes.genericLight);
9393
});
9494
});
95+
96+
test('DataGrid - Validation message is hidden if there is only one Master-Detail row and the row is collapsed (T1287261)', async (t) => {
97+
const dataGrid = new DataGrid('#container');
98+
const cellToggle = dataGrid.getDataCell(0, 0).element;
99+
const textCell = dataGrid.getDataCell(0, 2);
100+
const { takeScreenshot, compareResults } = createScreenshotsComparer(t);
101+
102+
await t
103+
.click(textCell.element)
104+
.selectText(textCell.getEditor().element)
105+
.pressKey('backspace enter')
106+
.click(cellToggle)
107+
.click(cellToggle)
108+
.click(textCell.element);
109+
110+
await t
111+
.expect(await takeScreenshot('validation-message-shown-after-master-detail-collapse.png', dataGrid.element))
112+
.ok()
113+
.expect(compareResults.isValid())
114+
.ok(compareResults.errorMessages());
115+
}).before(async () => createWidget('dxDataGrid', {
116+
dataSource: [
117+
{ ID: 1, Text: 'Item 1' },
118+
],
119+
keyExpr: 'ID',
120+
columns: ['ID', {
121+
dataField: 'Text',
122+
validationRules: [{ type: 'required' }],
123+
}],
124+
editing: { mode: 'batch', allowUpdating: true },
125+
masterDetail: { enabled: true },
126+
}));
4.7 KB
Loading

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import {
1111
} from '@js/core/utils/size';
1212
import { name as clickEventName } from '@js/events/click';
1313
import eventsEngine from '@js/events/core/events_engine';
14-
import pointerEvents from '@js/events/pointer';
1514
import { addNamespace, normalizeKeyName } from '@js/events/utils/index';
1615
import EditorFactoryMixin from '@js/ui/shared/ui.editor_factory_mixin';
1716
import type { ColumnHeadersView } from '@ts/grids/grid_core/column_headers/m_column_headers';
@@ -40,7 +39,7 @@ const CONTENT_CLASS = 'content';
4039
const FOCUSED_ELEMENT_CLASS = 'dx-focused';
4140
const ROW_CLASS = 'dx-row';
4241
const MODULE_NAMESPACE = 'dxDataGridEditorFactory';
43-
const UPDATE_FOCUS_EVENTS = addNamespace([pointerEvents.down, 'focusin', clickEventName].join(' '), MODULE_NAMESPACE);
42+
const UPDATE_FOCUS_EVENTS = addNamespace([clickEventName, 'focusin'].join(' '), MODULE_NAMESPACE);
4443
const DX_HIDDEN = 'dx-hidden';
4544

4645
interface EditorFactoryMixinType {

packages/devextreme/js/__internal/grids/grid_core/validating/m_validating.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1491,11 +1491,21 @@ export const validatingRowsViewExtender = (Base: ModuleType<RowsView>) => class
14911491
super.updateFreeSpaceRowHeight($table);
14921492

14931493
if ($tooltipContent && $tooltipContent.length) {
1494-
$rowElements = that._getRowElements();
1494+
$rowElements = that._getRowElements().filter(':visible');
14951495
$freeSpaceRowElements = that._getFreeSpaceRowElements($table);
14961496
$freeSpaceRowElement = $freeSpaceRowElements.first();
14971497

1498-
if ($freeSpaceRowElement && $rowElements.length === 1 && (!$freeSpaceRowElement.is(':visible') || getOuterHeight($tooltipContent) > getOuterHeight($freeSpaceRowElement))) {
1498+
const rowElementsHasFocusInside = $rowElements.find(':focus').length > 0;
1499+
1500+
if (
1501+
$freeSpaceRowElement
1502+
&& $rowElements.length === 1
1503+
&& (
1504+
!$freeSpaceRowElement.is(':visible')
1505+
|| getOuterHeight($tooltipContent) > getOuterHeight($freeSpaceRowElement)
1506+
)
1507+
&& rowElementsHasFocusInside
1508+
) {
14991509
$freeSpaceRowElements.show();
15001510
setHeight($freeSpaceRowElements, getOuterHeight($tooltipContent));
15011511
return true;

0 commit comments

Comments
 (0)