This repository has been archived on 2025-12-11. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
fullstack-open/part5/bloglist-frontend/src/components/Blog.js
Andrew Trieu 936ea77d28 Fix bug
2023-06-22 16:25:47 +03:00

61 lines
1.5 KiB
JavaScript

import { useState } from 'react'
import blogService from '../services/blogs.js'
import Togglable from './Togglable.js'
const Blog = ({ blog, setNotification, removeBlog }) => {
const blogStyle = {
paddingTop: 10,
paddingLeft: 2,
border: 'solid',
borderWidth: 1,
marginBottom: 5,
}
const [likes, setLikes] = useState(blog.likes)
const handleLike = (blog) => {
blog.likes = blog.likes + 1
blogService
.update(blog.id, blog)
.then((returnedBlog) => {
setLikes(returnedBlog.likes)
setNotification(`You liked ${blog.title}`, 'success')
})
.catch((error) => {
setNotification(`Like failed. Error: ${error}`, 'error')
})
}
const findUser = async (blogId) => {
const blogs = await blogService.getAll()
const blogToFind = blogs.filter((blog) => blog.user).find((blog) => blog.id === blogId)
blog.user = blogToFind?.user
}
findUser(blog.id)
return (
<div style={blogStyle} className="blog">
<div>
<em>
{blog.title} by {blog.author}
</em>
<Togglable buttonLabel="View" className="blogButton">
<ul>
<li>User: {blog.user?.name || 'Unknown' }</li>
<li> URL: {blog.url}</li>
<li>
{likes} likes&nbsp;
<button onClick={() => handleLike(blog)}>+</button>
</li>
</ul>
<button onClick={() => removeBlog(blog)}>Remove</button>
</Togglable>
</div>
</div>
)
}
export default Blog