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
101 lines (88 loc) • 2.75 kB
JavaScript
/* eslint no-use-before-define: ["error", { "variables": false }] */
import PropTypes from 'prop-types';
import React from 'react';
import { Platform, StyleSheet, TextInput } from 'react-native';
import { MIN_COMPOSER_HEIGHT, DEFAULT_PLACEHOLDER } from './Constant';
import Color from './Color';
export default class Composer extends React.Component {
onContentSizeChange(e) {
const { contentSize } = e.nativeEvent;
// Support earlier versions of React Native on Android.
if (!contentSize) return;
if (
!this.contentSize ||
this.contentSize.width !== contentSize.width ||
this.contentSize.height !== contentSize.height
) {
this.contentSize = contentSize;
this.props.onInputSizeChanged(this.contentSize);
}
}
onChangeText(text) {
this.props.onTextChanged(text);
}
render() {
return (
<TextInput
testID={this.props.placeholder}
accessible
accessibilityLabel={this.props.placeholder}
placeholder={this.props.placeholder}
placeholderTextColor={this.props.placeholderTextColor}
multiline={this.props.multiline}
onChange={(e) => this.onContentSizeChange(e)}
onContentSizeChange={(e) => this.onContentSizeChange(e)}
onChangeText={(text) => this.onChangeText(text)}
style={[styles.textInput, this.props.textInputStyle, { height: this.props.composerHeight }]}
autoFocus={this.props.textInputAutoFocus}
value={this.props.text}
enablesReturnKeyAutomatically
underlineColorAndroid="transparent"
keyboardAppearance={this.props.keyboardAppearance}
{...this.props.textInputProps}
/>
);
}
}
const styles = StyleSheet.create({
textInput: {
flex: 1,
marginLeft: 10,
fontSize: 16,
lineHeight: 16,
marginTop: Platform.select({
ios: 6,
android: 0,
}),
marginBottom: Platform.select({
ios: 5,
android: 3,
}),
},
});
Composer.defaultProps = {
composerHeight: MIN_COMPOSER_HEIGHT,
text: '',
placeholderTextColor: Color.defaultProps,
placeholder: DEFAULT_PLACEHOLDER,
textInputProps: null,
multiline: true,
textInputStyle: {},
textInputAutoFocus: false,
keyboardAppearance: 'default',
onTextChanged: () => {},
onInputSizeChanged: () => {},
};
Composer.propTypes = {
composerHeight: PropTypes.number,
text: PropTypes.string,
placeholder: PropTypes.string,
placeholderTextColor: PropTypes.string,
textInputProps: PropTypes.object,
onTextChanged: PropTypes.func,
onInputSizeChanged: PropTypes.func,
multiline: PropTypes.bool,
textInputStyle: TextInput.propTypes.style,
textInputAutoFocus: PropTypes.bool,
keyboardAppearance: PropTypes.string,
};