diff --git a/src/middleware/updateURLMiddleware.js b/src/middleware/updateURLMiddleware.js index eefbe488..54b3bc94 100644 --- a/src/middleware/updateURLMiddleware.js +++ b/src/middleware/updateURLMiddleware.js @@ -1,47 +1,69 @@ -const updateURLMiddleware = store => next => action => { - const oldState = store.getState(); - const nextAction = next(action); +import uri from "urijs"; - console.log('middleware', store, next, action) +const updateURLMiddleware = (store) => { + return (next) => { + return (action) => { + const oldState = store.getState(); + const nextAction = next(action); - if (action.type === 'url changed') { - return nextAction; - } + if (action.type === 'url changed') { + /* we don't handle pop state here - we handle it in the url reducer */ + return nextAction; + } - const state = store.getState(); + const state = store.getState(); - // Internal helper for working with URIs - const oldURI = new URI(window.location.href); - const newURI = new URI(oldURI).setQueryData({}); - newURI.setPath('/foo/bar'); - // Set the path based on state - if (!state.isOnLandingPage && state.project.id) { - newURI.setPath(newURI.getPath() + state.project.id + '/'); - newURI.addQueryData('baz', state.mode); - newURI.addQueryData('bat', state.selection.activePageID); - } else { - newURI.setPath(newURI.getPath() + state.landingSection + '/'); - } + // const oldURI = URI(window.location.href) + // const newURI = URI(oldURI).setQuery({}) - // Avoid URL thrashing by replacing state while loading instead of pushing - const newPath = newURI.toString(); - const oldPath = oldURI.toString(); - if (newPath !== oldPath) { - if ( - (oldState.mode === 'asdf' && - state.mode === 'asdf' && - !oldState.isOnLandingPage) || - oldState.isLoadingProject !== state.isLoadingProject - ) { - window.history.replaceState(null, null, newPath); - } else { - window.history.pushState(null, null, newPath); + // if (window.location.search === "") { + // newURL = uri.addQuery(category, value).toString(); /* #1 */ + // } else if (uri.hasQuery(category, value) || uri.hasQuery(category, value, true)) { /* true param here means check arrays as well http://medialize.github.io/URI.js/docs.html#search-has */ + // newURL = uri.removeQuery(category, value).toString(); /* #4 */ + // } else { + // newURL = uri.addQuery(category, value).toString(); /* #2 & #3 are handled by URI */ + // } + // + // window.history.pushState("", "", newURL) + + + // + // // Internal helper for working with URIs + // const oldURI = new URI(window.location.href); + // const newURI = new URI(oldURI).setQueryData({}); + // + // newURI.setPath('/foo/bar'); + // + // // Set the path based on state + // if (!state.isOnLandingPage && state.project.id) { + // newURI.setPath(newURI.getPath() + state.project.id + '/'); + // newURI.addQueryData('baz', state.mode); + // newURI.addQueryData('bat', state.selection.activePageID); + // } else { + // newURI.setPath(newURI.getPath() + state.landingSection + '/'); + // } + // + // // Avoid URL thrashing by replacing state while loading instead of pushing + // const newPath = newURI.toString(); + // const oldPath = oldURI.toString(); + // if (newPath !== oldPath) { + // if ( + // (oldState.mode === 'asdf' && + // state.mode === 'asdf' && + // !oldState.isOnLandingPage) || + // oldState.isLoadingProject !== state.isLoadingProject + // ) { + // window.history.replaceState(null, null, newPath); + // } else { + // window.history.pushState(null, null, newPath); + // } + // } + + return nextAction; } } - - return nextAction; }; export default updateURLMiddleware; diff --git a/src/reducers/cells.js b/src/reducers/cells.js index d556bc1f..51c4f56b 100644 --- a/src/reducers/cells.js +++ b/src/reducers/cells.js @@ -4,17 +4,17 @@ const Cells = (state = { error: null, }, action) => { switch (action.type) { - case "REQUEST_CELLS": + case "request cells started": return Object.assign({}, state, { loading: true, error: null }); - case "RECEIVE_CELLS": + case "request cells success": return Object.assign({}, state, { error: null, cells: action.data, }); - case "CELLS_FETCH_ERROR": + case "request cells error": return Object.assign({}, state, { cells: null, error: action.data