From e7358f0d8a4ce56f7eed5927cfadf0ee29f4508f Mon Sep 17 00:00:00 2001 From: lonkaars Date: Wed, 10 Mar 2021 17:15:07 +0100 Subject: home page w/l/d + working outcome calc --- api/user/games.py | 13 +++--- pages/index.tsx | 132 ++++++++++++++++++++++++++++-------------------------- 2 files changed, 76 insertions(+), 69 deletions(-) diff --git a/api/user/games.py b/api/user/games.py index c61151a..009e5ee 100644 --- a/api/user/games.py +++ b/api/user/games.py @@ -7,6 +7,11 @@ from user.info import format_user from ruleset import resolve_ruleset import json +def outcome(outcome_str, player_1): + outcome_int = { "w": 1, "l": -1, "d": 0 }[outcome_str] + if not player_1: outcome_int *= -1 + return { 1: "w", -1: "l", 0: "d" }[outcome_int] + def game_info(game_id, user_id = None): game = cursor.execute("select " + ", ".join([ "game_id", # 0 @@ -25,14 +30,12 @@ def game_info(game_id, user_id = None): "private", # 13 ]) + " from games where game_id = ?", [game_id]).fetchone() is_player_1 = game[4] != user_id - outcome = "d" if game[5] == "d" else \ - "w" if game[5] == "w" and is_player_1 else "l" return { "id": game[0], "parent": game[1], "moves": [int(move) for move in str(game[2]).split(",")], "opponent": format_user(game[4] if is_player_1 else game[3]), - "outcome": outcome, + "outcome": outcome(game[5], is_player_1), "created": game[6], "started": game[7], "duration": game[8], @@ -93,11 +96,11 @@ def index(): not token: return "", 400 - if not cursor.execute("select user_id from users where user_id = ?", [user_id]).fetchone(): return "", 403 - if token and not user_id: user_id = token_login(token) + if not cursor.execute("select user_id from users where user_id = ?", [user_id]).fetchone(): return "", 403 + export = {} merge(export, {"totals": sum_games(user_id)}, diff --git a/pages/index.tsx b/pages/index.tsx index f341c35..2aa8243 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,6 +1,6 @@ -import { CSSProperties, Component } from 'react'; +import { CSSProperties, useState, useEffect } from 'react'; import axios from 'axios'; -import { userInfo } from '../api/api'; +import { userInfo, userGameTotals, userGames } from '../api/api'; import { NavBar } from '../components/navbar'; import { CenteredPage, PageTitle } from '../components/page'; @@ -79,6 +79,7 @@ function LoginOrRegisterBox() { function AccountBox(props: { info: userInfo; + sumGameInfo: userGameTotals; }) { return
{props.info.username} + }}>{props.info?.username}

Score: 400

- 0 W + {props.sumGameInfo?.win} W / - 0 V + {props.sumGameInfo?.lose} V / - 0 G + {props.sumGameInfo?.draw} G

} -export default class HomePage extends Component { - state: { - info: userInfo, - loggedIn: boolean - } = { - info: {}, - loggedIn: false - } +export default function HomePage() { + var [gotData, setGotData] = useState(false); + var [loggedIn, setLoggedIn] = useState(false); + var [userInfo, setUserInfo] = useState(); + var [gameInfo, setGameInfo] = useState(); - constructor(props: {}) { - super(props); + useEffect(() => {( async () => { + if (gotData) return; if (typeof window === "undefined") return; // return if run on server - this.state.loggedIn = document.cookie.includes("token"); + setLoggedIn(document.cookie.includes("token")); - if (this.state.loggedIn == false) return; // don't request user info if not logged in - axios.request({ + if (!loggedIn) return; // don't request user info if not logged in + var userInfoReq = await axios.request({ method: "get", url: `/api/user/info`, headers: {"content-type": "application/json"} }) - .then(request => this.setState({ info: request.data })) - .catch(() => {}); - } - - render () { - return
- - - 4 op een rij -
- - - Nieuw spel + setUserInfo(userInfoReq.data); + + var userGamesReq = await axios.request({ + method: "get", + url: `/api/user/games`, + headers: {"content-type": "application/json"} + }) + setGameInfo(userGamesReq.data); + + setGotData(true); + })()}) + + return
+ + + 4 op een rij +
+ + + Nieuw spel +
+
+ { + false && + + + Puzzels
- { - false && - - - Puzzels -
-
- } - { - false && - - - Tegen computer -
-
- } - - { - this.state.loggedIn ? - : - - } - -
+ } { - this.state.loggedIn && - - + false && + + + Tegen computer +
} + + { + loggedIn ? + : + + } + +
+ { + loggedIn && -

Nieuws ofzo

-

Chess.com heeft heel veel troep waar niemand naar kijkt

+
- -
- } + } + +

Nieuws ofzo

+

Chess.com heeft heel veel troep waar niemand naar kijkt

+
+
+
} -- cgit v1.2.3