Files
jitsi-meet/react/features/deep-linking/components/DeepLinkingMobilePage.js

153 lines
4.4 KiB
JavaScript
Raw Normal View History

2017-02-07 16:45:51 +02:00
/* @flow */
import PropTypes from 'prop-types';
2016-12-23 18:21:51 +02:00
import React, { Component } from 'react';
import { connect } from 'react-redux';
2017-01-13 16:37:53 -06:00
2017-02-28 20:55:12 -06:00
import { translate, translateToHTML } from '../../base/i18n';
import { HideNotificationBarStyle, Platform } from '../../base/react';
import { DialInSummary } from '../../invite';
2017-02-16 14:00:54 -06:00
import { _TNS } from '../constants';
import { generateDeepLinkingURL } from '../functions';
declare var interfaceConfig: Object;
2017-02-28 20:55:12 -06:00
/**
* The namespace of the CSS styles of DeepLinkingMobilePage.
2017-02-28 20:55:12 -06:00
*
* @private
* @type {string}
*/
const _SNS = 'deep-linking-mobile';
2017-02-28 20:55:12 -06:00
/**
* The map of platforms to URLs at which the mobile app for the associated
* platform is available for download.
2017-01-31 22:25:09 -06:00
*
* @private
2017-02-28 20:55:12 -06:00
* @type {Array<string>}
*/
2017-01-31 22:25:09 -06:00
const _URLS = {
android: interfaceConfig.MOBILE_DOWNLOAD_LINK_ANDROID
|| 'https://play.google.com/store/apps/details?id=org.jitsi.meet',
ios: interfaceConfig.MOBILE_DOWNLOAD_LINK_IOS
|| 'https://itunes.apple.com/us/app/jitsi-meet/id1165103905'
2016-12-23 18:21:51 +02:00
};
/**
2017-01-19 17:47:22 +02:00
* React component representing mobile browser page.
2016-12-23 18:21:51 +02:00
*
* @class DeepLinkingMobilePage
2016-12-23 18:21:51 +02:00
*/
class DeepLinkingMobilePage extends Component<*, *> {
2017-02-07 16:45:51 +02:00
state: Object;
2017-01-25 16:11:44 -06:00
/**
* DeepLinkingMobilePage component's property types.
2017-01-25 16:11:44 -06:00
*
* @static
*/
static propTypes = {
/**
* The name of the conference attempting to being joined.
*/
_room: PropTypes.string,
2017-02-28 20:55:12 -06:00
/**
* The function to translate human-readable text.
*
* @public
* @type {Function}
*/
t: PropTypes.func
};
2017-01-18 14:21:30 +02:00
/**
2017-01-31 22:25:09 -06:00
* Initializes the text and URL of the `Start a conference` / `Join the
* conversation` button which takes the user to the mobile app.
2017-01-18 14:21:30 +02:00
*
2017-01-31 22:25:09 -06:00
* @inheritdoc
2016-12-23 18:21:51 +02:00
*/
componentWillMount() {
this.setState({
joinURL: generateDeepLinkingURL()
2016-12-23 18:21:51 +02:00
});
}
/**
2017-01-31 22:25:09 -06:00
* Implements React's {@link Component#render()}.
2016-12-23 18:21:51 +02:00
*
2017-01-31 22:25:09 -06:00
* @inheritdoc
2016-12-23 18:21:51 +02:00
* @returns {ReactElement}
*/
render() {
const { _room, t } = this.props;
const { NATIVE_APP_NAME, SHOW_DEEP_LINKING_IMAGE } = interfaceConfig;
const downloadButtonClassName
2017-02-28 20:55:12 -06:00
= `${_SNS}__button ${_SNS}__button_primary`;
2016-12-23 18:21:51 +02:00
return (
2017-02-28 20:55:12 -06:00
<div className = { _SNS }>
<div className = 'header'>
2016-12-23 18:21:51 +02:00
<img
className = 'logo'
src = '../images/logo-deep-linking.png' />
</div>
<div className = { `${_SNS}__body` }>
{
SHOW_DEEP_LINKING_IMAGE
? <img
className = 'image'
src = '../images/deep-linking-image.png' />
: null
}
2017-02-28 20:55:12 -06:00
<p className = { `${_SNS}__text` }>
{
translateToHTML(
t,
`${_TNS}.appNotInstalled`,
{ app: NATIVE_APP_NAME })
2017-02-28 20:55:12 -06:00
}
2016-12-23 18:21:51 +02:00
</p>
<a href = { _URLS[Platform.OS] }>
<button className = { downloadButtonClassName }>
{ t(`${_TNS}.downloadApp`) }
2017-01-31 22:25:09 -06:00
</button>
</a>
<a
className = { `${_SNS}__href` }
href = { this.state.joinURL }>
{/* <button className = { `${_SNS}__button` }> */}
{ t(`${_TNS}.openApp`) }
{/* </button> */}
</a>
<DialInSummary
className = 'deep-linking-dial-in'
clickableNumbers = { true }
room = { _room } />
2016-12-23 18:21:51 +02:00
</div>
<HideNotificationBarStyle />
2016-12-23 18:21:51 +02:00
</div>
);
}
}
/**
* Maps (parts of) the Redux state to the associated props for the
* {@code DeepLinkingMobilePage} component.
*
* @param {Object} state - The Redux state.
* @private
* @returns {{
* _room: string
* }}
*/
function _mapStateToProps(state) {
return {
_room: state['features/base/conference'].room
};
}
export default translate(connect(_mapStateToProps)(DeepLinkingMobilePage));