import React, { useState, useEffect, useRef } from 'react';
import { useParams, useNavigate, Link } from 'react-router-dom';
import { useDispatch } from 'react-redux';
import { message } from 'antd';
import Lenis from "@studio-freight/lenis";
import {
RiArrowLeftLine, RiCalendarLine, RiTimeLine, RiUserLine, RiHomeLine, RiArticleLine,
RiShareLine,
RiCloseLine,
} from 'react-icons/ri';
import { RxHamburgerMenu } from 'react-icons/rx';
import { FaFacebook, FaInstagram, FaWhatsapp, FaCopy, FaLinkedin, FaTelegram } from "react-icons/fa";
import { FaXTwitter } from "react-icons/fa6";
import { getPublishedBlogs, getPublishedBlogsBySlug } from '../../features/Blog/Blog.js';
import Loader from '../../PozoApp/Components/Loader/PozoLoader';
import PozoAppLogo from '../../Images/PozoAppLogo.svg';
import "./BlogDetail.scss"
import BlogExtras from "./BlogExtras.jsx";
import SEO from '../../Components/SEO/SEO.jsx';
const mainDirectory = import.meta.env.ENV_MAIN_BASE_URL
const subDirectory = import.meta.env.ENV_BASE_URL
const BlogDetail = () => {
const { slug } = useParams();
const navigate = useNavigate();
const dispatch = useDispatch();
const [blog, setBlog] = useState(null);
const [loading, setLoading] = useState(true);
const [drawerOpen, setDrawerOpen] = useState(false);
const [shareOpen, setShareOpen] = useState(false);
const shareRef = useRef(null);
console.log(blog, "blogblogblogblogblog")
useEffect(() => {
const handleClickOutside = (event) => {
if (shareRef.current && !shareRef.current.contains(event.target)) {
setShareOpen(false);
}
};
const handleEscKey = (event) => {
if (event.key === 'Escape') {
setShareOpen(false);
}
};
if (shareOpen) {
document.addEventListener('mousedown', handleClickOutside);
document.addEventListener('keydown', handleEscKey);
}
return () => {
document.removeEventListener('mousedown', handleClickOutside);
document.removeEventListener('keydown', handleEscKey);
};
}, [shareOpen]);
useEffect(() => {
fetchBlogDetail();
}, [slug]);
useEffect(() => {
const lenis = new Lenis({
duration: 1,
easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)),
smoothWheel: true,
smoothTouch: true,
});
function raf(time) {
lenis.raf(time);
requestAnimationFrame(raf);
}
requestAnimationFrame(raf);
return () => lenis.destroy();
}, []);
const fetchBlogDetail = async () => {
try {
const response = await dispatch(getPublishedBlogsBySlug({ slug })).unwrap();
if (response?.data?.statusCode === 1) {
const blogs = response.data.data?.[0];
setBlog(blogs);
} else {
message.error('Failed to load blog posts');
}
setLoading(false);
} catch (error) {
console.error('Error fetching blog:', error);
message.error('Failed to load blog post');
setLoading(false);
}
};
const handleBack = () => {
navigate('/blog');
};
if (loading) {
return ;
}
if (!blog) {
return (
);
}
const handleBackHome = () => {
navigate(`${subDirectory}`);
}
const handleBackBlog = () => {
navigate(`${subDirectory}blog`);
}
const handlePrivacyPolicy = () => {
navigate(`${subDirectory}privacy-policy`);
}
const handleNavigateCookie = () => {
navigate(`${subDirectory}cookie-policy`);
}
return (
<>
{drawerOpen && setDrawerOpen(false)}>
}
{/*
setDrawerOpen(false)}> */}
Home
{/* */}
{/*
setDrawerOpen(false)}> */}
Blog
{/* */}
{blog.BlogTitle}
{blog.BlogSubtitle}
{blog.Author || "Admin"}
{blog.CreatedDate && (
{(() => {
if (!blog?.CreatedDate) return '';
const dateStr = blog.CreatedDate.split('T')[0]; // Get date part
const [year, month, day] = dateStr.split('-');
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
const monthName = months[parseInt(month) - 1];
return `${parseInt(day)} ${monthName} ${year}`;
})()}
)}
{/*
{blog.IsPublished === 'Y' ? 'Published' : 'Draft'}
*/}
{blog.HeaderImage && (
)}
{blog.BlogContent && blog.BlogContent.map((block, index) => {
switch (block.type) {
case 'header':
case "oldHeader":
const HeaderTag = `h${block.data.level || 2}`;
return (
);
case 'paragraph':
return (
);
case 'list':
if (block.data.style === 'checklist') {
return (
);
} else if (block.data.style === 'ordered') {
return (
{block.data.items.map((item, i) => (
- {item.content}
))}
);
} else {
return (
{block.data.items.map((item, i) => (
- {item.content}
))}
);
}
case "image":
return (

{block.data.caption && (
{block.data.caption}
)}
);
case "separator":
return (
);
case "video":
return (
{block.data.file?.url && (
)}
{block.data.caption && (
{block.data.caption}
)}
);
case "link":
return (
);
case "quote":
return (
{block.data.text}
{block.data.caption && (
{block.data.caption}
)}
);
case "code":
return (
{block.data.code}
);
case "cta":
return (
);
case "email":
return (
Subject: {block.data.subject}
);
case "bookmark":
return (
);
case "callout":
return (
{block.data.emoji || "💡"}
{block.data.text}
);
case "index":
const IndexListTag = block.data.style === "numbered" ? "ol" : "ul";
return (
Table of Contents
{(block.data.items || []).map((item, i) => (
{item.title}
))}
);
default:
return null;
}
})}
{shareOpen && (
Share to
)}
© 2025 PozoApp
Privacy Policy
Cookie Policy
For queries contact us: Manager, No 51 Step Colony, Dharga,Hosur,
Krishnagiri, Tamilnadu-635126, India
>
);
};
export default BlogDetail;