"use client"; import { Swiper, SwiperSlide } from "swiper/react"; import { Navigation } from "swiper/modules"; import "swiper/css"; import "swiper/css/navigation"; import Title from "../lib_components/title"; import SliderCard from "../cards/sliderCard"; import { useEffect, useState } from "react"; import { ProductTypes } from "@/types"; import { usePathname } from "next/navigation"; import Text from "../lib_components/text"; import { LoadingSkeleton } from "../loadingProduct"; import { baseUrl } from "@/data/url"; // The custom CSS selectors for navigation const navigationPrevEl = ".custom-swiper-prev"; const navigationNextEl = ".custom-swiper-next"; function getRandomItems(arr: any[], count: number) { const shuffled = [...arr]; for (let i = shuffled.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]; } return shuffled.slice(0, count); } export default function CustomSlider() { const [cars, setCars] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const pathname = usePathname(); const lang = pathname.split("/")[1]; useEffect(() => { const fetchProducts = async () => { try { setLoading(true); setError(null); const response = await fetch(baseUrl, { headers: { "Accept-Language": lang, }, }); if (!response.ok) { throw new Error("Server xatosi"); } const data = await response.json(); console.log("backend Data slider: ", data?.data); if (data?.data && data.data.length > 0) { const dataSlider = getRandomItems(data.data, 6); const formattedData = dataSlider.map((item) => ({ id: item.id, truck_name: item.name, desc: "news-title1", image: item.image || "", })); setCars(formattedData); } else { setCars([]); } } catch (error) { console.log("Xatolik: ", error); setError(error instanceof Error ? error.message : "Noma'lum xatolik"); } finally { setLoading(false); } }; fetchProducts(); }, [lang]); if (error) { return (

: {error}

); } if (loading) { return ; } return (
{/* Title */}
</div> {/* Custom buttons */} <div className="flex gap-2 items-center justify-center"> <button className={`${navigationPrevEl.replace( ".", "", )} w-10 h-10 p-0 bg-primary text-[30px] text-center text-white flex items-center justify-center hover:bg-secondary hover:cursor-pointer transition`} > ‹ </button> <button className={`${navigationNextEl.replace( ".", "", )} w-10 h-10 bg-primary text-[30px] text-center text-white flex items-center justify-center hover:bg-secondary hover:cursor-pointer transition `} > › </button> </div> </div> {/* Swiper */} <Swiper modules={[Navigation]} slidesPerView={3} spaceBetween={30} loop={true} navigation={{ // Pass the class selectors here prevEl: navigationPrevEl, nextEl: navigationNextEl, }} breakpoints={{ 0: { slidesPerView: 1 }, 768: { slidesPerView: 2 }, 1024: { slidesPerView: 3 }, }} > {cars.map((item, index) => ( <SwiperSlide key={index}> <SliderCard data={item} /> </SwiperSlide> ))} </Swiper> </div> ); }