diff --git a/app/actions/storage/index.js b/app/actions/storage/index.js index 2feaba06a..5c016387c 100644 --- a/app/actions/storage/index.js +++ b/app/actions/storage/index.js @@ -106,7 +106,13 @@ async function saveStorage(data) { export function removeStorage() { return async (dispatch, getState) => { try { - await AsyncStorage.removeItem('storage'); + // Keep the server Url if we have it + const {url} = JSON.parse(await AsyncStorage.getItem('storage')); + if (url) { + await saveStorage({url}); + } else { + await AsyncStorage.removeItem('storage'); + } } catch (error) { // TODO: Error removing data } diff --git a/app/scenes/root/root.js b/app/scenes/root/root.js index 5557ebc62..569caa64d 100644 --- a/app/scenes/root/root.js +++ b/app/scenes/root/root.js @@ -1,25 +1,25 @@ // Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. -import React from 'react'; -import {AppState} from 'react-native'; +import React, {PropTypes, PureComponent} from 'react'; +import {AppState, AsyncStorage} from 'react-native'; import Loading from 'app/components/loading'; import {RequestStatus} from 'service/constants'; -export default class Root extends React.Component { +export default class Root extends PureComponent { static propTypes = { - credentials: React.PropTypes.object, - logoutRequest: React.PropTypes.object, - loginRequest: React.PropTypes.object, - actions: React.PropTypes.shape({ - goToLoadTeam: React.PropTypes.func, - goToSelectServer: React.PropTypes.func, - flushToStorage: React.PropTypes.func, - loadStorage: React.PropTypes.func, - removeStorage: React.PropTypes.func, - setStoreFromLocalData: React.PropTypes.func, - resetLogout: React.PropTypes.func + credentials: PropTypes.object, + logoutRequest: PropTypes.object.isRequired, + loginRequest: PropTypes.object.isRequired, + actions: PropTypes.shape({ + goToLoadTeam: PropTypes.func.isRequired, + goToSelectServer: PropTypes.func.isRequired, + handleServerUrlChanged: PropTypes.func.isRequired, + flushToStorage: PropTypes.func.isRequired, + loadStorage: PropTypes.func.isRequired, + removeStorage: PropTypes.func.isRequired, + setStoreFromLocalData: PropTypes.func.isRequired }).isRequired }; @@ -48,7 +48,7 @@ export default class Root extends React.Component { if (event === 'inactive') { this.props.actions.flushToStorage(); } - } + }; init = () => { if (this.props.logoutRequest.status === RequestStatus.SUCCESS) { @@ -67,15 +67,23 @@ export default class Root extends React.Component { if (this.props.loginRequest.status === RequestStatus.SUCCESS) { this.props.actions.goToLoadTeam(); } else { - this.props.actions.goToSelectServer(); + this.selectServer(); } }); } else { - this.props.actions.goToSelectServer(); + this.selectServer(); } }); }; + selectServer = async () => { + const {url} = JSON.parse(await AsyncStorage.getItem('storage')); + if (url) { + await this.props.actions.handleServerUrlChanged(url); + } + this.props.actions.goToSelectServer(); + }; + render() { return ; } diff --git a/app/scenes/root/root_container.js b/app/scenes/root/root_container.js index a179ac720..85061dc6a 100644 --- a/app/scenes/root/root_container.js +++ b/app/scenes/root/root_container.js @@ -7,8 +7,8 @@ import navigationSceneConnect from '../navigationSceneConnect'; import {flushToStorage, loadStorage, removeStorage} from 'app/actions/storage'; import {goToSelectServer, setStoreFromLocalData} from 'app/actions/views/root'; +import {handleServerUrlChanged} from 'app/actions/views/select_server'; import {goToLoadTeam} from 'app/actions/navigation'; -import {resetLogout} from 'service/actions/users'; import Root from './root'; @@ -26,11 +26,11 @@ function mapDispatchToProps(dispatch) { actions: bindActionCreators({ goToLoadTeam, goToSelectServer, + handleServerUrlChanged, flushToStorage, loadStorage, removeStorage, - setStoreFromLocalData, - resetLogout + setStoreFromLocalData }, dispatch) }; }