Detail.js 3.84 KB
'use strict'

import React, {Component} from 'react';
import ReactNative, {
    StyleSheet,
    Dimensions,
    Platform,
    View,
    NativeModules,
    InteractionManager,
    NativeAppEventEmitter,
    ListView,
} from 'react-native'

import {Map} from 'immutable';
import BrandIntro from './BrandIntro'
import BrandArticleList from './BrandArticleList'
import BrandArticleCell from './BrandArticleCell'
import NewArrival from './NewArrival'
import Prompt from '../../../coupon/components/coupon/Prompt';
import LoadingIndicator from '../../../common/components/LoadingIndicator';

export default class Detail extends React.Component{

    constructor(props) {
        super(props);

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



    componentWillReceiveProps(nextProps) {
        if (this.props.detail.get('brandInfo').get('titleUnfold') && !nextProps.detail.get('brandInfo').get('titleUnfold')) {
            this.listView.scrollTo({x: 0, y: 0, animated: false, });
        }
    }

    renderRow(rowData, sectionID, rowID, highlightRow) {
        if (!rowData && rowData.length == 0) {
            return null;
        }
        switch (rowID) {
            case 'brandInfo':
                return(
                    <BrandIntro
                        brandIntro={rowData}
                        brandFav={this.props.detail.get('brandFav')}
                        onPressFav={this.props.onPressFav}
                        onPressBrandIntroMore={this.props.onPressBrandIntroMore}
                        addCanelFavTipRemove={this.props.addCanelFavTipRemove}
                    />
                );
            case 'productList':
                return (
                    <NewArrival
                        prodcutList={rowData}
                        onPressMoreProducts={this.props.onPressMoreProducts}
                        onPressProduct={this.props.onPressProduct}
                        moreProductUrl={this.props.detail.get('moreProductUrl')}
                    />
                );
            case 'articleList':
                return(
                    <BrandArticleList
                        articleList={rowData}
                        onPressArticle={this.props.onPressArticle}
                        onPressArticleLike={this.props.onPressArticleLike} />
                );
            default:
                return null;

        }
    }


    render() {
        let {detail} = this.props;

        let dataSource = {
            brandInfo: detail.get('brandInfo'),
            productList: detail.get('productList').toArray(),
            articleList: detail.get('articleList').toArray(),
        };

        return (
            <View style={styles.container}>
                <ListView
                ref={(c) => {
                    this.listView = c;
                }}
                contentContainerStyle={styles.contentContainer}
                enableEmptySections={true}
                dataSource={this.dataSource.cloneWithRows(dataSource)}
                renderRow={this.renderRow}
                />


                {detail.get('brandInfo').get('addCancelTip') !== '' ? <Prompt
                    text={detail.get('brandInfo').get('addCancelTip')}
                    duration={800}
                    onPromptHidden={this.props.addCanelFavTipRemove}
                /> : null}

                <LoadingIndicator
                    isVisible={detail.get('brandInfo').get('isFetching')}
                />
            </View>
        );
    }
};

let styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: '#f0f0f0',
    },
    contentContainer:{
        flexDirection: 'column',
        flexWrap: 'wrap',
    },
});