From 7453eaaaf18827209ea296319b8b4bc38bde0950 Mon Sep 17 00:00:00 2001
From: nsfisis <nsfisis@gmail.com>
Date: Sun, 11 Aug 2024 23:11:42 +0900
Subject: feat(frontend): allow users to re-connect

---
 frontend/app/components/GolfWatchApp.client.tsx | 26 ++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

(limited to 'frontend/app/components/GolfWatchApp.client.tsx')

diff --git a/frontend/app/components/GolfWatchApp.client.tsx b/frontend/app/components/GolfWatchApp.client.tsx
index cef6f9a..448a966 100644
--- a/frontend/app/components/GolfWatchApp.client.tsx
+++ b/frontend/app/components/GolfWatchApp.client.tsx
@@ -194,11 +194,35 @@ export default function GolfWatchApp({
 					});
 				}
 			} else {
-				setGameState("waiting");
+				if (game.started_at) {
+					const nowSec = Math.floor(Date.now() / 1000);
+					if (game.started_at <= nowSec) {
+						// The game has already started.
+						if (gameState !== "gaming" && gameState !== "finished") {
+							setStartedAt(game.started_at);
+							setLeftTimeSeconds(0);
+							setGameState("gaming");
+						}
+					} else {
+						// The game is starting.
+						if (
+							gameState !== "starting" &&
+							gameState !== "gaming" &&
+							gameState !== "finished"
+						) {
+							setStartedAt(game.started_at);
+							setLeftTimeSeconds(game.started_at - nowSec);
+							setGameState("starting");
+						}
+					}
+				} else {
+					setGameState("waiting");
+				}
 			}
 		}
 	}, [
 		game.verification_steps,
+		game.started_at,
 		lastJsonMessage,
 		readyState,
 		gameState,
-- 
cgit v1.3.1

