import { List, PullRefresh } from '@taroify/core'; import classNames from 'classnames'; import { useCallback, useEffect, useRef, useState } from 'react'; import ListPlaceholder from '@/components/list-placeholder'; import { AuthedGroupInfo } from '@/types/partner'; import { logWithPrefix } from '@/utils/common'; import { formatTimestamp, getAuthedGroupList as requestData } from '@/utils/partner'; import './index.less'; const PREFIX = 'group-certification-list'; const log = logWithPrefix(PREFIX); const FIRST_PAGE = 0; function GroupCertificationList(props: { refreshDisabled?: boolean; visible?: boolean; listHeight?: number; className?: string; onListEmpty?: () => void; }) { const { className, listHeight, refreshDisabled, visible = true, onListEmpty } = props; const [hasMore, setHasMore] = useState(false); const [refreshing, setRefreshing] = useState(false); const [loadingMore, setLoadingMore] = useState(false); const [loadMoreError, setLoadMoreError] = useState(false); const [dataList, setDataList] = useState([]); const currentPage = useRef(FIRST_PAGE); const onListEmptyRef = useRef(onListEmpty); const handleRefresh = useCallback(async () => { log('start pull refresh'); try { setRefreshing(true); setLoadMoreError(false); const content = await requestData(); setDataList(content); currentPage.current = 1; // setHasMore(currentPage.current < totalPages); !content.length && onListEmptyRef.current?.(); log('pull refresh success'); } catch (e) { setDataList([]); setHasMore(false); setLoadMoreError(true); currentPage.current = FIRST_PAGE; log('pull refresh failed'); } finally { setRefreshing(false); } }, []); const handleLoadMore = useCallback(async () => { log('start load more', hasMore); if (!hasMore) { return; } setLoadMoreError(false); setLoadingMore(true); try { const content = await requestData(); setDataList([...dataList, ...content]); currentPage.current = currentPage.current + 1; // setHasMore(currentPage.current < totalPages); log('load more success'); } catch (e) { setLoadMoreError(true); log('load more failed'); } finally { setLoadingMore(false); } }, [dataList, hasMore]); useEffect(() => { onListEmptyRef.current = onListEmpty; }, [onListEmpty]); // 初始化数据&配置变更后刷新数据 useEffect(() => { // 列表不可见时,先不做处理 if (!visible) { log('visible changed, but is not visible, only clear list'); return; } const refresh = async () => { log('visible changed, start refresh list data'); try { setDataList([]); setLoadingMore(true); setLoadMoreError(false); const content = await requestData(); setDataList(content); currentPage.current = 1; // setHasMore(currentPage.current < totalPages); !content.length && onListEmptyRef.current?.(); } catch (e) { setDataList([]); setHasMore(false); setLoadMoreError(true); } finally { log('visible changed, refresh list data end'); setLoadingMore(false); } }; refresh(); }, [visible]); return (
以下均为认证成功的群,没认证成功请先确认是否有拉运营进群,如果在,可以尝试重新分享小程序
认证日期
群名称
{dataList.map(item => (
{formatTimestamp(item.authDate, true)}
{item.groupName}
))}
); } export default GroupCertificationList;