import { Button, Divider, Flex, Table as AntTable, Skeleton } from "antd"; import type { GamesData } from "../types"; import User from "./User"; import { useMemo, useState } from "react"; import { useRequest } from "ahooks"; import styled from "styled-components"; import { Link } from "react-router"; const Table = styled(AntTable)` width: 100%; min-width: 320px; max-width: 600px; .ant-table-content { --ant-table-row-hover-bg: var(--ant-color-bg-container); } `; 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" scroll={{ x: 400 }} footer={() => ( )} > i + 1} /> { const { uid1 } = record; const { team1, team2 } = toTeams(record); return ( ); })} /> { 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; }} /> { const firstIndex = displayData.findIndex(e => e.dateline === data.dateline); const size = displayData.filter(e => e.dateline === data.dateline).length; const show = firstIndex === index; if (show) { return { rowSpan: size, style: { borderTop: '1px solid #f0f0f' } }; } return { rowSpan: 0 }; }} render={(dateline: string, { eventid }: GamesData) => { return ( ); }} />
); } function PlayerTeam(props: { idNames: { uid: string; name: string; }[] }) { return ( {props.idNames.map(e => (
))}
); } function EventName(props: { id: string }) { const req = useRequest(async () => { return fetch(`/api/match-summary/${props.id}`) .then(res => res.json()) .then(data => data.title ?? '-'); }, { refreshDeps: [props.id], debounceWait: 300 }); return ( {req.data} ); }