|
9 | 9 | useGridApiContext,
|
10 | 10 | useGridSelector,
|
11 | 11 | getDataGridUtilityClass,
|
| 12 | + gridClasses, |
12 | 13 | } from '@mui/x-data-grid';
|
13 | 14 | import { gridEditRowsStateSelector, isEventTargetInPortal } from '@mui/x-data-grid/internals';
|
14 | 15 | import type { DataGridProProcessedProps } from '../models/dataGridProProps';
|
@@ -77,11 +78,34 @@ function GridRowReorderCell(params: GridRenderCellParams) {
|
77 | 78 | [apiRef, params.id],
|
78 | 79 | );
|
79 | 80 |
|
| 81 | + const handleMouseDown = React.useCallback(() => { |
| 82 | + // Prevent text selection as it will block all the drag events. More context: https://github.com/mui/mui-x/issues/16303 |
| 83 | + apiRef.current.rootElementRef?.current?.classList.add( |
| 84 | + gridClasses['root--disableUserSelection'], |
| 85 | + ); |
| 86 | + }, [apiRef]); |
| 87 | + |
| 88 | + const handleMouseUp = React.useCallback(() => { |
| 89 | + apiRef.current.rootElementRef?.current?.classList.remove( |
| 90 | + gridClasses['root--disableUserSelection'], |
| 91 | + ); |
| 92 | + }, [apiRef]); |
| 93 | + |
| 94 | + const handleDragEnd = React.useCallback( |
| 95 | + (event: React.MouseEvent<HTMLDivElement>) => { |
| 96 | + handleMouseUp(); |
| 97 | + publish('rowDragEnd')(event); |
| 98 | + }, |
| 99 | + [publish, handleMouseUp], |
| 100 | + ); |
| 101 | + |
80 | 102 | const draggableEventHandlers = isDraggable
|
81 | 103 | ? {
|
82 | 104 | onDragStart: publish('rowDragStart'),
|
83 | 105 | onDragOver: publish('rowDragOver'),
|
84 |
| - onDragEnd: publish('rowDragEnd'), |
| 106 | + onDragEnd: handleDragEnd, |
| 107 | + onMouseDown: handleMouseDown, |
| 108 | + onMouseUp: handleMouseUp, |
85 | 109 | }
|
86 | 110 | : null;
|
87 | 111 |
|
|
0 commit comments