2021-01-22 03:43:42 +01:00
|
|
|
import type { AppProps } from 'next/app';
|
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';
|
2021-09-19 03:01:10 +02:00
|
|
|
|
2021-09-03 13:32:12 +02:00
|
|
|
import '../assets/style.css';
|
2021-09-19 02:21:42 +02:00
|
|
|
import { 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';
|
|
|
|
|
2021-09-19 03:01:10 +02:00
|
|
|
import CustomHead from '../components/CustomHead';
|
|
|
|
import Layout from '../components/layout';
|
|
|
|
|
2021-01-22 03:43:42 +01:00
|
|
|
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>
|
2021-09-19 02:21:42 +02:00
|
|
|
<CustomHead />
|
2021-01-28 07:07:25 +01:00
|
|
|
<Layout>
|
|
|
|
<Component {...pageProps} />
|
|
|
|
</Layout>
|
|
|
|
</ScreenProvider>
|
|
|
|
</StoreProvider>
|
|
|
|
</>
|
2021-01-22 03:43:42 +01:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default App;
|