diff --git a/packages/core/src/data-grid/data-grid.tsx b/packages/core/src/data-grid/data-grid.tsx index f842284ca..32b01884c 100644 --- a/packages/core/src/data-grid/data-grid.tsx +++ b/packages/core/src/data-grid/data-grid.tsx @@ -1054,9 +1054,16 @@ const DataGrid: React.ForwardRefRenderFunction = (p, const hoveredRef = React.useRef(); const onMouseMoveImpl = React.useCallback( - (ev: MouseEvent) => { + (ev: MouseEvent) => { + const canvas = ref.current; - if (canvas === null) return; + const eventTarget = eventTargetRef?.current; + + + + if (canvas === null || (ev.target !== canvas && ev.target !== eventTarget)) { + return; + } const args = getMouseArgsForPosition(canvas, ev.clientX, ev.clientY, ev); if (!isSameItem(args, hoveredRef.current)) { diff --git a/packages/core/test/data-grid.test.tsx b/packages/core/test/data-grid.test.tsx index 710ea1a41..f274f8233 100644 --- a/packages/core/test/data-grid.test.tsx +++ b/packages/core/test/data-grid.test.tsx @@ -223,6 +223,30 @@ describe("data-grid", () => { ); }); + test("Cell is not hovered when target is not data grid", () => { + const spy = jest.fn(); + + render( + <> + +
+ + ); + + + const outsideElement = screen.getByTestId('outside-element'); + fireEvent.mouseMove(outsideElement, { + clientX: 350, // Col C + clientY: 36 + 32 * 5 + 16, // Row 5 (0 indexed) + }); + + expect(spy).not.toHaveBeenCalled() + }); + test("Header hovered", () => { const spy = jest.fn();