"use client" import React, { useEffect, useState, useCallback } from "react" import { motion, AnimatePresence, cubicBezier } from "framer-motion" import { useLocation } from "react-router-dom" import { useScrollContext } from './ScrollContext' interface PageTransitionProps { children: React.ReactNode } const customEase = cubicBezier(0.25, 0.1, 0.25, 1) const Logo = () => ( Logo ) const PageTransition = ({ children }: PageTransitionProps) => { const location = useLocation() const [showLogo, setShowLogo] = useState(false) const [showContent, setShowContent] = useState(true) const { setIsTransitioning } = useScrollContext() const [isAnimating, setIsAnimating] = useState(false) const resetScroll = useCallback(() => { window.scrollTo({ top: 0, behavior: 'instant' }) }, []) const startTransition = useCallback(() => { setIsAnimating(true) setIsTransitioning(true) setShowContent(false) setShowLogo(true) }, [setIsTransitioning]) const finishTransition = useCallback(() => { setShowContent(true) setShowLogo(false) setIsAnimating(false) setIsTransitioning(false) resetScroll() }, [setIsTransitioning, resetScroll]) useEffect(() => { const cleanup = () => { setShowLogo(false) setShowContent(true) setIsAnimating(false) setIsTransitioning(false) } if (location.pathname) { startTransition() const logoTimer = setTimeout(() => { setShowLogo(false) }, 800) const contentTimer = setTimeout(() => { finishTransition() }, 1000) return () => { clearTimeout(logoTimer) clearTimeout(contentTimer) cleanup() } } return cleanup }, [location.pathname, startTransition, finishTransition]) return (
{showLogo && (
)}
{showContent && (
{children}
)}
) } export default PageTransition