From 3b93c1100146e94c1d3cbda30c703d4e8c1a9b64 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 26 May 2020 13:37:30 -0300 Subject: [PATCH] Add server working --- app/AppContainer.js | 6 ++-- app/reducers/app.js | 4 ++- app/stacks/OutsideStack.js | 21 +++++++++---- app/views/NewServerView.js | 37 +++++++++-------------- app/views/RoomsListView/ServerDropdown.js | 12 +++++--- 5 files changed, 43 insertions(+), 37 deletions(-) diff --git a/app/AppContainer.js b/app/AppContainer.js index f62f1c23a..8ad2b6e52 100644 --- a/app/AppContainer.js +++ b/app/AppContainer.js @@ -30,7 +30,7 @@ const SetUsernameStack = () => ( // App const Stack = createStackNavigator(); -const App = ({ root }) => { +const App = React.memo(({ root }) => { if (!root || root === 'background') { return null; } @@ -51,7 +51,7 @@ const App = ({ root }) => { component={AuthLoadingView} /> ) : null} - {root === 'outside' ? ( + {root === 'outside' || root === 'newServer' ? ( { ); -}; +}); const mapStateToProps = state => ({ root: state.app.root }); diff --git a/app/reducers/app.js b/app/reducers/app.js index 1052d5a46..6338bdc02 100644 --- a/app/reducers/app.js +++ b/app/reducers/app.js @@ -2,6 +2,7 @@ import { APP, APP_STATE } from '../actions/actionsTypes'; const initialState = { root: null, + text: null, ready: false, foreground: true, background: false @@ -24,7 +25,8 @@ export default function app(state = initialState, action) { case APP.START: return { ...state, - root: action.root + root: action.root, + text: action.text, }; case APP.INIT: return { diff --git a/app/stacks/OutsideStack.js b/app/stacks/OutsideStack.js index f90100667..6c93fcff2 100644 --- a/app/stacks/OutsideStack.js +++ b/app/stacks/OutsideStack.js @@ -1,5 +1,6 @@ import React from 'react'; import { createStackNavigator } from '@react-navigation/stack'; +import { connect } from 'react-redux'; import { ThemeContext } from '../theme'; import { defaultHeader, themedHeader } from '../utils/navigation'; @@ -16,16 +17,18 @@ import AuthenticationWebView from '../views/AuthenticationWebView'; // Outside const Outside = createStackNavigator(); -const OutsideStack = () => { +const _OutsideStack = ({ root }) => { const { theme } = React.useContext(ThemeContext); return ( - + {root === 'outside' ? ( + + ) : null} { ); }; +const mapStateToProps = state => ({ + root: state.app.root +}); + +const OutsideStack = connect(mapStateToProps)(_OutsideStack); + // OutsideStackModal const OutsideModal = createStackNavigator(); const OutsideStackModal = () => { diff --git a/app/views/NewServerView.js b/app/views/NewServerView.js index b01e8095b..0bbe9be68 100644 --- a/app/views/NewServerView.js +++ b/app/views/NewServerView.js @@ -64,17 +64,6 @@ const styles = StyleSheet.create({ }); class NewServerView extends React.Component { - // TODO: ? - // static navigationOptions = ({ screenProps, navigation }) => { - // const previousServer = navigation.getParam('previousServer', null); - // const close = navigation.getParam('close', () => {}); - // return { - // headerLeft: previousServer ? : undefined, - // title: I18n.t('Workspaces'), - // ...themedHeader(screenProps.theme) - // }; - // } - static navigationOptions = { title: I18n.t('Workspaces') } @@ -86,15 +75,16 @@ class NewServerView extends React.Component { connectServer: PropTypes.func.isRequired, selectServer: PropTypes.func.isRequired, currentServer: PropTypes.string, + previousServer: PropTypes.string, initAdd: PropTypes.func, finishAdd: PropTypes.func } constructor(props) { super(props); - // TODO: add server logic - // this.previousServer = props.route.params?.previousServer; - // props.navigation.setParams({ close: this.close, previousServer: this.previousServer }); + props.navigation.setOptions({ + headerLeft: () => + }); // Cancel this.options = [I18n.t('Cancel')]; @@ -114,8 +104,8 @@ class NewServerView extends React.Component { } componentDidMount() { - const { initAdd } = this.props; - if (this.previousServer) { + const { initAdd, previousServer } = this.props; + if (previousServer) { initAdd(); } } @@ -126,8 +116,8 @@ class NewServerView extends React.Component { } handleBackPress = () => { - const { navigation } = this.props; - if (navigation.isFocused() && this.previousServer) { + const { navigation, previousServer } = this.props; + if (navigation.isFocused() && previousServer) { this.close(); return true; } @@ -139,9 +129,11 @@ class NewServerView extends React.Component { } close = () => { - const { selectServer, currentServer, finishAdd } = this.props; - if (this.previousServer !== currentServer) { - selectServer(this.previousServer); + const { + selectServer, currentServer, finishAdd, previousServer + } = this.props; + if (previousServer !== currentServer) { + selectServer(previousServer); } finishAdd(); } @@ -349,7 +341,8 @@ class NewServerView extends React.Component { } const mapStateToProps = state => ({ - connecting: state.server.connecting + connecting: state.server.connecting, + previousServer: state.app.text }); const mapDispatchToProps = dispatch => ({ diff --git a/app/views/RoomsListView/ServerDropdown.js b/app/views/RoomsListView/ServerDropdown.js index 9c12cd58f..302e8cd1a 100644 --- a/app/views/RoomsListView/ServerDropdown.js +++ b/app/views/RoomsListView/ServerDropdown.js @@ -10,6 +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 styles from './styles'; import Touch from '../../utils/touch'; import RocketChat from '../../lib/rocketchat'; @@ -123,17 +124,17 @@ class ServerDropdown extends Component { } addServer = () => { - const { server, navigation } = this.props; + const { server, appStart } = this.props; this.close(); setTimeout(() => { - navigation.navigate('NewServerView', { previousServer: server }); + appStart('newServer', server); }, ANIMATION_DURATION); } select = async(server) => { const { - server: currentServer, selectServerRequest, navigation, split + server: currentServer, selectServerRequest, navigation, split, appStart } = this.props; this.close(); if (currentServer !== server) { @@ -143,7 +144,7 @@ class ServerDropdown extends Component { } if (!userId) { setTimeout(() => { - navigation.navigate('NewServerView', { previousServer: currentServer }); + appStart('newServer', server); this.newServerTimeout = setTimeout(() => { EventEmitter.emit('NewServer', { server }); }, ANIMATION_DURATION); @@ -285,7 +286,8 @@ const mapStateToProps = state => ({ const mapDispatchToProps = dispatch => ({ toggleServerDropdown: () => dispatch(toggleServerDropdownAction()), - selectServerRequest: server => dispatch(selectServerRequestAction(server)) + selectServerRequest: server => dispatch(selectServerRequestAction(server)), + appStart: (param, text) => dispatch(appStartAction(param, text)) }); export default withNavigation(connect(mapStateToProps, mapDispatchToProps)(withTheme(withSplit(ServerDropdown))));