import {useEffect, useMemo, useState} from 'react' import {useRouter} from 'next/router' import PropTypes from 'prop-types' import {createMuiTheme, ThemeProvider} from '@material-ui/core/styles' import CssBaseline from '@material-ui/core/CssBaseline' import {Provider, useSession} from 'next-auth/client' import SwitchTheme from '../components/switch-theme' export default function MyApp(props) { const {Component, pageProps} = props const [darkMode, setDarkMode] = useState(false) const [switchFixed, setSwitchFixed] = useState(false) const darkTheme = useMemo(() => createMuiTheme({ palette: { type: darkMode ? 'dark' : 'light', primary: { light: '#81c784', main: '#4caf50', dark: '#388e3c', contrastText: '#fff' } } }), [darkMode]) useEffect(() => { const jssStyles = document.querySelector('#jss-server-side') if (jssStyles) { jssStyles.remove() } }, []) useEffect(() => { if (props.router.pathname.slice(0, 5) === '/teks') { setSwitchFixed(true) } else { setSwitchFixed(false) } }, [props]) useEffect(() => { const dark = localStorage.getItem('oki-dark') if (dark === 'false') { setDarkMode(false) } else { setDarkMode(true) } }, []) return ( {Component.auth ? ( ) : ( )} ) } function Auth({children}) { const [session, loading] = useSession() const isUser = Boolean(session?.user) const router = useRouter() useEffect(() => { if (loading) { return } if (!isUser) { router.push('/soumet') } }, [isUser, loading, router]) if (isUser) { return children } return (
Loading...
) } MyApp.propTypes = { Component: PropTypes.elementType.isRequired, pageProps: PropTypes.object.isRequired, router: PropTypes.object.isRequired } Auth.propTypes = { children: PropTypes.node.isRequired }