Blame view

js/community/components/message/SystemMessage.js 3.7 KB
1 2 3 4
'use strict';

import React from 'react';
import ReactNative from 'react-native';
5 6 7 8 9 10
import ImmutablePropTypes from 'react-immutable-proptypes';
import SysMsgCell from './SysMsgCell';
import LoadMoreIndicator from '../../../common/components/LoadMoreIndicator';


11 12 13 14 15 16 17 18 19

const {
    View,
    Text,
    Image,
    TextInput,
    StyleSheet,
    Platform,
    Dimensions,
20 21 22
    InteractionManager,
    ListView,
23 24 25 26
} = ReactNative;

export default class SystemMessage extends React.Component {
    static propTypes = {
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
        list: ImmutablePropTypes.listOf(
            ImmutablePropTypes.contains({
                author: ImmutablePropTypes.contains({
                    avatar: React.PropTypes.string,
                    uid: React.PropTypes.number,
                    name: React.PropTypes.string,
    			}),
                timeago:React.PropTypes.string,
                title:React.PropTypes.string,
                reply:React.PropTypes.string,
                section: ImmutablePropTypes.contains({
    				id: React.PropTypes.number,
    				name: React.PropTypes.string,
    			}),
            }),
        ),

        onPressSection: React.PropTypes.func,
        onRefresh: React.PropTypes.func,
        onEndReached: React.PropTypes.func,
47 48 49 50
    }

    constructor(props) {
        super(props);
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69

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

    componentDidMount() {
        // InteractionManager.runAfterInteractions(() => {
        //     this.listView && this.listView.getScrollResponder().startPullToRefresh();
        // });

    }

    _renderRow(rowData, sectionID, rowID, highlightRow) {
        return (
            <SysMsgCell
                data={rowData}
70 71
                onPressSection={this.props.onPressSection}
                onPressPost={this.props.onPressPost}
72 73
            />
        );
74 75
    }
76
    _renderSeparator(sectionID, rowID) {
77
        return (
78
            <View key={'separator' + rowID} style={styles.separator}/>
79 80 81 82
        );
    }

    render() {
83
        let {list, endReached, isLoadingMore, isFetching, isRefreshing} = this.props;
84 85
        return (
            <View style={styles.container}>
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
            <ListView
                ref={(c) => {
                    this.listView = c;
                }}
                dataSource={this.dataSource.cloneWithRows(list.toArray())}
                renderRow={this._renderRow}
                renderSeparator={this._renderSeparator}
                enableEmptySections={true}
                enablePullToRefresh={false}
                isOnPullToRefresh={isRefreshing}
                onEndReached={() => {
                    this.props.onEndReached && this.props.onEndReached();
                }}
                onRefreshData={() => {
                    this.props.onRefresh && this.props.onRefresh();
                }}
                renderFooter={()=>{
                    if (endReached) {
                        return <LoadMoreIndicator
                                isVisible={true}
106
                                text={'暂无更多'}
107 108 109 110 111 112 113 114 115
                            />
                    } else {
                        return <LoadMoreIndicator
                                isVisible={isLoadingMore}
                                animating={isFetching}
                            />
                    }
                }}
            />
116 117 118 119 120 121 122 123 124 125
            </View>


        );
    }
}


let styles = StyleSheet.create({
    container: {
126
        flex: 1,
127 128 129
        backgroundColor: 'white',
    },
130 131 132 133 134
    separator: {
        height: 0.5,
        backgroundColor: '#e0e0e0',
    },
135
});