From 849eaa5ba6ebbcd962d259d9bb0b086103d50132 Mon Sep 17 00:00:00 2001 From: Siddhartha Dutta Date: Tue, 23 Jul 2024 14:44:49 +0530 Subject: [PATCH] feat: add onFetchError prop --- src/DocViewer.tsx | 1 + src/hooks/useDocumentLoader.ts | 8 ++++++-- src/store/DocViewerProvider.tsx | 2 ++ src/store/mainStateReducer.ts | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/DocViewer.tsx b/src/DocViewer.tsx index a432ad31..9138b710 100644 --- a/src/DocViewer.tsx +++ b/src/DocViewer.tsx @@ -28,6 +28,7 @@ export interface DocViewerProps { language?: AvailableLanguages; activeDocument?: IDocument; onDocumentChange?: (document: IDocument) => void; + onFetchError?: (error: Error) => void; } const DocViewer = forwardRef((props, ref) => { diff --git a/src/hooks/useDocumentLoader.ts b/src/hooks/useDocumentLoader.ts index df909ce9..484e47e3 100644 --- a/src/hooks/useDocumentLoader.ts +++ b/src/hooks/useDocumentLoader.ts @@ -23,7 +23,7 @@ export const useDocumentLoader = (): { CurrentRenderer: DocRenderer | null | undefined; } => { const { state, dispatch } = useContext(DocViewerContext); - const { currentFileNo, currentDocument, prefetchMethod } = state; + const { currentFileNo, currentDocument, prefetchMethod, onFetchError } = state; const { CurrentRenderer } = useRendererSelector(); @@ -56,7 +56,11 @@ export const useDocumentLoader = (): { }) .catch((error) => { if (error?.name !== "AbortError") { - throw error; + if (onFetchError) { + onFetchError(error); + } else { + throw error; + } } }); diff --git a/src/store/DocViewerProvider.tsx b/src/store/DocViewerProvider.tsx index d9c2401e..4837da75 100644 --- a/src/store/DocViewerProvider.tsx +++ b/src/store/DocViewerProvider.tsx @@ -45,6 +45,7 @@ const DocViewerProvider = forwardRef< language, activeDocument, onDocumentChange, + onFetchError, } = props; const [state, dispatch] = useReducer(mainStateReducer, { @@ -66,6 +67,7 @@ const DocViewerProvider = forwardRef< language: language && locales[language] ? language : defaultLanguage, activeDocument, onDocumentChange, + onFetchError, }); useEffect(() => { diff --git a/src/store/mainStateReducer.ts b/src/store/mainStateReducer.ts index 5b2789ce..1b4ef750 100644 --- a/src/store/mainStateReducer.ts +++ b/src/store/mainStateReducer.ts @@ -29,6 +29,7 @@ export type IMainState = { language: AvailableLanguages; activeDocument?: IDocument; onDocumentChange?: (document: IDocument) => void; + onFetchError?: (error: Error) => void; }; export const initialState: IMainState = {