import { Button, Divider, Flex, Table } from "antd"; import type { GamesData } from "../types"; import User from "./User"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { useRequest } from "ahooks"; interface Props { uid?: string; data?: GamesData[]; } function toTeams(data: GamesData) { const { uid1, uid11, username1, username11, uid2, uid22, username2, username22, result1, result2, ascore1, score1, score2, } = data; const isDoubles = Boolean(username11); const team1 = [{ uid: uid1, name: username1 }]; const team2 = [{ uid: uid2, name: username2 }]; if (isDoubles) { team1.push({ uid: uid11, name: username11 }); team2.push({ uid: uid22, name: username22 }); } return { team1, team2 }; } export function GameTable(props: Props) { const [displayData, setDisplayData] = useState(props.data ?? []); const [page, setPage] = useState(props.data?.length ? 1 :0); const fetchNextPage = useRequest(async () => { const newPage = page + 1; if (page === 0) return []; const resp = await fetch(`/api/user/${props.uid}/games?page=${newPage}`); const nextPageData: GamesData[] = await resp.json(); setDisplayData(data => [...data, ...nextPageData]) setPage(newPage); return nextPageData; }, { manual: true, refreshDeps: [page] }); const hasMore = useMemo(() => (props.data?.length === 10 && page < 2) || (fetchNextPage.data?.length || 0) === 10, [page, fetchNextPage]); return ( <> 最近战绩 e.gameid} showHeader={false} pagination={false} dataSource={displayData} size="small" style={{ width: '100%', maxWidth: 400 }} footer={() => ( )} > i + 1} /> { const { uid1 } = record; const { team1, team2 } = toTeams(record); return ( ); })} /> { const list = props.uid === uid1 ? [result1, result2] : [result2, result1]; return list.join(':'); }} /> { return props.uid === uid1 ? score1 : score2; }} />
); } function PlayerTeam(props: { idNames: { uid: string; name: string; }[] }) { return ( {props.idNames.map(e => (
))}
); }