diff --git a/frontend/src/components/tools/sign/SignSettings.tsx b/frontend/src/components/tools/sign/SignSettings.tsx index 3b6c71d46..87532e88a 100644 --- a/frontend/src/components/tools/sign/SignSettings.tsx +++ b/frontend/src/components/tools/sign/SignSettings.tsx @@ -85,7 +85,7 @@ const SignSettings = ({ }); if (data) { // Clear image data when canvas is used - setImageSignatureData(prev => prev ? null : prev); + setImageSignatureData(null); } }; diff --git a/frontend/src/components/viewer/SignatureAPIBridge.tsx b/frontend/src/components/viewer/SignatureAPIBridge.tsx index 07dd974fe..152348523 100644 --- a/frontend/src/components/viewer/SignatureAPIBridge.tsx +++ b/frontend/src/components/viewer/SignatureAPIBridge.tsx @@ -22,12 +22,12 @@ export interface SignatureAPIBridgeProps {} export const SignatureAPIBridge = forwardRef((_props, ref) => { const { provides: annotationApi } = useAnnotationCapability(); - const { signatureConfig, storeImageData } = useSignature(); + const { signatureConfig, storeImageData, isPlacementMode } = useSignature(); - // Enable keyboard deletion of selected annotations + // Enable keyboard deletion of selected annotations - only when in signature placement mode useEffect(() => { - if (!annotationApi) return; + if (!annotationApi || !isPlacementMode) return; const handleKeyDown = (event: KeyboardEvent) => { if (event.key === 'Delete' || event.key === 'Backspace') { @@ -68,7 +68,7 @@ export const SignatureAPIBridge = forwardRef document.removeEventListener('keydown', handleKeyDown); - }, [annotationApi, storeImageData]); + }, [annotationApi, storeImageData, isPlacementMode]); useImperativeHandle(ref, () => ({ addImageSignature: (signatureData: string, x: number, y: number, width: number, height: number, pageIndex: number) => { diff --git a/frontend/src/utils/signatureFlattening.ts b/frontend/src/utils/signatureFlattening.ts index 8de13cd88..e3ab875b1 100644 --- a/frontend/src/utils/signatureFlattening.ts +++ b/frontend/src/utils/signatureFlattening.ts @@ -25,7 +25,12 @@ export async function flattenSignatures(options: SignatureFlatteningOptions): Pr if (signatureApiRef?.current) { console.log('Extracting annotations from all pages...'); - for (let pageIndex = 0; pageIndex < 10; pageIndex++) { + // Dynamically check all pages until we encounter consecutive errors + let pageIndex = 0; + let consecutiveErrors = 0; + const maxConsecutiveErrors = 3; // Stop after 3 consecutive page access failures + + while (consecutiveErrors < maxConsecutiveErrors) { try { const pageAnnotations = await signatureApiRef.current.getPageAnnotations(pageIndex); if (pageAnnotations && pageAnnotations.length > 0) { @@ -55,9 +60,15 @@ export async function flattenSignatures(options: SignatureFlatteningOptions): Pr console.log(`Found ${sessionAnnotations.length} session annotations on page ${pageIndex + 1} (out of ${pageAnnotations.length} total)`); } } - } catch { - if (pageIndex > 2) break; // Stop after checking first few pages + + // Reset consecutive error count on successful page access + consecutiveErrors = 0; + } catch (pageError) { + consecutiveErrors++; + console.warn(`Error extracting annotations from page ${pageIndex + 1} (error ${consecutiveErrors}/${maxConsecutiveErrors}):`, pageError); } + + pageIndex++; } }