'use client'; import React, { useState, useEffect } from 'react'; import Image from 'next/image'; // Hook to detect screen size const useIsMobile = () => { const [isMobile, setIsMobile] = useState(false); useEffect(() => { const check = () => setIsMobile(window.innerWidth < 768); check(); window.addEventListener('resize', check); return () => window.removeEventListener('resize', check); }, []); return isMobile; }; interface Card { id: number; name: string; minSalary: string; annualFee: string; image: string; points: string[]; } interface CardGroup { title: string; cards: Card[]; } const CardOfferCarousel: React.FC = () => { const [cardGroups, setCardGroups] = useState([]); const [activeGroupIndex, setActiveGroupIndex] = useState(0); const [activeSlideIndex, setActiveSlideIndex] = useState(0); const [cardsPerSlide, setCardsPerSlide] = useState(5); const isMobile = useIsMobile(); // const updateCardsPerSlide = () => { // const width = window.innerWidth; // if (width < 640) setCardsPerSlide(2); // else if (width < 1024) setCardsPerSlide(3); // else if (width < 1280) setCardsPerSlide(4); // else setCardsPerSlide(5); // }; const updateCardsPerSlide = () => { const width = window.innerWidth; if (width < 640) { setCardsPerSlide(2); // Always 2 cards per slide on mobile } else if (width < 1024) { setCardsPerSlide(3); } else if (width < 1280) { setCardsPerSlide(4); } else { setCardsPerSlide(5); } }; useEffect(() => { updateCardsPerSlide(); window.addEventListener('resize', updateCardsPerSlide); return () => window.removeEventListener('resize', updateCardsPerSlide); }, []); useEffect(() => { const fetchData = async () => { try { const res = await fetch('/api/creditcards/cards'); const data = await res.json(); setCardGroups(data); } catch (err) { console.error('Failed to fetch card data', err); } }; fetchData(); }, []); //const totalSlides = 1; const totalSlides = () =>1; useEffect(() => { const groupInterval = setInterval(() => { setActiveGroupIndex((prev) => (prev + 1) % cardGroups.length); setActiveSlideIndex(0); }, 15000); return () => clearInterval(groupInterval); }, [cardGroups.length]); useEffect(() => { const slideInterval = setInterval(() => { setActiveSlideIndex((prev) => (prev + 1) % totalSlides()); }, 6000); return () => clearInterval(slideInterval); }, [cardsPerSlide, cardGroups, activeGroupIndex]); const currentGroup = cardGroups[activeGroupIndex] || { title: '', cards: [] }; // const totalSlides = () => // Math.ceil(currentGroup.cards.length / cardsPerSlide) || 1; return (

{currentGroup.title}

{Array.from({ length: totalSlides() }).map((_, slideIdx) => { const start = slideIdx * cardsPerSlide; const cardsInSlide = currentGroup.cards.slice( start, start + cardsPerSlide ); return (
{cardsInSlide.map((card) => ( //
//
// {card.name} //
//
// {card.name} //
//
    // {card.points.map((point, i) => ( //
  • {point}
  • // ))} //
//
//
// //
{card.name}
{card.name}
{/*
    {card.points.map((point, i) => (
  • {point}
  • ))}
*/
    {card.points.slice(0, 4).map((point, i) => (
  • {point.length > 80 ? point.slice(0, 80) + '...' : point}
  • ))}
}
{/* Button section pushed to the bottom */}
))}
); })}
{cardGroups.map((_, i) => ( ))}
); }; export default CardOfferCarousel;