From 0318366aefbaa167036d37288d7f546510b2237f Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Tue, 28 Nov 2017 16:18:39 -0200 Subject: [PATCH] load room on return --- app/containers/Routes.js | 5 ++-- app/containers/routes/NavigationService.js | 4 ++- app/reducers/app.js | 29 +++++++++++++++++++++- app/reducers/login.js | 2 ++ app/views/RoomView.js | 10 ++++---- 5 files changed, 41 insertions(+), 9 deletions(-) diff --git a/app/containers/Routes.js b/app/containers/Routes.js index e1e57e950..a31c64088 100644 --- a/app/containers/Routes.js +++ b/app/containers/Routes.js @@ -12,7 +12,8 @@ import * as NavigationService from './routes/NavigationService'; @connect( state => ({ login: state.login, - app: state.app + app: state.app, + background: state.app.background }), dispatch => bindActionCreators({ appInit @@ -26,7 +27,7 @@ export default class Routes extends React.Component { } componentWillMount() { - this.props.appInit(); + return !this.props.app.ready && this.props.appInit(); } componentDidUpdate() { diff --git a/app/containers/routes/NavigationService.js b/app/containers/routes/NavigationService.js index 2c7cab915..38f0e9690 100644 --- a/app/containers/routes/NavigationService.js +++ b/app/containers/routes/NavigationService.js @@ -1,4 +1,5 @@ import { NavigationActions } from 'react-navigation'; +import reduxStore from '../../lib/createStore'; const config = {}; @@ -31,6 +32,7 @@ export function goRoom({ rid, name }, counter = 0) { if (!config.navigator) { return setTimeout(() => goRoom({ rid, name }, counter + 1), 200); } + const action = NavigationActions.reset({ index: 1, actions: [ @@ -39,5 +41,5 @@ export function goRoom({ rid, name }, counter = 0) { ] }); - return config.navigator.dispatch(action); + requestAnimationFrame(() => config.navigator.dispatch(action), reduxStore.getState().app.starting); } diff --git a/app/reducers/app.js b/app/reducers/app.js index 3ae8bb9c5..486e54a95 100644 --- a/app/reducers/app.js +++ b/app/reducers/app.js @@ -1,19 +1,46 @@ +import { FOREGROUND, BACKGROUND, INACTIVE } from 'redux-enhancer-react-native-appstate'; import { APP } from '../actions/actionsTypes'; const initialState = { - starting: true + starting: true, + ready: false, + inactive: false, + background: false }; export default function app(state = initialState, action) { switch (action.type) { + case FOREGROUND: + return { + ...state, + inactive: false, + foreground: true, + background: false + }; + case BACKGROUND: + return { + ...state, + inactive: false, + foreground: false, + background: true + }; + case INACTIVE: + return { + ...state, + inactive: true, + foreground: false, + background: false + }; case APP.INIT: return { ...state, + ready: false, starting: true }; case APP.READY: return { ...state, + ready: true, starting: false }; default: diff --git a/app/reducers/login.js b/app/reducers/login.js index e90531ffd..83b3187b6 100644 --- a/app/reducers/login.js +++ b/app/reducers/login.js @@ -11,6 +11,8 @@ const initialState = { export default function login(state = initialState, action) { switch (action.type) { + case types.APP.INIT: + return initialState; case types.LOGIN.REQUEST: return { ...state, diff --git a/app/views/RoomView.js b/app/views/RoomView.js index 62cf4cdd8..85b7e0946 100644 --- a/app/views/RoomView.js +++ b/app/views/RoomView.js @@ -81,6 +81,9 @@ export default class RoomView extends React.Component { this.rid = props.rid || props.navigation.state.params.room.rid; + this.name = this.props.name || + this.props.navigation.state.params.name || + this.props.navigation.state.params.room.name; this.data = realm .objects('messages') @@ -96,12 +99,9 @@ export default class RoomView extends React.Component { componentWillMount() { this.props.navigation.setParams({ - title: - this.props.name || - this.props.navigation.state.params.name || - this.props.navigation.state.params.room.name + title: this.name }); - this.props.openRoom({ rid: this.rid }); + this.props.openRoom({ rid: this.rid, name: this.name }); this.data.addListener(this.updateState); } componentDidMount() {