Auto update canvas signature

This commit is contained in:
Reece 2025-09-26 19:14:40 +01:00
parent b486d1270e
commit 708a296f8d
2 changed files with 33 additions and 18 deletions

View File

@ -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);

View File

@ -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>