ContentMessageContainer.js 6.18 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 {
        contentListId: state.content.contentListId,
        tabButtons: state.content.contentType.get('list').toJS(),
        commentList: state.content.commentList.get('list').toJS(),
        isPullToRefresh: state.content.commentList.get('isPullToRefresh'),
        isFetching: state.content.commentList.get('isFetching'),
        contentTipFlag: state.content.contentTipFlag,
        tipMessage: state.content.tipMessage,
        communityHost: state.app.communityHost,
    };
}

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._onRefresh = this._onRefresh.bind(this);
        this._onEndReached = this._onEndReached.bind(this);
        this._onHiddenTipMessage = this._onHiddenTipMessage.bind(this);
        this._jumpToShowKeyboard = this._jumpToShowKeyboard.bind(this);
        this._jumpToPersonalGrassPage = this._jumpToPersonalGrassPage.bind(this);
        this._jumpToGrassDetailPage = this._jumpToGrassDetailPage.bind(this);
        this._onPressTabAction = this._onPressTabAction.bind(this);

        this.subscription = NativeAppEventEmitter.addListener(
            'YHUpdateAuthStatusEvent',
            (reminder) => {
              let isfresh = this.props.contentTipFlag===reminder.flag? false : true;
              if (isfresh) {
                this.props.actions.updateContentTipFlag(reminder.flag)
              }
            }
        );
    }

    componentDidMount() {
      this.props.actions.getCommentList(false, this.props.contentListId)
      this.props.actions.getContentType()
    }

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


    _onRefresh() {
      this.props.actions.getCommentList(true, this.props.contentListId)
      this.props.actions.getContentType()
    }

    _onEndReached() {
      this.props.actions.getCommentList(false, this.props.contentListId)
    }

    _onHiddenTipMessage() {
      this.props.actions.hiddenTipMessage();
    }

    _onPressTabAction(actionUrl, tabType) {
      this.props.actions.clearBadgeNumAction(tabType);

      NativeModules.YH_CommonHelper.jumpWithUrl(actionUrl);
    }

    _jumpToShowKeyboard(userName, commentId) {
      NativeModules.YH_CommonHelper.showkeyBoardView(userName).then(replyValue => {
        this.props.actions.addArticleCommentAction(replyValue, commentId);
      });
    }

    //跳转到种草H5
    _jumpToPersonalGrassPage(optUid) {

       let {communityHost} = this.props

       let url = communityHost + (Platform.OS === 'ios' ? '/grass': '') + `/author/${1}/${optUid}`
       let action, params;
       if(Platform.OS === 'ios') {
           action = 'go.h5';
           params = {
               url,
               param : { headerid: "-1", toplayoutByH5: 'Y' }
           }
       } else {
           action = 'go.h5';
           params = {
               url,
               param : { headerid: "-1", toplayoutByH5: 'Y' }
           }
       }
       let jumpParams = {
           action,
           params
       }
       let path = 'http://m.yohobuy.com?openby:yohobuy=' + JSON.stringify(jumpParams);
       NativeModules.YH_CommonHelper.jumpWithUrl(path);
    }

    _jumpToGrassDetailPage(articleId, rootCommentId) {

       let {communityHost} = this.props
       let url = communityHost + (Platform.OS === 'ios' ? '/grass': '') + `/article/detail/${articleId}`+ `?commentId=${rootCommentId}`

       let action, params;
       if(Platform.OS === 'ios') {
           action = 'go.h5';
           params = {
               url,
               param : { headerid: "-1", toplayoutByH5: 'Y' }
           }
       } else {
           action = 'go.h5';
           params = {
               url,
               param : { headerid: "-1", toplayoutByH5: 'Y' }
           }
       }
       let jumpParams = {
           action,
           params
       }
       let path = 'http://m.yohobuy.com?openby:yohobuy=' + JSON.stringify(jumpParams);
       NativeModules.YH_CommonHelper.jumpWithUrl(path);
    }

    render() {
        let {
            contentTipFlag,
            tipMessage,
            tabButtons,
            commentList,
            isPullToRefresh,
            isFetching
        } = this.props

        return (
            <View style={styles.container}>
                <ContentMessageView
                    ref={(view) => {
                        this.messageView = view
                    }}
                    contentTipFlag={contentTipFlag}
                    tabButtons={tabButtons}
                    commentList={commentList}
                    isPullToRefresh={isPullToRefresh}
                    isFetching={isFetching}
                    tipMessage={tipMessage}
                    onRefresh={this._onRefresh}
                    onEndReached={this._onEndReached}
                    onHiddenTipMessage={this._onHiddenTipMessage}
                    jumpToShowKeyboard={this._jumpToShowKeyboard}
                    jumpToPersonalGrassPage={this._jumpToPersonalGrassPage}
                    jumpToGrassDetailPage={this._jumpToGrassDetailPage}
                    onPressTabAction={this._onPressTabAction}
                />
            </View>
        )
    }
}

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

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