/* eslint-disable react-hooks/exhaustive-deps */ import { useSwipeable } from "react-swipeable"; import { useLayoutEffect, useRef, useState } from "react"; import { Image } from "../../../types/image"; import Button from "../../Button"; import LeftArrowSliderIcon from "../../icons/LeftArrowSliderIcon"; import RightArrowSliderIcon from "../../icons/RightArrowSliderIcon"; const images: Image[] = [ { id: "1", src: "/images/company/slider/1.png" }, { id: "2", src: "/images/company/slider/2.png" }, { id: "3", src: "/images/company/slider/3.png" }, ]; const getGapOffset = (screenWidth: number) => { if (screenWidth > 1600) return 45; if (screenWidth > 1280) return 24; if (screenWidth > 640) return 16; return 16; }; const ZoneSlider = () => { const [selectedImageIndex, setSelectedImageIndex] = useState(-1); const [rightImageOffset, setRightImageOffset] = useState(""); const [imageWidth, setImageWidth] = useState(0); const imageRef = useRef(null); useLayoutEffect(() => { if (!imageRef.current?.src) return; const width = imageRef.current.width; setImageWidth(width); }, [imageRef.current, window.innerWidth]); useLayoutEffect(() => { const screenWidth = window.innerWidth; const gapOffset = getGapOffset(screenWidth); const _rightImageOffset = `${ // -24 + (selectedImageIndex + 1) * (imageWidth + gapOffset) -57.5 + (selectedImageIndex + 1) * (imageWidth + gapOffset) }px`; setRightImageOffset(_rightImageOffset); }, [imageWidth, selectedImageIndex, window.innerWidth]); const handlers = useSwipeable({ onSwipedLeft: next, onSwipedRight: prev, trackMouse: true, }); function next() { const lastIndex = images.length - 3; if (selectedImageIndex === lastIndex + 1) return; setSelectedImageIndex((prev) => prev + 1); } function prev() { if (selectedImageIndex === -1) return; setSelectedImageIndex((prev) => prev - 1); } return (
{/*
*/}
{/*
*/}
{images.map((image) => ( ))}
{images.map((image, index) => (
))}
); }; export default ZoneSlider;