From 085ebb54d40699c562e3109b7229a57fb6b5b907 Mon Sep 17 00:00:00 2001 From: Adrian Bonpin Date: Sat, 9 May 2026 23:30:17 +0800 Subject: [PATCH] feat: optional screenshot upload step after benchmark submission --- components/wizard/game-entry-wizard.tsx | 98 ++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 4 deletions(-) diff --git a/components/wizard/game-entry-wizard.tsx b/components/wizard/game-entry-wizard.tsx index f8601f9..8397d75 100644 --- a/components/wizard/game-entry-wizard.tsx +++ b/components/wizard/game-entry-wizard.tsx @@ -45,6 +45,10 @@ export function GameEntryWizard({ gameId, gameVersions, defaultVersionId, editEn const [isSubmitting, setIsSubmitting] = useState(false) const [error, setError] = useState(null) const [success, setSuccess] = useState(false) + const [createdEntryId, setCreatedEntryId] = useState(null) + const [screenshotFiles, setScreenshotFiles] = useState([]) + const [screenshotUploading, setScreenshotUploading] = useState(false) + const [screenshotError, setScreenshotError] = useState(null) // Step 0: Setup — Hardware const [hardwareSlug, setHardwareSlug] = useState(editEntry?.hardwareSlug ?? "") @@ -294,10 +298,15 @@ export function GameEntryWizard({ gameId, gameVersions, defaultVersionId, editEn throw new Error(data.error || `Failed to ${editEntry ? "update" : "submit"} entry`) } - setSuccess(true) - setTimeout(() => { - router.push(`/game/${gameId}`) - }, 2000) + const data = await res.json() + if (!editEntry && data.id) { + setCreatedEntryId(data.id) + } else { + setSuccess(true) + setTimeout(() => { + router.push(`/game/${gameId}`) + }, 2000) + } } catch (err) { setError(err instanceof Error ? err.message : "An error occurred") } finally { @@ -323,6 +332,87 @@ export function GameEntryWizard({ gameId, gameVersions, defaultVersionId, editEn ) } + if (createdEntryId) { + return ( + +
+ + + +
+

Entry Submitted!

+

Your benchmark has been saved.

+ +
+

Add Screenshots (Optional)

+

Upload up to 2 screenshots of your in-game settings or FPS overlay.

+ { + const files = Array.from(e.target.files || []).slice(0, 2) + setScreenshotFiles(files) + }} + className="block w-full text-sm text-text/70 file:mr-2 file:py-1.5 file:px-3 file:rounded file:border-0 file:text-xs file:font-medium file:bg-primary/10 file:text-primary hover:file:bg-primary/20 cursor-pointer" + /> + {screenshotFiles.length > 0 && ( +
+ {screenshotFiles.map((file, i) => ( +
{file.name}
+ ))} +
+ )} +
+ + +
+ {screenshotError &&

{screenshotError}

} +
+
+ ) + } + return (
{/* Step Indicator */}