import { SWRConfig } from "swr"; import Script from "next/script"; 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 getSiteConfig, { SiteConfig } from "libs/getSiteConfig"; import "styles/globals.scss"; import { SeoHead, SeoHeadConfig } from "components/SeoHead"; export type NextPageWithLayout

= NextPage & { getLayout?: (page: ReactElement) => ReactNode; }; type AppPropsWithLayout = AppProps & { Component: NextPageWithLayout; pageProps: { fallback?: { [key: string]: any; }; siteConfig: SiteConfig; [key: string]: any; }; }; 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 handleRouteChange = (url: string) => { pageview(url); }; router.events.on("routeChangeComplete", handleRouteChange); router.events.on("hashChangeComplete", handleRouteChange); return () => { router.events.off("routeChangeComplete", handleRouteChange); router.events.off("hashChangeComplete", handleRouteChange); }; }, [router.events]); return ( <>