From 7f29d334f26229753e68d20a5aaab33c39de9f06 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 1 Mar 2026 12:21:21 +0900 Subject: feat(frontend): show submission history on play screen Replace the placeholder submission status section with a full submission history table using the existing getGamePlaySubmissions API. Extract shared DataTable, DataTableCell, and formatUnixTimestamp from RankingTable into a reusable Gaming/DataTable component. Co-Authored-By: Claude Opus 4.6 --- frontend/app/components/Gaming/RankingTable.tsx | 81 +++++++------------------ 1 file changed, 21 insertions(+), 60 deletions(-) (limited to 'frontend/app/components/Gaming/RankingTable.tsx') diff --git a/frontend/app/components/Gaming/RankingTable.tsx b/frontend/app/components/Gaming/RankingTable.tsx index 4bfdad3..4ba3987 100644 --- a/frontend/app/components/Gaming/RankingTable.tsx +++ b/frontend/app/components/Gaming/RankingTable.tsx @@ -1,34 +1,8 @@ import { useAtomValue } from "jotai"; -import React from "react"; import { rankingAtom } from "../../states/watch"; import type { SupportedLanguage } from "../../types/SupportedLanguage"; import CodePopover from "./CodePopover"; - -function TableHeaderCell({ children }: { children: React.ReactNode }) { - return ( - - {children} - - ); -} - -function TableBodyCell({ children }: { children: React.ReactNode }) { - return ( - {children} - ); -} - -function formatUnixTimestamp(timestamp: number) { - const date = new Date(timestamp * 1000); - - const year = date.getFullYear(); - const month = (date.getMonth() + 1).toString().padStart(2, "0"); - const day = date.getDate().toString().padStart(2, "0"); - const hours = date.getHours().toString().padStart(2, "0"); - const minutes = date.getMinutes().toString().padStart(2, "0"); - - return `${year}-${month}-${day} ${hours}:${minutes}`; -} +import DataTable, { DataTableCell, formatUnixTimestamp } from "./DataTable"; type Props = { problemLanguage: SupportedLanguage; @@ -38,38 +12,25 @@ export default function RankingTable({ problemLanguage }: Props) { const ranking = useAtomValue(rankingAtom); return ( -
- - - - 順位 - プレイヤー - スコア - 提出時刻 - コード - - - - {ranking.map((entry, index) => ( - - {index + 1} - - {entry.player.display_name} - {entry.player.label && ` (${entry.player.label})`} - - {entry.score} - - {formatUnixTimestamp(entry.submitted_at)} - - - {entry.code && ( - - )} - - - ))} - -
-
+ + {ranking.map((entry, index) => ( + + {index + 1} + + {entry.player.display_name} + {entry.player.label && ` (${entry.player.label})`} + + {entry.score} + + {formatUnixTimestamp(entry.submitted_at)} + + + {entry.code && ( + + )} + + + ))} + ); } -- cgit v1.3.1