diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-03-20 22:18:14 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-03-20 22:18:14 +0900 |
| commit | cca0f63e50684d6806697589b620ee4b4c1b21b5 (patch) | |
| tree | 592bf93ac15a325b9b86e9455c2007f857907efc /frontend/app/components/GolfWatchApps | |
| parent | f1701822ed069d70841e8b40392e55bb28bf3eb6 (diff) | |
| download | phperkaigi-2025-albatross-cca0f63e50684d6806697589b620ee4b4c1b21b5.tar.gz phperkaigi-2025-albatross-cca0f63e50684d6806697589b620ee4b4c1b21b5.tar.zst phperkaigi-2025-albatross-cca0f63e50684d6806697589b620ee4b4c1b21b5.zip | |
feat(frontend): improve watch page layout
Diffstat (limited to 'frontend/app/components/GolfWatchApps')
| -rw-r--r-- | frontend/app/components/GolfWatchApps/GolfWatchAppGaming1v1.tsx | 48 | ||||
| -rw-r--r-- | frontend/app/components/GolfWatchApps/GolfWatchAppGamingMultiplayer.tsx | 12 |
2 files changed, 37 insertions, 23 deletions
diff --git a/frontend/app/components/GolfWatchApps/GolfWatchAppGaming1v1.tsx b/frontend/app/components/GolfWatchApps/GolfWatchAppGaming1v1.tsx index f72397d..4a7fe8a 100644 --- a/frontend/app/components/GolfWatchApps/GolfWatchAppGaming1v1.tsx +++ b/frontend/app/components/GolfWatchApps/GolfWatchAppGaming1v1.tsx @@ -2,15 +2,18 @@ import { useAtomValue } from "jotai"; import { gamingLeftTimeSecondsAtom, latestGameStatesAtom, + calcCodeSize, } from "../../states/watch"; import type { PlayerProfile } from "../../types/PlayerProfile"; +import BorderedContainer from "../BorderedContainer"; +import SubmitStatusLabel from "../SubmitStatusLabel"; +import ThreeColumnLayout from "../ThreeColumnLayout"; +import TitledColumn from "../TitledColumn"; +import UserIcon from "../UserIcon"; import CodeBlock from "../Gaming/CodeBlock"; import LeftTime from "../Gaming/LeftTime"; -import Problem from "../Gaming/Problem"; +import ProblemColumn from "../Gaming/ProblemColumn"; import ScoreBar from "../Gaming/ScoreBar"; -import SubmitResult from "../Gaming/SubmitResult"; -import ThreeColumnLayout from "../ThreeColumnLayout"; -import UserIcon from "../UserIcon"; type Props = { gameDisplayName: string; @@ -43,6 +46,9 @@ export default function GolfWatchAppGaming1v1({ const scoreB = stateB?.score ?? null; const statusB = stateB?.status ?? "none"; + const codeSizeA = calcCodeSize(codeA); + const codeSizeB = calcCodeSize(codeB); + const topBg = gameResult ? gameResult === "winA" ? "bg-orange-400" @@ -102,19 +108,27 @@ export default function GolfWatchAppGaming1v1({ bgB="bg-purple-400" /> <ThreeColumnLayout> - <CodeBlock code={codeA} language="php" /> - <div className="flex flex-col gap-4"> - <div className="grid grid-cols-2 gap-4"> - <SubmitResult status={statusA} /> - <SubmitResult status={statusB} /> - </div> - <Problem - title={problemTitle} - description={problemDescription} - sampleCode={sampleCode} - /> - </div> - <CodeBlock code={codeB} language="php" /> + <TitledColumn title={<SubmitStatusLabel status={statusA} />}> + <BorderedContainer className="grow flex flex-col gap-4"> + <div className="text-center font-semibold text-lg"> + コードサイズ: {codeSizeA} + </div> + <CodeBlock code={codeA} language="php" /> + </BorderedContainer> + </TitledColumn> + <ProblemColumn + title={problemTitle} + description={problemDescription} + sampleCode={sampleCode} + /> + <TitledColumn title={<SubmitStatusLabel status={statusB} />}> + <BorderedContainer className="grow flex flex-col gap-4"> + <div className="text-center font-semibold text-lg"> + コードサイズ: {codeSizeB} + </div> + <CodeBlock code={codeB} language="php" /> + </BorderedContainer> + </TitledColumn> </ThreeColumnLayout> </div> ); diff --git a/frontend/app/components/GolfWatchApps/GolfWatchAppGamingMultiplayer.tsx b/frontend/app/components/GolfWatchApps/GolfWatchAppGamingMultiplayer.tsx index 06a2376..a6b9464 100644 --- a/frontend/app/components/GolfWatchApps/GolfWatchAppGamingMultiplayer.tsx +++ b/frontend/app/components/GolfWatchApps/GolfWatchAppGamingMultiplayer.tsx @@ -2,8 +2,9 @@ import { useAtomValue } from "jotai"; import type { components } from "../../api/schema"; import { gamingLeftTimeSecondsAtom } from "../../states/watch"; import LeftTime from "../Gaming/LeftTime"; -import Problem from "../Gaming/Problem"; +import ProblemColumn from "../Gaming/ProblemColumn"; import RankingTable from "../Gaming/RankingTable"; +import TitledColumn from "../TitledColumn"; import TwoColumnLayout from "../TwoColumnLayout"; type RankingEntry = components["schemas"]["RankingEntry"]; @@ -27,7 +28,7 @@ export default function GolfWatchAppGamingMultiplayer({ return ( <div className="min-h-screen bg-gray-100 flex flex-col"> - <div className={`text-white bg-sky-600 grid grid-cols-3 px-4 py-2`}> + <div className="text-white bg-sky-600 grid grid-cols-3 px-4 py-2"> <div className="font-bold flex justify-between my-auto"></div> <div className="font-bold text-center"> <div className="text-gray-100">{gameDisplayName}</div> @@ -36,15 +37,14 @@ export default function GolfWatchAppGamingMultiplayer({ <div className="font-bold flex justify-between my-auto"></div> </div> <TwoColumnLayout> - <Problem + <ProblemColumn title={problemTitle} description={problemDescription} sampleCode={sampleCode} /> - <div className="p-4 flex flex-col gap-4"> - <div className="text-center text-xl font-bold">順位表</div> + <TitledColumn title="順位表"> <RankingTable ranking={ranking} /> - </div> + </TitledColumn> </TwoColumnLayout> </div> ); |
