"use client"; import Image from "next/image"; import React, { useContext, useEffect, useState } from "react"; import Footer from "@comp/Footer/page"; import Navbar from "@comp/Navbar/page"; import "../BlogComponents/styleBlog.css"; import TimerDown from "@comp/TimerDown/TimerDown"; import TimerDownBlog from "@comp/TimerDown/TimerDown"; import PersianNumber from "plugins/PersianNumber"; import SliderProductsOffer from "../BlogComponents/SliderProductsOffer/page"; import AppContext from "@ctx/AppContext"; import InfiniteScroll from "react-infinite-scroll-component"; import BottomSheetComment from "plugins/bottomSheet/BottomSheetComment"; import { toast } from "react-toastify"; import Chapar from "plugins/Chapar"; import ArticleContent from "@comp/ArticleContent"; const BlogData = ({ params, data }) => { const CTX = useContext(AppContext); const [review, setReview] = useState([]); const [content, setContent] = useState(""); const [rate, setRate] = useState(4); const [page, setPage] = useState(0); const [hasMore, setHasMore] = useState(true); const specialOfferData = CTX.state.specialOfferData; const fetchReview = async (id, currentPage, afterCreatReview) => { try { const res = await fetch( `${process.env.NEXT_PUBLIC_API_URL}/product/${id}/comment?page=${currentPage}&count=10` ); if (!res.ok) { throw new Error(`HTTP error! status: ${res.status}`); } const data = await res.json(); // Assuming the API returns an array of reviews and a total count or indication if more data is available if (data.length < 10) { setHasMore(false); } if (afterCreatReview) { setReview((prevReview) => [...prevReview, ...data]); } else { setReview(data); } } catch (error) { setHasMore(false); // Stop further fetches on error } }; const fetchMoreData = () => { const nextPage = page + 1; fetchReview(params.id[0], nextPage); setPage(nextPage); }; const createProductReview = async () => { const body = { title: ` نظر کاربر برای {" "}${data.product?.persianName}`, content, rate: 1, blogId: params.id[0], rate, }; try { const data = await Chapar.post( `${process.env.NEXT_PUBLIC_API_URL}/comment`, body ); setContent(""); fetchReview(params.id[0], 0); } catch ({ error, status }) { toast.error(`${error?.response?.data?.message}`, { position: "bottom-right", closeOnClick: true, }); } }; const handleCreateReview = () => { const token = localStorage.getItem("token"); if (token) { createProductReview(); } else { router.push("/login"); } }; const handleStarClick = (value) => { setRate(value); }; useEffect(() => { if (specialOfferData.length <= 0) { CTX.fetchSpecialOffer(); } fetchReview(params.id[0], 0); }, []); return (
Loading...
)}
{e?.content}
{e?.children[0]?.content}