Retrieve postImage in EditPostPage

This commit is contained in:
Rykkel
2024-08-12 23:44:54 +08:00
parent d37e81ecd4
commit 2472d8ca6b
2 changed files with 20 additions and 35 deletions

View File

@@ -1,13 +1,22 @@
import React, { useState } from 'react'; import React, { useState, useEffect } from 'react';
interface InsertPostImageProps { interface InsertPostImageProps {
onImageSelected: (file: File | null) => void; onImageSelected: (file: File | null) => void;
initialImageUrl?: string; // Optional prop for initial image URL
} }
const InsertPostImage: React.FC<InsertPostImageProps> = ({ onImageSelected }) => { const InsertPostImage: React.FC<InsertPostImageProps> = ({ onImageSelected, initialImageUrl }) => {
const [selectedFile, setSelectedFile] = useState<File | null>(null); const [selectedFile, setSelectedFile] = useState<File | null>(null);
const [previewImage, setPreviewImage] = useState<string>(''); const [previewImage, setPreviewImage] = useState<string>('');
useEffect(() => {
// Update the preview image if there's an initial image URL
if (initialImageUrl) {
setPreviewImage(initialImageUrl);
setSelectedFile(null); // Clear any file selection
}
}, [initialImageUrl]);
const handleImageSelect = (event: React.ChangeEvent<HTMLInputElement>) => { const handleImageSelect = (event: React.ChangeEvent<HTMLInputElement>) => {
const selectedFiles = event.target.files as FileList; const selectedFiles = event.target.files as FileList;
const file = selectedFiles?.[0] || null; const file = selectedFiles?.[0] || null;
@@ -17,7 +26,7 @@ const InsertPostImage: React.FC<InsertPostImageProps> = ({ onImageSelected }) =>
}; };
return ( return (
<div className={`flex flex-col dark:bg-zinc-800 rounded-md ${selectedFile ? 'h-auto' : 'h-20'}`} <div className={`flex flex-col dark:bg-zinc-800 rounded-md ${selectedFile || initialImageUrl ? 'h-auto' : 'h-20'}`}
style={{ width: 300 }}> style={{ width: 300 }}>
<div> <div>
<div className="flex flex-col"> <div className="flex flex-col">
@@ -27,10 +36,10 @@ const InsertPostImage: React.FC<InsertPostImageProps> = ({ onImageSelected }) =>
className="mb-3" className="mb-3"
/> />
</div> </div>
{selectedFile && ( {(previewImage || initialImageUrl) && (
<div> <div>
<img <img
src={previewImage} src={previewImage || initialImageUrl}
alt="Selected Image" alt="Selected Image"
className="w-full h-full object-cover rounded-md" className="w-full h-full object-cover rounded-md"
/> />

View File

@@ -41,7 +41,7 @@ function EditPostPage() {
const [post, setPost] = useState({ const [post, setPost] = useState({
title: "", title: "",
content: "", content: "",
postImage: null, postImage: "",
tags: "", tags: "",
}); });
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
@@ -51,27 +51,15 @@ function EditPostPage() {
try { try {
const response = await instance.get(`${config.serverAddress}/post/${id}`); const response = await instance.get(`${config.serverAddress}/post/${id}`);
const postData = response.data; const postData = response.data;
console.log("Fetched data: ", postData)
console.log("postData.tags data: ", postData.Tags);
if (postData && postData.Tags) { if (postData && postData.Tags) {
// Adjust the structure according to the actual shape of tagObject const postTags = postData.Tags.map((tagObject: any) => tagObject.tag);
const postTags = postData.Tags.map((tagObject: any) => {
console.log("Tag Object: ", tagObject); // Debug each tagObject
return tagObject.tag; // Adjust according to actual key
});
setTags(postTags); setTags(postTags);
console.log("postTags:", postTags);
} else {
console.log("postData.Tags is not available or is undefined");
} }
// Set the post data including other fields
setPost({ setPost({
...postData, ...postData,
postImage: postData.postImage ? `${config.serverAddress}/post/post-image/${id}` : null, postImage: postData.postImage ? `${config.serverAddress}/post/post-image/${id}` : "",
tags: tags, tags: tags,
}); });
@@ -85,11 +73,6 @@ function EditPostPage() {
fetchPost(); fetchPost();
}, [id]); }, [id]);
useEffect(() => {
console.log("Tags updated: ", tags);
}, [tags]);
const handleSubmit = async ( const handleSubmit = async (
values: any, values: any,
{ setSubmitting, resetForm, setFieldError, setFieldValue }: any { setSubmitting, resetForm, setFieldError, setFieldValue }: any
@@ -98,16 +81,11 @@ function EditPostPage() {
const formData = new FormData(); const formData = new FormData();
formData.append("title", values.title); formData.append("title", values.title);
formData.append("content", values.content); formData.append("content", values.content);
// Append postImage only if it exists
console.log(values.postImage instanceof File); // Should be true if it's a File
if (values.postImage && values.postImage instanceof File) { if (values.postImage && values.postImage instanceof File) {
formData.append("postImage", values.postImage); formData.append("postImage", values.postImage);
} }
formData.append("tags", JSON.stringify(tags)); // This sends tags as a JSON string formData.append("tags", JSON.stringify(tags));
console.log("Updating formData:", formData);
const response = await instance.put( const response = await instance.put(
config.serverAddress + `/post/${id}`, config.serverAddress + `/post/${id}`,
@@ -116,7 +94,6 @@ function EditPostPage() {
); );
if (response.status === 200) { if (response.status === 200) {
console.log("Post updated successfully:", response.data);
resetForm(); resetForm();
setTags([]); setTags([]);
setFieldValue("postImage", null); setFieldValue("postImage", null);
@@ -184,9 +161,8 @@ function EditPostPage() {
<div className="text-sm"> <div className="text-sm">
<div className="flex flex-row gap-10"> <div className="flex flex-row gap-10">
<InsertPostImage <InsertPostImage
onImageSelected={(file) => { onImageSelected={(file) => setFieldValue("postImage", file)}
setFieldValue("postImage", file); initialImageUrl={post.postImage} // Pass the image URL here
}}
/> />
</div> </div>
</div> </div>