fix: update cover image handling in EditPost component and refactor post loading logic
All checks were successful
CI - Build and Push / Build and Push Docker Image (push) Successful in 17s

This commit is contained in:
2025-10-26 19:06:01 +08:00
parent cf1302deba
commit 7b83d00f85

View File

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