| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 | 
							- // @flow
 - 
 - import React, { Component } from 'react';
 - import { TextInput, TouchableOpacity, View } from 'react-native';
 - 
 - import { translate } from '../../../base/i18n';
 - import { Icon, IconChatSend } from '../../../base/icons';
 - import { Platform } from '../../../base/react';
 - 
 - import styles from './styles';
 - 
 - type Props = {
 - 
 -     /**
 -      * Callback to invoke on message send.
 -      */
 -     onSend: Function,
 - 
 -     /**
 -      * Function to be used to translate i18n labels.
 -      */
 -     t: Function
 - };
 - 
 - type State = {
 - 
 -     /**
 -      * Boolean to show if an extra padding needs to be added to the bar.
 -      */
 -     addPadding: boolean,
 - 
 -     /**
 -      * The value of the input field.
 -      */
 -     message: string,
 - 
 -     /**
 -      * Boolean to show or hide the send button.
 -      */
 -     showSend: boolean
 - };
 - 
 - /**
 -  * Implements the chat input bar with text field and action(s).
 -  */
 - class ChatInputBar extends Component<Props, State> {
 -     /**
 -      * Instantiates a new instance of the component.
 -      *
 -      * @inheritdoc
 -      */
 -     constructor(props: Props) {
 -         super(props);
 - 
 -         this.state = {
 -             addPadding: false,
 -             message: '',
 -             showSend: false
 -         };
 - 
 -         this._onChangeText = this._onChangeText.bind(this);
 -         this._onFieldReferenceAvailable = this._onFieldReferenceAvailable.bind(this);
 -         this._onFocused = this._onFocused.bind(this);
 -         this._onSubmit = this._onSubmit.bind(this);
 -     }
 - 
 -     /**
 -      * Implements {@code Component#render}.
 -      *
 -      * @inheritdoc
 -      */
 -     render() {
 -         return (
 -             <View
 -                 style = { [
 -                     styles.inputBar,
 -                     this.state.addPadding ? styles.extraBarPadding : null
 -                 ] }>
 -                 <TextInput
 -                     blurOnSubmit = { false }
 -                     multiline = { false }
 -                     onBlur = { this._onFocused(false) }
 -                     onChangeText = { this._onChangeText }
 -                     onFocus = { this._onFocused(true) }
 -                     onSubmitEditing = { this._onSubmit }
 -                     placeholder = { this.props.t('chat.fieldPlaceHolder') }
 -                     ref = { this._onFieldReferenceAvailable }
 -                     returnKeyType = 'send'
 -                     style = { styles.inputField }
 -                     value = { this.state.message } />
 -                 {
 -                     this.state.showSend && <TouchableOpacity onPress = { this._onSubmit }>
 -                         <Icon
 -                             src = { IconChatSend }
 -                             style = { styles.sendButtonIcon } />
 -                     </TouchableOpacity>
 -                 }
 -             </View>
 -         );
 -     }
 - 
 -     _onChangeText: string => void;
 - 
 -     /**
 -      * Callback to handle the change of the value of the text field.
 -      *
 -      * @param {string} text - The current value of the field.
 -      * @returns {void}
 -      */
 -     _onChangeText(text) {
 -         this.setState({
 -             message: text,
 -             showSend: Boolean(text)
 -         });
 -     }
 - 
 -     _onFieldReferenceAvailable: Object => void;
 - 
 -     /**
 -      * Callback to be invoked when the field reference is available.
 -      *
 -      * @param {Object} field - The reference to the field.
 -      * @returns {void}
 -      */
 -     _onFieldReferenceAvailable(field) {
 -         field && field.focus();
 -     }
 - 
 -     _onFocused: boolean => Function;
 - 
 -     /**
 -      * Constructs a callback to be used to update the padding of the field if necessary.
 -      *
 -      * @param {boolean} focused - True of the field is focused.
 -      * @returns {Function}
 -      */
 -     _onFocused(focused) {
 -         return () => {
 -             Platform.OS === 'android' && this.setState({
 -                 addPadding: focused
 -             });
 -         };
 -     }
 - 
 -     _onSubmit: () => void;
 - 
 -     /**
 -      * Callback to handle the submit event of the text field.
 -      *
 -      * @returns {void}
 -      */
 -     _onSubmit() {
 -         const message = this.state.message.trim();
 - 
 -         message && this.props.onSend(message);
 -         this.setState({
 -             message: '',
 -             showSend: false
 -         });
 -     }
 - }
 - 
 - export default translate(ChatInputBar);
 
 
  |