import axios from 'axios'
import React, { useState, useContext } from 'react'
import PropTypes from 'prop-types'
import {
Backdrop,
CircularProgress,
CssBaseline,
Box,
TextField,
Button
} from '@mui/material'
import { AppContext } from '../context/appContext'
const login = async (payload: { username: string; password: string }) =>
axios.post('/SASLogon/login', payload).then((res) => res.data)
const Login = () => {
const appContext = useContext(AppContext)
const [isLoading, setIsLoading] = useState(false)
const [username, setUsername] = useState('')
const [password, setPassword] = useState('')
const [errorMessage, setErrorMessage] = useState('')
const handleSubmit = async (e: any) => {
setIsLoading(true)
setErrorMessage('')
e.preventDefault()
const { loggedIn, user } = await login({
username,
password
})
.catch((err: any) => {
setErrorMessage(err.response?.data || err.toString())
return {}
})
.finally(() => {
setIsLoading(false)
})
if (loggedIn) {
appContext.setUserId?.(user.id)
appContext.setUsername?.(user.username)
appContext.setDisplayName?.(user.displayName)
appContext.setIsAdmin?.(user.isAdmin)
appContext.setLoggedIn?.(loggedIn)
appContext.setNeedsToUpdatePassword?.(user.needsToUpdatePassword)
}
}
return (
<>
theme.zIndex.drawer + 1 }}
open={isLoading}
>
:not(style)': { m: 1, width: '25ch' }
}}
>
Welcome to SASjs Server!
setUsername(e.target.value)}
required
/>
setPassword(e.target.value)}
required
/>
{errorMessage && {errorMessage}}
>
)
}
Login.propTypes = {
getCodeOnly: PropTypes.bool
}
export default Login