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
107 lines (99 loc) • 2.45 kB
JavaScript
/* eslint no-use-before-define: ["error", { "variables": false }], react-native/no-inline-styles: 0 */
import PropTypes from 'prop-types';
import React from 'react';
import {
ActivityIndicator,
Platform,
StyleSheet,
Text,
TouchableOpacity,
View,
ViewPropTypes,
} from 'react-native';
import Color from './Color';
export default class LoadEarlier extends React.Component {
renderLoading() {
if (this.props.isLoadingEarlier === false) {
return (
<Text style={[styles.text, this.props.textStyle]}>
{this.props.label}
</Text>
);
}
return (
<View>
<Text style={[styles.text, this.props.textStyle, { opacity: 0 }]}>
{this.props.label}
</Text>
<ActivityIndicator
color="white"
size="small"
style={[styles.activityIndicator, this.props.activityIndicatorStyle]}
/>
</View>
);
}
render() {
return (
<TouchableOpacity
style={[styles.container, this.props.containerStyle]}
onPress={() => {
if (this.props.onLoadEarlier) {
this.props.onLoadEarlier();
}
}}
disabled={this.props.isLoadingEarlier === true}
accessibilityTraits="button"
>
<View style={[styles.wrapper, this.props.wrapperStyle]}>
{this.renderLoading()}
</View>
</TouchableOpacity>
);
}
}
const styles = StyleSheet.create({
container: {
alignItems: 'center',
marginTop: 5,
marginBottom: 10,
},
wrapper: {
alignItems: 'center',
justifyContent: 'center',
backgroundColor: Color.defaultColor,
borderRadius: 15,
height: 30,
paddingLeft: 10,
paddingRight: 10,
},
text: {
backgroundColor: Color.backgroundTransparent,
color: Color.white,
fontSize: 12,
},
activityIndicator: {
marginTop: Platform.select({
ios: -14,
android: -16,
}),
},
});
LoadEarlier.defaultProps = {
onLoadEarlier: () => { },
isLoadingEarlier: false,
label: 'Load earlier messages',
containerStyle: {},
wrapperStyle: {},
textStyle: {},
activityIndicatorStyle: {},
};
LoadEarlier.propTypes = {
onLoadEarlier: PropTypes.func,
isLoadingEarlier: PropTypes.bool,
label: PropTypes.string,
containerStyle: ViewPropTypes.style,
wrapperStyle: ViewPropTypes.style,
textStyle: Text.propTypes.style,
activityIndicatorStyle: ViewPropTypes.style,
};