diff --git a/examples/real-world/components/Explore.js b/examples/real-world/components/Explore.js index 7b46b75c69..efd4356ba1 100644 --- a/examples/real-world/components/Explore.js +++ b/examples/real-world/components/Explore.js @@ -50,6 +50,9 @@ export default class Explore extends Component {

Code on Github.

+

+ Move the DevTools with Ctrl+W or hide them with Ctrl+H. +

); } diff --git a/examples/real-world/containers/DevTools.js b/examples/real-world/containers/DevTools.js new file mode 100644 index 0000000000..f5fbd3a5d2 --- /dev/null +++ b/examples/real-world/containers/DevTools.js @@ -0,0 +1,11 @@ +import React from 'react'; +import { createDevTools } from 'redux-devtools'; +import LogMonitor from 'redux-devtools-log-monitor'; +import DockMonitor from 'redux-devtools-dock-monitor'; + +export default createDevTools( + + + +); diff --git a/examples/real-world/containers/Root.dev.js b/examples/real-world/containers/Root.dev.js new file mode 100644 index 0000000000..0d0ad50fc2 --- /dev/null +++ b/examples/real-world/containers/Root.dev.js @@ -0,0 +1,22 @@ +import React, { Component, PropTypes } from 'react'; +import { Provider } from 'react-redux'; +import { ReduxRouter } from 'redux-router'; +import DevTools from './DevTools'; + +export default class Root extends Component { + render() { + const { store } = this.props; + return ( + +
+ + +
+
+ ); + } +} + +Root.propTypes = { + store: PropTypes.object.isRequired +}; diff --git a/examples/real-world/containers/Root.js b/examples/real-world/containers/Root.js new file mode 100644 index 0000000000..9cea0b2263 --- /dev/null +++ b/examples/real-world/containers/Root.js @@ -0,0 +1,5 @@ +if (process.env.NODE_ENV === 'production') { + module.exports = require('./Root.prod'); +} else { + module.exports = require('./Root.dev'); +} diff --git a/examples/real-world/containers/Root.prod.js b/examples/real-world/containers/Root.prod.js new file mode 100644 index 0000000000..4d40c6dbcd --- /dev/null +++ b/examples/real-world/containers/Root.prod.js @@ -0,0 +1,18 @@ +import React, { Component, PropTypes } from 'react'; +import { Provider } from 'react-redux'; +import { ReduxRouter } from 'redux-router'; + +export default class Root extends Component { + render() { + const { store } = this.props; + return ( + + + + ); + } +} + +Root.propTypes = { + store: PropTypes.object.isRequired +}; diff --git a/examples/real-world/createDevToolsWindow.js b/examples/real-world/createDevToolsWindow.js deleted file mode 100644 index 97c26b562c..0000000000 --- a/examples/real-world/createDevToolsWindow.js +++ /dev/null @@ -1,39 +0,0 @@ -import React from 'react'; -import { render } from 'react-dom'; -import { DevTools, DebugPanel, LogMonitor } from 'redux-devtools/lib/react'; - -/* - * Puts Redux DevTools into a separate window. - * Based on https://gist.github.com/tlrobinson/1e63d15d3e5f33410ef7#gistcomment-1560218. - */ -export default function createDevToolsWindow(store) { - // Give it a name so it reuses the same window - const name = 'Redux DevTools'; - const win = window.open( - null, - name, - 'menubar=no,location=no,resizable=yes,scrollbars=no,status=no,width=450,height=5000' - ); - - if (!win) { - console.error( // eslint-disable-line no-console - 'Couldn\'t open Redux DevTools due to a popup blocker. ' + - 'Please disable the popup blocker for the current page.' - ); - return; - } - - // Reload in case it's reusing the same window with the old content. - win.location.reload(); - - // Set visible Window title. - win.document.title = name; - - // Wait a little bit for it to reload, then render. - setTimeout(() => render( - - - , - win.document.body.appendChild(document.createElement('div')) - ), 10); -} diff --git a/examples/real-world/index.js b/examples/real-world/index.js index b961ea7ae2..251b9e017e 100644 --- a/examples/real-world/index.js +++ b/examples/real-world/index.js @@ -1,23 +1,12 @@ import 'babel-core/polyfill'; import React from 'react'; import { render } from 'react-dom'; -import { Provider } from 'react-redux'; -import { ReduxRouter } from 'redux-router'; +import Root from './containers/Root'; import configureStore from './store/configureStore'; const store = configureStore(); render( - - - , + , document.getElementById('root') ); - -if (process.env.NODE_ENV !== 'production') { - // Use require because imports can't be conditional. - // In production, you should ensure process.env.NODE_ENV - // is envified so that Uglify can eliminate this - // module and its dependencies as dead code. - require('./createDevToolsWindow')(store); -} diff --git a/examples/real-world/package.json b/examples/real-world/package.json index 912839e8d9..be1e9b21d7 100644 --- a/examples/real-world/package.json +++ b/examples/real-world/package.json @@ -20,8 +20,8 @@ "isomorphic-fetch": "^2.1.1", "lodash": "^3.10.1", "normalizr": "^1.0.0", - "react": "^0.14.0-rc1", - "react-dom": "^0.14.0-rc1", + "react": "^0.14.0", + "react-dom": "^0.14.0", "react-redux": "^2.1.2", "react-router": "^1.0.0-rc1", "redux": "^3.0.0", @@ -32,11 +32,13 @@ "devDependencies": { "babel-core": "^5.6.18", "babel-loader": "^5.1.4", - "redux-devtools": "^2.1.5", "babel-plugin-react-transform": "^1.1.0", "concurrently": "^0.1.1", "express": "^4.13.3", "react-transform-hmr": "^1.0.0", + "redux-devtools": "^3.0.0-beta-3", + "redux-devtools-dock-monitor": "^1.0.0-beta-3", + "redux-devtools-log-monitor": "^1.0.0-beta-3", "webpack": "^1.9.11", "webpack-dev-middleware": "^1.2.0", "webpack-hot-middleware": "^2.2.0" diff --git a/examples/real-world/store/configureStore.dev.js b/examples/real-world/store/configureStore.dev.js new file mode 100644 index 0000000000..04fbc4377d --- /dev/null +++ b/examples/real-world/store/configureStore.dev.js @@ -0,0 +1,30 @@ +import { createStore, applyMiddleware, compose } from 'redux'; +import { reduxReactRouter } from 'redux-router'; +import DevTools from '../containers/DevTools'; +import createHistory from 'history/lib/createBrowserHistory'; +import routes from '../routes'; +import thunk from 'redux-thunk'; +import api from '../middleware/api'; +import createLogger from 'redux-logger'; +import rootReducer from '../reducers'; + +const finalCreateStore = compose( + applyMiddleware(thunk, api), + reduxReactRouter({ routes, createHistory }), + applyMiddleware(createLogger()), + DevTools.instrument() +)(createStore); + +export default function configureStore(initialState) { + const store = finalCreateStore(rootReducer, initialState); + + if (module.hot) { + // Enable Webpack hot module replacement for reducers + module.hot.accept('../reducers', () => { + const nextRootReducer = require('../reducers'); + store.replaceReducer(nextRootReducer); + }); + } + + return store; +} diff --git a/examples/real-world/store/configureStore.js b/examples/real-world/store/configureStore.js index f79c9e028a..78c9ea1fdc 100644 --- a/examples/real-world/store/configureStore.js +++ b/examples/real-world/store/configureStore.js @@ -1,30 +1,5 @@ -import { createStore, applyMiddleware, compose } from 'redux'; -import { reduxReactRouter } from 'redux-router'; -import { devTools } from 'redux-devtools'; -import createHistory from 'history/lib/createBrowserHistory'; -import routes from '../routes'; -import thunk from 'redux-thunk'; -import api from '../middleware/api'; -import createLogger from 'redux-logger'; -import rootReducer from '../reducers'; - -const finalCreateStore = compose( - applyMiddleware(thunk, api), - reduxReactRouter({ routes, createHistory }), - applyMiddleware(createLogger()), - devTools() -)(createStore); - -export default function configureStore(initialState) { - const store = finalCreateStore(rootReducer, initialState); - - if (module.hot) { - // Enable Webpack hot module replacement for reducers - module.hot.accept('../reducers', () => { - const nextRootReducer = require('../reducers'); - store.replaceReducer(nextRootReducer); - }); - } - - return store; +if (process.env.NODE_ENV === 'production') { + module.exports = require('./configureStore.prod'); +} else { + module.exports = require('./configureStore.dev'); } diff --git a/examples/real-world/store/configureStore.prod.js b/examples/real-world/store/configureStore.prod.js new file mode 100644 index 0000000000..173f657b3a --- /dev/null +++ b/examples/real-world/store/configureStore.prod.js @@ -0,0 +1,16 @@ +import { createStore, applyMiddleware, compose } from 'redux'; +import { reduxReactRouter } from 'redux-router'; +import createHistory from 'history/lib/createBrowserHistory'; +import routes from '../routes'; +import thunk from 'redux-thunk'; +import api from '../middleware/api'; +import rootReducer from '../reducers'; + +const finalCreateStore = compose( + applyMiddleware(thunk, api), + reduxReactRouter({ routes, createHistory }) +)(createStore); + +export default function configureStore(initialState) { + return finalCreateStore(rootReducer, initialState); +}