// 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 {Text, TouchableOpacity, View} from 'react-native'; import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome'; import FormattedText from 'app/components/formatted_text'; import VectorIcon from 'app/components/vector_icon.js'; import getStyleSheet from './style'; export default class SettingsItem extends PureComponent { static propTypes = { defaultMessage: PropTypes.string.isRequired, i18nId: PropTypes.string, iconName: PropTypes.string, iconType: PropTypes.oneOf(['fontawesome', 'foundation', 'ion', 'material']), isDestructor: PropTypes.bool, centered: PropTypes.bool, onPress: PropTypes.func, rightComponent: PropTypes.node, separator: PropTypes.bool, showArrow: PropTypes.bool, theme: PropTypes.object.isRequired, }; static defaultProps = { isDestructor: false, separator: true, }; renderText = () => { const { centered, defaultMessage, i18nId, isDestructor, theme, } = this.props; const style = getStyleSheet(theme); const textStyle = [style.label]; if (isDestructor) { textStyle.push(style.destructor); } if (centered) { textStyle.push(style.centerLabel); } if (!i18nId) { return {defaultMessage}; } return ( ); }; render() { const { iconName, iconType, onPress, rightComponent, separator, showArrow, theme, } = this.props; const style = getStyleSheet(theme); let divider; if (separator) { divider = (); } let icon; if (iconType && iconName) { const iconStyle = [style.icon]; icon = ( ); } let additionalComponent; if (showArrow) { additionalComponent = ( ); } else if (rightComponent) { additionalComponent = rightComponent; } return ( {icon && {icon} } {this.renderText()} {Boolean(additionalComponent) && {additionalComponent} } {divider} ); } }