// 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 { StyleSheet, Text, TouchableOpacity, View, } from 'react-native'; import IconFont from 'react-native-vector-icons/FontAwesome'; import FormattedText from 'app/components/formatted_text'; import {preventDoubleTap} from 'app/utils/tap'; export default class OptionsModalList extends PureComponent { static propTypes = { items: PropTypes.array.isRequired, onCancelPress: PropTypes.func, onItemPress: PropTypes.func, }; handleCancelPress = preventDoubleTap(() => { if (this.props.onCancelPress) { this.props.onCancelPress(); } }); handleItemPress = preventDoubleTap((action) => { this.props.onItemPress(); setTimeout(() => { if (typeof action === 'function') { action(); } }, 100); }); renderOptions = () => { const {items} = this.props; const options = items.map((item, index) => { let textComponent; let optionIconStyle = style.optionIcon; if (typeof item.iconStyle !== 'undefined') { optionIconStyle = item.iconStyle; } if (item.text.hasOwnProperty('id')) { textComponent = ( ); } else { textComponent = {item.text}; } return ( this.handleItemPress(item.action)} style={style.option} > {textComponent} {item.icon && } ); }); const cancel = ( ); return [ ...options, cancel, ]; }; render() { return ( {this.renderOptions()} ); } } const style = StyleSheet.create({ option: { alignSelf: 'stretch', alignItems: 'center', flexDirection: 'row', justifyContent: 'space-between', padding: 15, }, optionBorder: { borderBottomWidth: 1, borderBottomColor: 'rgba(0, 0, 0, 0.1)', }, optionContainer: { alignSelf: 'stretch', backgroundColor: 'white', borderRadius: 2, marginHorizontal: 30, }, optionIcon: { color: '#7f8180', }, optionText: { color: '#000', flex: 1, fontSize: 16, }, wrapper: { flex: 1, alignItems: 'center', justifyContent: 'center', }, });