Fixed: Speed up UI during refresh

Don't update state if we know items are equal to avoid reselections.
Don't pass LastInfoUpdate to frontend to prevent useless updates (the
field isn't used)
This commit is contained in:
ta264
2019-12-19 21:29:15 +00:00
parent 309b8f82e1
commit a8be028f29
3 changed files with 29 additions and 12 deletions
@@ -65,18 +65,31 @@ export default function createHandleActions(handlers, defaultState, section) {
if (section === baseSection) {
const newState = getSectionState(state, payloadSection);
const items = newState.items;
const index = _.findIndex(items, { id: payload.id });
if (!newState.itemMap) {
newState.itemMap = _.zipObject(_.map(items, 'id'), _.range(items.length));
}
const index = payload.id in newState.itemMap ? newState.itemMap[payload.id] : -1;
newState.items = [...items];
// TODO: Move adding to it's own reducer
if (index >= 0) {
const item = items[index];
const newItem = { ...item, ...otherProps };
newState.items.splice(index, 1, { ...item, ...otherProps });
// if the item to update is equal to existing, then don't actually update
// to prevent costly reselections
if (_.isEqual(item, newItem)) {
return state;
}
newState.items.splice(index, 1, newItem);
} else if (!updateOnly) {
newState.items.push({ ...otherProps });
newState.itemMap = _.zipObject(_.map(newState.items, 'id'), _.range(newState.items.length));
const newIndex = newState.items.push({ ...otherProps }) - 1;
newState.itemMap[payload.id] = newIndex;
}
return updateSectionState(state, payloadSection, newState);