// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import React, {PureComponent} from 'react'; import PropTypes from 'prop-types'; import { Linking, ScrollView, Text, TouchableOpacity, View, } from 'react-native'; import DeviceInfo from 'react-native-device-info'; import FormattedText from 'app/components/formatted_text'; import StatusBar from 'app/components/status_bar'; import {changeOpacity, makeStyleSheetFromTheme, setNavigatorStyles} from 'app/utils/theme'; import AppIcon from 'app/components/app_icon'; import Config from 'assets/config'; const MATTERMOST_BUNDLE_IDS = ['com.mattermost.rnbeta', 'com.mattermost.rn']; export default class About extends PureComponent { static propTypes = { config: PropTypes.object.isRequired, license: PropTypes.object.isRequired, navigator: PropTypes.object.isRequired, theme: PropTypes.object.isRequired, }; componentWillReceiveProps(nextProps) { if (this.props.theme !== nextProps.theme) { setNavigatorStyles(this.props.navigator, nextProps.theme); } } handleAboutTeam = () => { Linking.openURL(Config.AboutTeamURL); }; handleAboutEnterprise = () => { Linking.openURL(Config.AboutEnterpriseURL); }; handlePlatformNotice = () => { Linking.openURL(Config.PlatformNoticeURL); }; handleMobileNotice = () => { Linking.openURL(Config.MobileNoticeURL); }; handleTermsOfService = () => { Linking.openURL(this.props.config.TermsOfServiceLink); }; handlePrivacyPolicy = () => { Linking.openURL(this.props.config.PrivacyPolicyLink); } render() { const {theme, config, license} = this.props; const style = getStyleSheet(theme); let title = ( ); let subTitle = ( ); let learnMore = ( {Config.TeamEditionLearnURL} ); let licensee; if (config.BuildEnterpriseReady === 'true') { title = ( ); subTitle = ( ); learnMore = ( {Config.EELearnURL} ); if (license.IsLicensed === 'true') { title = ( ); licensee = ( ); } } let serverVersion; if (config.BuildNumber === config.Version) { serverVersion = ( ); } else { serverVersion = ( ); } let termsOfService; if (config.TermsOfServiceLink) { termsOfService = ( ); } let privacyPolicy; if (config.PrivacyPolicyLink) { privacyPolicy = ( ); } let tosPrivacyHyphen; if (termsOfService && privacyPolicy) { tosPrivacyHyphen = ( {' - '} ); } return ( {`${config.SiteName} `} {title} {subTitle} {serverVersion} {licensee} {learnMore} {!MATTERMOST_BUNDLE_IDS.includes(DeviceInfo.getBundleId()) && } {termsOfService} {tosPrivacyHyphen} {privacyPolicy} ), mobile: ( ), }} /> {config.BuildHash} {config.BuildHashEnterprise} {config.BuildDate} ); } } const getStyleSheet = makeStyleSheetFromTheme((theme) => { return { wrapper: { flex: 1, backgroundColor: theme.centerChannelBg, }, scrollView: { flex: 1, backgroundColor: changeOpacity(theme.centerChannelColor, 0.06), }, scrollViewContent: { paddingBottom: 30, }, logoContainer: { alignItems: 'center', flex: 1, height: 200, paddingVertical: 40, }, infoContainer: { flex: 1, flexDirection: 'column', paddingHorizontal: 20, }, titleContainer: { flex: 1, marginBottom: 20, }, title: { fontSize: 22, color: theme.centerChannelColor, }, subtitle: { color: changeOpacity(theme.centerChannelColor, 0.5), fontSize: 19, marginBottom: 15, }, learnContainer: { flex: 1, flexDirection: 'column', marginVertical: 20, }, learn: { color: theme.centerChannelColor, fontSize: 16, }, learnLink: { color: theme.linkColor, fontSize: 16, }, info: { color: theme.centerChannelColor, fontSize: 16, lineHeight: 19, }, licenseContainer: { flex: 1, flexDirection: 'row', marginTop: 20, }, noticeContainer: { flex: 1, flexDirection: 'column', }, noticeLink: { color: theme.linkColor, fontSize: 11, lineHeight: 13, }, hashContainer: { flex: 1, flexDirection: 'column', }, footerGroup: { flex: 1, }, footerTitleText: { color: changeOpacity(theme.centerChannelColor, 0.5), fontSize: 11, fontWeight: '600', lineHeight: 13, }, footerText: { color: changeOpacity(theme.centerChannelColor, 0.5), fontSize: 11, lineHeight: 13, marginBottom: 10, }, copyrightText: { marginBottom: 0, }, hyphenText: { marginBottom: 0, }, tosPrivacyContainer: { flex: 1, flexDirection: 'row', marginBottom: 10, }, }; });