CategoryBContainer.js 6.21 KB
'use strict'

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

import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';
import {Map} from 'immutable';
import * as categoryBActions from '../reducers/categoryB/categoryBActions';

import CategoryB from '../components/categoryB/CategoryB';


const actions = [
     categoryBActions,
];

function mapStateToProps(state) {
    return {
        ...state
    };
}

function mapDispatchToProps(dispatch) {

    const creators = Map()
        .merge(...actions)
        .filter(value => typeof value === 'function')
        .toObject();

    return {
        actions: bindActionCreators(creators, dispatch),
        dispatch
    };
}

class CategoryBContainer extends Component {
    constructor(props) {
        super(props);
        this._onSelectChannel = this._onSelectChannel.bind(this);
        this._onSelectCategory = this._onSelectCategory.bind(this);
        this._onPressBannerResourceItem = this._onPressBannerResourceItem.bind(this);
        this._onPressCategoryBMore = this._onPressCategoryBMore.bind(this);
        this._onPressHotCategoryItem = this._onPressHotCategoryItem.bind(this);
        this._onPressHotBrandItem = this._onPressHotBrandItem.bind(this);
        this.subscription = NativeAppEventEmitter.addListener(
            'ChannelDidChangeEvent',
            (reminder) => {
                let id = reminder.channel;
                let value;
                if(id == 2){
                    value='girl';
                }else if(id == 3){
                    value='kids';
                }else if(id == 4){
                    value='lifestyle';
                }else {
                    id = 1;
                    value='boy';
                }
                this._onSelectChannel({id, value});
            }
        );
    }

    componentDidMount() {
        let currentChannelId = this.props.categoryB.currentChannelId;
        this.props.actions.getCategoryBList(currentChannelId);
    }

    componentWillUnmount() {
        
    }

    _onSelectChannel(channel) {
        this.props.actions.setCurrentChannelB(channel.id, channel.value);
        this.props.actions.getCategoryBFirstSubCategoryDetail(channel.id);
    }

    _onSelectCategory(category,rowID) {
        this.props.actions.selectCategoryB(category);
    }

    _onPressBannerResourceItem(url){
        if(url){
            ReactNative.NativeModules.YH_CommonHelper.jumpWithUrl(url);

            //埋点
            let {currentChannelId, currentCateId} = this.props.categoryB;
            let params = {
                TAB_ID: currentChannelId + '',
                F_ID: "1001",
                F_NAME: "BANNER",
                F_INDEX: "1",
                L1_CATE: currentCateId + '',
                L2_CATE: "",
                I_INDEX: '0',
            };
            NativeModules.YH_CommonHelper.logEvent('YB_CATEGORY_CAT_FLR_C', params);
        }
    }

    _onPressCategoryBMore() {
        let {currentChannelId, currentCateId} = this.props.categoryB;
        this.props.actions.pressCategoryBMore(currentCateId);

        //埋点
        let params = {
            TAB_ID: currentChannelId + '',
            F_ID: "1002",
            F_NAME: "MORE",
            F_INDEX: "2",
            L1_CATE: currentCateId + '',
            L2_CATE: "",
            I_INDEX: '0',
        };
        NativeModules.YH_CommonHelper.logEvent('YB_CATEGORY_CAT_FLR_C', params);
    }

    _onPressHotCategoryItem(value, index) {
        let {currentChannelId, currentCateId, currentCateValue} = this.props.categoryB;
        this.props.actions.jumpToCategory(value, index, currentChannelId);

        //埋点
        let subcategoryId = value.category_id;
        let params = {
            TAB_ID: currentChannelId + '',
            F_ID: "1002",
            F_NAME: "全部"+currentCateValue,
            F_INDEX: "2",
            L1_CATE: currentCateId + '',
            L2_CATE: subcategoryId + '',
            I_INDEX: parseInt(index) + 1 + '',
            PRD_SKN: value.product_skn + '',
        };
        NativeModules.YH_CommonHelper.logEvent('YB_CATEGORY_CAT_FLR_C', params);
    }

    _onPressHotBrandItem(data, index){
        ReactNative.NativeModules.YH_CommonHelper.pushBrandVC(data);

        //埋点
        let {currentChannelId, currentCateId} = this.props.categoryB;
        let params = {
            TAB_ID: currentChannelId + '',
            F_ID: "1003",
            F_NAME: "热门品牌",
            F_INDEX: "3",
            L1_CATE: currentCateId + '',
            I_INDEX: parseInt(index) + 1 + '',
            BRAND_ID: data.id + '',
        };
        NativeModules.YH_CommonHelper.logEvent('YB_CATEGORY_CAT_FLR_C', params);
    }


    render() {
        let {
            isFetching,
            currentChannelId,
            currentChannelValue,
            currentCateId,
            categoryList,
            currentCateValue,
            currentSubCateData,
            cacheSubCateData,
        } = this.props.categoryB;

        return (
                <CategoryB
                    style={styles.container}
                    isFetching={isFetching}
                    categoryList={categoryList}
                    currentChannelId={currentChannelId}
                    currentChannelValue={currentChannelValue}
                    currentCateId={currentCateId}
                    currentCateValue={currentCateValue}
                    currentSubCateData={currentSubCateData}
                    cacheSubCateData={cacheSubCateData}
                    onSelectChannel={this._onSelectChannel}
                    onSelectCategory={this._onSelectCategory}
                    onPressBannerResourceItem={this._onPressBannerResourceItem}
                    onPressCategoryBMore={this._onPressCategoryBMore}
                    onPressHotCategoryItem={this._onPressHotCategoryItem}
                    onPressHotBrandItem={this._onPressHotBrandItem}
                />
        );
    }
}

let styles = StyleSheet.create({
    container: {
        flex: 1,
    },

});

export default connect(mapStateToProps, mapDispatchToProps)(CategoryBContainer);