@@ -45,6 +45,7 @@ export function Cell({
4545 const ref = useRef < HTMLDivElement > ( null ) ;
4646
4747 const {
48+ mouseDown,
4849 selectedRow,
4950 selectedColumn,
5051 multiSelectCornerRow,
@@ -57,15 +58,29 @@ export function Cell({
5758 setCursorMode,
5859 registerEventListener,
5960 disabledKeyboardInteractions,
61+ setMouseDown,
6062 } = useTableEditorContext ( ) ;
6163
6264 const isActive = rowIndex === selectedRow && columnIndex === selectedColumn ;
6365 const isActiveCorner =
6466 rowIndex === multiSelectCornerRow &&
6567 columnIndex === multiSelectCornerColumn ;
6668
67- const handleClick = useCallback (
69+ const handleMouseUp = useCallback ( ( ) => {
70+ setMouseDown ( false ) ;
71+ } , [ ] ) ;
72+
73+ const handleMouseEnter = useCallback ( ( ) => {
74+ if ( mouseDown ) {
75+ setMultiSelectCorner ( rowIndex , columnIndex ) ;
76+ setCursorMode ( CursorMode . MultiSelect ) ;
77+ }
78+ } , [ mouseDown , rowIndex , columnIndex ] ) ;
79+
80+ const handleMouseDown = useCallback (
6881 ( e : React . MouseEvent < HTMLDivElement > ) => {
82+ setMouseDown ( true ) ;
83+
6984 // When Shift is pressed, enter multi-select mode
7085 if ( e . shiftKey ) {
7186 e . stopPropagation ( ) ;
@@ -90,6 +105,8 @@ export function Cell({
90105
91106 if ( isActive && columnIndex !== 0 ) {
92107 // Enter edit mode when clicking on a higlighted cell, except when it's the index column.
108+ setMultiSelectCorner ( undefined , undefined ) ;
109+
93110 return setCursorMode ( CursorMode . Edit ) ;
94111 }
95112
@@ -155,10 +172,12 @@ export function Cell({
155172 disabled = { disabled }
156173 role = { role ?? 'gridcell' }
157174 className = { className }
158- onClick = { handleClick }
159175 allowUserSelect = { cursorMode === CursorMode . Edit }
160176 align = { align }
161177 tabIndex = { isActive ? 0 : - 1 }
178+ onMouseDown = { handleMouseDown }
179+ onMouseUp = { handleMouseUp }
180+ onMouseEnter = { handleMouseEnter }
162181 >
163182 { children }
164183 </ CellWrapper >
0 commit comments