header.js 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import logo from "../logo.svg";
  2. import {useState} from 'react'
  3. import {connect} from 'react-redux';
  4. import {actionAuthLogout, actionFullReg, actionFullLogin} from "../reducers"
  5. import {history} from "../reducers";
  6. import {Route, Link, Switch} from 'react-router-dom';
  7. export const Logo = () =>
  8. <Link to='/'><img src={logo} className="App-logo" alt="logo" /></Link>
  9. export const Header = () =>
  10. <header className="Header">
  11. <Logo />
  12. <Switch>
  13. <Route path="/login" component={CLoginForm}/>
  14. <Route path="/registration" component={CRegForm}/>
  15. <Route path='*' component={CLoginButtons} />
  16. </Switch>
  17. </header>
  18. const LoginButtons = ({onLogout, history, token}) => {
  19. return (
  20. <>
  21. {!token ?
  22. ( <div className='LoginButtons'>
  23. <Link to='/login'><button onClick={() => history.push('/')}>Вход</button></Link>
  24. <Link to='/registration'><button>Регистрация</button></Link></div>) :
  25. (<div className='LoginColumn'><strong>{JSON.parse(atob(token.split(".")[1])).sub.login}
  26. </strong>
  27. <button onClick={() => {onLogout(); history.push('/')}}>Выйти</button></div>)
  28. }
  29. </>
  30. )
  31. }
  32. const CLoginButtons = connect(state => ({token: state.auth.token}), {onLogout: actionAuthLogout})(LoginButtons)
  33. const LoginForm = ({onLogin, history}) => {
  34. const [l, setL] = useState ('')
  35. const [p, setP] = useState ('')
  36. return (
  37. <div className='LoginColumn'>
  38. <input placeholder='Введите имя' style={{backgroundColor:"skyblue"}} onChange={e => setL(e.target.value)}></input>
  39. <input type='password' placeholder='Введите пароль' style={{backgroundColor:"skyblue"}} onChange={e => setP(e.target.value)}></input>
  40. <button onClick={() => {onLogin(l,p); history.push('/')}}>Войти</button>
  41. </div>
  42. )
  43. }
  44. const CLoginForm = connect (null,{onLogin: actionFullLogin})(LoginForm)
  45. const RegForm = ({ onReg }) => {
  46. const [l, setL] = useState("");
  47. const [p, setP] = useState("");
  48. const [p2, setP2] = useState('')
  49. return (
  50. <div className='LoginButtons'>
  51. <div className='RegColumn'>
  52. <input placeholder='Введите имя'
  53. style={{ backgroundColor: "skyblue" }}
  54. onChange={(e) => setL(e.target.value)}></input>
  55. <input placeholder='Введите пароль'
  56. style={{ backgroundColor: "skyblue" }}
  57. onChange={(e) => setP(e.target.value)}></input>
  58. <div>{p.length < 6 ? 'Короткий пароль' : 'Хороший пароль'}</div>
  59. </div>
  60. <div className='RegColumn'>
  61. <button disabled={p.length >= 6 && p === p2 && l !== "" ? false : true} onClick={() => {onReg(l, p); history.push('/')}}>Регистрация</button>
  62. <input placeholder='Подтвердите пароль'
  63. style={{ backgroundColor: "skyblue" }}
  64. onChange={(e) => setP2(e.target.value)}></input>
  65. <div>{p === p2 ? 'Пароли совпадают' : 'Пароли не совпадают'}</div>
  66. </div>
  67. </div>
  68. );
  69. };
  70. const CRegForm = connect(null,{onReg: actionFullReg}) (RegForm)