@fitch-digital/fitch-create-app
Version:
Boilerplate templates for FITCH projects
79 lines (68 loc) • 2.03 kB
JavaScript
import React from 'react';
import ReactDOM from 'react-dom';
import { HelmetProvider } from 'react-helmet-async';
import { Router } from 'react-router-dom';
import { Provider } from 'react-redux';
import { rehydrateMarks } from 'react-imported-component';
import Application from './application';
import history from './history';
import configure, {
makeStateImmutable,
rootSaga,
actionAppInit,
} from './store/config';
import './styles/index.scss';
export const hydrate = (app, element) => () => {
ReactDOM.hydrate(app, element);
};
export const start = ({ isProduction, document, module, hydrate }) => {
const lib = 'color:#666;font-size:x-small;font-weight:bold;';
const parameters = 'color:#777;font-size:x-small';
const values = 'color:#f33;font-size:x-small';
const node = process.env.NODE_ENV;
const name = process.env.NAME;
const api = process.env.API;
const args = [
`%c${name}\n%cnode: %c${node}\n%capi: %c${api}`,
lib,
parameters,
values,
parameters,
values,
];
console.log(...args);
// init redux store
const initialState = makeStateImmutable(global.__INITIAL_STATE__);
delete global.__INITIAL_STATE__;
const store = configure({
initialState,
});
store.runSaga(rootSaga);
store.dispatch(actionAppInit(global.location.pathname));
//
const element = document.getElementById('app');
const app = (
<HelmetProvider>
<Provider store={store}>
<Router history={history}>
<Application />
</Router>
</Provider>
</HelmetProvider>
);
if (isProduction) {
rehydrateMarks().then(hydrate(app, element));
} else {
ReactDOM.render(app, element);
}
if (module.hot) {
module.hot.accept();
}
};
const options = {
isProduction: process.env.NODE_ENV === 'production',
document: document,
module,
hydrate,
};
start(options);