Skip to content

Commit 8755949

Browse files
committed
fix: fix readonly props. #2
1 parent 5be3b64 commit 8755949

File tree

2 files changed

+18
-17
lines changed

2 files changed

+18
-17
lines changed

core/README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export default function App() {
6262
## Readonly
6363
6464
```jsx mdx:preview
65-
import React, { useRef, useEffect } from "react";
65+
import React, { useRef, useState, useEffect } from "react";
6666
import Signature from '@uiw/react-signature';
6767

6868
const points = {
@@ -71,8 +71,12 @@ const points = {
7171
}
7272

7373
export default function App() {
74+
const [readonly, setReadonly] = useState(true)
7475
return (
75-
<Signature defaultPoints={points} readonly fill="#6b85e4" />
76+
<>
77+
<Signature defaultPoints={points} readonly={readonly} fill="#6b85e4" />
78+
<button onClick={() => setReadonly(!readonly)}>readonly={readonly.toString()}</button>
79+
</>
7680
);
7781
}
7882
```

core/src/Signature.tsx

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import React, { useEffect, useRef, useId, forwardRef, useImperativeHandle } from 'react';
22
import { getBoundingClientRect, getClinetXY, defaultStyle, useEvent } from './utils';
3-
43
import { useDispatch } from './store';
54
import { 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

Comments
 (0)