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
All checks were successful
CI - Build and Push / Build and Push Docker Image (push) Successful in 17s
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user