ContentListContainer.js 4.67 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,
    };
}

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

    _updateAttentionAction(status, optUid) {
      this.props.actions.updateAttentionAction(status, 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(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, isDelete) {
      if (isDelete === 'Y') {
        return;
      }

      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() {
        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}

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

            </View>
        )
    }
}

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

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