diff --git a/app/mattermost.js b/app/mattermost.js index 8d2799fae..da6d56c54 100644 --- a/app/mattermost.js +++ b/app/mattermost.js @@ -57,6 +57,12 @@ const launchApp = (credentials) => { const store = Store.redux; waitForHydration(store, async () => { + Linking.getInitialURL().then((url) => { + if (url) { + store.dispatch(setDeepLinkURL(url)); + } + }); + if (credentials) { const {previousVersion} = store.getState().app; const valid = validatePreviousVersion(previousVersion); @@ -78,12 +84,6 @@ const launchApp = (credentials) => { telemetry.startSinceLaunch(['start:splash_screen']); EphemeralStore.appStarted = true; - - Linking.getInitialURL().then((url) => { - if (url) { - store.dispatch(setDeepLinkURL(url)); - } - }); }; const launchAppAndAuthenticateIfNeeded = async (credentials) => { diff --git a/app/screens/select_server/index.js b/app/screens/select_server/index.js index a8300577c..cdaf07d23 100644 --- a/app/screens/select_server/index.js +++ b/app/screens/select_server/index.js @@ -24,6 +24,7 @@ function mapStateToProps(state) { ...state.views.selectServer, config, currentVersion, + deepLinkURL: state.views.root.deepLinkURL, hasConfigAndLicense: Object.keys(config).length > 0 && Object.keys(license).length > 0, latestVersion, license, diff --git a/app/screens/select_server/select_server.js b/app/screens/select_server/select_server.js index 039a001a4..b068cab4d 100644 --- a/app/screens/select_server/select_server.js +++ b/app/screens/select_server/select_server.js @@ -24,6 +24,7 @@ import { import Button from 'react-native-button'; import RNFetchBlob from 'rn-fetch-blob'; import merge from 'deepmerge'; +import urlParse from 'url-parse'; import {resetToChannel, goToScreen} from '@actions/navigation'; import LocalConfig from '@assets/config'; @@ -63,6 +64,7 @@ export default class SelectServer extends PureComponent { license: PropTypes.object, minVersion: PropTypes.string, serverUrl: PropTypes.string.isRequired, + deepLinkURL: PropTypes.string, }; static defaultProps = { @@ -80,12 +82,21 @@ export default class SelectServer extends PureComponent { connected: false, connecting: false, error: null, - url: props.serverUrl, }; this.cancelPing = null; } + static getDerivedStateFromProps(props, state) { + if (state.url === undefined && props.allowOtherServers && props.deepLinkURL) { + const url = urlParse(props.deepLinkURL).host; + return {url}; + } else if (state.url === undefined && props.serverUrl) { + return {url: props.serverUrl}; + } + return null; + } + componentDidMount() { this.navigationEventListener = Navigation.events().bindComponent(this); @@ -364,7 +375,6 @@ export default class SelectServer extends PureComponent { }; sanitizeUrl = (url, useHttp = false) => { - const urlParse = require('url-parse'); let preUrl = urlParse(url, true); if (!preUrl.host || preUrl.protocol === 'file:') { @@ -391,7 +401,6 @@ export default class SelectServer extends PureComponent { this.cancelPing(); - const urlParse = require('url-parse'); const host = urlParse(this.state.url, true).host || this.state.url; const {formatMessage} = this.context.intl;