|
@@ -0,0 +1,80 @@
|
|
|
+import { useFormik } from 'formik';
|
|
|
+import Button from '@material-ui/core/Button';
|
|
|
+import TextField from '@material-ui/core/TextField';
|
|
|
+import { connect } from 'react-redux';
|
|
|
+
|
|
|
+import { validationSchemaSignIn } from '../helpers/validation';
|
|
|
+import { asyncLogin } from '../../../redux/authorization/operation';
|
|
|
+import {
|
|
|
+ ILoginProps,
|
|
|
+ ILoginState,
|
|
|
+} from '../../../typescript/registration/interfaces';
|
|
|
+import togglePassword from '../helpers/helpers';
|
|
|
+import s from './SignIn.module.css';
|
|
|
+
|
|
|
+const SignInForm = ({ isLoading, doLogin }: ILoginProps) => {
|
|
|
+ const formik = useFormik({
|
|
|
+ initialValues: {
|
|
|
+ email: '',
|
|
|
+ password: '',
|
|
|
+ },
|
|
|
+ validationSchema: validationSchemaSignIn,
|
|
|
+ onSubmit: ({ email: login, password }) => doLogin(login, password),
|
|
|
+ });
|
|
|
+
|
|
|
+ return (
|
|
|
+ <form className={s.signIn_form} onSubmit={formik.handleSubmit}>
|
|
|
+ <div className={s.signIn_input_wrapper}>
|
|
|
+ <TextField
|
|
|
+ className={s.signIn_input}
|
|
|
+ id="email"
|
|
|
+ name="email"
|
|
|
+ label="Email..."
|
|
|
+ value={formik.values.email}
|
|
|
+ onChange={formik.handleChange}
|
|
|
+ error={formik.touched.email && Boolean(formik.errors.email)}
|
|
|
+ helperText={formik.touched.email && formik.errors.email}
|
|
|
+ />
|
|
|
+ <div>
|
|
|
+ <TextField
|
|
|
+ className={s.signIn_input}
|
|
|
+ id="password"
|
|
|
+ name="password"
|
|
|
+ label="Password..."
|
|
|
+ type="password"
|
|
|
+ value={formik.values.password}
|
|
|
+ onChange={formik.handleChange}
|
|
|
+ error={formik.touched.password && Boolean(formik.errors.password)}
|
|
|
+ helperText={formik.touched.password && formik.errors.password}
|
|
|
+ />
|
|
|
+ <input
|
|
|
+ className={s.input_show_password}
|
|
|
+ type="checkbox"
|
|
|
+ onClick={togglePassword}
|
|
|
+ />
|
|
|
+ Show password*
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <Button
|
|
|
+ className={s.signIn_button}
|
|
|
+ color="primary"
|
|
|
+ variant="contained"
|
|
|
+ type="submit"
|
|
|
+ disabled={isLoading ? true : false}
|
|
|
+ >
|
|
|
+ Submit
|
|
|
+ </Button>
|
|
|
+ </form>
|
|
|
+ );
|
|
|
+};
|
|
|
+
|
|
|
+const mapStateToProps = (state: ILoginState) => ({
|
|
|
+ isLoading: state.isLoading.flag,
|
|
|
+});
|
|
|
+
|
|
|
+const mapDispatchToProps = (dispatch: any) => ({
|
|
|
+ doLogin: (login: string, password: string) =>
|
|
|
+ dispatch(asyncLogin(login, password)),
|
|
|
+});
|
|
|
+
|
|
|
+export default connect(mapStateToProps, mapDispatchToProps)(SignInForm);
|