Skip to content

Commit 9e3c8ec

Browse files
tongsonbarbswdevfx
andauthored
DataGrid - Validation message is hidden if there is only one Master-Detail row and the row is collapsed (T1287261) (DevExpress#29876)
Co-authored-by: wdevfx <[email protected]>
1 parent a92f211 commit 9e3c8ec

File tree

4 files changed

+45
-4
lines changed

4 files changed

+45
-4
lines changed

e2e/testcafe-devextreme/tests/dataGrid/common/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
@@ -2,7 +2,6 @@
22
import positionUtils from '@js/common/core/animation/position';
33
import { name as clickEventName } from '@js/common/core/events/click';
44
import eventsEngine from '@js/common/core/events/core/events_engine';
5-
import pointerEvents from '@js/common/core/events/pointer';
65
import { addNamespace, normalizeKeyName } from '@js/common/core/events/utils/index';
76
import domAdapter from '@js/core/dom_adapter';
87
import type { dxElementWrapper } from '@js/core/renderer';
@@ -41,7 +40,7 @@ const CONTENT_CLASS = 'content';
4140
const FOCUSED_ELEMENT_CLASS = 'dx-focused';
4241
const ROW_CLASS = 'dx-row';
4342
const MODULE_NAMESPACE = 'dxDataGridEditorFactory';
44-
const UPDATE_FOCUS_EVENTS = addNamespace([pointerEvents.down, 'focusin', clickEventName].join(' '), MODULE_NAMESPACE);
43+
const UPDATE_FOCUS_EVENTS = addNamespace([clickEventName, 'focusin'].join(' '), MODULE_NAMESPACE);
4544
const DX_HIDDEN = 'dx-hidden';
4645

4746
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
@@ -1516,11 +1516,21 @@ export const validatingRowsViewExtender = (Base: ModuleType<RowsView>) => class
15161516
super.updateFreeSpaceRowHeight($table);
15171517

15181518
if ($tooltipContent && $tooltipContent.length) {
1519-
$rowElements = that._getRowElements();
1519+
$rowElements = that._getRowElements().filter(':visible');
15201520
$freeSpaceRowElements = that._getFreeSpaceRowElements($table);
15211521
$freeSpaceRowElement = $freeSpaceRowElements.first();
15221522

1523-
if ($freeSpaceRowElement && $rowElements.length === 1 && (!$freeSpaceRowElement.is(':visible') || getOuterHeight($tooltipContent) > getOuterHeight($freeSpaceRowElement))) {
1523+
const rowElementsHasFocusInside = $rowElements.find(':focus').length > 0;
1524+
1525+
if (
1526+
$freeSpaceRowElement
1527+
&& $rowElements.length === 1
1528+
&& (
1529+
!$freeSpaceRowElement.is(':visible')
1530+
|| getOuterHeight($tooltipContent) > getOuterHeight($freeSpaceRowElement)
1531+
)
1532+
&& rowElementsHasFocusInside
1533+
) {
15241534
$freeSpaceRowElements.show();
15251535
setHeight($freeSpaceRowElements, getOuterHeight($tooltipContent));
15261536
return true;

0 commit comments

Comments
 (0)