aboutsummaryrefslogtreecommitdiffstats
path: root/web/src/js/ducks/views/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'web/src/js/ducks/views/main.js')
-rwxr-xr-xweb/src/js/ducks/views/main.js31
1 files changed, 31 insertions, 0 deletions
diff --git a/web/src/js/ducks/views/main.js b/web/src/js/ducks/views/main.js
index f4968de4..db9de619 100755
--- a/web/src/js/ducks/views/main.js
+++ b/web/src/js/ducks/views/main.js
@@ -7,6 +7,7 @@ export const UPDATE_FILTER = 'FLOW_VIEWS_MAIN_UPDATE_FILTER'
export const UPDATE_SORT = 'FLOW_VIEWS_MAIN_UPDATE_SORT'
export const UPDATE_HIGHLIGHT = 'FLOW_VIEWS_MAIN_UPDATE_HIGHLIGHT'
export const SELECT = 'FLOW_VIEWS_MAIN_SELECT'
+export const SELECT_RELATIVE = 'SELECT_RELATIVE'
const sortKeyFuns = {
@@ -52,6 +53,27 @@ export default function reduce(state = defaultState, action) {
selected: [action.id]
}
+ case SELECT_RELATIVE:
+ if(action.shift === null) {
+ return {
+ ...state,
+ selected: []
+ }
+ }
+ let id = state.selected[0]
+ let index = 0
+ if(!id && action.shift < 0) {
+ index = state.view.data.length - 1
+ } else if(id) {
+ index = state.view.indexOf[id] + action.shift
+ index = index < 0 ? 0 : index
+ index = index > state.view.data.length - 1 ? state.view.data.length - 1 : index
+ }
+ return {
+ ...state,
+ selected: [state.view.data[index].id]
+ }
+
case UPDATE_FILTER:
return {
...state,
@@ -171,6 +193,15 @@ export function select(id) {
}
/**
+ * @public
+ */
+export function selectRelative(shift) {
+ return (dispatch, getState) => {
+ dispatch({ type: SELECT_RELATIVE, currentSelection: getState().flows.views.main.selected[0], shift })
+ }
+}
+
+/**
* @private
*/
function makeFilter(filter) {