diff options
| author | Rafi Zadanly <zadanlyr@gmail.com> | 2023-04-10 16:29:48 +0700 |
|---|---|---|
| committer | Rafi Zadanly <zadanlyr@gmail.com> | 2023-04-10 16:29:48 +0700 |
| commit | 8dea9e9242aca8bf003a7c2f69c96abafbf77e6d (patch) | |
| tree | d53523924e6d8382876b8182a0724a54e6316734 /src/pages | |
| parent | 98910cc03fe1c4779396a5e376184c5d4f5b86b4 (diff) | |
page loader
Diffstat (limited to 'src/pages')
| -rw-r--r-- | src/pages/_app.jsx | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx index 634e631f..6906cb92 100644 --- a/src/pages/_app.jsx +++ b/src/pages/_app.jsx @@ -1,11 +1,13 @@ import '../styles/globals.css' import NextProgress from 'next-progress' -import { useRouter } from 'next/router' +import { useRouter, Router } from 'next/router' import { AnimatePresence } 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 Image from 'next/image' +import IndoteknikLogo from '@/images/LOGO-INDOTEKNIK-GEAR.png' const queryClient = new QueryClient() @@ -13,6 +15,18 @@ function MyApp({ Component, pageProps }) { const router = useRouter() const { isMobile } = useDevice() + const [animateLoader, setAnimateLoader] = useState(false) + + useEffect(() => { + Router.events.on('routeChangeStart', () => setAnimateLoader(true)) + Router.events.on('routeChangeComplete', () => setAnimateLoader(false)) + + return () => { + Router.events.off('routeChangeStart', () => setAnimateLoader(true)) + Router.events.off('routeChangeComplete', () => setAnimateLoader(false)) + } + }, []) + const [toasterStyle, setToasterStyle] = useState({}) useEffect(() => { @@ -30,6 +44,17 @@ function MyApp({ Component, pageProps }) { return ( <> + {animateLoader && ( + <div className='w-screen h-screen z-[500] flex justify-center items-center backdrop-blur'> + <Image + src={IndoteknikLogo} + alt='Indoteknik Logo' + width={64} + height={64} + className='page-loader' + /> + </div> + )} <Toaster position='top-center' containerStyle={toasterStyle} @@ -45,7 +70,7 @@ function MyApp({ Component, pageProps }) { initial={false} onExitComplete={() => window.scrollTo(0, 0)} > - <Component {...pageProps} key={router.asPath} /> + {!animateLoader && <Component {...pageProps} key={router.asPath} />} </AnimatePresence> </QueryClientProvider> </> |
