ContentListView.js 5.73 KB
/**
 * Created by zzz on 2019/3/5.
 */
'use strict';
import React, {Component} from "react";
import ReactNative, {View, Text, Image, ListView, StyleSheet, InteractionManager, Dimensions, TouchableOpacity, Platform, RefreshControl, NativeModules
} from 'react-native';

import YH_PtrRefresh from '../../../common/components/YH_PtrRefresh';
import LoadMoreIndicator from '../../../common/components/LoadMoreIndicator';

import ContentEmptyView from './ContentEmptyView'
import ContentLikedListCell from './ContentLikedListCell'
import ContentFansListCell from './ContentFansListCell'
import ContentNotifyListCell from './ContentNotifyListCell'
import Prompt from '../../../common/components/Prompt';

export default class ContentListView extends Component {
    constructor(props) {
        super(props);

        this._renderRow = this._renderRow.bind(this);
        this._renderFooter = this._renderFooter.bind(this);
        this.dataSource = new ListView.DataSource({
            rowHasChanged: (r1, r2) => !Immutable.is(r1, r2),
        });
    }


    _renderFooter() {
      let backgroundColor = this.props.contentListId === '3' ? '#f2f2f2' : '#ffffff';
      return (
          <View style={[{height: 50}, {backgroundColor: backgroundColor}, {justifyContent:'center'}]}>
          </View>
      )
    }

    _renderRow(rowData, sectionID, rowID) {
        let showLine = this.props.contentList.length === +rowID+1 ? false : true;

        switch (this.props.contentListId) {
          case '1':
            {
              return(
                <ContentLikedListCell
                    key={'row'+ rowID}
                    data={rowData}
                    showLine={showLine}
                    jumpToPersonalGrassPage={this.props.jumpToPersonalGrassPage}
                    jumpToGrassDetailPage={this.props.jumpToGrassDetailPage}
                />
              );
            }

            break;

          case '2':
            {
              return(
                <ContentFansListCell
                    key={'row'+ rowID}
                    data={rowData}
                    showLine={showLine}
                    updateAttentionAction={this.props.updateAttentionAction}
                    jumpToPersonalGrassPage={this.props.jumpToPersonalGrassPage}
                />
              );
            }

            break;

            case '3':
              {
                return(
                  <ContentNotifyListCell
                      data={rowData}
                      jumpToNormalPage={this.props.jumpToNormalPage}
                      jumpToNotifGrassPage={this.props.jumpToNotifGrassPage}
                  />
                );
              }

              break;
          default:

        }
    }

    render() {
      let {contentList, isPullToRefresh, shouldShowEmpty, isShowToast, toastMessage} = this.props;
      let backgroundColor = this.props.contentListId === '3' ? '#f2f2f2' : '#ffffff';

      if (shouldShowEmpty) {
            return (
                <View style={styles.container}>
                    <ContentEmptyView
                        listId={this.props.contentListId}
                    />
                </View>
            );
        }

      return (
          <View style={[styles.container, {backgroundColor: backgroundColor}]}>
          {
              Platform.OS === 'ios' ?
              <ListView
                  ref={(c) => {
                      this.listView = c;
                  }}
                  contentContainerStyle={styles.contentContainer}
                  dataSource={this.dataSource.cloneWithRows(contentList)}
                  renderRow={this._renderRow}
                  renderFooter={this._renderFooter}
                  enableEmptySections={true}
                  enablePullToRefresh={true}
                  isOnPullToRefresh={isPullToRefresh}
                  showsVerticalScrollIndicator={false}
                  onRefreshData={() => {
                      this.props.onRefresh && this.props.onRefresh();
                  }}
                  onEndReached={() => {
                      if (contentList.size !== 0) {
                          this.props.onEndReached && this.props.onEndReached();
                      }
                  }}
              />
              :
              <ListView
                  ref={(c) => {
                      this.listView = c;
                  }}
                  contentContainerStyle={styles.contentContainer}
                  dataSource={this.dataSource.cloneWithRows(contentList)}
                  renderRow={this._renderRow}
                  renderFooter={this._renderFooter}
                  enableEmptySections={true}
                  enablePullToRefresh={true}
                  showsVerticalScrollIndicator={false}
                  refreshControl={
                          <YH_PtrRefresh
                              refreshing={isPullToRefresh}
                              onRefresh={() => {
                                  this.props.onRefresh && this.props.onRefresh();
                              }}
                              colors={['#000000', '#ff0000']}
                              progressBackgroundColor="#ffffff"
                          />
                    }
                    onEndReached={() => {
                        if (contentList.size !== 0) {
                            this.props.onEndReached && this.props.onEndReached();
                        }
                    }}
              />
          }


          {isShowToast ? <Prompt
                text={toastMessage}
                duration={3000}
                onPromptHidden={this.props.hideToastMessage}
            /> : null}
          </View>
      );
    }
}

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