"use client"; import { useState, useEffect, useCallback } from "react"; import Image from "next/image"; const tilePools = [ [ "/images/houses/herdweg/impressions/11.png", "/images/houses/herdweg/impressions/MKE_1986.JPG", "/images/houses/herdweg/impressions/MKE_2042.JPG", ], [ "/images/houses/herdweg/impressions/MKE_1974.jpg", "/images/houses/herdweg/impressions/MKE_2027.jpg", ], [ "/images/houses/herdweg/impressions/MKE_2030.jpg", "/images/houses/herdweg/impressions/MKE_2034.JPG", ], [ "/images/houses/herdweg/impressions/MKE_2037.jpg", "/images/houses/herdweg/impressions/MKE_2038.JPG", ], ]; function nextFromPool(pool: string[], exclude: string) { const filtered = pool.filter((src) => src !== exclude); if (filtered.length === 0) return pool[0]; return filtered[Math.floor(Math.random() * filtered.length)]; } interface ImpressionsTileProps { pool: string[]; initialSrc: string; className?: string; } function ImpressionsTile({ pool, initialSrc, className = "" }: ImpressionsTileProps) { const [current, setCurrent] = useState(initialSrc); const [visible, setVisible] = useState(true); const rotate = useCallback(() => { setVisible(false); setTimeout(() => { setCurrent((prev) => nextFromPool(pool, prev)); setVisible(true); }, 700); }, [pool]); useEffect(() => { let timeout: NodeJS.Timeout; const schedule = () => { const delay = 6000 + Math.random() * 6000; timeout = setTimeout(() => { rotate(); schedule(); }, delay); }; schedule(); return () => clearTimeout(timeout); }, [rotate]); return (
{subtitle}