header-build.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import {Link, Route, Switch} from "react-router-dom";
  2. import {connect} from "react-redux";
  3. import {actionAuthLogout} from "../../reducers";
  4. import {CLoginForm} from "./login";
  5. import {CRegForm} from "./registration";
  6. import {useState} from "react";
  7. import {CAvatar,CAvatarDropZone} from "./avatar";
  8. import {Logo} from "./logo";
  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 Spoiler = ({ header, children, open=false }) => {
  19. const [openSpoiler, setOpenSpoiler] = useState(open)
  20. return (
  21. <>
  22. <section className="Spoiler" onClick={() => setOpenSpoiler(!openSpoiler)}>
  23. {header}
  24. </section>
  25. {openSpoiler && (
  26. <div className="SpoilerContent">
  27. {children}
  28. </div>
  29. )}
  30. </>
  31. );
  32. };
  33. const LoginButtons = ({onLogout, history, token}) => {
  34. return (
  35. <>
  36. {!token ?
  37. ( <div className='LoginButtons'>
  38. <Link to='/login'><button onClick={() => history.push('/')}>Вход</button></Link>
  39. <Link to='/registration'><button>Регистрация</button></Link></div>) :
  40. (<div className='LoginColumn'>
  41. <Spoiler header={<CAvatar/>}>
  42. <strong>{JSON.parse(atob(token.split(".")[1])).sub.login}</strong>
  43. <CAvatarDropZone />
  44. <button onClick={() => {onLogout(); history.push('/')}}>Выйти</button>
  45. </Spoiler>
  46. </div>)
  47. }
  48. </>
  49. )
  50. }
  51. export const CLoginButtons = connect(state => ({token: state.auth.token}), {onLogout: actionAuthLogout})(LoginButtons)