UserCenterTop.js 3.73 KB
'use strict';

import React from 'react';
import ReactNative from 'react-native';
import ImmutablePropTypes from 'react-immutable-proptypes';
import SlicedImage from '../../../common/components/SlicedImage';

const {
    View,
    Image,
    Text,
    StyleSheet,
    Dimensions,
    Platform,
    TouchableOpacity,
    TouchableHighlight,
} = ReactNative;


export default class UserCenterTop extends React.Component {

    static propTypes = {
        userInfo: ImmutablePropTypes.contains({
            avatar: React.PropTypes.string,
            backgroundImage: React.PropTypes.string,
            nickName: React.PropTypes.string.isRequired,
            sign: React.PropTypes.string,
        }),
        onPressUserAvatar: React.PropTypes.func,
        onPressBackgroundImg: React.PropTypes.func,
    };

    constructor(props) {
        super (props);
    }

    render() {
        let data = this.props.userInfo;
        let {backgroundImage, avatar, nickName, sign,} = data;

        return (
            <View style={styles.container}>
                <TouchableHighlight
                    underlayColor={'transparent'}
                    onPress={() => {
                        this.props.onPressBackgroundImg && this.props.onPressBackgroundImg();
                    }}
                >
                    <SlicedImage
                        style={styles.backgroundImage}
                        defaultSource={require('../../images/user/user-bg.png')}
                        source={{uri:backgroundImage}}
                    >
                        <TouchableOpacity
                            onPress={() => {
                                this.props.onPressUserAvatar && this.props.onPressUserAvatar();
                            }}
                        >
                            <SlicedImage
                                style={styles.avatarImage}
                                defaultSource={require('../../images/avatar/avatar_default.png')}
                                source={{uri:avatar}}
                            />
                        </TouchableOpacity>
                        <Text
                            style={styles.name}
                            numberOfLines={1}
                        >
                            {nickName}
                        </Text>

                        <Text
                            style={styles.sign}
                            numberOfLines={2}
                        >
                            {sign}
                        </Text>
                    </SlicedImage>
                </TouchableHighlight>
            </View>
        );
    }
}

let {width, height} = Dimensions.get('window');
let navbarHeight = (Platform.OS === 'android') ? 50 : 64;
let containerHieght = Math.ceil((490 / 750) * width);
containerHieght = containerHieght < 245 ? 245 : containerHieght;

let styles = StyleSheet.create({
    container: {
        height: containerHieght,
        backgroundColor: 'transparent',
    },

    backgroundImage: {
        flex: 1,
        flexDirection: 'column',
        justifyContent: 'center',
        alignItems: 'center',
        width,
        height: containerHieght,
    },

    avatarImage: {
        marginTop: 50,
        width: 74,
        height: 74,
        borderRadius: 37,
        borderColor: 'white',
        borderWidth: 1,
        backgroundColor: 'white',
    },

    name: {
        color: 'white',
        textAlign: 'center',
        marginTop: 20,
        marginBottom: 4,
        fontSize: 14,
        fontFamily: 'Helvetica Light',
    },

    sign: {
        color: 'white',
        textAlign: 'center',
        fontSize: 12,
        lineHeight: 18,
        fontFamily: 'Helvetica Light',
        marginLeft: 20,
        marginRight: 20,
    },

});