diff --git a/src/Pages/BlogPage.jsx b/src/Pages/BlogPage.jsx index e84deb0..e5933c1 100644 --- a/src/Pages/BlogPage.jsx +++ b/src/Pages/BlogPage.jsx @@ -1,105 +1,132 @@ import React from 'react' import { useState } from 'react' -import { Link } from 'react-router-dom' +import SingleBlog from '../components/SingleBlog'; const BlogPage = () => { - const [blogs, setblogs] = useState([ - { - "id":1, - "title": "Lorem Ipsum Blog", - "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - "author": "John Doe", - "publication_date": "2024-05-03" - }, - { - "id":2, - "title": "Lorem Ipsum Blog", - "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - "author": "John Doe", - "publication_date": "2024-05-03" - }, - { - "id":3, - "title": "Lorem Ipsum Blog", - "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - "author": "John Doe", - "publication_date": "2024-05-03" - }, - { - "id":4, - "title": "Lorem Ipsum Blog", - "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - "author": "John Doe", - "publication_date": "2024-05-03" - }, - { - "id":5, - "title": "Lorem Ipsum Blog", - "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - "author": "John Doe", - "publication_date": "2024-05-03" - }, - { - "id":6, - "title": "Lorem Ipsum Blog", - "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - "author": "John Doe", - "publication_date": "2024-05-03" - }, - { - "id":7, - "title": "Lorem Ipsum Blog", - "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - "author": "John Doe", - "publication_date": "2024-05-03" - }, - { - "id":8, - "title": "Lorem Ipsum Blog", - "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - "author": "John Doe", - "publication_date": "2024-05-03" - }, - { - "id":9, - "title": "Lorem Ipsum Blog", - "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - "author": "John Doe", - "publication_date": "2024-05-03" - }, - { - "id":10, - "title": "Lorem Ipsum Blog", - "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - "author": "John Doe", - "publication_date": "2024-05-03" - }, - // Add more blog objects as needed - ]) + const [activeTab, setActiveTab] = useState("latest") + const [blogs, setblogs] = useState([ + { + id: 1, + title: "Lorem Ipsum Blog latest-blog", + content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", + author: "John Doe", + publication_date: "2024-05-03", + tag:"latest" + }, + { + id: 2, + title: "Lorem Ipsum Blog latest blog", + content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", + author: "John Doe", + publication_date: "2024-05-03", + tag:"latest" + }, + { + id: 3, + title: "Lorem Ipsum Blog latest blog", + content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", + author: "John Doe", + publication_date: "2024-05-03", + tag:"latest" + }, + { + id: 4, + title: "Lorem Ipsum Blog latest blog", + content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", + author: "John Doe", + publication_date: "2024-05-03", + tag:"latest" + }, + { + id: 5, + title: "Lorem Ipsum Blog trending blog", + content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", + author: "John Doe", + publication_date: "2024-05-03", + tag:"trending" + }, + { + id: 6, + title: "Lorem Ipsum Blog trending blog", + content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", + author: "John Doe", + publication_date: "2024-05-03", + tag:"trending" + }, + { + id: 7, + title: "Lorem Ipsum Blog trending blog", + content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", + author: "John Doe", + publication_date: "2024-05-03", + tag:"trending" + }, + { + id: 8, + title: "Lorem Ipsum Blog top blog", + content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", + author: "John Doe", + publication_date: "2024-05-03", + tag:"top" + }, + { + id: 9, + title: "Lorem Ipsum Blog top blog", + content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", + author: "John Doe", + publication_date: "2024-05-03", + tag:"top" + }, + { + id: 10, + title: "Lorem Ipsum Blog top blog", + content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", + author: "John Doe", + publication_date: "2024-05-03", + tag:"top" + }, + // Add more blog objects as needed + ]); + const blogsGroupedByTags = Object.groupBy(blogs, ({tag})=> tag) + const handleTabClick = (e)=>{ + console.log(e.target.id) + const previousActiveButton= document.querySelector(`#${activeTab + "Tab"}`) + const previousActiveContainer = document.querySelector(`#${activeTab + "TabContainer"}`) + const activeContainer = document.querySelector(`#${e.target.id + "Container"}`) + const buttonValue = e.target.textContent.toLowerCase(); + if(activeTab!==buttonValue){ + previousActiveButton.classList.add("text-gray-600") + previousActiveContainer.classList.remove("border-black") + + activeContainer.classList.add("border-black") + e.target.classList.remove("text-gray-600") + setActiveTab(buttonValue) + } + + } return ( <> -

Latest Blogs

+
+
+ +
+
+ +
+
+ +
+
- {blogs.map((blog) => { - return -
- Blog Image -
-

{blog.title}

-

{blog.content}

-
- Author Image -
-

{blog.author}

-

{blog.publication_date}

-
-
-
-
- - })} + {blogsGroupedByTags[activeTab].map((blog)=> )}
diff --git a/src/Pages/Blogs.jsx b/src/Pages/Blogs.jsx index e20758e..b215d2d 100644 --- a/src/Pages/Blogs.jsx +++ b/src/Pages/Blogs.jsx @@ -1,93 +1,12 @@ import React, { useEffect, useState } from "react"; -import { useParams } from "react-router-dom"; +import { useParams,useLocation } from "react-router-dom"; const Blogs = () => { const params = useParams(); const { slug } = params; - const [blogs, setblogs] = useState([ - { - id: 1, - title: "Lorem Ipsum Blog", - content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - author: "John Doe", - publication_date: "2024-05-03", - }, - { - id: 2, - title: "Lorem Ipsum Blog", - content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - author: "John Doe", - publication_date: "2024-05-03", - }, - { - id: 3, - title: "Lorem Ipsum Blog", - content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - author: "John Doe", - publication_date: "2024-05-03", - }, - { - id: 4, - title: "Lorem Ipsum Blog", - content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - author: "John Doe", - publication_date: "2024-05-03", - }, - { - id: 5, - title: "Lorem Ipsum Blog", - content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - author: "John Doe", - publication_date: "2024-05-03", - }, - { - id: 6, - title: "Lorem Ipsum Blog", - content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - author: "John Doe", - publication_date: "2024-05-03", - }, - { - id: 7, - title: "Lorem Ipsum Blog", - content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - author: "John Doe", - publication_date: "2024-05-03", - }, - { - id: 8, - title: "Lorem Ipsum Blog", - content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - author: "John Doe", - publication_date: "2024-05-03", - }, - { - id: 9, - title: "Lorem Ipsum Blog", - content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - author: "John Doe", - publication_date: "2024-05-03", - }, - { - id: 10, - title: "Lorem Ipsum Blog", - content: "Lorem ipsum dolor sit amet, consectetur adipiscing elit...", - author: "John Doe", - publication_date: "2024-05-03", - }, - // Add more blog objects as needed - ]); + const location = useLocation(); - const [blog, setBlog] = useState(null); - - useEffect(() => { - const selectedBlog = blogs.find((blog) => blog.id === parseInt(slug)); - setBlog(selectedBlog); - }, [slug]); - - if (!blog) { - return
Loading...
; - } + const [blog, setBlog] = useState(location.state.blogProp); const getAvatarLetter = (author) => { return author.charAt(0).toUpperCase(); diff --git a/src/components/SingleBlog.jsx b/src/components/SingleBlog.jsx new file mode 100644 index 0000000..ec1f5b8 --- /dev/null +++ b/src/components/SingleBlog.jsx @@ -0,0 +1,24 @@ +import React from 'react' +import { Link } from 'react-router-dom' + +const SingleBlog = ({blog}) => { + + return +
+ Blog Image +
+

{blog.title}

+

{blog.content}

+
+ Author Image +
+

{blog.author}

+

{blog.publication_date}

+
+
+
+
+ +} + +export default SingleBlog \ No newline at end of file