diff options
author | Kai Stevenson <kai@kaistevenson.com> | 2025-06-13 23:24:49 -0700 |
---|---|---|
committer | Kai Stevenson <kai@kaistevenson.com> | 2025-06-13 23:24:49 -0700 |
commit | 6475f534e7bf457113dcc82d94bfb7ac413f71c4 (patch) | |
tree | ce029883066b1cc13ab5b4fc5f71b8547e0f3cce /frontend/src/App.tsx | |
parent | 87f134c9f2714593890a530221df429122c4398b (diff) |
grouping
Diffstat (limited to 'frontend/src/App.tsx')
-rw-r--r-- | frontend/src/App.tsx | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index f6f5296..4eb26bd 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -6,11 +6,17 @@ import { Grid } from "./Grid"; import { getWords } from "./serverHelper"; export type GameState = { - words: { word: string; selected: boolean }[]; + words: { word: string; selected: boolean; used: boolean }[]; + groups: { title: string; words: string[] }[]; }; const initializeGameState = async (): Promise<GameState> => ({ - words: (await getWords()).map((word) => ({ word, selected: false })), + words: (await getWords()).map((word) => ({ + word, + selected: false, + used: false, + })), + groups: [], }); const Game = () => { @@ -39,12 +45,44 @@ const Game = () => { //FIXME don't mutate state candidateState.words[idx].selected = !candidateState.words[idx].selected; setGameState(candidateState); - console.log(`selected ${idx}`); + }; + const submitSelectionHandler = () => { + const candidateState = { ...gameState! }; + + const selectedWords = candidateState.words + .filter(({ selected }) => selected) + .map(({ word }) => word); + + if (selectedWords.length !== 4) { + return; + } + + candidateState.words = candidateState.words.map( + ({ selected, word, used }) => ({ + used: used || selected, + selected: false, + word, + }) + ); + + //mock the server response for this selection + const response = "Four letter verbs"; + const newGroup: GameState["groups"][number] = { + title: response, + words: selectedWords, + }; + candidateState.groups = [...candidateState.groups, newGroup]; + + setGameState(candidateState); }; //display logic return gameState ? ( - <Grid selectWordHandler={selectWordHandler} words={gameState.words!} /> + <Grid + selectWordHandler={selectWordHandler} + submitSelectionHandler={submitSelectionHandler} + gameState={gameState!} + /> ) : ( <h1>Loading...</h1> ); |