'use client' import { useEffect } from 'react' import { usePathname, useSearchParams } from 'next/navigation' import NProgress from 'nprogress' import 'nprogress/nprogress.css' // Configuration de NProgress NProgress.configure({ showSpinner: false, // Masquer le spinner trickleSpeed: 200, // Vitesse d'animation minimum: 0.3, // Valeur minimum easing: 'ease', // Type d'animation speed: 500, // Durée de l'animation trickle: true // Animation progressive }) export default function ProgressBar() { const pathname = usePathname() const searchParams = useSearchParams() useEffect(() => { // Terminer la barre de progression quand la route change NProgress.done() }, [pathname, searchParams]) useEffect(() => { // Démarrer la barre de progression pour les navigations const handleStart = () => NProgress.start() const handleStop = () => NProgress.done() // Écouter les événements de navigation (pour les liens) const handleClick = (e: MouseEvent) => { const target = e.target as HTMLElement const anchor = target.closest('a') if (anchor && anchor.href) { const url = new URL(anchor.href) const currentUrl = new URL(window.location.href) // Si c'est une navigation vers une autre page de notre app if (url.origin === currentUrl.origin && url.pathname !== currentUrl.pathname) { NProgress.start() } } } // Écouter les clics sur les liens document.addEventListener('click', handleClick) // Écouter les changements d'historique (boutons précédent/suivant) window.addEventListener('popstate', handleStart) return () => { document.removeEventListener('click', handleClick) window.removeEventListener('popstate', handleStart) } }, []) return null }