From 89c19de1ab07b2e296eb216731dbdada32d58497 Mon Sep 17 00:00:00 2001 From: otivm Date: Sat, 25 Apr 2026 15:16:57 +0000 Subject: [PATCH] =?UTF-8?q?Add=20App.jsx=20=E2=80=94=20token=20bootstrap?= =?UTF-8?q?=20and=20game=20root?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.jsx | 157 ++++++++++++++-------------------------------------- 1 file changed, 42 insertions(+), 115 deletions(-) diff --git a/src/App.jsx b/src/App.jsx index 4f03aa1..26c5c85 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,122 +1,49 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from './assets/vite.svg' -import heroImg from './assets/hero.png' +import { useState, useEffect } from 'react' +import { generateToken, loadState, saveState } from './api.js' +import { createState } from './gameState.js' +import Game from './Game.jsx' import './App.css' -function App() { - const [count, setCount] = useState(0) +const TOKEN_KEY = 'otivm_token' - return ( - <> -
-
- - React logo - Vite logo -
-
-

Get started

-

- Edit src/App.jsx and save to test HMR -

-
- -
+export default function App() { + const [state, setState] = useState(null) + const [token, setToken] = useState(null) + const [loading, setLoading] = useState(true) -
+ useEffect(() => { + async function bootstrap() { + let tok = localStorage.getItem(TOKEN_KEY) + if (!tok) { + tok = generateToken() + localStorage.setItem(TOKEN_KEY, tok) + } + setToken(tok) + const saved = await loadState(tok) + if (saved) { + setState(saved) + } else { + const fresh = createState(tok) + setState(fresh) + await saveState(tok, fresh) + } + setLoading(false) + } + bootstrap() + }, []) -
-
- -

Documentation

-

Your questions, answered

- -
-
- -

Connect with us

-

Join the Vite community

- -
-
+ async function onStateChange(newState) { + setState(newState) + await saveState(token, newState) + } -
-
- - ) + if (loading) { + return ( +
+ Consulting the ledger... +
+ ) + } + + return } - -export default App