ScreenContainer.js 5 KB
'use strict'

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

import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';
import {Map} from 'immutable';
import * as screenActions from '../reducers/screen/screenActions';
import * as appActions from '../reducers/app/appActions';

import Screen from '../components/screen/Screen';

const actions = [
    screenActions,
    appActions
];

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 ScreenContainer extends Component {
    constructor(props) {
        super(props);
        this.updateFilter = this.updateFilter.bind(this);
        this.cancelAction = this.cancelAction.bind(this);
        this.onSelectItem = this.onSelectItem.bind(this);
        this.okAction = this.okAction.bind(this);
        this.subscription = NativeAppEventEmitter.addListener(
            'updateFilter',
            (dic) => {
                let {app, screen} = this.props;
                let categoryFilterList = screen&&screen.get('categoryFilterList')?screen.get('categoryFilterList').toJS():'';
                if (categoryFilterList.length > 0) {
                    return;
                }
                this.updateFilter(dic);
            }
        );

        this.subscription = NativeAppEventEmitter.addListener(
            'selectitemFilter',
            (dic) => {
                let {app, screen} = this.props;
                let categoryFilterList = screen&&screen.get('categoryFilterList')?screen.get('categoryFilterList').toJS():'';

                for (var i = 0; i < categoryFilterList.length; i++) {
                    let obj = categoryFilterList[i];
                    if (obj.key == dic.key) {
                        obj.select.isSelect = true;
                        obj.select.key = dic.data.key;
                        obj.select.name = dic.data.name;
                        let subFilter = obj.subFilter;
                        let list = subFilter.list;
                        for (var j = 0; j < list.length; j++) {
                            list[j].isSelect = false;
                            if (dic.data.name == list[j].name) {
                                list[j].isSelect = true;
                            }else {
                                let subList = list[j].sub?list[j].sub:[];
                                for (var k = 0; k < subList.length; k++) {
                                    subList[k].isSelect = false;
                                    if (dic.data.name == subList[k].name) {
                                        subList[k].isSelect = true;
                                        list[j].isSelect = true;
                                    }else {
                                        subList[k].isSelect = false;
                                    }
                                }
                            }
                        }
                    }
                }
                this.props.actions.setSelectItem(categoryFilterList);
            }
        );
    }

    componentWillUnmount() {
        this.subscription && this.subscription.remove();
    }

    okAction() {
        //刷新页面
        let {app, screen} = this.props;
        let categoryFilterList = screen&&screen.get('categoryFilterList')?screen.get('categoryFilterList').toJS():'';
        let hasSelect = [];
        for (let i = 0; i < categoryFilterList.length; i++) {
            let obj = categoryFilterList[i];
            hasSelect.push({
                'key': obj.key,
                'name': obj.select.name,
                'keyCode': obj.select.key,
            });
        }
        ReactNative.NativeModules.YH_ScreenCategoryViewHelper.okAction(hasSelect);
    }

    cancelAction() {
        //清空数据
        this.props.actions.cancelSelect();
    }

    onSelectItem(subFilter) {
        ReactNative.NativeModules.YH_ScreenCategoryViewHelper.didSelectScreenIetmIndex(subFilter);
    }

    updateFilter(dic){
        if (dic) {
            this.props.actions.updateDataSource(dic);
        }
    }

    render() {
        let {app, screen} = this.props;
        return (
            <View style={styles.container}>
                <Screen
                    resource={screen}
                    okAction={this.okAction}
                    cancelAction={this.cancelAction}
                    onSelectItem={this.onSelectItem}
                />
            </View>
        );
	}
}

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

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

});

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