CourseList.js 12.2 KB
/**
 * Created by Cassie on 2018/05/14
 * 公共的图文列表页面
 */
import React, {Component} from "react";
import {ActivityIndicator, Image,DeviceEventEmitter,Text, FlatList, StyleSheet, View,TextInput} from "react-native";
import {xnToast} from "../../utils/utils";
import AppService from "../../service/AppService";
import {width, zoomH, zoomW} from "../../utils/getSize";
import EmptyView from '../component/EmptyView';
import CourseListItem from "../course/CourseListItem";

const defaultIcon = require("../../img/defaultIcon.png");

const pageSize = 20;
{
    var arr_keyValue;
}

export default class CourseList extends Component {
    constructor(props) {
        super(props);
        this.state = {
            data: [],
            showMoreText: [],
            loadMore: false,
            loading: false,
            totalCount:0,
            refreshing: false,
            showEmptyView:false,//是否显示暂无数据,
            allList:[],
            showList:[],
            keyWord:''
        };

    }

    componentWillMount() {
        let arr_keyValue = this.props.arr_keyValue;
        for (var key in arr_keyValue) {
            var obj = arr_keyValue[key];
            for (var key1 in obj) {
                if (key1 == 'tabIndex'){
                    // this.refreshAll = DeviceEventEmitter.addListener(obj[key1], () => {
                    //     this.setState({
                    //         data: [],
                    //         showList: [],
                    //         allList: [],
                    //         loadMore: false
                    //     }, () => {
                    //         this.getList();
                    //     });
                    // });
                }
            }
        }

        this.getList();
    }

    componentDidMount() {
        let _this = this;

        //刷新列表 refreshThreadList
        // this.refreshHomeList = DeviceEventEmitter.addListener(
        //     "refreshHomeList",
        //     function() {
        //         {
        //             _this.setState(
        //                 {
        //                     data: [],
        //                     showList: [],
        //                     allList: [],
        //                     loadMore: false
        //                 },
        //                 function() {
        //                     _this.getList();
        //                 }
        //             );
        //         }
        //     }
        // );
        // this.refreshThreadList = DeviceEventEmitter.addListener(
        //     "refreshThreadList",
        //     function() {
        //         _this.getList();
        //     }
        // )
    }

    componentWillUnmount() {
        // if (this.refreshHomeList != null) {
        //     this.refreshHomeList.remove();
        // }
        // if (this.refreshAll != null ){
        //     this.refreshAll.remove();
        // }
    }

    //获取板块列表信息
    getList(from) {
        let that = this;
        if (!global.isConnected) {
            DeviceEventEmitter.emit('getTopicList',{});
            xnToast("暂无网络连接,请稍后重试!");
            return;
        }
        if (this.state.loading){
            return;
        }
        let length = this.state.showList.length;
        let arr_keyValue = this.props.arr_keyValue;
        if (length % pageSize == 0 && !this.state.loadMore) {
            let params = {
                isActive:true,
                pageNumber: length / pageSize + 1,
                pageSize: pageSize
            };
            // 添加前页面自定义的参数
            for (var key in arr_keyValue) {
                var obj = arr_keyValue[key];
                for (var key in obj) {
                    params[key] = obj[key];
                }
            }
            this.setState({
                loadMore: true,
                loading:true
            });
            DeviceEventEmitter.emit('loadShow',{show:true});
            console.log('getList',params);
            AppService.findCourseRequest(params)
                .then(data => {
                    that.setState({
                        loading: false,
                        loadMore: false,
                    });
                    DeviceEventEmitter.emit('loadShow',{show:false});
                    DeviceEventEmitter.emit('getTopicList',{});
                    if (data.message) {
                        xnToast(data.message);
                        return;
                    }
                    if (data.errors.length > 0) {
                        xnToast(data.errors[0].message);
                    } else {
                        if (length + data.result.length > data.totalCount) {
                            return;
                        }
                        // let courseListTemp = that.state.courseList;
                        // courseListTemp = courseListTemp.concat(data.result)
                        // that.setState({courseList:courseListTemp, totalCount:data.totalCount});
                        that.setState({
                            showList: that.state.showList.concat(data.result),
                            allList: that.state.allList.concat(data.result),
                            totalCount:data.totalCount,
                            showEmptyView:data.totalCount>0 ? false:true,
                        });
                    }
                })
                .catch(error => {
                    that.setState({
                        loading: false,
                        loadMore: false,
                    });
                    xnToast(error);
                });
        } else if (length == this.state.totalCount) {
            let params = {
                isActive:true,
                pageSize: 0
                // keyword:this.props.triData,
            };
            // 添加前页面自定义的参数
            for (var key in arr_keyValue) {
                var obj = arr_keyValue[key];
                for (var key in obj) {
                    params[key] = obj[key];
                }
            }
            this.setState({
                loadMore: true,
                loading:true
            });
            DeviceEventEmitter.emit('loadShow',{show:true});
            console.log('homeList查询',params);
            AppService.findCourseRequest(params)
                .then(data => {
                    that.setState({
                        loading: false,
                        loadMore: false,
                    });
                    DeviceEventEmitter.emit('getTopicList',{});
                    DeviceEventEmitter.emit('loadShow',{show:false});

                    if (data.message) {
                        xnToast(data.message);
                        return;
                    }
                    if (data.errors.length > 0) {
                        xnToast(data.errors[0].message);
                    } else {

                        that.setState({
                            showList: data.result,
                            allList: data.result,
                            totalCount:data.totalCount,
                        });
                    }
                })
                .catch(error => {
                    that.setState({
                        loading: false,
                        loadMore: false,
                    });
                    xnToast(error);
                });
        }
    }

    //渲染item
    keyExtractor = (item, index) => index;
    renderItem({ item, index }) {

        return <CourseListItem item={item} nav={this.props.navigation} />;

    }

    _separator = () => {
        return <View style={{ height: 6/zoomH, backgroundColor: "#F3F5F6" }} />;
    };

    searchData(){
        if (this.state.keyWord.length<1){
            return;
        }
        let that = this;
        if (!global.isConnected) {
            DeviceEventEmitter.emit('getTopicList',{});
            xnToast("暂无网络连接,请稍后重试!");
            return;
        }
        if (this.state.loading){
            return;
        }
        this.setState({
            loadMore: true,
            loading:true,
            showList:[]
        });
        let params = {
            isActive:true,
            pageSize: 0,
            name:this.state.keyWord
        };

        AppService.findCourseRequest(params)
            .then(data => {
                that.setState({
                    loading: false,
                    loadMore: false,
                });
                DeviceEventEmitter.emit('loadShow',{show:false});
                DeviceEventEmitter.emit('getTopicList',{});
                if (data.message) {
                    xnToast(data.message);
                    return;
                }
                if (data.errors.length > 0) {
                    xnToast(data.errors[0].message);
                } else {
                    that.setState({
                        showList: data.result,
                        showEmptyView:data.totalCount>0 ? false:true,
                    });
                }
            })
            .catch(error => {
                that.setState({
                    loading: false,
                    loadMore: false,
                    showList:that.state.allList
                });
                xnToast(error);
            });
    }

    render() {
        return (
            <View style={styles.background}>
                <View style={styles.search}>
                    <TextInput style={styles.input} placeholder={'搜索'} returnKeyType='done' underlineColorAndroid="transparent" numberOfLines={1} onChangeText={(text)=>{
                        this.state.keyWord=text;
                        if (this.state.keyWord.length<1 ){
                            this.state.showList=[];
                            this.setState({
                                showEmptyView:this.state.showList.length>0 ? false:true,
                            });
                            this.getList();
                        }
                    }} onSubmitEditing={()=>this.searchData(this.state.keyWord)}></TextInput>
                </View>
                {this.state.showList && (
                    <FlatList
                        style={{ flex: 1, display: "flex" }}
                        onEndReachedThreshold={0.01}
                        onEndReached={() => {
                            this.getList()
                        }}
                        keyExtractor={this.keyExtractor}
                        data={this.state.showList}
                        ItemSeparatorComponent={this._separator}
                        renderItem={this.renderItem.bind(this)}
                        refreshing={this.state.refreshing}
                        onRefresh={() => {
                            let _this = this;
                            this.setState({
                                refreshing: true
                            }, () => {
                                const timer = setTimeout(() => {
                                    clearTimeout(timer);
                                    _this.setState({
                                        refreshing: false,
                                        data: [],
                                        showList: [],
                                        allList: [],
                                    }, () => {
                                        _this.getList();
                                    });
                                    }, 1000);
                            })}}
                    />
                )}
                {this.state.showList.length > pageSize && this.state.loadMore && (
                    <ActivityIndicator />
                )}
                {this.state.showEmptyView &&
                <EmptyView />}


            </View>
        );
    }
}

const styles = StyleSheet.create({
    background: {
        flex: 1,
        backgroundColor: "#F3F5F6",
        display: "flex"
    },
    search:{
        width:width,
        height:44,
        justifyContent: 'center',
        alignItems: 'center'
    },
    input:{
        paddingLeft: 15,
        paddingRight: 15,
        paddingTop:0,
        paddingBottom:0,
        width:width-30,
        height:30,
        backgroundColor:'#fff',

    }

});