ContentMessageContainer.js 3.43 KB
/**
 * Created by zzz on 2019/3/5.
 */

'use strict'

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

import {bindActionCreators} from "redux";
import {connect} from "react-redux";
import {Map} from "immutable";
import * as contentActions from "../reducers/content/contentActions";

import ContentMessageView from '../components/content/ContentMessageView';

const actions = [
    contentActions,
]

function mapStateToProps(state) {
    return {
        tabButtons: state.content.contentType.get('list').toJS(),
        commentList: state.content.commentList.get('list').toJS(),
        isPullToRefresh: state.content.commentList.get('isPullToRefresh'),
        contentTipFlag: state.content.contentTipFlag,
    };
}

function mapDispatchToProps(dispatch) {

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

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

class ContentMessageContainer extends Component {
    constructor(props) {
        super(props);

        this.state = {
          dataSource : {},
        };

        this._onRefresh = this._onRefresh.bind(this);
        this._onEndReached = this._onEndReached.bind(this);
        this._storeReplySource = this._storeReplySource.bind(this);
    }

    componentDidMount() {
      this.props.actions.getContentList(true, 4)
      this.props.actions.getContentType()

      this.subscription = DeviceEventEmitter.addListener('CommentReplySucessEvent', (events) => {
        this._addInBoxAction(events.text);
      });
    }

    componentWillUnmount() {
      this.subscription.remove();
      this.props.actions.clearCommentMessageList()
    }


    _onRefresh() {
      this.props.actions.getContentList(true, 4)
      this.props.actions.getContentType()
    }

    _onEndReached() {
      this.props.actions.getContentList(false, 4)
    }

    _addInBoxAction(addValue) {

      let addType = this.state.dataSource.businessType === 1003 ? 1 : 0;
      let destId = addType === 0 ? this.state.dataSource.articleId : 0;
      let commentId = this.state.dataSource.commentId;
      let columnType = addType === 0? 1001 : 0;

      this.props.actions.addArticleCommentAction(addValue, destId, commentId, addType, columnType);
    }

    _storeReplySource(dataSource) {
      this.setState({
        dataSource: dataSource,
      });
    }

    render() {
        let {
            contentTipFlag,
        } = this.props

        return (
            <View style={styles.container}>
                <ContentMessageView
                    ref={(view) => {
                        this.messageView = view
                    }}
                    contentTipFlag={contentTipFlag}
                    tabButtons={this.props.tabButtons}
                    onRefresh={this._onRefresh}
                    commentList={this.props.commentList}
                    isPullToRefresh={this.props.isPullToRefresh}
                    onEndReached={this._onEndReached}
                    storeReplySource={this._storeReplySource}
                />
            </View>
        )
    }
}

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

export default connect(mapStateToProps, mapDispatchToProps, null, {withRef: true})(ContentMessageContainer)