import React, { useState, useEffect } from 'react'; import Navbar from "./Navbar"; import Footer from "./footer"; const Blog = () => { const [blogs, setBlogs] = useState([]); const [newBlog, setNewBlog] = useState(''); const [newComments, setNewComments] = useState({}); const [imageFile, setImageFile] = useState(null); const userName = localStorage.getItem('username') || 'guest'; useEffect(() => { fetchBlogs(); }, []); const fetchBlogs = async () => { try { const response = await fetch('https://jp-backend-kc80.onrender.com/api/blogs'); if (response.ok) { const data = await response.json(); setBlogs(data); } else { console.error('Failed to fetch blogs'); } } catch (error) { console.error('Error fetching blogs:', error); } }; const handleImageChange = (e) => { setImageFile(e.target.files[0]); }; const uploadImage = async (file) => { if (!file) return null; const formData = new FormData(); formData.append('file', file); try { const response = await fetch('https://jp-backend-kc80.onrender.com/upload/', { method: 'POST', body: formData, }); const data = await response.json(); return data.image_url; } catch (error) { console.error('Error uploading image:', error); return null; } }; const addBlog = async () => { let imageUrl = null; if (imageFile) { imageUrl = await uploadImage(imageFile); } console.log('Adding blog with details:'); console.log('Username:', userName); console.log('Blog Content:', newBlog); console.log('Image URL:', imageUrl); try { const response = await fetch('https://jp-backend-kc80.onrender.com/api/blogs', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', }, body: JSON.stringify({ username: userName, text_content: newBlog, image_url: imageUrl || '', }), }); if (response.ok) { setNewBlog(''); setImageFile(null); fetchBlogs(); } else { console.error('Failed to add blog'); } } catch (error) { console.error('Error adding blog:', error); } }; const addComment = async (blogId, commentText) => { try { const response = await fetch(`https://jp-backend-kc80.onrender.com/api/blogs/${blogId}/comment`, { method: 'PATCH', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ username: userName, comment: commentText, }), }); if (response.ok) { fetchBlogs(); setNewComments({ ...newComments, [blogId]: '' }); } else { console.error('Failed to add comment'); } } catch (error) { console.error('Error adding comment:', error); } }; const likeBlog = async (blogId) => { try { const response = await fetch(`https://jp-backend-kc80.onrender.com/api/blogs/${blogId}/like`, { method: 'PATCH', }); if (response.ok) { fetchBlogs(); } else { console.error('Failed to like blog'); } } catch (error) { console.error('Error liking blog:', error); } }; const handleCommentChange = (blogId, value) => { setNewComments({ ...newComments, [blogId]: value }); }; return (
{blog.username}: {blog.text_content}
{blog.image_url &&{user}: {comment}
))}