@@ -39,6 +39,7 @@ import {
39
39
transformCoordToPoint ,
40
40
getCellRangeValue ,
41
41
getCellValue ,
42
+ shouldHandleClipboardEvent ,
42
43
} from "./util" ;
43
44
import "./Spreadsheet.css" ;
44
45
@@ -286,42 +287,51 @@ const Spreadsheet = <CellType extends Types.CellBase>(
286
287
[ store ]
287
288
) ;
288
289
289
- const isFocused = React . useCallback ( ( ) => {
290
- const root = rootRef . current ;
291
- const { activeElement } = document ;
292
-
293
- return mode === "view" && root
294
- ? root === activeElement || root . contains ( activeElement )
295
- : false ;
296
- } , [ rootRef , mode ] ) ;
297
-
298
290
const handleCut = React . useCallback (
299
291
( event : ClipboardEvent ) => {
300
- if ( isFocused ( ) ) {
292
+ if (
293
+ shouldHandleClipboardEvent (
294
+ document . activeElement ,
295
+ rootRef . current ,
296
+ mode
297
+ )
298
+ ) {
301
299
event . preventDefault ( ) ;
302
300
event . stopPropagation ( ) ;
303
301
clip ( event ) ;
304
302
cut ( ) ;
305
303
}
306
304
} ,
307
- [ isFocused , clip , cut ]
305
+ [ mode , clip , cut ]
308
306
) ;
309
307
310
308
const handleCopy = React . useCallback (
311
309
( event : ClipboardEvent ) => {
312
- if ( isFocused ( ) ) {
310
+ if (
311
+ shouldHandleClipboardEvent (
312
+ document . activeElement ,
313
+ rootRef . current ,
314
+ mode
315
+ )
316
+ ) {
313
317
event . preventDefault ( ) ;
314
318
event . stopPropagation ( ) ;
315
319
clip ( event ) ;
316
320
copy ( ) ;
317
321
}
318
322
} ,
319
- [ isFocused , clip , copy ]
323
+ [ mode , clip , copy ]
320
324
) ;
321
325
322
326
const handlePaste = React . useCallback (
323
- async ( event : ClipboardEvent ) => {
324
- if ( mode === "view" && isFocused ( ) ) {
327
+ ( event : ClipboardEvent ) => {
328
+ if (
329
+ shouldHandleClipboardEvent (
330
+ document . activeElement ,
331
+ rootRef . current ,
332
+ mode
333
+ )
334
+ ) {
325
335
event . preventDefault ( ) ;
326
336
event . stopPropagation ( ) ;
327
337
if ( event . clipboardData ) {
@@ -330,7 +340,7 @@ const Spreadsheet = <CellType extends Types.CellBase>(
330
340
}
331
341
}
332
342
} ,
333
- [ mode , isFocused , paste ]
343
+ [ mode , paste ]
334
344
) ;
335
345
336
346
const handleKeyDown = React . useCallback (
0 commit comments