diff options
author | Maximilian Hils <git@maximilianhils.com> | 2016-11-01 00:04:05 +0100 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2016-11-08 17:55:22 +0100 |
commit | c2a130dcedcb69c35d8bb7432fa65e6542e6de19 (patch) | |
tree | aabc78e440ff7f213b561e7649916788562e354a /web/src/js/ducks/utils/view.js | |
parent | 85476d9915f23fc45e64b5242e804623f50cd20a (diff) | |
download | mitmproxy-c2a130dcedcb69c35d8bb7432fa65e6542e6de19.tar.gz mitmproxy-c2a130dcedcb69c35d8bb7432fa65e6542e6de19.tar.bz2 mitmproxy-c2a130dcedcb69c35d8bb7432fa65e6542e6de19.zip |
web: simplify flow storage
Diffstat (limited to 'web/src/js/ducks/utils/view.js')
-rwxr-xr-x | web/src/js/ducks/utils/view.js | 189 |
1 files changed, 0 insertions, 189 deletions
diff --git a/web/src/js/ducks/utils/view.js b/web/src/js/ducks/utils/view.js deleted file mode 100755 index 6bf0a63e..00000000 --- a/web/src/js/ducks/utils/view.js +++ /dev/null @@ -1,189 +0,0 @@ -import _ from 'lodash' - -export const UPDATE_FILTER = 'VIEW_UPDATE_FILTER' -export const UPDATE_SORT = 'VIEW_UPDATE_SORT' -export const ADD = 'VIEW_ADD' -export const UPDATE = 'VIEW_UPDATE' -export const REMOVE = 'VIEW_REMOVE' -export const RECEIVE = 'VIEW_RECEIVE' - -const defaultState = { - data: [], - indexOf: {}, -} - -export default function reduce(state = defaultState, action) { - switch (action.type) { - - case UPDATE_FILTER: - { - const data = action.list.filter(action.filter).sort(action.sort) - return { - ...state, - data, - indexOf: _.fromPairs(data.map((item, index) => [item.id, index])), - } - } - - case UPDATE_SORT: - { - const data = [...state.data].sort(action.sort) - return { - ...state, - data, - indexOf: _.fromPairs(data.map((item, index) => [item.id, index])), - } - } - - case ADD: - if (state.indexOf[action.item.id] != null || !action.filter(action.item)) { - return state - } - return { - ...state, - ...sortedInsert(state, action.item, action.sort), - } - - case REMOVE: - if (state.indexOf[action.id] == null) { - return state - } - return { - ...state, - ...sortedRemove(state, action.id), - } - - case UPDATE: - let hasOldItem = state.indexOf[action.item.id] !== null && state.indexOf[action.item.id] !== undefined - let hasNewItem = action.filter(action.item) - if (!hasNewItem && !hasOldItem) { - return state - } - if (hasNewItem && !hasOldItem) { - return { - ...state, - ...sortedInsert(state, action.item, action.sort) - } - } - if (!hasNewItem && hasOldItem) { - return { - ...state, - ...sortedRemove(state, action.item.id) - } - } - if (hasNewItem && hasOldItem) { - return { - ...state, - ...sortedUpdate(state, action.item, action.sort), - } - } - case RECEIVE: - { - const data = action.list.filter(action.filter).sort(action.sort) - return { - ...state, - data, - indexOf: _.fromPairs(data.map((item, index) => [item.id, index])), - } - } - - default: - return state - } -} - -export function updateFilter(list, filter = defaultFilter, sort = defaultSort) { - return { type: UPDATE_FILTER, list, filter, sort } -} - -export function updateSort(sort = defaultSort) { - return { type: UPDATE_SORT, sort } -} - -export function add(item, filter = defaultFilter, sort = defaultSort) { - return { type: ADD, item, filter, sort } -} - -export function update(item, filter = defaultFilter, sort = defaultSort) { - return { type: UPDATE, item, filter, sort } -} - -export function remove(id) { - return { type: REMOVE, id } -} - -export function receive(list, filter = defaultFilter, sort = defaultSort) { - return { type: RECEIVE, list, filter, sort } -} - -function sortedInsert(state, item, sort) { - const index = sortedIndex(state.data, item, sort) - const data = [ ...state.data ] - const indexOf = { ...state.indexOf } - - data.splice(index, 0, item) - for (let i = data.length - 1; i >= index; i--) { - indexOf[data[i].id] = i - } - - return { data, indexOf } -} - -function sortedRemove(state, id) { - const index = state.indexOf[id] - const data = [...state.data] - const indexOf = { ...state.indexOf, [id]: null } - - data.splice(index, 1) - for (let i = data.length - 1; i >= index; i--) { - indexOf[data[i].id] = i - } - - return { data, indexOf } -} - -function sortedUpdate(state, item, sort) { - let data = [ ...state.data ] - let indexOf = { ...state.indexOf } - let index = indexOf[item.id] - data[index] = item - while (index + 1 < data.length && sort(data[index], data[index + 1]) > 0) { - data[index] = data[index + 1] - data[index + 1] = item - indexOf[item.id] = index + 1 - indexOf[data[index].id] = index - ++index - } - while (index > 0 && sort(data[index], data[index - 1]) < 0) { - data[index] = data[index - 1] - data[index - 1] = item - indexOf[item.id] = index - 1 - indexOf[data[index].id] = index - --index - } - return { data, indexOf } -} - -function sortedIndex(list, item, sort) { - let low = 0 - let high = list.length - - while (low < high) { - const middle = (low + high) >>> 1 - if (sort(item, list[middle]) >= 0) { - low = middle + 1 - } else { - high = middle - } - } - - return low -} - -function defaultFilter() { - return true -} - -function defaultSort(a, b) { - return 0 -} |