11import React , { useEffect , useRef , useId , forwardRef , useImperativeHandle } from 'react' ;
22import { getBoundingClientRect , getClinetXY , defaultStyle , useEvent } from './utils' ;
3-
43import { useDispatch } from './store' ;
54import { SignatureRef , SignatureProps } from './' ;
65
@@ -20,19 +19,21 @@ export const Signature = forwardRef<SignatureRef, Omit<SignatureProps, 'defaultP
2019 [ $svg . current , dispatch ] ,
2120 ) ;
2221
23- const handlePointerDown = useEvent ( ( e : React . PointerEvent < SVGSVGElement > ) => {
22+ const handlePointerDown = useEvent < PointerEvent > ( ( e ) => {
2423 if ( readonly ) return ;
2524 pointCount . current += 1 ;
2625 const { offsetY, offsetX } = getBoundingClientRect ( $svg . current ) ;
27- const clientX = e . clientX || e . nativeEvent . clientX ;
28- const clientY = e . clientY || e . nativeEvent . clientY ;
26+ const evn = e as unknown as React . PointerEvent < SVGSVGElement > ;
27+ const clientX = evn . clientX || evn . nativeEvent . clientX ;
28+ const clientY = evn . clientY || evn . nativeEvent . clientY ;
2929 pointsRef . current = [ [ clientX - offsetX , clientY - offsetY ] ] ;
3030 const pathElm = document . createElementNS ( 'http://www.w3.org/2000/svg' , 'path' ) ;
3131 $path . current = pathElm ;
3232 $svg . current ! . appendChild ( pathElm ) ;
3333 dispatch ( {
3434 [ pointId + pointCount . current ] : pointsRef . current ,
3535 } ) ;
36+ document . addEventListener ( 'pointermove' , handlePointerMove ) ;
3637 } ) ;
3738
3839 const handlePointerMove = useEvent ( ( e : PointerEvent ) => {
@@ -51,26 +52,22 @@ export const Signature = forwardRef<SignatureRef, Omit<SignatureProps, 'defaultP
5152 onPointer && props . onPointer ! ( result ) ;
5253 $path . current = undefined ;
5354 pointsRef . current = undefined ;
55+ document . removeEventListener ( 'pointermove' , handlePointerMove ) ;
5456 } ) ;
5557
5658 useEffect ( ( ) => {
57- if ( readonly ) return ;
58- document . addEventListener ( 'pointermove' , handlePointerMove ) ;
5959 document . addEventListener ( 'pointerup' , handlePointerUp ) ;
60+ $svg . current ?. addEventListener ( 'pointerdown' , handlePointerDown ) ;
6061 return ( ) => {
61- if ( readonly ) return ;
62- document . removeEventListener ( 'pointermove' , handlePointerMove ) ;
6362 document . removeEventListener ( 'pointerup' , handlePointerUp ) ;
63+ $svg . current ?. removeEventListener ( 'pointerdown' , handlePointerDown ) ;
6464 } ;
6565 } , [ ] ) ;
66+
67+ const svgStyle : React . CSSProperties = { ...defaultStyle , ...style } ;
68+
6669 return (
67- < svg
68- { ...others }
69- ref = { $svg }
70- className = { cls }
71- onPointerDown = { handlePointerDown }
72- style = { { ...defaultStyle , ...style } }
73- >
70+ < svg { ...others } ref = { $svg } className = { cls } style = { svgStyle } >
7471 { children }
7572 </ svg >
7673 ) ;
0 commit comments