"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 && (
{/* Geometric background pattern */}
{/* Logo with professional wrapper */}
GNX Logo
{/* Enterprise branding */}

GNX Enterprise

Digital Transformation Solutions

{/* Professional progress indicator */}
Loading {Math.round(progress)}%
{/* Professional loading indicator */}
{/* Corporate footer */}

Powered by Advanced Technology

)}
{children}
); }; export default Preloader;