SearchGeneral.js 10.9 KB
/**
 * 公共的图文列表页面
 */
import React, { Component } from "react";
import {
    ActivityIndicator,
    DeviceEventEmitter,
    FlatList,
    StyleSheet,
    TouchableOpacity,
    View
} from "react-native";
import { width } from "../../utils/getSize";
import ItemImageText from "../component/ItemImageText";
import ItemCourse from "../component/ItemCourse";
import ConcernItem from "../concern/item/ConcernItem";

import { xnToast,NoDoublePress } from "../../utils/utils";
import AppService from "../../service/AppService";
import QuestionHomeListItem from "../questions/QuestionHomeListItem";
import AtlasItem from "../atlas/AtlasItem";

const pageSize = 10;
{
    var arr_keyValue;
}

export default class SearchGeneral extends Component {
    constructor(props) {
        super(props);
        this.state = {
            data: [],
            searchUserData: [],
            showMoreText: [],
            loadMore: false,
            loading: false
        };
    }

    componentWillMount() {
        this.getList(this.state.pageIndex);
        this.getHeadList();
    }

    componentDidMount() {
        let _this = this;

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

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

    // 获取人的列表
    getHeadList() {
        if (!global.isConnected) {
            xnToast("暂无网络连接,请稍后重试");
            return;
        }
        let params = {
            name: this.props.triData,
            includeOwner: false
        };
        AppService.queryUser(params)
            .then(data => {
                if (!!!data) {
                    //   xnToast("暂无数据!!!");
                    return;
                }
                let resultStr = data.result;
                let resultArr = [];
                for (let i = 0; i < resultStr.length; i++) {
                    let item = {
                        headUrl: null,
                        userName: "",
                        userDesc: "",
                        tenantId: "",
                        userId: "",
                        isAttend: false,
                        attentionid: 0,
                        pageSize: 7
                    };
                    item.headUrl = resultStr[i].headFileUrl;
                    item.userName = resultStr[i].name;
                    item.userDesc = resultStr[i].description;
                    item.tenantId = resultStr[i].tenantId;
                    item.userId = resultStr[i].id;
                    item.isAttend = resultStr[i].hasBeenAttended;
                    if (resultStr[i].attention) {
                        item.attentionid = resultStr[i].attention.id;
                    }
                    resultArr.push(item);
                }

                this.setState({
                    searchUserData: resultArr
                });
            })
            .catch(error => {
                xnToast(error);
            });
    }

    //获取帖子信息列表
    getList() {
        let that = this;
        if (!global.isConnected) {
            xnToast("暂无网络连接,请稍后重试!");
            return;
        }
        let length = this.state.data.length;
        let arr_keyValue = this.props.arr_keyValue;
        if (length % pageSize == 0 && !this.state.loadMore) {
            let params = {
                tenantId: global.config.tenantId,
                forumId: global.forumId,
                searchType: "HAS_PUBLISH",
                isActive: true,
                sourceFrom:'APP',
                pageNumber: length / pageSize + 1,
                pageSize: pageSize,
                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(params);
            AppService.queryList(params)
                .then(data => {
                    that.setState({
                        loading: false,
                        loadMore: false
                    });
                    DeviceEventEmitter.emit("loadShow", { show: false });
                    console.log(data);
                    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;
                        }
                        that.setState({
                            data: that.state.data.concat(data.result)
                        });
                    }
                })
                .catch(error => {
                    that.setState({
                        loading: false
                    });
                    xnToast(error);
                });
        }
    }

    //渲染item
    keyExtractor = (item, index) => index;
    renderItem({ item, index }) {
        //帖子类型
        switch (item.threadType) {
            case 0: //图文
                return <ItemImageText itemList={item} nav={this.props.navigation} />;
                break;
            case 1: //图集
                return <AtlasItem item={item} nav={this.props.navigation} />;
                break;
            case 2: //视频
                return (
                    <ItemImageText
                        itemList={item}
                        nav={this.props.navigation}
                        isVideo={true}
                    />
                );
                break;
            case 3: //提问
                return <QuestionHomeListItem item={item} nav={this.props.navigation} />;
                break;
            case 4: //文章
                return <ItemImageText itemList={item} nav={this.props.navigation} />;
                break;
            case 5: //课程
                return <ItemCourse item={item} nav={this.props.navigation} />;
                break;
            default:
                //其他
                return <ItemImageText itemList={item} nav={this.props.navigation} />;
                break;
        }
    }

    _separator = () => {
        return <View style={{ height: 5, backgroundColor: "#F3F5F6" }} />;
    };
    shiftToMine(id) {
        if (id == global.userId) {
            //自己
            NoDoublePress.onPress(()=>{

                this.props.navigation.navigate("MyPage", { id: id });
            })
            return;
        }
        NoDoublePress.onPress(()=>{

            this.props.navigation.navigate("PersonalHomePage", { userId: id });
        })
    }
    renderConcernItemView(item, index) {
        if (index < 4) {
            return (
                <TouchableOpacity
                    onPress={() => {
                        this.shiftToMine(item.userId);
                    }}
                >
                  <ConcernItem
                      isVShow={false}
                      isMore={false}
                      url={item.headUrl}
                      concernName={item.userName}
                      addConcern={() => {}}
                  />
                </TouchableOpacity>
            );
        } else {
            return <View />;
        }
    }
    shiftToSearch() {
        NoDoublePress.onPress(()=>{

            this.props.navigation.navigate("ConcernSearch", {});
        })
    }

    renderListHeadView() {
        return (
            <View>
              <View
                  style={{
                      width: "100%",
                      height: width * 0.3,
                      flexDirection: "row",
                      justifyContent: "flex-start",
                      alignItems: "center"
                  }}
              >
                  {this.state.searchUserData.length > 0 &&
                  this.state.searchUserData.map((item, index) =>
                      this.renderConcernItemView(item, index)
                  )}
                <TouchableOpacity
                    onPress={() => {
                        // 发送通知
                        DeviceEventEmitter.emit("goToUser");
                    }}
                >
                  <ConcernItem
                      isVShow={false}
                      isMore
                      concernName={"更多用户"}
                      addConcern={() => {
                          alert("添加更多");
                      }}
                  />
                </TouchableOpacity>
              </View>
              <View
                  style={{ backgroundColor: "#f3f5f6", height: 8, width: "100%" }}
              />
            </View>
        );
    }
    render() {
        return (
            <View style={styles.background}>
                {this.state.data && (
                    <FlatList
                        style={{ flex: 1, display: "flex" }}
                        refreshing={false}
                        onEndReachedThreshold={0.01}
                        onEndReached={() => this.getList()}
                        keyExtractor={this.keyExtractor}
                        data={this.state.data}
                        ListHeaderComponent={this.renderListHeadView.bind(this)}
                        extraData={this.state.searchUserData}
                        ItemSeparatorComponent={this._separator}
                        renderItem={this.renderItem.bind(this)}
                        onRefresh={() => {
                            this.setState(
                                {
                                    loading: true
                                },
                                function() {
                                    this.getList();
                                }
                            );
                        }}
                    />
                )}
                {this.state.data.length > pageSize && this.state.loadMore && (
                    <ActivityIndicator />
                )}
            </View>
        );
    }
}

const styles = StyleSheet.create({
    background: {
        flex: 1,
        backgroundColor: "#ffffff",
        display: "flex"
    }
});