| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import {
- Hydrate,
- QueryClient,
- QueryClientProvider,
- } from '@tanstack/react-query';
- import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
- import { SessionProvider } from 'next-auth/react';
- import { appWithTranslation } from 'next-i18next';
- import Head from 'next/head';
- import { useState } from 'react';
- import Layout from '../components/layout/base-layout/Layout';
- import '../styles/globals.css';
-
- import { useRouter } from 'next/router';
- import { useEffect } from 'react';
-
- const LoadingSpinner = () => {
- const router = useRouter();
-
- const [loading, setLoading] = useState(false);
-
- useEffect(() => {
- const handleStart = (url) => url !== router.asPath && setLoading(true);
- const handleComplete = (url) => url === router.asPath && setLoading(false);
-
- router.events.on('routeChangeStart', handleStart);
- router.events.on('routeChangeComplete', handleComplete);
- router.events.on('routeChangeError', handleComplete);
-
- return () => {
- router.events.off('routeChangeStart', handleStart);
- router.events.off('routeChangeComplete', handleComplete);
- router.events.off('routeChangeError', handleComplete);
- };
- });
-
- return (
- loading && (
- <div className="spinner-wrapper">
- <div className="spinner"></div>
- </div>
- )
- );
- };
-
- function MyApp({ Component, pageProps: { session, ...pageProps } }) {
- const [queryClient] = useState(() => new QueryClient());
-
- return (
- <QueryClientProvider client={queryClient}>
- <Hydrate state={pageProps.dehydratedState}>
- <SessionProvider session={session}>
- <Layout>
- <Head>
- <title>NextJS template</title>
- <meta name="description" content="NextJS template" />
- <meta
- name="viewport"
- content="width=device-width, initial-scale=1"
- />
- </Head>
- <LoadingSpinner />
- <Component {...pageProps} />
- </Layout>
- </SessionProvider>
- <ReactQueryDevtools initialIsOpen={false} />
- </Hydrate>
- </QueryClientProvider>
- );
- }
-
- MyApp.getInitialProps = async ({ Component, ctx }) => {
- let pageProps = {};
-
- if (Component.getInitialProps) {
- pageProps = await Component.getInitialProps(ctx);
- }
-
- return {
- pageProps,
- };
- };
-
- export default appWithTranslation(MyApp);
|