diff options
Diffstat (limited to 'web/src/js/ducks/flows.js')
-rw-r--r-- | web/src/js/ducks/flows.js | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/web/src/js/ducks/flows.js b/web/src/js/ducks/flows.js index fdbc42ee..6adde71c 100644 --- a/web/src/js/ducks/flows.js +++ b/web/src/js/ducks/flows.js @@ -1,10 +1,13 @@ import makeList from "./utils/list" import Filt from "../filt/filt" -import {updateViewFilter, updateViewList} from "./utils/view" +import {updateViewFilter, updateViewList, updateViewSort} from "./utils/view" +import {reverseString} from "../utils.js"; +import * as flow_table_columns from "../components/flowtable-columns.js"; export const UPDATE_FLOWS = "UPDATE_FLOWS" export const SET_FILTER = "SET_FLOW_FILTER" export const SET_HIGHLIGHT = "SET_FLOW_HIGHLIGHT" +export const SET_SORT = "SET_FLOW_SORT" export const SELECT_FLOW = "SELECT_FLOW" const { @@ -20,12 +23,28 @@ const defaultState = { view: [], filter: undefined, highlight: undefined, + sort: {sortColumn: undefined, sortDesc: false}, } function makeFilterFn(filter) { return filter ? Filt.parse(filter) : () => true; } + +function makeSortFn(sort){ + let column = flow_table_columns[sort.sortColumn]; + if (!column) return; + + let sortKeyFun = column.sortKeyFun; + if (sort.sortDesc) { + sortKeyFun = sortKeyFun && function (flow) { + const k = column.sortKeyFun(flow); + return _.isString(k) ? reverseString("" + k) : -k; + }; + } + return sortKeyFun; +} + export default function reducer(state = defaultState, action) { switch (action.type) { case UPDATE_FLOWS: @@ -33,19 +52,25 @@ export default function reducer(state = defaultState, action) { return { ...state, all, - view: updateViewList(state.view, state.all, all, action, makeFilterFn(action.filter)) + view: updateViewList(state.view, state.all, all, action, makeFilterFn(action.filter), makeSortFn(state.sort)) } case SET_FILTER: return { ...state, filter: action.filter, - view: updateViewFilter(state.all, makeFilterFn(action.filter)) + view: updateViewFilter(state.all, makeFilterFn(action.filter), makeSortFn(state.sort)) } case SET_HIGHLIGHT: return { ...state, highlight: action.highlight } + case SET_SORT: + return { + ...state, + sort: action.sort, + view: updateViewSort(state.view, makeSortFn(action.sort)) + } case SELECT_FLOW: return { ...state, @@ -69,6 +94,12 @@ export function setHighlight(highlight) { highlight } } +export function setSort(sort){ + return { + type: SET_SORT, + sort + } +} export function selectFlow(flowId) { return { type: SELECT_FLOW, |