@@ -507,7 +507,7 @@ const DataGrid: React.ForwardRefRenderFunction<DataGridRef, DataGridProps> = (p,
507
507
) ;
508
508
509
509
const getMouseArgsForPosition = React . useCallback (
510
- ( canvas : HTMLCanvasElement , posX : number , posY : number , ev ?: MouseEvent | TouchEvent ) : GridMouseEventArgs => {
510
+ ( canvas : HTMLCanvasElement , posX : number , posY : number , ev ?: MouseEvent | TouchEvent | PointerEvent ) : GridMouseEventArgs => {
511
511
const rect = canvas . getBoundingClientRect ( ) ;
512
512
const scale = rect . width / width ;
513
513
const x = ( posX - rect . left ) / scale ;
@@ -518,7 +518,11 @@ const DataGrid: React.ForwardRefRenderFunction<DataGridRef, DataGridProps> = (p,
518
518
519
519
let button = 0 ;
520
520
let buttons = 0 ;
521
- if ( ev instanceof MouseEvent ) {
521
+
522
+ const isMouse = ev instanceof MouseEvent || ( ev instanceof PointerEvent && ev . pointerType === 'mouse' )
523
+ const isTouch = ev instanceof TouchEvent || ( ev instanceof PointerEvent && ev . pointerType === 'touch' )
524
+
525
+ if ( isMouse ) {
522
526
button = ev . button ;
523
527
buttons = ev . buttons ;
524
528
}
@@ -544,7 +548,6 @@ const DataGrid: React.ForwardRefRenderFunction<DataGridRef, DataGridProps> = (p,
544
548
const shiftKey = ev ?. shiftKey === true ;
545
549
const ctrlKey = ev ?. ctrlKey === true ;
546
550
const metaKey = ev ?. metaKey === true ;
547
- const isTouch = ( ev !== undefined && ! ( ev instanceof MouseEvent ) ) || ( ev as any ) ?. pointerType === "touch" ;
548
551
549
552
const scrollEdge : GridMouseEventArgs [ "scrollEdge" ] = [
550
553
x < 0 ? - 1 : width < x ? 1 : 0 ,
@@ -1036,22 +1039,16 @@ const DataGrid: React.ForwardRefRenderFunction<DataGridRef, DataGridProps> = (p,
1036
1039
const downTime = React . useRef ( 0 ) ;
1037
1040
const downPosition = React . useRef < Item > ( ) ;
1038
1041
const mouseDown = React . useRef ( false ) ;
1039
- const onMouseDownImpl = React . useCallback (
1040
- ( ev : MouseEvent | TouchEvent ) => {
1042
+ const onPointerDown = React . useCallback (
1043
+ ( ev : PointerEvent ) => {
1041
1044
const canvas = ref . current ;
1042
1045
const eventTarget = eventTargetRef ?. current ;
1043
1046
if ( canvas === null || ( ev . target !== canvas && ev . target !== eventTarget ) ) return ;
1044
1047
mouseDown . current = true ;
1045
1048
1046
- let clientX : number ;
1047
- let clientY : number ;
1048
- if ( ev instanceof MouseEvent ) {
1049
- clientX = ev . clientX ;
1050
- clientY = ev . clientY ;
1051
- } else {
1052
- clientX = ev . touches [ 0 ] . clientX ;
1053
- clientY = ev . touches [ 0 ] . clientY ;
1054
- }
1049
+ const clientX = ev . clientX ;
1050
+ const clientY = ev . clientY ;
1051
+
1055
1052
if ( ev . target === eventTarget && eventTarget !== null ) {
1056
1053
const bounds = eventTarget . getBoundingClientRect ( ) ;
1057
1054
if ( clientX > bounds . right || clientY > bounds . bottom ) return ;
@@ -1100,13 +1097,12 @@ const DataGrid: React.ForwardRefRenderFunction<DataGridRef, DataGridProps> = (p,
1100
1097
onMouseDown ,
1101
1098
]
1102
1099
) ;
1103
- useEventListener ( "touchstart" , onMouseDownImpl , windowEventTarget , false ) ;
1104
- useEventListener ( "mousedown" , onMouseDownImpl , windowEventTarget , false ) ;
1100
+ useEventListener ( "pointerdown" , onPointerDown , windowEventTarget , false ) ;
1105
1101
1106
1102
const lastUpTime = React . useRef ( 0 ) ;
1107
1103
1108
- const onMouseUpImpl = React . useCallback (
1109
- ( ev : MouseEvent | TouchEvent ) => {
1104
+ const onPointerUp = React . useCallback (
1105
+ ( ev : PointerEvent ) => {
1110
1106
const lastUpTimeValue = lastUpTime . current ;
1111
1107
lastUpTime . current = Date . now ( ) ;
1112
1108
const canvas = ref . current ;
@@ -1115,21 +1111,9 @@ const DataGrid: React.ForwardRefRenderFunction<DataGridRef, DataGridProps> = (p,
1115
1111
const eventTarget = eventTargetRef ?. current ;
1116
1112
1117
1113
const isOutside = ev . target !== canvas && ev . target !== eventTarget ;
1118
-
1119
- let clientX : number ;
1120
- let clientY : number ;
1121
- let canCancel = true ;
1122
- if ( ev instanceof MouseEvent ) {
1123
- clientX = ev . clientX ;
1124
- clientY = ev . clientY ;
1125
- canCancel = ev . button < 3 ;
1126
- if ( ( ev as any ) . pointerType === "touch" ) {
1127
- return ;
1128
- }
1129
- } else {
1130
- clientX = ev . changedTouches [ 0 ] . clientX ;
1131
- clientY = ev . changedTouches [ 0 ] . clientY ;
1132
- }
1114
+ const clientX = ev . clientX ;
1115
+ const clientY = ev . clientY ;
1116
+ const canCancel = ev . pointerType === 'mouse' ? ev . button < 3 : true ;
1133
1117
1134
1118
let args = getMouseArgsForPosition ( canvas , clientX , clientY , ev ) ;
1135
1119
@@ -1177,8 +1161,7 @@ const DataGrid: React.ForwardRefRenderFunction<DataGridRef, DataGridProps> = (p,
1177
1161
} ,
1178
1162
[ onMouseUp , eventTargetRef , getMouseArgsForPosition , isOverHeaderElement , groupHeaderActionForEvent ]
1179
1163
) ;
1180
- useEventListener ( "mouseup" , onMouseUpImpl , windowEventTarget , false ) ;
1181
- useEventListener ( "touchend" , onMouseUpImpl , windowEventTarget , false ) ;
1164
+ useEventListener ( "pointerup" , onPointerUp , windowEventTarget , false ) ;
1182
1165
1183
1166
const onClickImpl = React . useCallback (
1184
1167
( ev : MouseEvent | TouchEvent ) => {
@@ -1283,7 +1266,7 @@ const DataGrid: React.ForwardRefRenderFunction<DataGridRef, DataGridProps> = (p,
1283
1266
} , [ getCellContent , getCellRenderer , hoveredItem ] ) ;
1284
1267
1285
1268
const hoveredRef = React . useRef < GridMouseEventArgs > ( ) ;
1286
- const onMouseMoveImpl = React . useCallback (
1269
+ const onPointerMove = React . useCallback (
1287
1270
( ev : MouseEvent ) => {
1288
1271
const canvas = ref . current ;
1289
1272
if ( canvas === null ) return ;
@@ -1366,7 +1349,7 @@ const DataGrid: React.ForwardRefRenderFunction<DataGridRef, DataGridProps> = (p,
1366
1349
damageInternal ,
1367
1350
]
1368
1351
) ;
1369
- useEventListener ( "mousemove " , onMouseMoveImpl , windowEventTarget , true ) ;
1352
+ useEventListener ( "pointermove " , onPointerMove , windowEventTarget , true ) ;
1370
1353
1371
1354
const onKeyDownImpl = React . useCallback (
1372
1355
( event : React . KeyboardEvent < HTMLCanvasElement > ) => {
0 commit comments