"use client"; import { useState, useEffect } from "react"; import { usePathname } from "next/navigation"; import Image from "next/image"; import "./Preloader.css"; interface PreloaderProps { children: React.ReactNode; } const Preloader = ({ children }: PreloaderProps) => { const [isLoading, setIsLoading] = useState(true); const [isMounted, setIsMounted] = useState(false); const [progress, setProgress] = useState(0); const pathname = usePathname(); // Initial mount - show preloader on first load useEffect(() => { setIsMounted(true); setIsLoading(true); setProgress(0); // Simulate loading progress const progressInterval = setInterval(() => { setProgress((prev) => { if (prev >= 90) { clearInterval(progressInterval); return 90; } return prev + Math.random() * 15 + 5; }); }, 50); // Complete loading after minimum duration const completeTimer = setTimeout(() => { setProgress(100); setTimeout(() => { setIsLoading(false); }, 200); }, 600); return () => { clearInterval(progressInterval); clearTimeout(completeTimer); }; }, []); // Handle route changes useEffect(() => { if (!isMounted) return; // Show preloader on route change setIsLoading(true); setProgress(0); // Simulate loading progress const progressInterval = setInterval(() => { setProgress((prev) => { if (prev >= 90) { clearInterval(progressInterval); return 90; } return prev + Math.random() * 20 + 10; }); }, 40); // Complete loading const completeTimer = setTimeout(() => { setProgress(100); setTimeout(() => { setIsLoading(false); }, 150); }, 400); return () => { clearInterval(progressInterval); clearTimeout(completeTimer); }; }, [pathname, isMounted]); return ( <> {isLoading && (
Digital Transformation Solutions
Powered by Advanced Technology