diff --git a/src/pages/EditPost.tsx b/src/pages/EditPost.tsx index 50c8c7d..9375f7a 100644 --- a/src/pages/EditPost.tsx +++ b/src/pages/EditPost.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import Layout from '../components/Layout'; import BlogEditor, { type BlogEditorRef } from '../blog/BlogEditor'; @@ -20,40 +20,46 @@ function EditPost() { const [title, setTitle] = useState(''); const [initialContent, setInitialContent] = useState(undefined); const [coverImage, setCoverImage] = useState(null); - const [coverImageKey, setCoverImageKey] = useState(''); - const [initialCoverImageKey, setInitialCoverImageKey] = useState(''); + const [originalCoverImageKey, setOriginalCoverImageKey] = useState(''); + const [newCoverImageKey, setNewCoverImageKey] = useState(null); const [uploadProgress, setUploadProgress] = useState(0); const [isUploading, setIsUploading] = useState(false); const [uploadError, setUploadError] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); - useEffect(() => { + const loadPost = useCallback(async () => { if (!postId) { setLoadError('Post not found.'); setIsLoading(false); return; } - (async () => { - try { - const fetched = await getBlogPost(postId); - setTitle(fetched.title); - setInitialContent(fetched.content); - setCoverImage(fetched.coverImageUrl ?? null); - const fetchedCoverKey = fetched.coverImageKey ?? ''; - setCoverImageKey(fetchedCoverKey); - setInitialCoverImageKey(fetchedCoverKey); - } catch (err) { - const message = err instanceof Error ? err.message : 'Failed to load post.'; - setLoadError(message); - console.error('Failed to load blog post for editing:', err); - } finally { - setIsLoading(false); - } - })(); + setIsLoading(true); + setLoadError(null); + + try { + const fetched = await getBlogPost(postId); + setTitle(fetched.title); + setInitialContent(fetched.content); + setCoverImage(fetched.coverImageUrl ?? null); + + const fetchedCoverKey = fetched.coverImageKey ?? ''; + setOriginalCoverImageKey(fetchedCoverKey); + setNewCoverImageKey(null); + } catch (err) { + const message = err instanceof Error ? err.message : 'Failed to load post.'; + setLoadError(message); + console.error('Failed to load blog post for editing:', err); + } finally { + setIsLoading(false); + } }, [postId]); + useEffect(() => { + void loadPost(); + }, [loadPost]); + const handleCoverImageChange = async (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (!file) { @@ -80,7 +86,7 @@ function EditPost() { setUploadProgress(progress); }); - setCoverImageKey(fileKey); + setNewCoverImageKey(fileKey); setCoverImage(url); setUploadProgress(100); success('Cover image uploaded successfully!', 2000); @@ -114,7 +120,7 @@ function EditPost() { setIsSubmitting(true); try { - const coverKeyToSend = coverImageKey || initialCoverImageKey; + const coverKeyToSend = newCoverImageKey ?? originalCoverImageKey; const payload: Parameters[0] = { postId,