UNPKG

react-native-gifted-chat-video-support

Version:

The most complete chat UI for React Native , now support send video thanks to react-native-video-player

104 lines (92 loc) 2.38 kB
/* eslint no-use-before-define: ["error", { "variables": false }] */ import PropTypes from 'prop-types'; import React from 'react'; import { StyleSheet, Text, TouchableOpacity, View, ViewPropTypes } from 'react-native'; import Color from './Color'; export default class Actions extends React.Component { constructor(props) { super(props); this.onActionsPress = this.onActionsPress.bind(this); } onActionsPress() { const { options } = this.props; const optionKeys = Object.keys(options); const cancelButtonIndex = optionKeys.indexOf('Cancel'); this.context.actionSheet().showActionSheetWithOptions( { options: optionKeys, cancelButtonIndex, tintColor: this.props.optionTintColor, }, (buttonIndex) => { const key = optionKeys[buttonIndex]; if (key) { options[key](this.props); } }, ); } renderIcon() { if (this.props.icon) { return this.props.icon(); } return ( <View style={[styles.wrapper, this.props.wrapperStyle]}> <Text style={[styles.iconText, this.props.iconTextStyle]}>+</Text> </View> ); } render() { return ( <TouchableOpacity style={[styles.container, this.props.containerStyle]} onPress={this.props.onPressActionButton || this.onActionsPress} > {this.renderIcon()} </TouchableOpacity> ); } } const styles = StyleSheet.create({ container: { width: 26, height: 26, marginLeft: 10, marginBottom: 10, }, wrapper: { borderRadius: 13, borderColor: Color.defaultColor, borderWidth: 2, flex: 1, }, iconText: { color: Color.defaultColor, fontWeight: 'bold', fontSize: 16, backgroundColor: Color.backgroundTransparent, textAlign: 'center', }, }); Actions.contextTypes = { actionSheet: PropTypes.func, }; Actions.defaultProps = { onSend: () => { }, options: {}, optionTintColor: Color.optionTintColor, icon: null, containerStyle: {}, iconTextStyle: {}, wrapperStyle: {}, }; Actions.propTypes = { onSend: PropTypes.func, options: PropTypes.object, optionTintColor: PropTypes.string, icon: PropTypes.func, onPressActionButton: PropTypes.func, wrapperStyle: ViewPropTypes.style, containerStyle: ViewPropTypes.style, iconTextStyle: Text.propTypes.style, };