import '../styles/globals.css' import 'react-loading-skeleton/dist/skeleton.css' import NextProgress from 'next-progress' import { useRouter, Router } from 'next/router' import { AnimatePresence, motion } from 'framer-motion' import { Toaster } from 'react-hot-toast' import { QueryClient, QueryClientProvider } from 'react-query' import useDevice from '@/core/hooks/useDevice' import { useEffect, useState } from 'react' import LogoSpinner from '@/core/components/elements/Spinner/LogoSpinner' import { SessionProvider } from 'next-auth/react' import { ProductProvider } from '@/contexts/ProductContext' import { ProductCartProvider } from '@/contexts/ProductCartContext' import { ChakraProvider } from '@chakra-ui/react' import theme from '../../chakra.theme' const queryClient = new QueryClient() function MyApp({ Component, pageProps: { session, ...pageProps } }) { const router = useRouter() const { isMobile } = useDevice() const [animateLoader, setAnimateLoader] = useState(false) useEffect(() => { const handleRouteChangeStart = () => setAnimateLoader(true) const handleRouteChangeComplete = () => setAnimateLoader(false) Router.events.on('routeChangeStart', handleRouteChangeStart) Router.events.on('routeChangeComplete', handleRouteChangeComplete) Router.events.on('routeChangeError', handleRouteChangeComplete) return () => { Router.events.off('routeChangeStart', handleRouteChangeStart) Router.events.off('routeChangeComplete', handleRouteChangeComplete) Router.events.off('routeChangeError', handleRouteChangeComplete) } }, []) const [toasterStyle, setToasterStyle] = useState({}) useEffect(() => { let elems = document.querySelectorAll('nav') let totalNavHeight = 0 elems.forEach(function (elem) { totalNavHeight += elem.offsetHeight }) setToasterStyle({ marginTop: isMobile ? totalNavHeight - 8 : totalNavHeight }) }, [isMobile]) return ( {animateLoader && ( )} ) } export default MyApp