Retrieve postImage in EditPostPage
This commit is contained in:
@@ -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"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user