summaryrefslogtreecommitdiff
path: root/sw-ui/src/redux/currentGame.ts
diff options
context:
space:
mode:
Diffstat (limited to 'sw-ui/src/redux/currentGame.ts')
-rw-r--r--sw-ui/src/redux/currentGame.ts46
1 files changed, 46 insertions, 0 deletions
diff --git a/sw-ui/src/redux/currentGame.ts b/sw-ui/src/redux/currentGame.ts
new file mode 100644
index 00000000..5e015d60
--- /dev/null
+++ b/sw-ui/src/redux/currentGame.ts
@@ -0,0 +1,46 @@
+import { combineReducers } from 'redux';
+import { ApiPlayerTurnInfo, ApiTable } from '../api/model';
+import { GlobalState } from '../reducers';
+import { Action } from './actions/all';
+import { TABLE_UPDATE_RECEIVED, TURN_INFO_RECEIVED } from './actions/game';
+
+export type CurrentGameState = {
+ turnInfo: ApiPlayerTurnInfo | null;
+ table: ApiTable | null;
+}
+
+export const EMPTY_CURRENT_GAME: CurrentGameState = {
+ turnInfo: null,
+ table: null,
+};
+
+export function createCurrentGameReducer() {
+ return combineReducers({
+ turnInfo: turnInfoReducer,
+ table: tableUpdatesReducer,
+ });
+}
+
+const turnInfoReducer = (state: ApiPlayerTurnInfo | null = null, action: Action) => {
+ switch (action.type) {
+ case TURN_INFO_RECEIVED:
+ return action.turnInfo;
+ case TABLE_UPDATE_RECEIVED:
+ return null;
+ default:
+ return state;
+ }
+};
+
+const tableUpdatesReducer = (state: ApiTable | null = null, action: Action) => {
+ switch (action.type) {
+ case TURN_INFO_RECEIVED:
+ return action.turnInfo.table;
+ case TABLE_UPDATE_RECEIVED:
+ return action.table;
+ default:
+ return state;
+ }
+};
+
+export const getCurrentTurnInfo = (state: GlobalState): ApiPlayerTurnInfo | null => state.currentGame.turnInfo;
bgstack15