@shopgate/pwa-common
Version:
Common library for the Shopgate Connect PWA.
51 lines (50 loc) • 1.31 kB
JavaScript
import cloneDeep from 'lodash/cloneDeep';
import { stack } from '@virtuous/conductor';
import { ROUTE_WILL_ENTER, ROUTE_DID_LEAVE, ROUTE_WILL_LEAVE, ROUTE_DID_UPDATE, ROUTE_DID_ENTER } from "../../constants/ActionTypes";
const defaultState = {
currentRoute: null,
stack: []
};
/**
* @param {Object} state The current state.
* @param {Object} action The action object.
* @returns {Object}
*/
export default function router(state = defaultState, action = {}) {
switch (action.type) {
case ROUTE_WILL_LEAVE:
case ROUTE_DID_LEAVE:
{
return {
...state,
stack: Array.from(stack.getAll().values())
};
}
case ROUTE_WILL_ENTER:
case ROUTE_DID_ENTER:
return {
...state,
stack: Array.from(stack.getAll().values()),
currentRoute: cloneDeep(action.route)
};
case ROUTE_DID_UPDATE:
{
const {
id: currentId
} = state.currentRoute || {};
const {
id: updatedId
} = action.route;
if (currentId === updatedId) {
return {
...state,
stack: Array.from(stack.getAll().values()),
currentRoute: cloneDeep(action.route)
};
}
return state;
}
default:
return state;
}
}