GroupPurchaseDetail.js 4.87 KB
'use strict';

import React, {Component} from 'react';
import {Dimensions, Image, ListView, StyleSheet, Text, TouchableOpacity, View, NativeModules} from 'react-native';
import {Immutable} from 'immutable';
import GroupProductCell from './GroupProductCell';
import GroupDetailHeader from './GroupDetailHeader';
import YH_Image from '../../common/components/YH_Image';
import {getSlicedUrl} from '../../classify/utils/Utils';
const {YH_CommonHelper} = NativeModules;

export default class GroupPurchaseDetail extends Component {
    constructor(props) {
        super(props);

        this._renderRow = this._renderRow.bind(this);
        this._renderHeader = this._renderHeader.bind(this);

        this.dataSource = new ListView.DataSource({
            rowHasChanged: (r1, r2) => !Immutable.is(r1, r2),
            sectionHeaderHasChanged: (s1, s2) => !Immutable.is(s1, s2),
        });
    }

    _renderHeader() {
        let {
            groupDetail,
            activityId,
        } = this.props;

        return (
          <GroupDetailHeader
            activityId={activityId}
            groupDetail={groupDetail}
            updateTime={this.props.updateTime}
            didTouchButton={this.props.didTouchButton}
            goComment={this.props.goComment}
            didTouchProduct={this.props.didTouchProduct}
          />
        );
    }

    _renderRow(rowData, sectionID, rowID) {

      switch(sectionID) {

          case 'productResourceInfo': {
            let data = rowData ? rowData.toJS() : null;

            if(data.template_name == "single_image"){

              if(!data.data || !data.data[0]){
                return null;
              }

              let resourceData = data.data[0];
              let src = YH_Image.getSlicedUrl(resourceData.src, width, 70*DEVICE_WIDTH_RATIO, 2);
              let url = resourceData.url;
              return(
                  <View style={{width:width, height:70*DEVICE_WIDTH_RATIO+8, backgroundColor:'#f0f0f0'}}>
                    <View style={{width:width, height:70*DEVICE_WIDTH_RATIO}}>
                      <TouchableOpacity yh_exposureData={resourceData.yh_exposureData} activeOpacity={1} onPress={() => {
                        this.props.didTouchBanner && this.props.didTouchBanner(url);
                          YH_CommonHelper.logEvent('YB_GROUP_DEATIL_BANNER_C', resourceData.yh_exposureData);
                      }}>
                      <YH_Image style={{width: '100%', height: '100%'}} url={src}></YH_Image>
                      </TouchableOpacity>
                    </View>
                  </View>
                );
            }
            return null;
          }

          case 'productListTitle': {
              return(
                <View style={styles.productListheader}>
                  <View style={styles.productListheaderSub}>
                    <Text style={styles.title}>查看其他拼团商品</Text>
                  </View>
                </View>
              );
          }

          case 'productList': {
              return(
                <GroupProductCell resource={rowData} didTouchProduct={this.props.didTouchProduct}/>
              );
          }
          default:
              return null;
      }
    }

    render() {
        let {
            productList,
            resource,
        } = this.props;
        let dataSource = {
            productResourceInfo: resource.resourceList ? resource.resourceList.toArray() : [],
            productListTitle: [2],
            productList: productList.list ? productList.list.toArray() : [],
        };

        return (
            <View style={styles.container}>
                <ListView
                    ref={(c) => {
                        this.listView = c;
                    }}
                    yh_viewVisible = {true}
                    enableEmptySections={true}
                    dataSource={this.dataSource.cloneWithRowsAndSections(dataSource)}
                    renderRow={this._renderRow}
                    renderHeader={this._renderHeader}
                    onEndReached={() => {
                      if (productList && productList.list && productList.list.size !== 0) {
                          this.props.onEndReached && this.props.onEndReached();
                      }
                    }}
                />
            </View>
        );
    }

}


let {width, height} = Dimensions.get('window');
const DEVICE_WIDTH_RATIO = width / 375;

let styles = StyleSheet.create({
        container: {
            flex: 1,
        },
        productListheader: {
            flex: 1,
            justifyContent: 'center',
            alignItems:'center',
        },
        productListheaderSub: {
          width,
          height: 40*DEVICE_WIDTH_RATIO,
          justifyContent: 'center',
          alignItems: 'center',
        },
        title: {
          fontSize: 16,
          fontWeight: 'bold',
          color: '#444444',
        },
    })
;