diff --git a/webui/src/states/Login/Login.jsx b/webui/src/states/Login/Login.jsx index 165de13..440bc87 100644 --- a/webui/src/states/Login/Login.jsx +++ b/webui/src/states/Login/Login.jsx @@ -1,21 +1,44 @@ -import {useContext, useState} from "react"; +import {useContext, useEffect, useState} from "react"; import {TokenContext} from "@/common/contexts/Token"; import {Navigate} from "react-router-dom"; -import {Alert, Box, Button, Container, Divider, Grid, Stack, TextField, Typography} from "@mui/material"; +import { + Alert, + Box, + Button, + CircularProgress, + Container, + Divider, + Grid, + Stack, + TextField, + Typography +} from "@mui/material"; import {t} from "i18next"; +import {jsonRequest, postRequest} from "@/common/utils/RequestUtil.js"; export const Login = () => { const {tokenValid, checkToken} = useContext(TokenContext); + const [isSetupMode, setIsSetupMode] = useState(null); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [loginFailed, setLoginFailed] = useState(false); + useEffect(() => { + jsonRequest("setup").then((r) => setIsSetupMode(r.setup)); + }, []); + const login = (e) => { if (e) e.preventDefault(); localStorage.setItem("token", btoa(`${username}:${password}`)); checkToken().then((r) => setLoginFailed(!r)); } + const createAccount = () => { + postRequest("setup", {username, password}).then(() => login()); + } + + if (isSetupMode === null) return ; + return (
{tokenValid && } @@ -24,25 +47,27 @@ export const Login = () => { + alignItems: "center", justifyContent: "center"}} backgroundColor="background.darker"> MCDash MCDash - {t("login.sign_in")} + + {t("login." + (isSetupMode ? "setup" : "sign_in"))} + {loginFailed && {t("login.failed")} } - + setUsername(e.target.value)}/> setPassword(e.target.value)}/> -