diff --git a/client/ios/Berty.xcodeproj/project.pbxproj b/client/ios/Berty.xcodeproj/project.pbxproj index a50d5f7273..3b87d8825e 100644 --- a/client/ios/Berty.xcodeproj/project.pbxproj +++ b/client/ios/Berty.xcodeproj/project.pbxproj @@ -5,7 +5,6 @@ }; objectVersion = 46; objects = { - /* Begin PBXBuildFile section */ 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; diff --git a/client/packages/common/helpers/withDeepLinkHandler.js b/client/packages/common/helpers/withDeepLinkHandler.js index f4244732b4..a07b97d727 100644 --- a/client/packages/common/helpers/withDeepLinkHandler.js +++ b/client/packages/common/helpers/withDeepLinkHandler.js @@ -1,83 +1,53 @@ import { Linking } from 'react-native' import React from 'react' -import hoistNonReactStatics from 'hoist-non-react-statics' import { BASE_WEBSITE_URL } from '../constants' import { parse as parseUrl } from './url' -export const withDeepLinkHandler = Component => { - class DeepLinkHandler extends Component { - initialState = { - routeName: 'switch/main', - params: {}, - } - - state = this.initialState - - handleOpenURL = event => { - let url = parseUrl( - event.url.replace('berty://berty.chat/', `${BASE_WEBSITE_URL}/`) - ) - switch (url.pathname) { - case '/chats/detail': - if (url.hashParts['id']) { - // TODO: remove that part when we'll have get rid of graphql/relay - url.hashParts['id'] = btoa(`conversation:${url.hashParts['id']}`) +import { withHOC } from './views' +import { withNavigation } from 'react-navigation' + +export const withDeepLinkHandler = Component => + withHOC( + withNavigation( + class WithDeepLinkHandler extends React.PureComponent { + handleOpenURL = event => { + let url = parseUrl( + event.url.replace('berty://berty.chat/', `${BASE_WEBSITE_URL}/`) + ) + switch (url.pathname) { + case '/chats/detail': + this.props.navigation.navigate('chats/detail', url.hashParts) + break + case '/id': + this.props.navigation.navigate('modal/contacts/card', { + id: url.hashParts.key, + displayName: url.hashParts.name, + }) + break + default: + console.warn(`Unhandled deep link, URL: ${event.url}`) + break } - this.setState({ - routeName: 'chats/detail', - params: url.hashParts, - }) - break - case '/id': - this.setState({ - routeName: 'modal/contacts/card', - params: url.hashParts, - }) - break - default: - console.warn(`Unhandled deep link, URL: ${event.url}`) - break - } - } - - clearDeepLink = () => { - this.setState(this.initialState) - } + } - setDeepLink = deepLink => this.setState(deepLink) + componentDidMount() { + Linking.addEventListener('url', this.handleOpenURL) - componentDidMount() { - Linking.addEventListener('url', this.handleOpenURL) + Linking.getInitialURL() + .then(url => url != null && this.handleOpenURL({ url })) + .catch(console.error) + } - Linking.getInitialURL() - .then(url => { - if (url !== null) { - this.handleOpenURL({ url }) - } - }) - .catch(() => {}) - } - - componentWillUnmount() { - Linking.removeEventListener('url', this.handleOpenURL) - } + componentWillUnmount() { + Linking.removeEventListener('url', this.handleOpenURL) + } - render() { - return ( - this.setDeepLink(deepLink), - clearDeepLink: () => this.clearDeepLink(), - }} - /> - ) - } - } - - return hoistNonReactStatics(DeepLinkHandler, Component) -} + render() { + return + } + } + ) + )(Component) export default withDeepLinkHandler diff --git a/client/packages/navigation/AppNavigator.js b/client/packages/navigation/AppNavigator.js index e43dc08cfb..6af088a76a 100644 --- a/client/packages/navigation/AppNavigator.js +++ b/client/packages/navigation/AppNavigator.js @@ -5,13 +5,14 @@ import { Picker } from '@berty/screen/Picker' import Auth from '@berty/screen/Accounts/Auth' import MainNavigator from './MainNavigator' import OnboardingNavigator from './OnboardingNavigator' +import { withDeepLinkHandler } from '@berty/common/helpers/withDeepLinkHandler' const AppNavigator = createSwitchNavigator( { 'accounts/auth': Auth, 'switch/picker': Picker, 'switch/onboarding': OnboardingNavigator, - 'switch/main': MainNavigator, + 'switch/main': withDeepLinkHandler(MainNavigator), }, { initialRouteName: 'accounts/auth', diff --git a/client/packages/screen/Accounts/Auth.js b/client/packages/screen/Accounts/Auth.js index bd9ddde512..aada232cc9 100644 --- a/client/packages/screen/Accounts/Auth.js +++ b/client/packages/screen/Accounts/Auth.js @@ -9,13 +9,11 @@ import { defaultUsername } from '@berty/common/helpers/contacts' // import { getAvailableUpdate } from '@berty/update' import NavigationService from '@berty/common/helpers/NavigationService' import sleep from '@berty/common/helpers/sleep' -import withDeepLinkHandler from '@berty/common/helpers/withDeepLinkHandler' import { withUpdateContext } from '@berty/update/context' import { withBridgeContext } from '@berty/bridge/Context' import { rpc, service, middleware } from '@berty/bridge' import { getAvailableUpdate } from '@berty/update' -@withDeepLinkHandler @withBridgeContext @withUpdateContext @withNamespaces() @@ -53,14 +51,6 @@ class Auth extends PureComponent { } } - openDeepLink = () => { - const { - deepLinkHandler: { deepLink }, - navigation, - } = this.props - navigation.navigate(deepLink) - } - init = async config => { const { t, bridge } = this.props @@ -136,10 +126,8 @@ class Auth extends PureComponent { this.props.bridge.setContext(bridge) - this.openDeepLink() this.props.navigation.navigate('switch/picker', { firstLaunch, - deepLink: this.props.deepLinkHandler.deepLink, }) } diff --git a/client/packages/screen/Contacts/ContactCardModal.js b/client/packages/screen/Contacts/ContactCardModal.js index fc3d4a7fb8..c1b4259787 100644 --- a/client/packages/screen/Contacts/ContactCardModal.js +++ b/client/packages/screen/Contacts/ContactCardModal.js @@ -21,10 +21,10 @@ class ContactCardModal extends React.Component { const { context, navigation } = this.props const navigationData = { id: navigation.getParam('id'), - displayName: navigation.getParam('displayName'), + displayName: + navigation.getParam('displayName') || navigation.getParam('name'), status: navigation.getParam('status'), } - return ( {(data = navigationData) => ( diff --git a/client/packages/screen/Picker.js b/client/packages/screen/Picker.js index 5801e9d6b2..650c2608e5 100644 --- a/client/packages/screen/Picker.js +++ b/client/packages/screen/Picker.js @@ -13,7 +13,7 @@ export class Picker extends React.Component { this.props.navigation.getParam('firstLaunch', false) && !isIntegrationMode ? 'switch/onboarding' - : this.props.navigation.getParam('deepLink') + : 'switch/main' ) } diff --git a/core/go.mod b/core/go.mod index 5067f87173..f54aad53fe 100644 --- a/core/go.mod +++ b/core/go.mod @@ -8,11 +8,11 @@ require ( cloud.google.com/go v0.34.0 // indirect github.com/0xAX/notificator v0.0.0-20181105090803-d81462e38c21 github.com/akavel/rsrc v0.0.0-20170831122431-f6a15ece2cfd // indirect + github.com/asticode/go-astiamqp v1.0.0 // indirect github.com/asticode/go-astilectron v0.8.1-0.20190415090856-5d5f14367434 github.com/asticode/go-astilectron-bootstrap v0.0.0-20180616141213-b3211646d205 github.com/asticode/go-astilectron-bundler v0.0.0-20190426172205-155c2a10bbb1 // indirect github.com/asticode/go-astilog v1.0.0 - github.com/asticode/go-astitools v1.0.0 // indirect github.com/asticode/go-bindata v0.0.0-20151023091102-a0ff2567cfb7 // indirect github.com/brianvoe/gofakeit v3.17.0+incompatible github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd // indirect