Rocket.Chat.ReactNative/app/containers/Loading.js

104 lines
1.9 KiB
JavaScript
Raw Normal View History

Beta (#265) * Fabric iOS * Fabric configured on iOS and Android * - react-native-fabric configured - login tracked * README updated * Run scripts from README updated * README scripts * get rooms and messages by rest * user status * more improves * more improves * send pong on timeout * fix some methods * more tests * rest messages * Room actions (#266) * Toggle notifications * Search messages * Invite users * Mute/Unmute users in room * rocket.cat messages * Room topic layout fixed * Starred messages loading onEndReached * Room actions onEndReached * Unnecessary login request * Login loading * Login services fixed * User presence layout * ïmproves on room actions view * Removed unnecessary data from SelectedUsersView * load few messages on open room, search message improve * fix loading messages forever * Removed state from search * Custom message time format * secureTextEntry layout * Reduce android app size * Roles subscription fix * Public routes navigation * fix reconnect * - New login/register, login, register * proguard * Login flux * App init/restore * Android layout fixes * Multiple meteor connection requests fixed * Nested attachments * Nested attachments * fix check status * New login layout (#269) * Public routes navigation * New login/register, login, register * Multiple meteor connection requests fixed * Nested attachments * Button component * TextInput android layout fixed * Register fixed * Thinner close modal button * Requests /me after login only one time * Static images moved * fix reconnect * fix ddp * fix custom emoji * New message layout (#273) * Grouping messages * Message layout * Users typing animation * Image attachment layout
2018-04-24 19:34:03 +00:00
import React from 'react';
import PropTypes from 'prop-types';
import { StyleSheet, View, Modal, Animated } from 'react-native';
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
backgroundColor: 'rgba(0, 0, 0, 0.25)'
},
image: {
width: 100,
height: 100,
resizeMode: 'contain'
}
});
export default class Loading extends React.PureComponent {
static propTypes = {
visible: PropTypes.bool.isRequired
}
state = {
scale: new Animated.Value(1),
opacity: new Animated.Value(0)
}
componentDidMount() {
this.opacityAnimation = Animated.timing(
this.state.opacity,
{
toValue: 1,
duration: 1000,
useNativeDriver: true
}
);
this.scaleAnimation = Animated.loop(Animated.sequence([
Animated.timing(
this.state.scale,
{
toValue: 0,
duration: 1000,
useNativeDriver: true
}
),
Animated.timing(
this.state.scale,
{
toValue: 1,
duration: 1000,
useNativeDriver: true
}
)
]));
if (this.props.visible) {
this.startAnimations();
}
}
componentDidUpdate(prevProps) {
if (this.props.visible && this.props.visible !== prevProps.visible) {
this.startAnimations();
}
}
componentWillUnmount() {
this.opacityAnimation.stop();
this.scaleAnimation.stop();
}
startAnimations() {
this.opacityAnimation.start();
this.scaleAnimation.start();
}
render() {
const scale = this.state.scale.interpolate({
inputRange: [0, 0.5, 1],
outputRange: [1, 1.1, 1]
});
return (
<Modal
visible={this.props.visible}
transparent
onRequestClose={() => {}}
>
<View style={styles.container}>
<Animated.Image
source={require('../static/images/logo.png')}
style={[styles.image, {
opacity: this.state.opacity,
transform: [{
scale
}]
}]}
/>
</View>
</Modal>
);
}
}