feat(Panes): Do not update state if panes are the same

This reduces the number of updates required when transitioning between
challenges while preserving the state of the panes when going from two
similar challengees.
This commit is contained in:
Berkeley Martinez
2018-01-16 09:49:36 -08:00
parent 62e079c721
commit 2c7e571520

View File

@ -166,24 +166,22 @@ export default function createPanesAspects({ createPanesMap }) {
const panesMap = action.meta.panesMap; const panesMap = action.meta.panesMap;
const panes = _.map(panesMap, (name, type) => ({ name, type })); const panes = _.map(panesMap, (name, type) => ({ name, type }));
const numOfPanes = Object.keys(panes).length; const numOfPanes = Object.keys(panes).length;
const panesByName = _.isEqual(state.panes, panes) && state.panesByName; if (_.isEqual(state.panes, panes)) {
return state;
}
return { return {
...state, ...state,
panesMap, panesMap,
panes, panes,
panesByName: panesByName panesByName: panes.reduce((panes, { name }, index) => {
? panesByName const dividerLeft = utils.getDividerLeft(numOfPanes, index);
: panes.reduce((panes, { name }, index) => { panes[name] = {
const dividerLeft = utils.getDividerLeft(numOfPanes, index); name,
panes[name] = { dividerLeft,
name, isHidden: false
dividerLeft, };
isHidden: false return panes;
}; }, {})
return panes;
},
{}
)
}; };
} }
if (action.meta && action.meta.isPaneAction) { if (action.meta && action.meta.isPaneAction) {