'use client'
import { useState, useEffect } from 'react'
import { usePathname } from 'next/navigation'
import { LoadingScreen } from '@/components/loading-screen'
import { useScrollEffect } from '@/hooks/use-scroll-effect'
interface AppWrapperProps {
children: React.ReactNode
}
/** @description Client component wrapper that handles loading screen and scroll effects */
export function AppWrapper({ children }: AppWrapperProps) {
const [isLoading, setIsLoading] = useState(false)
const [hasLoadedOnce, setHasLoadedOnce] = useState(false)
const pathname = usePathname()
const isScrolled = useScrollEffect()
useEffect(() => {
// Only show loading screen on first visit to home page
if (pathname === '/' && !hasLoadedOnce) {
setIsLoading(true)
setHasLoadedOnce(true)
}
}, [pathname, hasLoadedOnce])
const handleLoadingComplete = () => {
setIsLoading(false)
}
useEffect(() => {
// Apply scroll class to header
const header = document.querySelector('.site-header')
if (header) {
if (isScrolled) {
header.classList.add('scrolled')
} else {
header.classList.remove('scrolled')
}
}
}, [isScrolled])
return (
<>
{isLoading &&