RecommendContentFive.js 4.5 KB
'use strict';

import React from 'react';
import ReactNative from 'react-native';
import HeadTitleCell from '../cell/HeadTitleCell';
import ImageSlider from '../cell/ImageSlider';
import YH_Image from '../../../common/components/YH_Image';
import Immutable, {Map} from 'immutable';

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


export default class RecommendContentFive extends React.Component {

    constructor(props) {
        super (props);

    }

    shouldComponentUpdate(nextProps){
        if (Immutable.is(nextProps.data, this.props.data)) {
            return false;
        } else {
            return true;
        }
    }

    render() {
        let {title, list} = this.props.data.toObject();

        let data = list.toArray();
        let lineNumber = parseInt((data.length + 3) / 4);
        let listHeight = Math.floor(lineNumber * imageHeight);
        let containerHeight = listHeight + 40;
        let yh_exposureData_more = title.get('yh_exposureData')?title.get('yh_exposureData').toJS():null;
        return (
            <View style={[styles.container, {height: containerHeight}]}>
                <HeadTitleCell yh_exposureData={yh_exposureData_more} title={title.get('title')} moreUrl={title.get('more_url')} onPressTitleMore={this.props.onPressTitleMore}/>
                <View style={[styles.list, {height: listHeight}]}>
                    {data.map((item, i) => {
                        let imageUrl = YH_Image.getSlicedUrl(item.get('src'), imageWidth, imageHeight, 2);
                        let yh_exposureData = item.get('yh_exposureData')?item.get('yh_exposureData').toJS():null;
                        return (
                            <TouchableOpacity
                                key={i}
                                yh_exposureData={yh_exposureData}
                                style={styles.image}
                                activeOpacity={1}
                                onPress={() => {
                                    this.props.onPressRecommendListItem && this.props.onPressRecommendListItem(item.get('url'), imageUrl, i);
                                }}
                            >
                                <YH_Image url={imageUrl} style={styles.image} >
                                    {item.get('title').length?<View style={styles.whiteView}><Text style={styles.viewText} numberOfLines={1}>{item.get('title')}</Text></View>:null}
                                </YH_Image>
                            </TouchableOpacity>
                        );
                    })}
                    <View style={[styles.vLine1, {height: listHeight}]} />
                    <View style={[styles.vLine2, {height: listHeight}]} />
                    <View style={[styles.vLine3, {height: listHeight}]} />
                    <View style={styles.hLine1} />
                    <View style={styles.hLine2} />
                </View>

            </View>
        );
    }
}

let {width, height} = Dimensions.get('window');

const DEVICE_WIDTH_RATIO = width / 320;


let imageWidth = width / 4;
let imageHeight = Math.floor(87 * DEVICE_WIDTH_RATIO);

let styles = StyleSheet.create({
    container: {
        width: width,
        flexDirection: 'column',
    },
    list: {
        flexDirection: 'row',
        flexWrap: 'wrap',
        width,
    },
    image: {
        width: imageWidth,
        height: imageHeight,
    },
    whiteView: {
        width: imageWidth,
        marginTop: imageHeight - Math.floor(40*width/750),
        height: Math.floor(40*width/750),
        backgroundColor:'rgba(255,255,255,0.6)',
        alignItems: 'center',
        justifyContent: 'center',
    },
    viewText: {
        fontSize: 12,
        color: '#444444'
    },
    vLine1: {
        position: 'absolute',
        backgroundColor: '#e5e5e5',
        width: 0.5,
        top: 0,
        left: imageWidth,
    },
    vLine2: {
        position: 'absolute',
        backgroundColor: '#e5e5e5',
        width: 0.5,
        top: 0,
        left: imageWidth * 2,
    },
    vLine3: {
        position: 'absolute',
        backgroundColor: '#e5e5e5',
        width: 0.5,
        top: 0,
        left: imageWidth * 3,
    },
    hLine1: {
        position: 'absolute',
        backgroundColor: '#e5e5e5',
        width,
        height: 0.5,
        top: imageHeight,
        left: 0,
    },
    hLine2: {
        position: 'absolute',
        backgroundColor: '#e5e5e5',
        width,
        height: 0.5,
        top: imageHeight * 2,
        left: 0,
    },
});