LoginForm.jsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import { actionFullLogin } from '../actions/actionLogin';
  2. import TextField from '@mui/material/TextField';
  3. import { IconButton, InputAdornment, Typography } from '@mui/material';
  4. import {BrowserRouter as Router, Route, Link, Routes, Navigate} from 'react-router-dom';
  5. import { useState, useEffect, useRef } from 'react';
  6. import { Visibility, VisibilityOff } from '@mui/icons-material';
  7. import Button from '@mui/material/Button';
  8. import { connect } from 'react-redux';
  9. import { history } from '../App';
  10. function LoginForm({onLogin, }){
  11. const [values, setValues] = useState({
  12. login: '',
  13. password: '',
  14. showPassword: false,
  15. error: false
  16. })
  17. const [errorLogin, setErrorLogin] = useState(false);
  18. const [errorPass, setErrorPass] = useState(false);
  19. const validate = () => {
  20. values.login.length < 3 ? setErrorLogin(true) : setErrorLogin(false);
  21. values.password.length < 3 ? setErrorPass(true) : setErrorPass(false);
  22. values.password.length < 3 || values.login.length < 3 ? setValues({...values, error: true}) : setValues({...values, error: false})
  23. }
  24. const handleChange = (prop) => (event) => {
  25. setValues({...values, [prop] : event.target.value})
  26. }
  27. const handleClickShowPassword = () => {
  28. setValues({
  29. ...values,
  30. showPassword: !values.showPassword
  31. })
  32. }
  33. return (
  34. <form className='LoginForm' noValidate autoComplete='off'>
  35. <Typography sx={{mb: '30px'}} variant='h4'>Вход</Typography>
  36. <TextField
  37. error={errorLogin}
  38. sx={{width: '100%', mb: '30px'}}
  39. required
  40. label="Логин"
  41. variant="outlined"
  42. helperText="минимум 3"
  43. value={values.login}
  44. autoFocus
  45. onChange={handleChange('login')}/>
  46. <TextField
  47. error={errorPass}
  48. sx={{width: '100%'}}
  49. helperText="минимум 3"
  50. required
  51. variant="outlined"
  52. label="Пароль"
  53. type={values.showPassword ? 'text' : 'password'}
  54. value={values.password}
  55. onChange={handleChange('password')}
  56. InputProps={{
  57. endAdornment: (
  58. <InputAdornment position="end">
  59. <IconButton
  60. aria-label="toggle password visibility"
  61. onClick={handleClickShowPassword}
  62. onMouseDown={(event) => event.preventDefault()}
  63. edge="end"
  64. >
  65. {values.showPassword ? <VisibilityOff/> : <Visibility/>}
  66. </IconButton>
  67. </InputAdornment>
  68. )
  69. }}
  70. />
  71. {/* {values.error && <div>неверный {errorLogin && <span>логин </span>}{errorPass && <span>пароль</span>}</div>} */}
  72. <Button
  73. onClick={
  74. (e) => {
  75. if (values.password.length >= 3 && values.login.length >= 3){
  76. onLogin(values.login, values.password);
  77. }
  78. }
  79. }
  80. sx={{width: '200px', mt: '30px'}}
  81. variant="contained">
  82. Войти
  83. </Button><br/>
  84. <Link className='RegisterBtn' to='/register'>Зарегистрироваться</Link>
  85. </form>
  86. )
  87. }
  88. export default connect(null, {onLogin: actionFullLogin})(LoginForm)