mirror of
https://github.com/orangecoding/fredy.git
synced 2026-06-16 12:31:07 +00:00
* adding similarity check * adding paging * fixing tests * docu * better error handling * fixing tests * adjusting page limit * fixing login screen * cleanup * upgrade browser list * prevent spamming the log * fixing tests * removing job listings when removing a job or the user
78 lines
2.1 KiB
JavaScript
78 lines
2.1 KiB
JavaScript
import React from 'react';
|
|
import { Input } from 'semantic-ui-react';
|
|
|
|
import cityBackground from '../../assets/city_background.jpg';
|
|
import Logo from '../../components/logo/Logo';
|
|
import { xhrPost } from '../../services/xhr';
|
|
import { Message } from 'semantic-ui-react';
|
|
import { useHistory } from 'react-router';
|
|
import { useDispatch } from 'react-redux';
|
|
|
|
import './login.less';
|
|
|
|
export default function Login() {
|
|
const dispatch = useDispatch();
|
|
|
|
const [username, setUserName] = React.useState('');
|
|
const [password, setPassword] = React.useState('');
|
|
const [error, setError] = React.useState(null);
|
|
|
|
const history = useHistory();
|
|
|
|
const tryLogin = async () => {
|
|
if (username.length === 0 || password.length === 0) {
|
|
setError('Username and password are mandatory.');
|
|
return;
|
|
}
|
|
try {
|
|
await xhrPost('/api/login', {
|
|
username,
|
|
password,
|
|
});
|
|
setError(null);
|
|
} catch (Exception) {
|
|
setError('Login not successful...');
|
|
return;
|
|
}
|
|
await dispatch.user.getCurrentUser();
|
|
history.push('/jobs');
|
|
};
|
|
|
|
return (
|
|
<div className="login">
|
|
<div className="login__bgImage" style={{ background: `url("${cityBackground}")` }} />
|
|
<Logo />
|
|
<form>
|
|
<div className="login__loginWrapper">
|
|
{error && <Message negative icon="error" content={error} />}
|
|
<Input
|
|
icon="user"
|
|
iconPosition="left"
|
|
placeholder="Username"
|
|
defaultValue={username}
|
|
style={{ marginTop: error ? '1rem' : '4rem' }}
|
|
autoFocus
|
|
onChange={(e) => setUserName(e.target.value)}
|
|
/>
|
|
|
|
<Input
|
|
type="password"
|
|
icon="lock"
|
|
iconPosition="left"
|
|
defaultValue={password}
|
|
placeholder="Password"
|
|
style={{ marginTop: '2rem' }}
|
|
onChange={(e) => setPassword(e.target.value)}
|
|
/>
|
|
|
|
<button className="ui primary button" style={{ marginTop: '3rem' }} onClick={tryLogin}>
|
|
Login
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
Login.displayName = 'Login';
|