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),
};
}, [siteConfig.description, siteConfig.host, siteConfig.jsonLd, siteConfig.keywords, siteConfig.title]);
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 (
<>