diff --git a/frontend/index.js b/frontend/index.js deleted file mode 100644 index 49b8ad9288..0000000000 --- a/frontend/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import { run } from './router'; - -if (typeof window !== 'undefined') { - run(); -} diff --git a/frontend/index.jsx b/frontend/index.jsx new file mode 100644 index 0000000000..1037c26786 --- /dev/null +++ b/frontend/index.jsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Provider } from 'react-redux'; +import { render } from 'react-dom'; +import routes from './router'; +import store from './redux/store'; + +if (typeof window !== 'undefined') { + const { document } = global; + const app = document.getElementById('app'); + const reactReduxApp = ( + + {routes} + + ); + + render(reactReduxApp, app); +} diff --git a/frontend/redux/nodes/app/reducer.js b/frontend/redux/nodes/app/reducer.js new file mode 100644 index 0000000000..4ba4a58ef9 --- /dev/null +++ b/frontend/redux/nodes/app/reducer.js @@ -0,0 +1,5 @@ +const reducer = (state = {}) => { + return state; +}; + +export default reducer; diff --git a/frontend/redux/reducers.js b/frontend/redux/reducers.js new file mode 100644 index 0000000000..05cd81adae --- /dev/null +++ b/frontend/redux/reducers.js @@ -0,0 +1,8 @@ +import { combineReducers } from 'redux'; +import { routerReducer } from 'react-router-redux'; +import app from './nodes/app/reducer'; + +export default combineReducers({ + app, + routing: routerReducer, +}); diff --git a/frontend/redux/store.js b/frontend/redux/store.js new file mode 100644 index 0000000000..a23af5da3a --- /dev/null +++ b/frontend/redux/store.js @@ -0,0 +1,19 @@ +import { createStore, applyMiddleware, compose } from 'redux'; +import thunkMiddleware from 'redux-thunk'; +import { browserHistory } from 'react-router'; +import { routerMiddleware } from 'react-router-redux'; +import reducers from './reducers'; + +const initialState = {}; +const middleware = [ + thunkMiddleware, + routerMiddleware(browserHistory), +]; +const appliedMiddleware = applyMiddleware(...middleware); + +const store = createStore( + reducers, + initialState, + compose(appliedMiddleware), +); +export default store; diff --git a/frontend/router/index.jsx b/frontend/router/index.jsx index d905d1d4df..5c6a6226a6 100644 --- a/frontend/router/index.jsx +++ b/frontend/router/index.jsx @@ -1,35 +1,15 @@ import React from 'react'; -import { render } from 'react-dom'; import { Router, Route, browserHistory } from 'react-router'; -import { Promise } from 'when'; +import { syncHistoryWithStore } from 'react-router-redux'; import App from '../components/app'; +import store from '../redux/store'; -const window = global.window || {}; -const document = global.document || {}; +const history = syncHistoryWithStore(browserHistory, store); -export function run() { - window.Promise = window.Promise || Promise; - window.self = window; +const routes = ( + + + +); - const router = ( - - - - ); - - render(router, document.getElementById('app')); -} - -// Style live reloading -if (module.hot) { - let c = 0; - module.hot.accept('#css', () => { - const a = document.createElement('a'); - const link = document.querySelector('link[rel="stylesheet"]'); - a.href = link.href; - a.search = `?${c++}`; - link.href = a.href; - }); -} - -export default { run }; +export default routes; diff --git a/package.json b/package.json index 88783cd920..9594c12a97 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,11 @@ "proxy-middleware": "^0.15.0", "react": "^15.2.1", "react-dom": "^15.2.1", - "react-router": "^2.6.1", + "react-redux": "^4.4.5", + "react-router": "^2.7.0", + "react-router-redux": "^4.0.5", + "redux": "^3.6.0", + "redux-thunk": "^2.1.0", "style-loader": "^0.13.0", "stylus-loader": "1.5.1", "webpack": "1.13.1", diff --git a/webpack.config.js b/webpack.config.js index bf4ccd26dc..32c9bd2817 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -38,7 +38,7 @@ var repo = __dirname var config = { entry: { - bundle: path.join(repo, 'frontend/index.js') + bundle: path.join(repo, 'frontend/index.jsx') }, output: { path: path.join(repo, 'build'),