diff options
author | Maximilian Hils <git@maximilianhils.com> | 2016-06-03 18:38:03 -0700 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2016-06-03 18:38:25 -0700 |
commit | 1b327f34c30e490e6f26ec1ee4e6cfe7b40a47eb (patch) | |
tree | 2bd7c0a01e4b6a9104162c164b7c156bf1f41ebb /web/src/js/ducks/utils/view.js | |
parent | ff9cc8b28393f6beba1ed42ade074672183313e9 (diff) | |
download | mitmproxy-1b327f34c30e490e6f26ec1ee4e6cfe7b40a47eb.tar.gz mitmproxy-1b327f34c30e490e6f26ec1ee4e6cfe7b40a47eb.tar.bz2 mitmproxy-1b327f34c30e490e6f26ec1ee4e6cfe7b40a47eb.zip |
web: add redux list views
Diffstat (limited to 'web/src/js/ducks/utils/view.js')
-rw-r--r-- | web/src/js/ducks/utils/view.js | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/web/src/js/ducks/utils/view.js b/web/src/js/ducks/utils/view.js new file mode 100644 index 00000000..4b265f89 --- /dev/null +++ b/web/src/js/ducks/utils/view.js @@ -0,0 +1,58 @@ +import {ADD, REQUEST_LIST, RECEIVE_LIST} from "./list" + +const defaultFilterFn = x => true +const defaultSortFn = false + +const makeCompareFn = sortFn => { + let compareFn = (a, b) => { + let akey = sortFn(a), + bkey = sortFn(b); + if (akey < bkey) { + return -1; + } else if (akey > bkey) { + return 1; + } else { + return 0; + } + } + if (sortFn.reverse) + return (a, b) => compareFn(b, a) + return compareFn +} + +const sortedInsert = (list, sortFn, item) => { + let l = [...list, item] + let compareFn = makeCompareFn(sortFn) + + // only sort if sorting order is not correct yet + if (sortFn && compareFn(list[list.length - 1], item) > 0) { + // TODO: This is untested + console.debug("sorting view...") + l.sort(compareFn) + } + return l +} + +// for when the list changes +export function updateViewList(state, nextList, action, filterFn = defaultFilterFn, sortFn = defaultSortFn) { + switch (action.cmd) { + case REQUEST_LIST: + return state + case RECEIVE_LIST: + return updateViewFilter(nextList.list, filterFn, sortFn) + case ADD: + if (filterFn(action.item)) + return sortedInsert(state, sortFn, action.item) + return state + default: + console.error("Unknown list action: ", action); + return state + } +} + +export function updateViewFilter(list, filterFn = defaultFilterFn, sortFn = defaultSortFn) { + let filtered = list.filter(filterFn) + if (sortFn) + filtered.sort(makeCompareFn(sortFn)) + return filtered +}
\ No newline at end of file |