diff --git a/frontend/src/components/viewer/EmbedPdfViewer.tsx b/frontend/src/components/viewer/EmbedPdfViewer.tsx index f8c6d0e4f..71dbfa90b 100644 --- a/frontend/src/components/viewer/EmbedPdfViewer.tsx +++ b/frontend/src/components/viewer/EmbedPdfViewer.tsx @@ -13,6 +13,7 @@ import { useNavigationGuard, useNavigationState } from '../../contexts/Navigatio import { useSignature } from '../../contexts/SignatureContext'; import { createStirlingFilesAndStubs } from '../../services/fileStubHelpers'; import NavigationWarningModal from '../shared/NavigationWarningModal'; +import { isStirlingFile } from '../../types/fileContext'; export interface EmbedPdfViewerProps { sidebarsVisible: boolean; @@ -263,6 +264,7 @@ const EmbedPdfViewerContent = ({ transition: 'margin-right 0.3s ease' }}> { console.log('exportActions:', exportActions); console.log('signatureApiRef.current:', signatureApiRef.current); - // Deactivate signature placement mode immediately - handleDeactivateSignature(); - // Unregister unsaved changes checker to prevent warning during apply unregisterUnsavedChangesChecker(); setHasUnsavedChanges(false); @@ -104,29 +101,36 @@ const Sign = (props: BaseToolProps) => { console.log('originalFile:', originalFile); // Use the signature flattening utility - const newFileIds = await flattenSignatures({ + const flattenResult = await flattenSignatures({ signatureApiRef, getImageData, exportActions, selectors, - consumeFiles, originalFile, getScrollState }); - console.log('flattenSignatures result:', newFileIds); + console.log('flattenSignatures result:', flattenResult); - if (newFileIds && newFileIds.length > 0) { - console.log('✓ Signature flattening completed successfully'); + if (flattenResult) { + console.log('✓ Signature flattening completed - now consuming files'); + + // Now consume the files - this triggers the viewer reload + const newFileIds = await consumeFiles( + flattenResult.inputFileIds, + [flattenResult.outputStirlingFile], + [flattenResult.outputStub] + ); + + console.log('✓ Files consumed successfully. New file IDs:', newFileIds); // Mark signatures as applied setSignaturesApplied(true); - // Force viewer reload to show flattened PDF - setWorkbench('fileEditor'); - setTimeout(() => { - setWorkbench('viewer'); - }, 50); + // Deactivate signature placement mode after everything completes + handleDeactivateSignature(); + + // File has been consumed - viewer should reload automatically via key prop } else { console.error('Signature flattening failed'); } diff --git a/frontend/src/utils/signatureFlattening.ts b/frontend/src/utils/signatureFlattening.ts index 85b41f769..2ef1f23a1 100644 --- a/frontend/src/utils/signatureFlattening.ts +++ b/frontend/src/utils/signatureFlattening.ts @@ -17,13 +17,18 @@ interface SignatureFlatteningOptions { saveAsCopy: () => Promise; }; selectors: MinimalFileContextSelectors; - consumeFiles: (inputFileIds: FileId[], outputStirlingFiles: StirlingFile[], outputStirlingFileStubs: StirlingFileStub[]) => Promise; originalFile?: StirlingFile; getScrollState: () => { currentPage: number; totalPages: number }; } -export async function flattenSignatures(options: SignatureFlatteningOptions): Promise { - const { signatureApiRef, getImageData, exportActions, selectors, consumeFiles, originalFile, getScrollState } = options; +export interface SignatureFlatteningResult { + inputFileIds: FileId[]; + outputStirlingFile: StirlingFile; + outputStub: StirlingFileStub; +} + +export async function flattenSignatures(options: SignatureFlatteningOptions): Promise { + const { signatureApiRef, getImageData, exportActions, selectors, originalFile, getScrollState } = options; try { // Step 1: Extract all annotations from EmbedPDF before export @@ -319,13 +324,14 @@ export async function flattenSignatures(options: SignatureFlatteningOptions): Pr const outputStirlingFile = createStirlingFile(signedFile, outputStub.id); console.log('Output stub version:', outputStub.versionNumber); - console.log('Consuming files - replacing:', inputFileIds, 'with:', outputStub.id); + console.log('✓ Signature flattening completed successfully'); - // Replace the original file with the signed version - const newFileIds = await consumeFiles(inputFileIds, [outputStirlingFile], [outputStub]); - - console.log('✓ Signature flattening completed successfully. New file IDs:', newFileIds); - return newFileIds; + // Return the flattened file data for consumption by caller + return { + inputFileIds, + outputStirlingFile, + outputStub + }; } return null;