import Taro, { useReachBottom } from "@tarojs/taro";
import { View, Text } from "@tarojs/components";
import EmptyData from "@/components/empty-data";
import NavBarNormal from "@/components/NavBarNormal/index";
import SearchBar from "@/components/search-bar/index";
import style from "./index.module.less";
import { useEffect, useState } from "react";
import ContactCard from "./components/contact-card/index";
import { getContactList, setContactToTop } from "@/service/contact";
import { useLoadMore } from "@/utils/loadMore";
import PageCustom from "@/components/page-custom/index";
import { TContactItem } from "@/types/contact";
import { isSuccess } from "@/utils";
import useSWRInfinite from "swr/infinite";
export default function Index() {
const [searchValue, setSearchValue] = useState("");
const fetcher = async ([_url, params, keyword]) => {
params = params || {};
console.log("fetcher", _url, params);
const res = await getContactList({
startId: params.nextId,
pageSize: params.pageSize,
keyword: keyword,
});
return res.data;
};
const getKey = (pageIndex:number, previousPageData) => {
if (pageIndex === 0)
return [
"/my/contacts",
{ nextId: undefined, pageSize: 2, keyword: "" },
searchValue,
];
if (previousPageData && previousPageData.nextId) {
return [
"/my/contacts",
{ pageSize: 2, nextId: previousPageData.nextId },
searchValue,
];
}
return null;
};
const { data, setSize } = useSWRInfinite(getKey, fetcher, {
revalidateIfStale: false,
onErrorRetry(err, key, config, revalidate, revalidateOpts) {
if(err.status === 404) return
if(err.status === 401) return
if(revalidateOpts.retryCount >=3 )return
},
});
const list = data?.flatMap((page) => page?.data || []) || [];
const resetFetchList = () => {
setSize(1);
};
const handleSearchBarChanged = (v: string) => {
setSearchValue(v);
};
const handleClear = () => {
setSearchValue("");
};
useReachBottom(() => {
// 加载更多数据
// 如果搜索框中有数据由不加载更多数据
if (searchValue.length) {
return;
}
setSize((prevSize) => prevSize + 1);
});
const handleHello = async (e: any) => {
const detail = e.detail as { type: string; id: string };
console.log(detail);
// 置顶与取消置顶
if (detail.type === "pin" || detail.type === "unpin") {
const reseponse = await setContactToTop({
isTop: detail.type === "pin",
contactId: detail.id,
});
if (isSuccess(reseponse.status)) {
resetFetchList();
return;
}
}
};
const renderContent = () => {
if (list?.length) {
return list.map((item) => (
// @ts-ignore
));
}
return ;
};
return (
联系人}
>
handleSearchBarChanged(e)}
onClear={() => handleClear()}
>
{renderContent()}
);
}