File size: 1,483 Bytes
8b105ad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import React, { useEffect, useState } from "react";
import { useParams, useNavigate } from "react-router-dom";
import BlogPageSection from "../sections/blogs/BlogPageSection"; // Import BlogPageSection
import blogData from "../data/blogdata"; // Import blog data

const BlogPage = () => {
  const { slug } = useParams(); // Extract slug from the route
  const navigate = useNavigate(); // For redirecting if there's an error
  const [post, setPost] = useState(null);
  const [error, setError] = useState(null);

  useEffect(() => {
    // Validate the slug to ensure it's an integer
    if (!/^\d+$/.test(slug)) {
      setError("Invalid blog slug. Redirecting...");
      setTimeout(() => navigate("/error"), 2000); // Redirect to an error page or home
      return;
    }

    // Find the blog post based on the slug
    const foundPost = blogData.find((item) => item.id === parseInt(slug, 10));
    if (!foundPost) {
      setError("Blog post not found. Redirecting...");
      setTimeout(() => navigate("/blogs"), 2000); // Redirect if not found
    } else {
      setPost(foundPost);
    }
  }, [slug, navigate]);

  // Display error message if any
  if (error) return <div>{error}</div>;

  // If no post data, return a "Not Found" message
  if (!post) {
    return <div>Loading...</div>;
  }

  // Render the blog post content
  return (
    <div>
      <BlogPageSection post={post} /> {/* Pass the post data to BlogPageSection */}
    </div>
  );
};

export default BlogPage;