aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2024-08-12 03:56:13 +0900
committernsfisis <nsfisis@gmail.com>2024-08-12 04:28:59 +0900
commitc6629900f3a4965ceca0f42e90648937bf51dfb5 (patch)
tree665b2b33d8a97754e2abfaaf436ab98ff7572ec4
parentfbeacd47a9c21a06a3188ad03f8b639a8f48a433 (diff)
downloadiosdc-japan-2024-albatross-c6629900f3a4965ceca0f42e90648937bf51dfb5.tar.gz
iosdc-japan-2024-albatross-c6629900f3a4965ceca0f42e90648937bf51dfb5.tar.zst
iosdc-japan-2024-albatross-c6629900f3a4965ceca0f42e90648937bf51dfb5.zip
feat(frontend): improve play page styling
-rw-r--r--frontend/app/components/GolfPlayApps/GolfPlayAppGaming.tsx50
-rw-r--r--frontend/app/components/SubmitStatusLabel.tsx16
-rw-r--r--worker/exec.go11
-rw-r--r--worker/models.go1
4 files changed, 59 insertions, 19 deletions
diff --git a/frontend/app/components/GolfPlayApps/GolfPlayAppGaming.tsx b/frontend/app/components/GolfPlayApps/GolfPlayAppGaming.tsx
index 08490a6..667ada2 100644
--- a/frontend/app/components/GolfPlayApps/GolfPlayAppGaming.tsx
+++ b/frontend/app/components/GolfPlayApps/GolfPlayAppGaming.tsx
@@ -3,6 +3,10 @@ import React, { useRef } from "react";
import SubmitButton from "../../components/SubmitButton";
import type { PlayerInfo } from "../../models/PlayerInfo";
import BorderedContainer from "../BorderedContainer";
+import SubmitStatusLabel from "../SubmitStatusLabel";
+import ExecStatusIndicatorIcon from "../ExecStatusIndicatorIcon";
+import { faArrowDown } from "@fortawesome/free-solid-svg-icons";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
type Props = {
gameDisplayName: string;
@@ -40,10 +44,11 @@ export default function GolfPlayAppGaming({
<div className="text-gray-100">{gameDisplayName}</div>
<div className="text-2xl">03:21</div>
</div>
- <div>
- <Link to={"/dashboard"} className="font-bold text-xl">
+ <div className="font-bold text-end">
+ <Link to={"/dashboard"} className="text-gray-100">
{playerInfo.displayName}
</Link>
+ <div className="text-2xl">{playerInfo.score}</div>
</div>
</div>
<div className="grow grid grid-cols-3 divide-x divide-gray-300">
@@ -62,13 +67,44 @@ export default function GolfPlayAppGaming({
className="resize-none h-full w-full rounded-lg border border-gray-300 p-2 focus:outline-none focus:ring-2 focus:ring-gray-400 transition duration-300"
></textarea>
</div>
- <div className="p-4">
- <SubmitButton onClick={handleSubmitButtonClick}>提出</SubmitButton>
- <div className="mb-2 mt-auto">
- <div className="font-semibold text-green-500">
- Score: {playerInfo.score ?? "-"}
+ <div className="p-4 flex flex-col gap-4">
+ <div className="flex">
+ <SubmitButton onClick={handleSubmitButtonClick}>提出</SubmitButton>
+ <div className="grow font-bold text-xl text-center m-1">
+ <SubmitStatusLabel status={playerInfo.submitResult.status} />
</div>
</div>
+ <ul className="flex flex-col gap-2">
+ {playerInfo.submitResult.execResults.map((r, idx) => (
+ <li key={r.testcase_id ?? -1} className="flex gap-2">
+ <div className="flex flex-col gap-2 p-2">
+ <div className="w-6">
+ <ExecStatusIndicatorIcon status={r.status} />
+ </div>
+ {idx !== playerInfo.submitResult.execResults.length - 1 && (
+ <div>
+ <FontAwesomeIcon
+ icon={faArrowDown}
+ fixedWidth
+ className="text-gray-500"
+ />
+ </div>
+ )}
+ </div>
+ <div className="grow p-2 overflow-x-scroll">
+ <BorderedContainer>
+ <div className="font-semibold">{r.label}</div>
+ <div>
+ <code>
+ {r.stdout}
+ {r.stderr}
+ </code>
+ </div>
+ </BorderedContainer>
+ </div>
+ </li>
+ ))}
+ </ul>
</div>
</div>
</div>
diff --git a/frontend/app/components/SubmitStatusLabel.tsx b/frontend/app/components/SubmitStatusLabel.tsx
index 2d4890d..e0ecc27 100644
--- a/frontend/app/components/SubmitStatusLabel.tsx
+++ b/frontend/app/components/SubmitStatusLabel.tsx
@@ -7,20 +7,20 @@ type Props = {
export default function SubmitStatusLabel({ status }: Props) {
switch (status) {
case "waiting_submission":
- return <span>-</span>;
+ return null;
case "running":
- return <span>Running...</span>;
+ return "実行中...";
case "success":
- return <span>Accepted</span>;
+ return "成功";
case "wrong_answer":
- return <span>Wrong Answer</span>;
+ return "テスト失敗";
case "timeout":
- return <span>Time Limit Exceeded</span>;
+ return "時間切れ";
case "compile_error":
- return <span>Compile Error</span>;
+ return "コンパイルエラー";
case "runtime_error":
- return <span>Runtime Error</span>;
+ return "実行時エラー";
case "internal_error":
- return <span>Internal Error</span>;
+ return "!内部エラー!";
}
}
diff --git a/worker/exec.go b/worker/exec.go
index 9e937f7..37f542b 100644
--- a/worker/exec.go
+++ b/worker/exec.go
@@ -67,11 +67,14 @@ func execCommandWithTimeout(
}
}
-func convertCommandErrorToResultType(err error) string {
+func convertCommandErrorToResultType(err error, isCompile bool) string {
if err != nil {
if err == context.DeadlineExceeded {
return resultTimeout
}
+ if isCompile {
+ return resultCompileError
+ }
return resultRuntimeError
}
return resultSuccess
@@ -109,7 +112,7 @@ func execSwiftCompile(
)
return swiftCompileResponseData{
- Status: convertCommandErrorToResultType(err),
+ Status: convertCommandErrorToResultType(err, true),
Stdout: stdout,
Stderr: stderr,
}
@@ -140,7 +143,7 @@ func execWasmCompile(
)
return wasmCompileResponseData{
- Status: convertCommandErrorToResultType(err),
+ Status: convertCommandErrorToResultType(err, true),
Stdout: stdout,
Stderr: stderr,
}
@@ -170,7 +173,7 @@ func execTestRun(
)
return testRunResponseData{
- Status: convertCommandErrorToResultType(err),
+ Status: convertCommandErrorToResultType(err, false),
Stdout: stdout,
Stderr: stderr,
}
diff --git a/worker/models.go b/worker/models.go
index 9f60eb0..4a318d0 100644
--- a/worker/models.go
+++ b/worker/models.go
@@ -7,6 +7,7 @@ import (
const (
resultSuccess = "success"
+ resultCompileError = "compile_error"
resultRuntimeError = "runtime_error"
resultTimeout = "timeout"
resultInternalError = "internal_error"