aboutsummaryrefslogtreecommitdiff
path: root/pages/_app.js
blob: 5303b71df45f453649341f95ae1ad723961f9755 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { useRouter } from "next/router";
import { AnimatePresence, motion as m } from "framer-motion";
import NextNProgress from "nextjs-progressbar";
import { SessionProvider } from "next-auth/react";
import "../styles/globals.css";
import "react-toastify/dist/ReactToastify.css";
import "react-loading-skeleton/dist/skeleton.css";
import { SkeletonTheme } from "react-loading-skeleton";
import SearchPalette from "../components/searchPalette";
import { SearchProvider } from "../lib/hooks/isOpenState";
import Head from "next/head";

export default function App({
  Component,
  pageProps: { session, ...pageProps },
}) {
  const router = useRouter();

  return (
    <>
      <Head>
        <meta
          name="viewport"
          content="minimum-scale=1, initial-scale=1, width=device-width, shrink-to-fit=no, user-scalable=no, viewport-fit=cover"
        />
      </Head>
      <SessionProvider session={session}>
        <SearchProvider>
          <AnimatePresence mode="wait">
            <SkeletonTheme baseColor="#232329" highlightColor="#2a2a32">
              <m.div
                key={`route-${router.route}`}
                transition={{ duration: 0.5 }}
                initial="initialState"
                animate="animateState"
                exit="exitState"
                variants={{
                  initialState: {
                    opacity: 0,
                  },
                  animateState: {
                    opacity: 1,
                  },
                  exitState: {},
                }}
                className="z-50 w-screen"
              >
                <NextNProgress
                  color="#FF7E2C"
                  startPosition={0.3}
                  stopDelayMs={200}
                  height={3}
                  showOnShallow={true}
                />
                <SearchPalette />
                <Component {...pageProps} />
              </m.div>
            </SkeletonTheme>
          </AnimatePresence>
        </SearchProvider>
      </SessionProvider>
    </>
  );
}