diff --git a/frontend/pages/_app.js b/frontend/pages/_app.js index 2a5fdade..c59df432 100644 --- a/frontend/pages/_app.js +++ b/frontend/pages/_app.js @@ -1,51 +1,69 @@ -import React from "react"; +/** @jsx jsx */ +import { jsx } from "@emotion/react"; +import { useEffect, useState } from "react"; import "/styles/styles.css"; +import "/styles/nprogress.css"; import "/styles/sidebar.css"; import "highlight.js/styles/github.css"; -import App from "next/app"; +import "react-mde/lib/styles/css/react-mde-all.css"; +import "focus-visible/dist/focus-visible"; import dynamic from "next/dynamic"; -import { QueryClient, QueryClientProvider } from "react-query"; -import HeadSEO from "../src/components/HeadSEO"; -import HeadLinks from "../src/components/HeadLinks"; +import { ReactQueryCacheProvider, QueryCache } from "react-query"; +import { ReactQueryDevtools } from "react-query-devtools"; +import { HeadSEO, HeadLinks } from "../src/components"; const AppContext = dynamic(() => import("../src/AppContext"), { ssr: false, }); -const DefaultLayout = dynamic(() => import("../src/layouts"), { - ssr: false, -}); -import router from "next/router"; +import DefaultLayout from "../src/layouts"; +import { useRouter } from "next/router"; +import NProgress from "nprogress"; -export default class CachingApp extends App { - constructor(props) { - super(props); - this.state = { queryClient: new QueryClient() }; - } +export default function CachingApp({ Component, pageProps }) { + const [queryCache] = useState(new QueryCache()); - render() { - const { Component, pageProps } = this.props; - const getLayout = - Component.getLayout || ((page) => {page}); + const router = useRouter(); - console.warn("rendering _app in path:,", router.asPath); - return ( - <> - - {pageProps.metaTags && } - {pageProps.preloads && } - - {getLayout()} - - - ); - } + useEffect(() => { + const handleStart = (url) => { + NProgress.start(); + }; + const handleStop = () => { + NProgress.done(); + }; + + router.events.on("routeChangeStart", handleStart); + router.events.on("routeChangeComplete", handleStop); + router.events.on("routeChangeError", handleStop); + + console.log("_app", router.asPath); + return () => { + router.events.off("routeChangeStart", handleStart); + router.events.off("routeChangeComplete", handleStop); + router.events.off("routeChangeError", handleStop); + }; + }, [router]); + const getLayout = + Component.getLayout || ((page) => {page}); + + return ( + <> + + {pageProps.metaTags && } + {pageProps.preloads && } + + + {getLayout()} + + + ); }