BrandSwiper.js 5.12 KB
'use strict';

import React from 'react';
import ReactNative from 'react-native';
import ImmutablePropTypes from 'react-immutable-proptypes';
import SlicedImage from '../../../common/components/SlicedImage';
import Immutable, {Map} from 'immutable';
import YH_Image from '../../../common/components/YH_Image';
import {getSlicedUrl} from '../../utils/Utils';
import DeviceInfo from 'react-native-device-info';
import YH_Swiper from '../../../common/components/YH_Swiper';

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

export default class BrandSwiper extends React.Component {

    constructor(props) {
        super (props);

        //A版比例640X330   B版比例640X310
        height = this.props.abversion == "B" ? Math.ceil((310 / 640) * width) : Math.ceil((330 / 640) * width);
    }

    shouldComponentUpdate(nextProps){

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


    render() {

        let {resource, abversion} = this.props;
        let banner = resource.get('banner');
        let res = banner.toJS();
        let list = res.data;

        if (!banner || banner.size == 0 || !list) {
			return null;
		}

        let needYH_Image = false;

        if (Platform.OS === 'ios') {
            let systemVersion = DeviceInfo.getSystemVersion();
            systemVersion = parseFloat(systemVersion);
            if (systemVersion < 8.0) {
                needYH_Image = true;
            }
        }
        let yh_exposureData = this.props.yh_exposureData?this.props.yh_exposureData:null;

        if (list.length == 1) {
            let newSrc = getSlicedUrl(list[0].src, width, height);
            if (yh_exposureData) {
                yh_exposureData = {
                    I_INDEX: 1,
                    ACTION_URL: list[0].url?list[0].url:'',
                    F_ID : 1001,
                    F_INDEX : 1,
                    ...yh_exposureData,
                };
            }
            return (
                <View style={styles.container}>
                    <TouchableOpacity
                        yh_exposureData={yh_exposureData}
                        activeOpacity={1}
                        style={{width: width, height: height-15}}
                        onPress={() => {
                            this.props.onPressSlideItem && this.props.onPressSlideItem(list[0].url, 0);
                        }}
                    >
                        {needYH_Image ? <YH_Image
                          url={newSrc}
                          style={{width, height}}
                        /> : <SlicedImage source={{uri: list[0].src}} style={{width, height}}/>}
                    </TouchableOpacity>
                </View>
            );
        } else {
            return (
                <View style={styles.container}>
                    <YH_Swiper
                        style={styles.banner}
                        showsButtons={false}
                        loop={true}
                        autoplay={true}
                        autoplayTimeout={3}
                        width={width}
                        height={height+15}
                        paginationStyle={{backgroundColor: 'rgba(0,0,0,0.2)',bottom: 25,height: 10,width: list.length * 12,borderRadius: 5,marginLeft: (width-list.length * 12)/2}}
                    >
                        {list.map((item, i) => {

                            let newSrc = getSlicedUrl(item.src, width, height, 2);
                            if (yh_exposureData) {
                                yh_exposureData = {
                                    I_INDEX: parseInt(i)+1+'',
                                    ACTION_URL: item.url?item.url:'',
                                    F_ID : 1001,
                                    F_INDEX : 1,
                                    ...yh_exposureData,
                                };
                            }
                            return (
                                <TouchableOpacity
                                    yh_exposureData={yh_exposureData}
                                    key={i}
                                    activeOpacity={1}
                                    onPress={() => {
     		                            this.props.onPressSlideItem && this.props.onPressSlideItem(item.url, i);
                                    }}
                                >
                                    {needYH_Image?<YH_Image
                                      url={newSrc}
                                      style={{width, height:height}}
                                    />:<SlicedImage source={{uri: item.src}} style={{width, height:height}}/>}
                                </TouchableOpacity>
                            );
                        })}
                    </YH_Swiper>
                </View>
            );
        }
    }
}

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

let styles = StyleSheet.create({

    container: {
        width: width,
        height: height,
        backgroundColor:'#f0f0f0',
    },
    banner: {

    },
});