| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | 
							- import React from 'react';
 
- import configureStore from './store.js';
 
- import { readState, saveState } from './persisted.store.cookies.js';
 
- const isServer = typeof window === 'undefined';
 
- const __NEXT_REDUX_STORE__ = '__NEXT_REDUX_STORE__';
 
- function getOrCreateStore(initialState) {
 
-     // Always make a new store if server, otherwise state is shared between requests
 
-     if (isServer) {
 
-         return configureStore(initialState);
 
-     }
 
-     // Create store if unavailable on the client and set it on the window object
 
-     if (!window[__NEXT_REDUX_STORE__]) {
 
-         window[__NEXT_REDUX_STORE__] = configureStore(initialState);
 
-     }
 
-     return window[__NEXT_REDUX_STORE__];
 
- }
 
- const AppFn = App => {
 
-     return class AppWithRedux extends React.Component {
 
-         static async getInitialProps(appContext) {
 
-             let initialState = appContext.ctx.req
 
-                 ? readState(appContext.ctx.req.headers.cookie)
 
-                 : {};
 
-             // Get or Create the store with `undefined` as initialState
 
-             // This allows you to set a custom default initialState
 
-             const reduxStore = getOrCreateStore(initialState);
 
-             // Provide the store to getInitialProps of pages
 
-             appContext.ctx.reduxStore = reduxStore;
 
-             let appProps = {};
 
-             if (typeof App.getInitialProps === 'function') {
 
-                 appProps = await App.getInitialProps(appContext);
 
-             }
 
-             return {
 
-                 ...appProps,
 
-                 initialReduxState: reduxStore.getState()
 
-             };
 
-         }
 
-         constructor(props) {
 
-             super(props);
 
-             this.reduxStore = getOrCreateStore(props.initialReduxState);
 
-         }
 
-         render() {
 
-             return <App {...this.props} reduxStore={this.reduxStore} />;
 
-         }
 
-     };
 
- };
 
- export default AppFn;
 
 
  |