From 988d3a396f64a055724bb3098313a929dc96c117 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 26 May 2020 14:35:56 -0300 Subject: [PATCH] Refactor appStart --- app/AppContainer.js | 13 ++++--- app/actions/app.js | 34 +++++++++++++++++++ app/actions/index.js | 41 ----------------------- app/constants/types.js | 4 --- app/index.js | 2 +- app/reducers/app.js | 4 ++- app/sagas/deepLinking.js | 4 +-- app/sagas/init.js | 9 +++-- app/sagas/login.js | 20 +++++------ app/sagas/selectServer.js | 6 ++-- app/sagas/state.js | 5 +-- app/stacks/OutsideStack.js | 3 +- app/views/LanguageView/index.js | 8 ++--- app/views/NewServerView.js | 6 ++-- app/views/OnboardingView/index.js | 6 ++-- app/views/RoomsListView/ServerDropdown.js | 9 ++--- app/views/RoomsListView/index.js | 6 ++-- app/views/SettingsView/index.js | 7 ++-- 18 files changed, 90 insertions(+), 97 deletions(-) create mode 100644 app/actions/app.js delete mode 100644 app/actions/index.js delete mode 100644 app/constants/types.js diff --git a/app/AppContainer.js b/app/AppContainer.js index 8ad2b6e52..c5539b02c 100644 --- a/app/AppContainer.js +++ b/app/AppContainer.js @@ -7,6 +7,9 @@ import { SafeAreaProvider, initialWindowMetrics } from 'react-native-safe-area-c import { defaultHeader, onNavigationStateChange } from './utils/navigation'; import Navigation from './lib/Navigation'; +import { + ROOT_LOADING, ROOT_OUTSIDE, ROOT_NEW_SERVER, ROOT_INSIDE, ROOT_SET_USERNAME, ROOT_BACKGROUND +} from './actions/app'; // Stacks import AuthLoadingView from './views/AuthLoadingView'; @@ -31,7 +34,7 @@ const SetUsernameStack = () => ( // App const Stack = createStackNavigator(); const App = React.memo(({ root }) => { - if (!root || root === 'background') { + if (!root || root === ROOT_BACKGROUND) { return null; } @@ -45,25 +48,25 @@ const App = React.memo(({ root }) => { > <> - {root === 'loading' ? ( + {root === ROOT_LOADING ? ( ) : null} - {root === 'outside' || root === 'newServer' ? ( + {root === ROOT_OUTSIDE || root === ROOT_NEW_SERVER ? ( ) : null} - {root === 'inside' ? ( + {root === ROOT_INSIDE ? ( ) : null} - {root === 'setUsername' ? ( + {root === ROOT_SET_USERNAME ? ( state.app.root); - if (currentRoot !== 'inside') { - yield put(appStart('inside')); + if (currentRoot !== ROOT_INSIDE) { + yield put(appStart({ root: ROOT_INSIDE })); } } // after a successful login, check if it's been invited via invite link currentRoot = yield select(state => state.app.root); - if (currentRoot === 'inside') { + if (currentRoot === ROOT_INSIDE) { const inviteLinkToken = yield select(state => state.inviteLinks.token); if (inviteLinkToken) { yield put(inviteLinksRequest(inviteLinkToken)); @@ -155,7 +155,7 @@ const handleLoginSuccess = function* handleLoginSuccess({ user }) { }; const handleLogout = function* handleLogout({ forcedByServer }) { - yield put(appStart('loading', I18n.t('Logging_out'))); + yield put(appStart({ root: ROOT_LOADING, text: I18n.t('Logging_out') })); const server = yield select(getServer); if (server) { try { @@ -163,7 +163,7 @@ const handleLogout = function* handleLogout({ forcedByServer }) { // if the user was logged out by the server if (forcedByServer) { - yield put(appStart('outside')); + yield put(appStart({ root: ROOT_OUTSIDE })); showErrorAlert(I18n.t('Logged_out_by_server'), I18n.t('Oops')); EventEmitter.emit('NewServer', { server }); } else { @@ -183,10 +183,10 @@ const handleLogout = function* handleLogout({ forcedByServer }) { } } // if there's no servers, go outside - yield put(appStart('outside')); + yield put(appStart({ root: ROOT_OUTSIDE })); } } catch (e) { - yield put(appStart('outside')); + yield put(appStart({ root: ROOT_OUTSIDE })); log(e); } } diff --git a/app/sagas/selectServer.js b/app/sagas/selectServer.js index 7596e05d1..429b2642c 100644 --- a/app/sagas/selectServer.js +++ b/app/sagas/selectServer.js @@ -6,7 +6,6 @@ import semver from 'semver'; import Navigation from '../lib/Navigation'; import { SERVER } from '../actions/actionsTypes'; -import * as actions from '../actions'; import { serverFailure, selectServerRequest, selectServerSuccess, selectServerFailure } from '../actions/server'; @@ -19,6 +18,7 @@ import { extractHostname } from '../utils/server'; import I18n from '../i18n'; import { SERVERS, TOKEN, SERVER_URL } from '../constants/userDefaults'; import { BASIC_AUTH_KEY, setBasicAuth } from '../utils/fetch'; +import { appStart, ROOT_INSIDE, ROOT_OUTSIDE } from '../actions/app'; const getServerInfo = function* getServerInfo({ server, raiseError = true }) { try { @@ -103,10 +103,10 @@ const handleSelectServer = function* handleSelectServer({ server, version, fetch yield put(clearSettings()); yield RocketChat.connect({ server, user, logoutOnError: true }); yield put(setUser(user)); - yield put(actions.appStart('inside')); + yield put(appStart({ root: ROOT_INSIDE })); } else { yield RocketChat.connect({ server }); - yield put(actions.appStart('outside')); + yield put(appStart({ root: ROOT_OUTSIDE })); } // We can't use yield here because fetch of Settings & Custom Emojis is slower diff --git a/app/sagas/state.js b/app/sagas/state.js index 3c4d63e32..bb35eec16 100644 --- a/app/sagas/state.js +++ b/app/sagas/state.js @@ -5,10 +5,11 @@ import { setBadgeCount } from '../notifications/push'; import log from '../utils/log'; import { localAuthenticate, saveLastLocalAuthenticationSession } from '../utils/localAuthentication'; import { APP_STATE } from '../actions/actionsTypes'; +import { ROOT_OUTSIDE } from '../actions/app'; const appHasComeBackToForeground = function* appHasComeBackToForeground() { const appRoot = yield select(state => state.app.root); - if (appRoot === 'outside') { + if (appRoot === ROOT_OUTSIDE) { return; } const auth = yield select(state => state.login.isAuthenticated); @@ -27,7 +28,7 @@ const appHasComeBackToForeground = function* appHasComeBackToForeground() { const appHasComeBackToBackground = function* appHasComeBackToBackground() { const appRoot = yield select(state => state.app.root); - if (appRoot === 'outside') { + if (appRoot === ROOT_OUTSIDE) { return; } const auth = yield select(state => state.login.isAuthenticated); diff --git a/app/stacks/OutsideStack.js b/app/stacks/OutsideStack.js index 6c93fcff2..56f4b8936 100644 --- a/app/stacks/OutsideStack.js +++ b/app/stacks/OutsideStack.js @@ -14,6 +14,7 @@ import ForgotPasswordView from '../views/ForgotPasswordView'; import RegisterView from '../views/RegisterView'; import LegalView from '../views/LegalView'; import AuthenticationWebView from '../views/AuthenticationWebView'; +import { ROOT_OUTSIDE } from '../actions/app'; // Outside const Outside = createStackNavigator(); @@ -22,7 +23,7 @@ const _OutsideStack = ({ root }) => { return ( - {root === 'outside' ? ( + {root === ROOT_OUTSIDE ? ( setTimeout(resolve, 300))]); - await appStart('inside'); + await appStart({ root: ROOT_INSIDE }); } changeLanguage = async(language) => { @@ -199,7 +199,7 @@ const mapStateToProps = state => ({ const mapDispatchToProps = dispatch => ({ setUser: params => dispatch(setUserAction(params)), - appStart: (...params) => dispatch(appStartAction(...params)) + appStart: params => dispatch(appStartAction(params)) }); export default connect(mapStateToProps, mapDispatchToProps)(withTheme(LanguageView)); diff --git a/app/views/NewServerView.js b/app/views/NewServerView.js index 0bbe9be68..b64f0bb98 100644 --- a/app/views/NewServerView.js +++ b/app/views/NewServerView.js @@ -15,7 +15,6 @@ import EventEmitter from '../utils/events'; import { selectServerRequest, serverRequest, serverInitAdd, serverFinishAdd } from '../actions/server'; -import { appStart as appStartAction } from '../actions'; import sharedStyles from './Styles'; import Button from '../containers/Button'; import TextInput from '../containers/TextInput'; @@ -342,15 +341,14 @@ class NewServerView extends React.Component { const mapStateToProps = state => ({ connecting: state.server.connecting, - previousServer: state.app.text + previousServer: state.app.previousServer }); const mapDispatchToProps = dispatch => ({ connectServer: (server, certificate) => dispatch(serverRequest(server, certificate)), initAdd: () => dispatch(serverInitAdd()), finishAdd: () => dispatch(serverFinishAdd()), - selectServer: server => dispatch(selectServerRequest(server)), - appStart: root => dispatch(appStartAction(root)) + selectServer: server => dispatch(selectServerRequest(server)) }); export default connect(mapStateToProps, mapDispatchToProps)(withTheme(NewServerView)); diff --git a/app/views/OnboardingView/index.js b/app/views/OnboardingView/index.js index 59c5ac775..f2c1eb6e4 100644 --- a/app/views/OnboardingView/index.js +++ b/app/views/OnboardingView/index.js @@ -6,7 +6,7 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import Orientation from 'react-native-orientation-locker'; -import { appStart as appStartAction } from '../../actions'; +import { appStart as appStartAction, ROOT_BACKGROUND } from '../../actions/app'; import I18n from '../../i18n'; import Button from '../../containers/Button'; import styles from './styles'; @@ -48,7 +48,7 @@ class OnboardingView extends React.Component { handleBackPress = () => { const { appStart } = this.props; - appStart('background'); + appStart({ root: ROOT_BACKGROUND }); return false; } @@ -98,7 +98,7 @@ class OnboardingView extends React.Component { } const mapDispatchToProps = dispatch => ({ - appStart: root => dispatch(appStartAction(root)) + appStart: params => dispatch(appStartAction(params)) }); export default connect(null, mapDispatchToProps)(withTheme(OnboardingView)); diff --git a/app/views/RoomsListView/ServerDropdown.js b/app/views/RoomsListView/ServerDropdown.js index 302e8cd1a..d3a9ac3eb 100644 --- a/app/views/RoomsListView/ServerDropdown.js +++ b/app/views/RoomsListView/ServerDropdown.js @@ -10,7 +10,7 @@ import RNUserDefaults from 'rn-user-defaults'; import { toggleServerDropdown as toggleServerDropdownAction } from '../../actions/rooms'; import { selectServerRequest as selectServerRequestAction } from '../../actions/server'; -import { appStart as appStartAction } from '../../actions'; +import { appStart as appStartAction, ROOT_NEW_SERVER } from '../../actions/app'; import styles from './styles'; import Touch from '../../utils/touch'; import RocketChat from '../../lib/rocketchat'; @@ -37,6 +37,7 @@ class ServerDropdown extends Component { split: PropTypes.bool, server: PropTypes.string, theme: PropTypes.string, + appStart: PropTypes.func, toggleServerDropdown: PropTypes.func, selectServerRequest: PropTypes.func } @@ -128,7 +129,7 @@ class ServerDropdown extends Component { this.close(); setTimeout(() => { - appStart('newServer', server); + appStart({ root: ROOT_NEW_SERVER, previousServer: server }); }, ANIMATION_DURATION); } @@ -144,7 +145,7 @@ class ServerDropdown extends Component { } if (!userId) { setTimeout(() => { - appStart('newServer', server); + appStart({ root: ROOT_NEW_SERVER, previousServer: server }); this.newServerTimeout = setTimeout(() => { EventEmitter.emit('NewServer', { server }); }, ANIMATION_DURATION); @@ -287,7 +288,7 @@ const mapStateToProps = state => ({ const mapDispatchToProps = dispatch => ({ toggleServerDropdown: () => dispatch(toggleServerDropdownAction()), selectServerRequest: server => dispatch(selectServerRequestAction(server)), - appStart: (param, text) => dispatch(appStartAction(param, text)) + appStart: params => dispatch(appStartAction(params)) }); export default withNavigation(connect(mapStateToProps, mapDispatchToProps)(withTheme(withSplit(ServerDropdown)))); diff --git a/app/views/RoomsListView/index.js b/app/views/RoomsListView/index.js index c574a7849..340d5cf8c 100644 --- a/app/views/RoomsListView/index.js +++ b/app/views/RoomsListView/index.js @@ -29,7 +29,7 @@ import { roomsRequest as roomsRequestAction, closeServerDropdown as closeServerDropdownAction } from '../../actions/rooms'; -import { appStart as appStartAction } from '../../actions'; +import { appStart as appStartAction, ROOT_BACKGROUND } from '../../actions/app'; import debounce from '../../utils/debounce'; import { isIOS, isAndroid, isTablet } from '../../utils/deviceInfo'; import RoomsListHeaderView from './Header'; @@ -495,7 +495,7 @@ class RoomsListView extends React.Component { this.cancelSearch(); return true; } - appStart('background'); + appStart({ root: ROOT_BACKGROUND }); return false; }; @@ -874,7 +874,7 @@ const mapDispatchToProps = dispatch => ({ toggleSortDropdown: () => dispatch(toggleSortDropdownAction()), openSearchHeader: () => dispatch(openSearchHeaderAction()), closeSearchHeader: () => dispatch(closeSearchHeaderAction()), - appStart: () => dispatch(appStartAction()), + appStart: params => dispatch(appStartAction(params)), roomsRequest: params => dispatch(roomsRequestAction(params)), selectServerRequest: server => dispatch(selectServerRequestAction(server)), closeServerDropdown: () => dispatch(closeServerDropdownAction()) diff --git a/app/views/SettingsView/index.js b/app/views/SettingsView/index.js index 29a68cbf0..a98726447 100644 --- a/app/views/SettingsView/index.js +++ b/app/views/SettingsView/index.js @@ -28,13 +28,12 @@ import styles from './styles'; import { loggerConfig, analytics } from '../../utils/log'; import { PLAY_MARKET_LINK, APP_STORE_LINK, LICENSE_LINK } from '../../constants/links'; import { withTheme } from '../../theme'; -import { themedHeader } from '../../utils/navigation'; import SidebarView from '../SidebarView'; import { withSplit } from '../../split'; import Navigation from '../../lib/Navigation'; import { LISTENER } from '../../containers/Toast'; import EventEmitter from '../../utils/events'; -import { appStart as appStartAction } from '../../actions'; +import { appStart as appStartAction, ROOT_LOADING } from '../../actions/app'; import { onReviewPress } from '../../utils/review'; import { getUserSelector } from '../../selectors/login'; import SafeAreaView from '../../containers/SafeAreaView'; @@ -99,7 +98,7 @@ class SettingsView extends React.Component { const { server: { server }, appStart, selectServerRequest } = this.props; - await appStart('loading', I18n.t('Clear_cache_loading')); + await appStart({ root: ROOT_LOADING, text: I18n.t('Clear_cache_loading') }); await RocketChat.clearCache({ server }); await selectServerRequest(server, null, true); } @@ -345,7 +344,7 @@ const mapDispatchToProps = dispatch => ({ logout: () => dispatch(logoutAction()), selectServerRequest: params => dispatch(selectServerRequestAction(params)), toggleCrashReport: params => dispatch(toggleCrashReportAction(params)), - appStart: (...params) => dispatch(appStartAction(...params)) + appStart: params => dispatch(appStartAction(params)) }); export default connect(mapStateToProps, mapDispatchToProps)(withTheme(withSplit(SettingsView)));