import React, { useState, useCallback, useMemo } from 'react'; import { MessageCircle, Users, MapPin, Award } from 'lucide-react'; import { popularTrips } from '@/data/popularTrips'; import { weekendTrips } from '@/data/weekendTrips'; import { internationalTours } from '@/data/internationalTours'; import { honeymoonPackages } from '@/data/honeymoonPackages'; import { ladakhBikingTrips, ladakhSUVTrips } from '@/data/ladakhTrips'; import { offBeatTrips } from '@/data/offBeatTrips'; import BannerSearchBar from './banner/BannerSearchBar'; import StatsCounter from './banner/StatsCounter'; import ProgressiveImage from './ProgressiveImage'; import { useIsMobile } from '@/hooks/use-mobile'; import { enhancedPerformanceService } from '@/services/enhancedPerformanceService'; interface OptimizedBannerProps { onSearch: (query: string) => void; } const OptimizedBanner: React.FC = React.memo(({ onSearch }) => { const [currentImageIndex, setCurrentImageIndex] = useState(0); const isMobile = useIsMobile(); // Memoize trip data aggregation const allTrips = useMemo(() => [ ...popularTrips, ...weekendTrips, ...internationalTours, ...honeymoonPackages, ...ladakhBikingTrips, ...ladakhSUVTrips, ...offBeatTrips ], []); // Optimized banner images with priority loading const bannerImages = useMemo(() => [ 'https://images.unsplash.com/photo-1493246507139-91e8fad9978e?auto=format&fit=crop&w=2000&q=90&fm=webp', 'https://images.unsplash.com/photo-1571401835393-8c5f35328320?auto=format&fit=crop&w=2000&q=90&fm=webp', 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?auto=format&fit=crop&w=2000&q=90&fm=webp', 'https://images.unsplash.com/photo-1506197603052-3cc9c3a201bd?auto=format&fit=crop&w=2000&q=90&fm=webp' ], []); // Preload next images when current changes React.useEffect(() => { enhancedPerformanceService.preloadNextImages(bannerImages, currentImageIndex); }, [currentImageIndex, bannerImages]); // Optimized image rotation React.useEffect(() => { const interval = setInterval(() => { setCurrentImageIndex((prevIndex) => (prevIndex + 1) % bannerImages.length); }, 5000); return () => clearInterval(interval); }, [bannerImages.length]); const handleImageChange = useCallback((index: number) => { setCurrentImageIndex(index); }, []); return (
{/* Optimized Image Slider */}
{bannerImages.map((image, index) => (
))} {/* Gradient Overlay */}
{/* Content */}

Discover Incredible Destinations

{/* Stats Counters */}
{/* Image Navigation Dots */}
{bannerImages.map((_, index) => (
); }); OptimizedBanner.displayName = 'OptimizedBanner'; export default OptimizedBanner;