RedBrandSwiper.js 6.23 KB
'use strict';

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

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

import Immutable, {Map} from 'immutable';

export default class RedBrandSwiper extends React.Component {

    constructor(props) {
        super (props);

        this.dot = <View
            style={{
                backgroundColor:'rgba(0,0,0,.2)',
                width: 6,
                height: 6,
                borderRadius: 3,
                marginLeft: 3,
                marginRight: 3,
                marginTop: (Platform.OS === 'ios')?3:1,
                marginBottom: 0,
            }}
        />;
        this.activeDot = <View
            style={{
                backgroundColor:'white',
                width: 6,
                height: 6,
                borderRadius: 3,
                marginLeft: 3,
                marginRight: 3,
                marginTop: 3,
                marginBottom: 0,
            }}
        />;
    }

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

    render() {

        let {resource} = this.props;
        if (!resource) {
            return (<View style={{height:0,width:width,backgroundColor:'white'}}/>);
		}
        let yh_exposureData = this.props.yh_exposureData?this.props.yh_exposureData:null;

        let data = resource.get('module_data').get('data').toJS();
        let moduleOrder = resource.get('module_order') + 1;
        let moduleType = resource.get('module_type');
        let properties = resource.get('module_data').get('properties').toJS();
        let isModuleMargin = properties.isModuleMargin;
        let backgroundHeight =isModuleMargin=='1'?(swiperHeight+10):swiperHeight;

        if (data.length == 1) {

            let linkType = data[0].linkType;
            let linkReource = data[0].resource;
            let url = '';
            if (linkType == '0') {
                url = `http://m.yohobuy.com?openby:yohobuy={"action":"go.poollist","params":{"productPool":"${linkReource}"}}`;
            } else if (linkType == '1') {
                url = `http://m.yohobuy.com?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":"${linkReource}"}}`;
            } else if (linkType == '2') {
                url = linkReource;
            }
            if (yh_exposureData) {
                yh_exposureData = {
                    I_INDEX: 0,
                    ACTION_URL: url,
                    ...yh_exposureData,
                };
            }
            return (
                <TouchableOpacity
                    yh_exposureData={yh_exposureData}
                    activeOpacity={1}
                    style={{width: width, height: backgroundHeight,backgroundColor:'#f0f0f0'}}
                    onPress={() => {
                        this.props.onPressSlideItem && this.props.onPressSlideItem(data[0].linkType,data[0].resource,moduleOrder,moduleType,1);
                    }}
                >
                    <YH_Image
                        url={data[0].pic}
                        style={{ width: width, height: swiperHeight}}
                    />
                </TouchableOpacity>
            );
        } else {
            return (
                <View style={{height: backgroundHeight,backgroundColor:'#f0f0f0'}}>
                    <Swiper
                        style={styles.banner}
                        showsButtons={false}
                        loop={true}
                        autoplay={true}
                        autoplayTimeout={2}
                        paginationStyle={{bottom: 8}}
                        dot={this.dot}
                        activeDot={(Platform.OS === 'ios')?this.activeDot:null}
                        width={width}
                        height={swiperHeight}
                    >
                        {data.map((item, i) => {
                            let linkType = item.linkType;
                            let linkReource = item.resource;
                            let url = '';
                            if (linkType == '0') {
                                url = `http://m.yohobuy.com?openby:yohobuy={"action":"go.poollist","params":{"productPool":"${linkReource}"}}`;
                            } else if (linkType == '1') {
                                url = `http://m.yohobuy.com?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":"${linkReource}"}}`;
                            } else if (linkType == '2') {
                                url = linkReource;
                            }
                            if (yh_exposureData) {
                                yh_exposureData = {
                                    I_INDEX: parseInt(i)+1+'',
                                    ACTION_URL: url,
                                    ...yh_exposureData,
                                };
                            }

                            return (
                                <TouchableOpacity
                                    yh_exposureData={yh_exposureData}
                                    key={i}
                                    activeOpacity={1}
                                    onPress={() => {
                                        this.props.onPressSlideItem && this.props.onPressSlideItem(item.linkType,item.resource,moduleOrder,moduleType,i+1);
                                    }}
                                >
                                    <YH_Image
                                        url={item.pic}
                                        style={{width: width, height: swiperHeight}}
                                    />
                                </TouchableOpacity>
                            );
                        })}
                    </Swiper>
                </View>

            );
        }
    }
}

let {width, height} = Dimensions.get('window');
let swiperHeight = Math.ceil((234 / 750) * width);

let styles = StyleSheet.create({

    banner: {
    },

});