ContentListContainer.js 5.97 KB
/**
 * Created by zzz on 2019/3/5.
 */

'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 contentActions from "../reducers/content/contentActions";

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

const actions = [
    contentActions,
]

function mapStateToProps(state) {
    return {
      contentListId: state.content.contentListId,
      contentList: state.content.contentList.get('list').toJS(),
      isPullToRefresh: state.content.contentList.get('isPullToRefresh'),
      shouldShowEmpty: state.content.contentList.get('shouldShowEmpty'),
      communityHost: state.app.communityHost,
      toastMessage: state.content.toastMessage,
      isShowToast: state.content.isShowToast,
    };
}

function mapDispatchToProps(dispatch) {

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

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

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

        this._updateAttentionAction = this._updateAttentionAction.bind(this);
        this._onRefresh = this._onRefresh.bind(this);
        this._onEndReached = this._onEndReached.bind(this);
        this._jumpToPersonalGrassPage = this._jumpToPersonalGrassPage.bind(this);
        this._jumpToGrassDetailPage = this._jumpToGrassDetailPage.bind(this);
        this._jumpToNotifGrassPage = this._jumpToNotifGrassPage.bind(this);
        this._hideToastMessage = this._hideToastMessage.bind(this);
        this._jumpToNormalPage = this._jumpToNormalPage.bind(this);
    }

    _updateAttentionAction(data) {
      let status = data.isMutualAttention ? 1 : 0;
      this.props.actions.updateAttentionAction(status, data.optUid);
    }

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

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

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

    componentWillUnmount() {
      this.props.actions.clearOtherMessage()
    }

    //跳转到种草H5
    _jumpToPersonalGrassPage(rowData) {
      let {communityHost} = this.props

      let url = communityHost + (Platform.OS === 'ios' ? '/grass': '') + `/author/${1}/${rowData.optUid}`
      let action = 'go.h5';
      let 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(rowData) {
      if (rowData.isDelete === 'Y') {
        return;
      }

      let {communityHost} = this.props
      let url = communityHost + (Platform.OS === 'ios' ? '/grass': '') + `/article/detail/${rowData.articleId}`
      let action = 'go.h5';
      let 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);
    }

    // 通知页面跳转
    _jumpToNotifGrassPage(data) {
      if (data.isDelete === 'Y') {
        this.props.actions.showToastMessage('原文已被作者删除');
        return;
      }

      let pass = data.businessType === 1005 ? true : false;
      let {communityHost} = this.props;
      let action, params, url;

      if (pass) {
         url = communityHost + (Platform.OS === 'ios' ? '/grass': '') + `/article/detail/${data.articleId}`
      } else {
         url = communityHost + (Platform.OS === 'ios' ? '/grass': '') + `/author/${1}/${data.optUid}`
      }

      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);
    }

    _jumpToNormalPage(data) {
      if (data && !data.link) {
        return;
      }

      let path = data.link;
      ReactNative.NativeModules.YH_CommonHelper.jumpWithUrl(path);
    }

    _hideToastMessage() {
      this.props.actions.hideToastMessage();
    }

    render() {
        return (
            <View style={styles.container}>

              <ContentListView
                  ref={(view) => {
                      this.messageView = view
                  }}
                  contentList={this.props.contentList}
                  isPullToRefresh={this.props.isPullToRefresh}
                  contentListId={this.props.contentListId}
                  shouldShowEmpty={this.props.shouldShowEmpty}

                  toastMessage={this.props.toastMessage}
                  isShowToast={this.props.isShowToast}
                  hideToastMessage={this._hideToastMessage}

                  onRefresh={this._onRefresh}
                  onEndReached={this._onEndReached}
                  updateAttentionAction={this._updateAttentionAction}
                  jumpToPersonalGrassPage={this._jumpToPersonalGrassPage}
                  jumpToGrassDetailPage={this._jumpToGrassDetailPage}
                  jumpToNotifGrassPage={this._jumpToNotifGrassPage}
                  jumpToNormalPage={this._jumpToNormalPage}
              />

            </View>
        )
    }
}

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

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