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; |