From 445a89e8428d4bbbdf38f86d068f5d66fbf144e0 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 5 Jun 2016 18:20:15 -0700 Subject: web: fix list reducer --- web/src/js/ducks/utils/list.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'web/src/js/ducks/utils') diff --git a/web/src/js/ducks/utils/list.js b/web/src/js/ducks/utils/list.js index a5ce7250..6668e85e 100644 --- a/web/src/js/ducks/utils/list.js +++ b/web/src/js/ducks/utils/list.js @@ -62,7 +62,7 @@ export default function makeList(actionType, fetchURL) { itemIndex = state.indexOf[action.item.id] list[itemIndex] = action.item return { - ...defaultState, + ...state, list } @@ -71,7 +71,7 @@ export default function makeList(actionType, fetchURL) { itemIndex = state.indexOf[action.item.id] list.splice(itemIndex, 1) return { - ...defaultState, + ...state, list, byId: {...state.byId, [action.item.id]: undefined}, indexOf: {...state.indexOf, [action.item.id]: undefined}, @@ -79,7 +79,7 @@ export default function makeList(actionType, fetchURL) { case REQUEST_LIST: return { - ...defaultState, + ...state, isFetching: true } -- cgit v1.2.3 From d878122cf9c0daabd6f390f53e1fa13dcc1eb3a3 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 5 Jun 2016 18:43:17 -0700 Subject: web: fix list update propagation --- web/src/js/ducks/utils/list.js | 3 ++- web/src/js/ducks/utils/view.js | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) (limited to 'web/src/js/ducks/utils') diff --git a/web/src/js/ducks/utils/list.js b/web/src/js/ducks/utils/list.js index 6668e85e..a830fe99 100644 --- a/web/src/js/ducks/utils/list.js +++ b/web/src/js/ducks/utils/list.js @@ -63,7 +63,8 @@ export default function makeList(actionType, fetchURL) { list[itemIndex] = action.item return { ...state, - list + list, + byId: {...state.byId, [action.item.id]: action.item}, } case REMOVE: diff --git a/web/src/js/ducks/utils/view.js b/web/src/js/ducks/utils/view.js index 5535ed83..ff6f4c12 100644 --- a/web/src/js/ducks/utils/view.js +++ b/web/src/js/ducks/utils/view.js @@ -96,10 +96,12 @@ export function updateViewList(currentView, currentList, nextList, action, filte return sortedInsert(currentView, sortFn, action.item) if (isInView && !shouldBeInView) return sortedRemove(currentView, sortFn, action.item) - if (isInView && shouldBeInView && sortFn && sortFn(currentItemState) !== sortFn(nextItemState)) { + if (isInView && shouldBeInView) { let s = [...currentView] - s.sort(makeCompareFn(sortFn)) s.indexOf = x => sortedIndexOf(s, x, sortFn) + s[s.indexOf(currentItemState)] = nextItemState + if (sortFn && sortFn(currentItemState) !== sortFn(nextItemState)) + s.sort(makeCompareFn(sortFn)) return s } return currentView -- cgit v1.2.3 From 54ee8ff4d4b1458880554bf3a28c92b8c069cb53 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Mon, 6 Jun 2016 15:47:31 -0700 Subject: web: accept all falsey sortFns in sortedIndexOf --- web/src/js/ducks/utils/view.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'web/src/js/ducks/utils') diff --git a/web/src/js/ducks/utils/view.js b/web/src/js/ducks/utils/view.js index ff6f4c12..fa23efcd 100644 --- a/web/src/js/ducks/utils/view.js +++ b/web/src/js/ducks/utils/view.js @@ -43,12 +43,8 @@ const sortedRemove = (list, sortFn, item) => { } export function sortedIndexOf(list, value, sortFn) { - if (sortFn === false){ - let i = 0 - while (i < list.length && list[i].id !== value.id){ - i++ - } - return i + if (!sortFn) { + sortFn = x => 0 // This triggers the linear search for flows that have the same sort value. } let low = 0, @@ -57,7 +53,7 @@ export function sortedIndexOf(list, value, sortFn) { mid; while (low < high) { mid = (low + high) >>> 1; - if ((sortFn(list[mid]) < val) ) { + if (sortFn(list[mid]) < val) { low = mid + 1 } else { high = mid @@ -125,4 +121,4 @@ export function updateViewFilter(list, filterFn = defaultFilterFn, sortFn = defa filtered.indexOf = x => sortedIndexOf(filtered, x, sortFn) return filtered -} \ No newline at end of file +} -- cgit v1.2.3