CategoryBContainer.js 4.41 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._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) {
        // console.log("chenlin", "调用点击事件:_onSelectCategory,参数为:" + JSON.stringify(category) + "ID: " + rowID);

        let categoryId = category.category_id;
        let categoryValue = category.category_name;

        this.props.actions.getCategoryBSubCategoryDetail(categoryId, categoryValue);
    }

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

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

    _onPressHotBrandItem(data){
        ReactNative.NativeModules.YH_CommonHelper.pushBrandVC(data);
    }

    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}
                    onPressHotCategoryItem={this._onPressHotCategoryItem}
                    onPressHotBrandItem={this._onPressHotBrandItem}
                />
        );
    }
}

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

});

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