From ee9f494964f1fee6e1464fbb3060e8ab5775a298 Mon Sep 17 00:00:00 2001 From: Skile Date: Wed, 19 Jun 2019 20:41:57 +0900 Subject: [PATCH] Redirect automatically when Room Deleted --- frontend/src/containers/RoomCreatePage.js | 6 +----- frontend/src/services/api/index.js | 4 +++- frontend/src/store/room/actions.js | 6 ++++-- frontend/src/store/room/reducer.js | 13 ++++++++----- frontend/src/store/room/sagas.js | 13 ++++++++----- 5 files changed, 24 insertions(+), 18 deletions(-) diff --git a/frontend/src/containers/RoomCreatePage.js b/frontend/src/containers/RoomCreatePage.js index c88f755..44381b2 100644 --- a/frontend/src/containers/RoomCreatePage.js +++ b/frontend/src/containers/RoomCreatePage.js @@ -4,21 +4,17 @@ import { RoomCreatePage } from 'components' import { Redirect } from 'react-router-dom' const RoomCreatePageContainer = (props) => { - const { room, username } = props + const { username } = props if ( !username ) { return } - // else if( room ) { - // return - // } else { return } } const mapStateToProps = state => ({ - // room: state.room.room, username: state.user.username, token: state.user.token, }) diff --git a/frontend/src/services/api/index.js b/frontend/src/services/api/index.js index 51f6968..7772afa 100644 --- a/frontend/src/services/api/index.js +++ b/frontend/src/services/api/index.js @@ -14,7 +14,9 @@ export const checkStatus = (response) => { throw error } -export const parseJSON = response => response.json() +export const parseJSON = response => { + return response.status === 204 ? {} : response.json() +} export const parseSettings = ({ method = 'get', data, locale, token, ...otherSettings diff --git a/frontend/src/store/room/actions.js b/frontend/src/store/room/actions.js index e1b2464..7d8f5b1 100644 --- a/frontend/src/store/room/actions.js +++ b/frontend/src/store/room/actions.js @@ -31,11 +31,13 @@ export const roomSettingRequest = ( {url} ) => ({ type: ROOM_SETTING_REQUEST, url, }) -export const roomDeleteSuccess = () => ({ +export const roomDeleteSuccess = ( url ) => ({ type: ROOM_DELETE_SUCCESS, + url, }) -export const roomDeleteFailed = () => ({ +export const roomDeleteFailed = error => ({ type: ROOM_DELETE_FAILED, + error, }) diff --git a/frontend/src/store/room/reducer.js b/frontend/src/store/room/reducer.js index 8bc6d95..cd6f6fa 100644 --- a/frontend/src/store/room/reducer.js +++ b/frontend/src/store/room/reducer.js @@ -49,7 +49,6 @@ const roomReducer = (state = initialState, action) => { case actions.ROOM_CREATE_SUCCESS: return { ...state, - // room: action.room, roomList: [ ...state.roomList, action.room, @@ -61,15 +60,19 @@ const roomReducer = (state = initialState, action) => { return{ ...initialState, } - case action.ROOM_DELETE_SUCCESS: - return{ - ...initialState, - } + case action.ROOM_DELETE_FAILED: return{ ...initialState, } */ + case actions.ROOM_DELETE_SUCCESS: + return { + ...state, + roomList: state.roomList.slice().filter( + room => room.url !== action.url + ), + } case actions.ROOM_LIST_SUCCESS: return { ...state, diff --git a/frontend/src/store/room/sagas.js b/frontend/src/store/room/sagas.js index df9fe2c..0a12ef8 100644 --- a/frontend/src/store/room/sagas.js +++ b/frontend/src/store/room/sagas.js @@ -1,4 +1,4 @@ -import { push } from 'connected-react-router' +import { push, replace } from 'connected-react-router' import { fork, takeEvery, put } from 'redux-saga/effects' import { toastr } from 'react-redux-toastr' import api from 'services/api' @@ -28,7 +28,7 @@ function* roomCreateRequest({ roomname, members, username, token }){ { icon: 'success', status: 'success', } ) yield put(actions.roomCreateSuccess(room)) - yield put(push(`/room/${room.url}/`)) + yield put(replace(`/room/${room.url}/`)) } catch(e) { console.log(e) } @@ -61,7 +61,8 @@ function* getRequest({ url }) { yield put(memberGetRequest(url)) yield put(paymentGetRequest(room)) } catch(e) { - yield put(actions.roomGetFailed(e)) + yield put(actions.roomGetFailed(yield e.response.json())) + yield put(push(`/user/`)) } } @@ -74,9 +75,11 @@ function* watchRoomGetRequest() { function* deleteRequest( { url } ) { try { - const room = yield api.delete(`/rooms/${url}/`) - yield put(actions.roomDeleteSuccess()) + yield api.delete(`/rooms/${url}/`) + yield put(actions.roomDeleteSuccess(url)) + yield put(replace(`/user/`)) } catch(e) { + console.log(e) yield put(actions.roomDeleteFailed(e)) }