Skip to content

Commit

Permalink
Add routing middleware
Browse files Browse the repository at this point in the history
  • Loading branch information
tomraithel committed Feb 21, 2017
1 parent 517df35 commit 61d46f9
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 21 deletions.
16 changes: 2 additions & 14 deletions js/actions.js
Original file line number Diff line number Diff line change
@@ -1,23 +1,11 @@
import createHistory from 'history/createBrowserHistory';

export const NAVIGATE = 'navigate';

let history;
if (process.env.RENDER_MODE !== 'server') {
history = createHistory();

const unlisten = history.listen((location, action) => {
// location is an object like window.location
console.log(action, location.pathname, location.state)
});
}

const actions = {
navigate: (pageName) => {
history.push(`${pageName}.html`);
navigate: (pageName, pushToHistory = true) => {
return {
type: NAVIGATE,
pageName,
pushToHistory,
};
},
};
Expand Down
42 changes: 35 additions & 7 deletions js/client.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,38 @@
import React from 'react'
import { render } from 'react-dom'
import { createStore } from 'redux'
import { Provider } from 'react-redux'
import App from './components/App'
import appReducer from './reducer'
import React from 'react';
import { render } from 'react-dom';
import { createStore, applyMiddleware } from 'redux';
import { Provider } from 'react-redux';
import createHistory from 'history/createBrowserHistory';
import App from './components/App';
import appReducer from './reducer';
import actions, { NAVIGATE } from './actions';

// Remove .html and map / to index
const getPageNameFromPath = (path) => {
if (path === '/') {
return 'index';
}
return path.substring(1, path.length - 5);
}

const historyManager = store => {
const history = createHistory();

// If browser-back button is pressed, provide new pageName to store
history.listen((location, action) => {
if (action === 'POP') {
const pageName = getPageNameFromPath(location.pathname);
store.dispatch(actions.navigate(pageName, false))
}
});

return next => action => {
if(action.type === NAVIGATE && action.pushToHistory === true) {
history.push(`${action.pageName}.html`);
}
return next(action);
}
}

// Grab the state from a global variable injected into the server-generated HTML
const preloadedState = window.__TECHRADAR__;
Expand All @@ -13,7 +41,7 @@ const preloadedState = window.__TECHRADAR__;
delete window.__TECHRADAR__;

// Create Redux store with initial state
const store = createStore(appReducer, preloadedState)
const store = createStore(appReducer, preloadedState, applyMiddleware(historyManager))

render(
<Provider store={store}>
Expand Down

0 comments on commit 61d46f9

Please sign in to comment.