"use client"; import React, { useEffect, useState } from "react"; import { useLocale, useTranslations } from "next-intl"; import { NewsData } from "@/lib/types/NewsData.type"; import { baseAPI } from "@/lib/API"; import Loader from "@/components/ui/Loader"; import clsx from "clsx"; import { Card } from "@/components/shared/Card"; import { BorderBtn } from "@/components/ui/Buttons"; import { Pagination } from "@/components/ui/Pagination"; import { LayoutWithSidebar } from "@/components/page/LayoutWithSidebar"; const News = () => { const locale = useLocale(); const t = useTranslations("news"); const tCommon = useTranslations("common"); const [current, setCurrent] = React.useState(1); const [perPage, setPerPage] = React.useState(6); const [totalNews, setTotalNews] = React.useState(0); const [loading, setLoading] = useState(true); useEffect(() => { window.scrollTo({ behavior: "smooth", top: 0 }); }, [current]); const [newsData, setNewsData] = React.useState(); const fetchNews = async () => { try { setLoading(true); const response = await fetch( `${baseAPI}news?page=${current}&per_page=${perPage}`, { headers: { "Accept-Language": locale, }, } ); if (!response.ok) { throw new Error(`Fetch failed with status ${response.status}`); } const data: NewsData = await response.json(); setNewsData(data); setTotalNews(data.meta.total); } catch (error) { console.error("Fetch error:", error); } finally { setLoading(false); } }; React.useEffect(() => { fetchNews(); }, [current, perPage, locale]); const handleOnClickButton = () => { setPerPage((prev) => prev + 6); }; if (loading) { return ; } return (
{newsData && newsData.data.map((item, i) => ( 0 ? item.featured_images[0].path : newsData.data[0].featured_images[0].path } /> ))}
{newsData && totalNews > perPage && perPage >= totalNews && (
)} {newsData?.meta && ( )}
); }; export default News;