diff options
author | Noah Loomans <noahloomans@gmail.com> | 2018-07-03 20:09:24 +0200 |
---|---|---|
committer | Noah Loomans <noahloomans@gmail.com> | 2018-07-03 20:14:11 +0200 |
commit | f5c7fc1c6aa985151cf9f151d2f3423772d6fc09 (patch) | |
tree | f91072de9c3a7067c037109e68e0880113624baf /src/client/react/store | |
parent | 8f7bcf27d6ad8e3d13114bd60c942fa8cce279f8 (diff) |
client/RoomFinder: Refactor
Diffstat (limited to 'src/client/react/store')
-rw-r--r-- | src/client/react/store/actions.js | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/client/react/store/actions.js b/src/client/react/store/actions.js index b123a8b..96256e4 100644 --- a/src/client/react/store/actions.js +++ b/src/client/react/store/actions.js @@ -18,6 +18,29 @@ export function setUser(newUser) { }; } +export function shiftRoom(shift) { + return (dispatch, getState, { getHistory }) => { + const { user } = getHistory(); + const { allRoomIds } = users; + + if (users.byId[user].type !== 'r') throw new Error('User must be a room'); + + const currentRoom = user; + const currentRoomIndex = allRoomIds.indexOf(currentRoom); + + let nextRoomIndex = currentRoomIndex + shift; + + if (nextRoomIndex < 0) { + nextRoomIndex = allRoomIds.length - 1; + } else if (nextRoomIndex > allRoomIds.length - 1) { + nextRoomIndex = 0; + } + + const nextRoom = allRoomIds[nextRoomIndex]; + dispatch(setUser(nextRoom)); + }; +} + export function setWeek(newWeek) { return (dispatch, getState, { getHistory, moment }) => { const { updateQuery } = getHistory(); |