/* eslint-disable react/no-multi-comp */ import React, { useState } from 'react'; import { makeStyles } from '@material-ui/styles'; import { useInterval } from 'react-powerhooks'; import {CircularProgress, TextField, Button, Paper, Typography} from '@material-ui/core' import { useTheme } from '@material-ui/core/styles'; const hrefStyle = { color: "white", textDecoration: "none" } const bodyDivStyle = { margin: "auto", marginTop: 150, width: "500px", } const useStyles = makeStyles({ notchedOutline: { borderColor: "#f85a3e !important" }, }); const LoginDialog = props => { const theme = useTheme(); const { globalUrl, isLoaded, isLoggedIn, setIsLoggedIn, setCookie, register, checkLogin } = props; const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [firstRequest, setFirstRequest] = useState(true); const [loginLoading, setLoginLoading] = useState(false); const [loginViewLoading, setLoginViewLoading] = useState(false); // Used to swap from login to register. True = login, false = register const classes = useStyles(); // Error messages etc const [loginInfo, setLoginInfo] = useState(""); const handleValidateForm = () => { return (username.length > 1 && password.length > 1); } if (isLoggedIn === true) { window.location.pathname = "/workflows" } const checkAdmin = () => { const url = globalUrl + '/api/v1/checkusers'; fetch(url, { method: 'GET', headers: { 'Content-Type': 'application/json', }, }) .then(response => response.json().then(responseJson => { if (responseJson["success"] === false) { setLoginInfo(responseJson["reason"]) } else { if (loginViewLoading) { setLoginViewLoading(false) checkLogin() stop() if (responseJson.reason !== undefined && responseJson.reason !== null) { setLoginInfo(responseJson.reason) } } if (responseJson.reason === "stay") { window.location.pathname = "/adminsetup" } } }), ) .catch(error => { if (!loginViewLoading) { setLoginViewLoading(true) start() } }) } const { start, stop } = useInterval({ duration: 3000, startImmediate: false, callback: () => { checkAdmin() } }) if (firstRequest) { setFirstRequest(false) checkAdmin() } const onSubmit = (e) => { setLoginLoading(true) e.preventDefault() setLoginInfo("") // FIXME - add some check here ROFL // Just use this one? var data = { "username": username, "password": password } var baseurl = globalUrl if (register) { var url = baseurl + '/api/v1/users/login'; fetch(url, { mode: 'cors', method: 'POST', body: JSON.stringify(data), credentials: 'include', crossDomain: true, withCredentials: true, headers: { 'Content-Type': 'application/json; charset=utf-8', }, }) .then(response => response.json().then(responseJson => { setLoginLoading(false) if (responseJson["success"] === false) { setLoginInfo(responseJson["reason"]) } else { setLoginInfo("Successful login, rerouting") for (var key in responseJson["cookies"]) { setCookie(responseJson["cookies"][key].key, responseJson["cookies"][key].value, { path: "/" }) } setIsLoggedIn(true) window.location.pathname = "/workflows" } }), ) .catch(error => { setLoginLoading(false) setLoginInfo("Error logging in: " + error) }); } else { url = baseurl + '/api/v1/users/register'; fetch(url, { method: 'POST', body: JSON.stringify(data), headers: { 'Content-Type': 'application/json', }, }) .then(response => response.json().then(responseJson => { if (responseJson["success"] === false) { setLoginInfo(responseJson["reason"]) } else { setLoginInfo("Successful register!") } }), ) .catch(error => { setLoginInfo("Error in from backend: ", error) }); } } const onChangeUser = (e) => { setUsername(e.target.value) } const onChangePass = (e) => { setPassword(e.target.value) } //const onClickRegister = () => { // if (props.location.pathname === "/login") { // window.location.pathname = "/register" // } else { // window.location.pathname = "/login" // } // setLoginCheck(!register) //} //var loginChange = register ? (
Want to register? Click here.
Go back to login? Click here.