mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2026-02-01 20:10:35 +01:00
Auto update canvas signature
This commit is contained in:
parent
b486d1270e
commit
708a296f8d
@ -11,6 +11,7 @@ interface DrawingCanvasProps {
|
|||||||
onPenSizeChange: (size: number) => void;
|
onPenSizeChange: (size: number) => void;
|
||||||
onPenSizeInputChange: (input: string) => void;
|
onPenSizeInputChange: (input: string) => void;
|
||||||
onSignatureDataChange: (data: string | null) => void;
|
onSignatureDataChange: (data: string | null) => void;
|
||||||
|
onDrawingComplete?: () => void; // Called when user finishes drawing
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
width?: number;
|
width?: number;
|
||||||
height?: number;
|
height?: number;
|
||||||
@ -27,6 +28,7 @@ export const DrawingCanvas: React.FC<DrawingCanvasProps> = ({
|
|||||||
onPenSizeChange,
|
onPenSizeChange,
|
||||||
onPenSizeInputChange,
|
onPenSizeInputChange,
|
||||||
onSignatureDataChange,
|
onSignatureDataChange,
|
||||||
|
onDrawingComplete,
|
||||||
disabled = false,
|
disabled = false,
|
||||||
width = 400,
|
width = 400,
|
||||||
height = 150,
|
height = 150,
|
||||||
@ -89,8 +91,15 @@ export const DrawingCanvas: React.FC<DrawingCanvasProps> = ({
|
|||||||
if (canvasRef.current) {
|
if (canvasRef.current) {
|
||||||
const dataURL = canvasRef.current.toDataURL('image/png');
|
const dataURL = canvasRef.current.toDataURL('image/png');
|
||||||
onSignatureDataChange(dataURL);
|
onSignatureDataChange(dataURL);
|
||||||
|
|
||||||
|
// Trigger drawing complete callback after a brief delay to ensure signature data is processed
|
||||||
|
if (onDrawingComplete) {
|
||||||
|
setTimeout(() => {
|
||||||
|
onDrawingComplete();
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, [isDrawing, disabled, onSignatureDataChange]);
|
}, [isDrawing, disabled, onSignatureDataChange, onDrawingComplete]);
|
||||||
|
|
||||||
// Modal canvas drawing functions
|
// Modal canvas drawing functions
|
||||||
const startModalDrawing = useCallback((e: React.MouseEvent<HTMLCanvasElement>) => {
|
const startModalDrawing = useCallback((e: React.MouseEvent<HTMLCanvasElement>) => {
|
||||||
@ -161,8 +170,15 @@ export const DrawingCanvas: React.FC<DrawingCanvasProps> = ({
|
|||||||
img.src = dataURL;
|
img.src = dataURL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Trigger drawing complete callback after a brief delay to ensure signature data is processed
|
||||||
|
if (onDrawingComplete) {
|
||||||
|
setTimeout(() => {
|
||||||
|
onDrawingComplete();
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, [isModalDrawing]);
|
}, [isModalDrawing, onSignatureDataChange, onDrawingComplete]);
|
||||||
|
|
||||||
// Clear canvas functions
|
// Clear canvas functions
|
||||||
const clearCanvas = useCallback(() => {
|
const clearCanvas = useCallback(() => {
|
||||||
@ -231,7 +247,14 @@ export const DrawingCanvas: React.FC<DrawingCanvasProps> = ({
|
|||||||
}
|
}
|
||||||
|
|
||||||
setIsModalOpen(false);
|
setIsModalOpen(false);
|
||||||
}, []);
|
|
||||||
|
// Trigger drawing complete callback after closing modal
|
||||||
|
if (onDrawingComplete) {
|
||||||
|
setTimeout(() => {
|
||||||
|
onDrawingComplete();
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
|
}, [onSignatureDataChange, onDrawingComplete]);
|
||||||
|
|
||||||
const openModal = useCallback(() => {
|
const openModal = useCallback(() => {
|
||||||
setIsModalOpen(true);
|
setIsModalOpen(true);
|
||||||
|
|||||||
@ -183,21 +183,13 @@ const SignSettings = ({
|
|||||||
onPenSizeChange={setPenSize}
|
onPenSizeChange={setPenSize}
|
||||||
onPenSizeInputChange={setPenSizeInput}
|
onPenSizeInputChange={setPenSizeInput}
|
||||||
onSignatureDataChange={handleCanvasSignatureChange}
|
onSignatureDataChange={handleCanvasSignatureChange}
|
||||||
|
onDrawingComplete={() => {
|
||||||
|
// Automatically activate placement mode when drawing is complete
|
||||||
|
if (onActivateSignaturePlacement) {
|
||||||
|
onActivateSignaturePlacement();
|
||||||
|
}
|
||||||
|
}}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
additionalButtons={
|
|
||||||
<Button
|
|
||||||
onClick={() => {
|
|
||||||
if (onActivateSignaturePlacement) {
|
|
||||||
onActivateSignaturePlacement();
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
color="blue"
|
|
||||||
variant="filled"
|
|
||||||
disabled={disabled || !canvasSignatureData}
|
|
||||||
>
|
|
||||||
Update and Place
|
|
||||||
</Button>
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
@ -224,7 +216,7 @@ const SignSettings = ({
|
|||||||
{/* Instructions for placing signature */}
|
{/* Instructions for placing signature */}
|
||||||
<Alert color="blue" title={t('sign.instructions.title', 'How to add signature')}>
|
<Alert color="blue" title={t('sign.instructions.title', 'How to add signature')}>
|
||||||
<Text size="sm">
|
<Text size="sm">
|
||||||
{parameters.signatureType === 'canvas' && 'After drawing your signature in the canvas above, click "Update and Place" then click anywhere on the PDF to place it.'}
|
{parameters.signatureType === 'canvas' && 'After drawing your signature in the canvas above, click anywhere on the PDF to place it.'}
|
||||||
{parameters.signatureType === 'image' && 'After uploading your signature image above, click anywhere on the PDF to place it.'}
|
{parameters.signatureType === 'image' && 'After uploading your signature image above, click anywhere on the PDF to place it.'}
|
||||||
{parameters.signatureType === 'text' && 'After entering your name above, click anywhere on the PDF to place your signature.'}
|
{parameters.signatureType === 'text' && 'After entering your name above, click anywhere on the PDF to place your signature.'}
|
||||||
</Text>
|
</Text>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user