import { SWRConfig } from "swr"; import Script from "next/script"; import NProgress from "nprogress"; import type { NextPage } from "next"; import { useRouter } from "next/router"; import type { AppProps } from "next/app"; import App, { AppContext } from "next/app"; import { ReactElement, ReactNode, useEffect, useMemo } from "react"; import { get } from "libs/http"; import { pageview } from "libs/gtag"; import { Context } from "libs/context"; import { GA_TRACKING_ID } from "libs/config"; import Layout from "components/common/Layout"; import { SeoHead, SeoHeadConfig } from "components/SeoHead"; import getSiteConfig, { SiteConfig } from "libs/getSiteConfig"; import "nprogress/nprogress.css"; import "styles/globals.scss"; export type NextPageWithLayout
= NextPage
& {
getLayout?: (page: ReactElement) => ReactNode;
};
type AppPropsWithLayout = AppProps & {
Component: NextPageWithLayout;
pageProps: {
fallback?: Docs;
siteConfig: SiteConfig;
};
};
const MyApp = ({ Component, pageProps }: AppPropsWithLayout) => {
const { fallback, genre, siteConfig, ...otherProps } = pageProps;
const router = useRouter();
const seoConfig: SeoHeadConfig = useMemo(() => {
return {
title: siteConfig.title,
description: siteConfig.description,
keywords: siteConfig.keywords,
url: `https://${siteConfig.host}`,
canonical: `https://${siteConfig.host}`,
jsonLd: JSON.stringify(siteConfig.jsonLd),
siteName: siteConfig.siteName,
img: siteConfig.touchIcon,
};
}, [
siteConfig.description,
siteConfig.host,
siteConfig.jsonLd,
siteConfig.keywords,
siteConfig.siteName,
siteConfig.title,
siteConfig.touchIcon,
]);
useEffect(() => {
const handleStart = () => {
NProgress.start();
};
const handleStop = () => {
NProgress.done();
};
const handleError = (url: string) => {
pageview(url);
handleStop();
};
router.events.on("routeChangeStart", handleStart);
router.events.on("routeChangeComplete", handleStop);
router.events.on("routeChangeError", handleError);
return () => {
router.events.off("routeChangeStart", handleStart);
router.events.off("routeChangeComplete", handleStop);
router.events.off("routeChangeError", handleError);
};
}, [router]);
return (
<>