oxen-website/pages/_app.tsx

81 lines
2.2 KiB
TypeScript
Raw Normal View History

2021-01-22 03:43:42 +01:00
import type { AppProps } from 'next/app';
import Head from 'next/head';
2021-02-08 01:20:21 +01:00
import { useRouter } from 'next/router';
2021-01-22 03:43:42 +01:00
import React, { useEffect } from 'react';
import { Provider as StoreProvider } from 'react-redux';
import { createStore } from 'redux';
import '../assets/style.css';
2021-01-22 03:43:42 +01:00
import Layout from '../components/layout';
2021-02-08 01:20:21 +01:00
import { METADATA, NAVIGATION } from '../constants';
2021-01-22 03:43:42 +01:00
import ScreenProvider from '../contexts/screen';
2021-02-12 04:31:46 +01:00
import {
collapseMobileHeader,
collapseSideMenu,
PageType,
setPageType,
} from '../state/navigation';
2021-01-22 03:43:42 +01:00
import { rootReducer } from '../state/reducers';
const store = createStore(rootReducer);
function App({ Component, pageProps }: AppProps) {
2021-02-08 01:20:21 +01:00
const router = useRouter();
const handleLocationChange = url => {
// Break out of split view
2021-02-09 05:31:56 +01:00
const onBlog = NAVIGATION.BLOG_REGEX.test(url);
const onPost = NAVIGATION.POST_REGEX.test(url);
2021-02-08 03:24:23 +01:00
2021-02-09 05:31:56 +01:00
const pageType = onBlog
? PageType.BLOG
: onPost
? PageType.POST
: PageType.NORMAL;
2021-02-08 03:24:23 +01:00
2021-02-09 05:31:56 +01:00
store.dispatch(setPageType(pageType));
2021-02-08 01:20:21 +01:00
store.dispatch(collapseSideMenu());
2021-02-12 04:31:46 +01:00
store.dispatch(collapseMobileHeader());
2021-02-08 01:20:21 +01:00
};
2021-02-05 04:15:36 +01:00
useEffect(() => {
// Set all pages on app load
2021-02-10 09:38:27 +01:00
// store.dispatch(setSplitPagesContent(pages));
2021-02-08 01:20:21 +01:00
store.dispatch(collapseSideMenu());
handleLocationChange(router.pathname);
2021-02-05 04:15:36 +01:00
}, []);
2021-02-04 06:42:15 +01:00
// Close side menu on page changed
2021-01-22 03:43:42 +01:00
useEffect(() => {
2021-02-08 01:20:21 +01:00
router.events.on('routeChangeComplete', handleLocationChange);
return () => {
router.events.off('routeChangeComplete', handleLocationChange);
};
}, []);
2021-01-22 03:43:42 +01:00
return (
2021-01-28 07:07:25 +01:00
<>
<StoreProvider store={store}>
<ScreenProvider>
<Head>
2021-09-19 01:50:37 +02:00
<title>{METADATA.TITLE}</title>
2021-01-28 07:07:25 +01:00
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1"
></meta>
<meta property="og:site_name" content="Oxen" key="ogsitename" />
<meta property="og:locale" content="en_US" />
2021-05-03 06:22:54 +02:00
<meta name="apple-itunes-app" content="app-id=1547745078" />
2021-01-28 07:07:25 +01:00
</Head>
<Layout>
<Component {...pageProps} />
</Layout>
</ScreenProvider>
</StoreProvider>
</>
2021-01-22 03:43:42 +01:00
);
}
export default App;