diff --git a/packages/react-pdf/src/Document.spec.tsx b/packages/react-pdf/src/Document.spec.tsx index e8e9bcb66..e472241ce 100644 --- a/packages/react-pdf/src/Document.spec.tsx +++ b/packages/react-pdf/src/Document.spec.tsx @@ -695,4 +695,14 @@ describe('Document', () => { vi.mocked(globalThis.console.error).mockRestore(); }); + + it('does not throw an error on unmount', async () => { + const { func: onLoadProgress, promise: onLoadProgressPromise } = makeAsyncCallback(); + + const { unmount } = render(); + + await onLoadProgressPromise; + + expect(unmount).not.toThrowError(); + }); }); diff --git a/packages/react-pdf/src/Document.tsx b/packages/react-pdf/src/Document.tsx index 9de1392f3..9f240ccf5 100644 --- a/packages/react-pdf/src/Document.tsx +++ b/packages/react-pdf/src/Document.tsx @@ -30,6 +30,7 @@ import { import useResolver from './shared/hooks/useResolver.js'; import type { PDFDocumentProxy } from 'pdfjs-dist'; +import type { DocumentInitParameters } from 'pdfjs-dist/types/src/display/api.js'; import type { EventProps } from 'make-event-props'; import type { ClassName, @@ -507,10 +508,9 @@ const Document: React.ForwardRefExoticComponent< return; } - const documentInitParams: Source = { - ...source, - ...options, - }; + const documentInitParams: DocumentInitParameters = options + ? { ...source, ...options } + : source; const destroyable = pdfjs.getDocument(documentInitParams); if (onLoadProgress) { @@ -521,7 +521,7 @@ const Document: React.ForwardRefExoticComponent< } const loadingTask = destroyable; - loadingTask.promise + const loadingPromise = loadingTask.promise .then((nextPdf) => { pdfDispatch({ type: 'RESOLVE', value: nextPdf }); }) @@ -534,7 +534,7 @@ const Document: React.ForwardRefExoticComponent< }); return () => { - loadingTask.destroy(); + loadingPromise.finally(() => loadingTask.destroy()); }; }, [options, pdfDispatch, source],