From 9278f9f8c18e1e841d28039faf164b317fe2af6c Mon Sep 17 00:00:00 2001 From: chark1es Date: Sat, 8 Mar 2025 02:19:18 -0800 Subject: [PATCH] Update FilePreview.tsx --- .../dashboard/universal/FilePreview.tsx | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/components/dashboard/universal/FilePreview.tsx b/src/components/dashboard/universal/FilePreview.tsx index f237502..4a34941 100644 --- a/src/components/dashboard/universal/FilePreview.tsx +++ b/src/components/dashboard/universal/FilePreview.tsx @@ -83,6 +83,7 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil // Consolidate state management with useRef for latest values const latestPropsRef = useRef({ url: initialUrl, filename: initialFilename }); + const loadingRef = useRef(false); // Add a ref to track loading state const [state, setState] = useState({ url: initialUrl, filename: initialFilename, @@ -108,6 +109,7 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil // Update ref when props change useEffect(() => { latestPropsRef.current = { url: initialUrl, filename: initialFilename }; + loadingRef.current = false; // Reset loading ref // Clear state when URL changes setState(prev => ({ ...prev, @@ -156,6 +158,12 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil return; } + // Prevent duplicate loading + if (loadingRef.current) { + return; + } + + loadingRef.current = true; setState(prev => ({ ...prev, loading: true, error: null })); try { @@ -167,6 +175,7 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil fileType: 'application/pdf', loading: false })); + loadingRef.current = false; return; } @@ -179,6 +188,7 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil error: err instanceof Error ? err.message : 'Failed to load file', loading: false })); + loadingRef.current = false; } }, [state.url]); @@ -351,6 +361,12 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil setState(prev => ({ ...prev, visibleLines: INITIAL_LINES_TO_SHOW })); }, []); + // Update the Try Again button handler + const handleTryAgain = useCallback(() => { + loadingRef.current = false; // Reset loading ref + loadContent(); + }, [loadContent]); + // If URL is empty, show a message if (!state.url) { return ( @@ -383,6 +399,12 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil
+ {!state.loading && !state.error && state.content === null && ( +
+ +
+ )} + {state.loading && (
@@ -407,7 +429,7 @@ export default function FilePreview({ url: initialUrl = '', filename: initialFil