diff options
-rw-r--r-- | api/user/preferences.py | 3 | ||||
-rw-r--r-- | pages/_app.tsx | 42 | ||||
-rw-r--r-- | pages/user.tsx | 2 |
3 files changed, 44 insertions, 3 deletions
diff --git a/api/user/preferences.py b/api/user/preferences.py index 4ee48bf..5d46f5f 100644 --- a/api/user/preferences.py +++ b/api/user/preferences.py @@ -1,6 +1,7 @@ from flask import Blueprint, request from db import cursor from auth.login_token import token_login +import json preferences = Blueprint('preferences', __name__) @@ -16,7 +17,7 @@ def index(): if not login: return "", 403 user_prefs = cursor.execute("select preferences from users where user_id = ?", [login]).fetchone() - return { "preferences": user_prefs[0] }, 200 + return { "preferences": json.loads(user_prefs[0]) }, 200 dynamic_route = ["/user", preferences] diff --git a/pages/_app.tsx b/pages/_app.tsx index 39b6372..08338d0 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,10 +1,50 @@ +import Head from 'next/head'; +import axios from 'axios'; +import { useState, useEffect } from 'react'; + +import { userPreferences } from '../api/api'; + import '../styles/global.css'; import '../styles/dark.css'; import '../styles/disk.css'; -import Head from "next/head"; +function applyPreferences(preferences: userPreferences) { + if(typeof preferences === "undefined") return; + if(typeof preferences.darkMode !== "undefined") + document.getElementsByTagName("html")[0].classList[preferences.darkMode ? "add" : "remove"]("dark"); +} export default function VierOpEenRijWebsite({ Component, pageProps }) { + var [gotData, setGotData] = useState(false); + var [preferences, setPreferences] = useState<userPreferences>(); + + useEffect(() => {(async() => { + if (gotData) return; + if (typeof window === "undefined") return; + if (!document.cookie.includes("token")) return; + + var local_prefs = window.localStorage.getItem("preferences"); + if (local_prefs) { + var local_prefs_json = JSON.parse(local_prefs) as userPreferences; + console.log(typeof local_prefs_json); + setPreferences(local_prefs_json); + applyPreferences(local_prefs_json); + } + + var preferencesReq = await axios.request<{ preferences: userPreferences; }>({ + method: "get", + url: `/api/user/preferences`, + headers: {"content-type": "application/json"} + }); + + window.localStorage.setItem("preferences", JSON.stringify(preferencesReq.data.preferences)); + setPreferences(preferencesReq.data.preferences); + + setGotData(true); + })()}) + + useEffect(() => applyPreferences(preferences), [preferences]); + return <div> <Head> <title>4 op een rij</title> diff --git a/pages/user.tsx b/pages/user.tsx index d0c6f5b..f190efd 100644 --- a/pages/user.tsx +++ b/pages/user.tsx @@ -115,7 +115,7 @@ export default function AccountPage() { } setGotData(true); - })()}) + })()}); return <div> <NavBar/> |