import { fetchMyAvatars, TAvatarItem } from "@/service/storage"; import { isSuccess } from "@/utils"; import { useState, useCallback } from "react"; export const useAvatars = (initPageSize: number = 20) => { const [avatars, setAvatars] = useState([]); const [pageIndex, setPageIndex] = useState(1); const [pageSize] = useState(initPageSize); const [totalCount, setTotalCount] = useState(0); const [isLoading, setIsLoading] = useState(false); const [hasMore, setHasMore] = useState(true); const loadAvatars = useCallback(async (reset: boolean = false) => { if (isLoading) return; setIsLoading(true); const currentPage = reset ? 1 : pageIndex; try { const response = await fetchMyAvatars({ pageSize, pageIndex: currentPage }); if (isSuccess(response.status)) { const { data, totalCount: total } = response.data; setTotalCount(total); if (reset) { setAvatars(data); } else { setAvatars(prev => [...prev, ...data]); } setHasMore((currentPage * pageSize) < total); setPageIndex(currentPage + 1); } } finally { setIsLoading(false); } }, [isLoading, pageIndex, pageSize]); const resetAvatars = useCallback(() => { setAvatars([]); setPageIndex(1); setTotalCount(0); setHasMore(true); }, []); // 首次加载 const initLoad = useCallback(async () => { resetAvatars(); await loadAvatars(true); }, [resetAvatars, loadAvatars]); return { avatars, isLoading, hasMore, totalCount, loadAvatars, resetAvatars, initLoad, }; };