@@ -10,14 +10,6 @@ import { Rect } from "./useDragToResize";
1010
1111// https://stackoverflow.com/a/39192992/6236042
1212
13- type StyledElement = {
14- style : CSSStyleDeclaration ;
15- } ;
16-
17- function hasStyle ( value : unknown ) : value is StyledElement {
18- return ! ! value && typeof value === "object" && "style" in value ;
19- }
20-
2113interface UseDraggableProps {
2214 /**
2315 * A reference to the element that can be used to move the draggable element.
@@ -35,29 +27,23 @@ const useDragToMove = ({ moveRef = null, elementRect }: UseDraggableProps) => {
3527 const ref = useRef < HTMLElement | null > ( null ) ;
3628
3729 const unsubscribe = useRef < VoidFunction > ( ) ;
38- const moveHandle : RefCallback < HTMLElement > = useCallback (
39- ( elem ) => {
40- ref . current = elem ;
41- if ( unsubscribe . current ) {
42- unsubscribe . current ;
43- }
44- if ( ! elem ) {
45- return ;
46- }
47- const handleMouseDown = ( e : MouseEvent ) => {
48- const elem = moveRef ?. current ?? e . target ;
49- if ( hasStyle ( elem ) ) {
50- elem . style . userSelect = "none" ;
51- }
52- setPressed ( true ) ;
53- } ;
54- elem . addEventListener ( "mousedown" , handleMouseDown ) ;
55- unsubscribe . current = ( ) => {
56- elem . removeEventListener ( "mousedown" , handleMouseDown ) ;
57- } ;
58- } ,
59- [ moveRef ]
60- ) ;
30+ const moveHandle : RefCallback < HTMLElement > = useCallback ( ( elem ) => {
31+ ref . current = elem ;
32+ if ( unsubscribe . current ) {
33+ unsubscribe . current ;
34+ }
35+ if ( ! elem ) {
36+ return ;
37+ }
38+ const handleMouseDown = ( e : MouseEvent ) => {
39+ if ( ! ( e . target as HTMLElement ) . classList . contains ( "drag-to-move" ) ) return ;
40+ setPressed ( true ) ;
41+ } ;
42+ elem . addEventListener ( "mousedown" , handleMouseDown ) ;
43+ unsubscribe . current = ( ) => {
44+ elem . removeEventListener ( "mousedown" , handleMouseDown ) ;
45+ } ;
46+ } , [ ] ) ;
6147
6248 useEffect ( ( ) => {
6349 if ( ! pressed ) {
@@ -82,11 +68,7 @@ const useDragToMove = ({ moveRef = null, elementRect }: UseDraggableProps) => {
8268 elem . style . top = `${ elementRect . current . top } px` ;
8369 }
8470 ) ;
85- const handleMouseUp = ( e : MouseEvent ) => {
86- const elem = moveRef ?. current ?? e . target ;
87- if ( hasStyle ( elem ) ) {
88- elem . style . userSelect = "auto" ;
89- }
71+ const handleMouseUp = ( ) => {
9072 setPressed ( false ) ;
9173 } ;
9274 // subscribe to mousemove and mouseup on document, otherwise you
0 commit comments