import { useEffect } from 'react'; import Head from 'next/head'; import { HyperglassProvider } from '~/context'; import { useGoogleAnalytics } from '~/hooks'; import { IConfig } from '~/types'; import type { AppProps, AppInitialProps, AppContext } from 'next/app'; if (process.env.NODE_ENV === 'development') { require('@hookstate/devtools'); } type TApp = { config: IConfig }; type GetInitialPropsReturn = AppProps & AppInitialProps & { appProps: IP }; type NextApp = React.FC> & { getInitialProps(c?: AppContext): Promise<{ appProps: IP }>; }; const App: NextApp = (props: GetInitialPropsReturn) => { const { Component, pageProps, appProps, router } = props; const { config } = appProps; const { initialize, trackPage } = useGoogleAnalytics(); initialize(config.google_analytics, config.developer_mode); useEffect(() => { router.events.on('routeChangeComplete', trackPage); }, [router.events, trackPage]); return ( <> hyperglass ); }; App.getInitialProps = async function getInitialProps() { const config = process.env._HYPERGLASS_CONFIG_ as unknown as IConfig; return { appProps: { config } }; }; export default App;