refactor api room endpoint to return unjoined game room data

This commit is contained in:
Sorrel Bri 2020-01-22 16:30:28 -08:00 committed by sorrelbri
parent 695d1ea2b1
commit f94f4fd2c0
4 changed files with 75 additions and 33 deletions

View file

@ -31,6 +31,7 @@ const Room = (props) => {
const roomSocket = socketIOClient(`${config.socketAddress}/${roomId}`) const roomSocket = socketIOClient(`${config.socketAddress}/${roomId}`)
const roomSocketConnect = () => { const roomSocketConnect = () => {
console.log(roomId)
roomSocket.emit('connect'); roomSocket.emit('connect');
// ! dispatch data // ! dispatch data
roomSocket.on('connected', data => setSocketData('room socket connected')); roomSocket.on('connected', data => setSocketData('room socket connected'));

View file

@ -6,6 +6,9 @@ export const errorReducer = (state: state, action: action):state => {
case 'AUTH_ERROR': case 'AUTH_ERROR':
return authErrorReducer(state, action); return authErrorReducer(state, action);
case 'JOIN_ROOM_ERROR':
return joinRoomErrorReducer(state, action);
default: default:
return state; return state;
} }
@ -14,4 +17,9 @@ export const errorReducer = (state: state, action: action):state => {
function authErrorReducer(state: state, action: action): state { function authErrorReducer(state: state, action: action): state {
const auth = action.body.authError; const auth = action.body.authError;
return {...state, errors: {auth} }; return {...state, errors: {auth} };
}
function joinRoomErrorReducer(state: state, action: action): state {
const joinRoom = action.body.joinRoomError;
return { ...state, errors: {joinRoom} }
} }

View file

@ -9,23 +9,19 @@ export const roomsReducer = (state: state, action: action):state => {
const rooms = action.body; const rooms = action.body;
return {...state, rooms}; return {...state, rooms};
case 'SET_CURRENT':
const currentRoom = action.body;
return {...state, currentRoom};
case 'JOIN_ROOM': { case 'JOIN_ROOM': {
// SET MESSAGES const stateWithRoom = setCurrentRoom(state, action);
const stateWithMessages = action.body.messages.length ? setMessages(state, action.body) : state; const stateWithMessages = setMessages(stateWithRoom, action);
if (!action.body.roomGames) {
// SET CURRENT ROOM return setJoinRoomError(state);
}
const stateWithGames = setGames(stateWithMessages, action);
// if (!data.roomGames.length) { return stateWithGames;
// const errorAction = {
// type: 'ERR',
// message: 'JOIN_ROOM',
// body: { joinRoomError: 'Game room has no games' }
// }
// return stateReducer(stateWithMessages, errorAction);
// }
// SET GAMES
return stateWithMessages;
} }
@ -34,11 +30,47 @@ export const roomsReducer = (state: state, action: action):state => {
} }
} }
function setMessages(state, body) { function setMessages(state, action) {
const messageAction = { if(action.body.messages.length) {
type: 'MESSAGES', const messages = action.body.messages;
message: 'SET_MESSAGES', const messageAction = {
body: body.messages type: 'MESSAGES',
message: 'SET_MESSAGES',
body: messages
}
return stateReducer(state, messageAction);
} }
return stateReducer(state, messageAction) return state;
}
function setJoinRoomError(state, body) {
const errorAction = {
type: 'ERR',
message: 'JOIN_ROOM_ERROR',
body: { joinRoomError: 'Game room has no games' }
}
return stateReducer(state, errorAction);
}
function setCurrentRoom(state, action) {
const currentRoom = action.body.currentRoom;
const roomAction = {
type: 'ROOMS',
message: 'SET_CURRENT',
body: currentRoom
}
return stateReducer(state, roomAction);
}
function setGames(state, action) {
if (action.body.roomGames.length) {
const games = action.body.roomGames;
const gamesAction = {
type: 'GAMES',
message: 'SET_GAMES',
body: games
}
return stateReducer(state, gamesAction);
}
return state;
} }

View file

@ -11,18 +11,20 @@ const roomsData = [
] ]
const joinRoomData = { const joinRoomData = {
"roomGames": [ currentRoom: {
{ id:1, name:"main",
"id":1, "name":"main", description:"A general place to play Go", language:"EN"
"description":"A general place to play Go", },
"language":"EN", "komi":6.5, "handicap":0, "board_size":19, roomGames: [
"player_black":"anon", "player_white":"anon", {
"player_black_rank":"K3", "player_white_rank":"K2" komi:6.5, handicap:0, board_size:19,
player_black:"anon", player_white:"anon",
player_black_rank:"K3", player_white_rank:"K2"
} }
], ],
"messages": [ messages: [
{ {
"content": "Hey! Welcome to the general room!", "username": "userOne", "admin":true content: "Hey! Welcome to the general room!", username: "userOne", admin: true
} }
] ]
} }
@ -42,12 +44,11 @@ it('set rooms returns state with rooms added', () => {
it('join room returns state with current room, games and messages all populated', () => { it('join room returns state with current room, games and messages all populated', () => {
const state = initState(); const state = initState();
const action = {type: 'ROOMS', message: 'JOIN_ROOM', body: joinRoomData}; const action = {type: 'ROOMS', message: 'JOIN_ROOM', body: joinRoomData};
const normalizedRoomGames = joinRoomData.roomGames.map(game => {delete game.id; delete game.name; delete game.description; return game});
expect(stateReducer(state, action)).toEqual({ expect(stateReducer(state, action)).toEqual({
...state, ...state,
currentRoom: roomsData[0], currentRoom: joinRoomData.currentRoom,
messages: joinRoomData.messages, messages: joinRoomData.messages,
roomGames: normalizedRoomGames games: joinRoomData.roomGames
}) })
}); });