Login.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { useState } from "react";
  2. import { Form, Row, Col, Button, Alert } from "react-bootstrap";
  3. import { connect } from "react-redux";
  4. import { Link } from "react-router-dom";
  5. import { actionFullLogin } from "../actions/types";
  6. const LoginForm = ({ promise, onLogin }) => {
  7. const [login, setLogin] = useState("");
  8. const [password, setPassword] = useState("");
  9. const [passwordShown, setPasswordShown] = useState(false);
  10. return (
  11. <div className="AuthForm mx-auto mt-5">
  12. <Form>
  13. {promise.login &&
  14. promise.login.status === "RESOLVED" &&
  15. !promise.login.payload ? (
  16. <Alert>
  17. Извините, но такого пользователя не существует, попробуйте
  18. зарегистрироваться или повторите ещё раз.
  19. </Alert>
  20. ) : null}
  21. <h1 className="text-center">Вход в аккаунт</h1>
  22. <Form.Group as={Row} className="mb-3" controlId="formHorizontalEmail">
  23. <Form.Label column sm={2}>
  24. Почта:
  25. </Form.Label>
  26. <Col sm={10}>
  27. <Form.Control
  28. type="text"
  29. placeholder="Введите вашу почту"
  30. onChange={(e) => setLogin(e.target.value)}
  31. />
  32. </Col>
  33. </Form.Group>
  34. <Form.Group
  35. as={Row}
  36. className="mb-3"
  37. controlId="formHorizontalPassword"
  38. >
  39. <Form.Label column sm={2}>
  40. Пароль:
  41. </Form.Label>
  42. <Col sm={10}>
  43. <Form.Control
  44. type={passwordShown ? "text" : "password"}
  45. placeholder="Введите ваш пароль"
  46. onChange={(e) => setPassword(e.target.value)}
  47. />
  48. <Button
  49. className="mt-2"
  50. variant="secondary"
  51. onClick={() => setPasswordShown(!passwordShown)}
  52. >
  53. {`${passwordShown ? "Скрыть" : "Показать"} пароль`}
  54. </Button>
  55. </Col>
  56. </Form.Group>
  57. <Form.Group as={Row} className="mb-3">
  58. <Col sm={{ span: 10, offset: 2 }} className="my-3">
  59. <Button
  60. variant="success"
  61. disabled={login.length < 1 || password.length < 1 ? true : false}
  62. onClick={() => onLogin(login, password)}
  63. >
  64. Войти
  65. </Button>
  66. </Col>
  67. <Col sm={{ span: 10, offset: 2 }}>
  68. Нет аккаунта?{" "}
  69. <Link className="btn btn-warning" to={"/signup"}>
  70. Зарегистрироваться
  71. </Link>
  72. </Col>
  73. </Form.Group>
  74. </Form>
  75. </div>
  76. );
  77. };
  78. export const CLoginForm = connect((state) => ({ promise: state.promise }), {
  79. onLogin: actionFullLogin,
  80. })(LoginForm);