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