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:
@ -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) {
|
||||||
|
Reference in New Issue
Block a user