// eslint-disable-next-line import App, { AppProps } from 'next/app' import Head from 'next/head' // eslint-disable-next-line import { ComponentType, useEffect, useState } from 'react' import withRedux from 'next-redux-wrapper' import { Provider } from 'react-redux' import { fromJS } from 'immutable' import { configureStore } from '../redux/store' import { Store } from 'redux' import { ThemeProvider } from '@material-ui/core/styles' import CssBaseline from '@material-ui/core/CssBaseline' import theme from '../components/assets/theme' import { restoreState } from '../redux/persisted.store' import { doLoginAuto } from '../redux/auth/service' import getConfig from 'next/config' const config = getConfig().publicRuntimeConfig interface Props { Component: ComponentType pageProps: any } export const PageLoader = ({ Component, pageProps }: Props) => { const [state, setState] = useState({ aframeReady: false }) useEffect(() => { if (typeof window !== 'undefined') { require('aframe') setState({ ...state, aframeReady: true }) } }, []) return } interface MyAppProps extends AppProps { store: Store } class MyApp extends App { componentDidMount() { const jssStyles = document.querySelector('#jss-server-side') if (jssStyles && jssStyles.parentNode) { jssStyles.parentNode.removeChild(jssStyles) } this.props.store.dispatch(restoreState()) doLoginAuto(this.props.store.dispatch) } render() { const { Component, pageProps, store } = this.props return ( <> {config.title} ) } } export default withRedux(configureStore, { serializeState: (state) => state.toJS(), deserializeState: (state) => fromJS(state) })(MyApp)