header-build.js 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import {Link, Switch} from "react-router-dom";
  2. import {connect} from "react-redux";
  3. import {actionAuthLogout, actionPromise} 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. import {history} from "../../App";
  10. import {gql} from "../../actions";
  11. import {takeEvery, select, call} from "redux-saga/effects";
  12. import {promiseWorker} from "../../reducers/promiseReducer";
  13. import {CTrackSearch} from "../tools/search";
  14. import {CProtectedRoute} from "../../reducers/routeReducer";
  15. export const actionSetUserPassword = (password) =>
  16. ({type:'SET_USER_PASSWORD', password})
  17. export function* setUserPasswordWorker (action) {
  18. let {password} = action
  19. let {auth} = yield select()
  20. let userId = auth.payload?.sub?.id
  21. console.log(userId, password)
  22. // yield put (actionAuthLogout())
  23. yield call(promiseWorker,actionPromise('register', gql(`mutation reg($user:UserInput) {
  24. UserUpsert(user:$user) {
  25. _id
  26. }
  27. }`, {user: {userId, password}})))
  28. // yield put (actionFullLogin)
  29. }
  30. export function* setUserPasswordWatcher() {
  31. yield takeEvery ('SET_USER_PASSWORD',setUserPasswordWorker)
  32. }
  33. // const ChangePasswordForm = ({onChangePassword}) => {
  34. // const [p, setP] = useState ('')
  35. // return (
  36. // <div>
  37. // <input className='change-password-input' type='password' placeholder='Введите пароль' onChange={e => setP(e.target.value)}></input>
  38. // <button className='dropdown-button' onClick={() => {onChangePassword(p); history.push('/')}}>Сменить пароль</button>
  39. // </div>
  40. // )
  41. // }
  42. //
  43. // export const CChangePasswordForm = connect(null,{onChangePassword:actionSetUserPassword})(ChangePasswordForm)
  44. export const Header = () =>
  45. <header className="Header">
  46. <Logo />
  47. <Link to={`/music`}><h3>Все песни</h3></Link>
  48. <Link to={`/myMusic`}> <h3>Моя музыка</h3></Link>
  49. <h3><CTrackSearch /></h3>
  50. <Switch>
  51. <CProtectedRoute roles={["anon", "user"]} path="/login" component={CLoginForm}/>
  52. <CProtectedRoute roles={["anon", "user"]} path="/registration" component={CRegForm}/>
  53. <CProtectedRoute roles={["anon", "user"]} path='*' component={CLoginButtons} exact/>
  54. </Switch>
  55. </header>
  56. const LoginButtons = ({onLogout, history, token}) => {
  57. return (
  58. <>
  59. {!token ?
  60. ( <div className='LoginButtons'>
  61. <Link to='/login'><button onClick={() => history.push('/')}>Вход</button></Link>
  62. <Link to='/registration'><button>Регистрация</button></Link></div>) :
  63. (<div className="btn-group">
  64. <button type="button" className="btn btn-secondary dropdown-toggle" data-toggle="dropdown"
  65. aria-haspopup="true" aria-expanded="false">
  66. <CAvatar/>
  67. </button>
  68. <div className="dropdown-menu dropdown-menu-right">
  69. <h2>{JSON.parse(atob(token.split(".")[1])).sub.login}</h2>
  70. <CAvatarDropZone />
  71. {/*<CChangePasswordForm/>*/}
  72. <button className='dropdown-button' onClick={() => {onLogout(); history.push('/')}}>Выйти</button>
  73. </div>
  74. </div>
  75. )
  76. }
  77. </>
  78. )
  79. }
  80. export const CLoginButtons = connect(state => ({token: state.auth.token}), {onLogout: actionAuthLogout})(LoginButtons)