profile.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { useState } from "react"
  2. import { connect } from "react-redux"
  3. import { actionFullChangeUserAvatar, actionFullChangeUserNick, actionFullChangeUserPassword } from "../actions"
  4. import { ConnectDropzone } from "./dropzone"
  5. const ProfileEdit = ({ userID, onChangeAvatar, onChangeNick, onChangePassword }) => {
  6. let [avatar, setAvatar] = useState(false)
  7. let [avatarData, setAvatarData] = useState([])
  8. let [nick, setNick] = useState(false)
  9. let [nickData, setNickData] = useState("")
  10. let [password, setPassword] = useState(false)
  11. let [passwordData, setPasswordData] = useState("")
  12. let [passwordValidation, setPasswordValidation] = useState("")
  13. const validation = new RegExp(`^(?=.*[0-9]).{${4},}$`)
  14. let applyHandler = (type) => {
  15. if (type === "avatar") {
  16. onChangeAvatar(userID, avatarData[0]._id)
  17. setAvatar(!avatar)
  18. setAvatarData([])
  19. }
  20. if (type === "nick") {
  21. onChangeNick(userID, nickData)
  22. setNick(!nick)
  23. }
  24. if (type === "password") {
  25. onChangePassword(userID, passwordData)
  26. setPassword(!password)
  27. setPasswordData("")
  28. }
  29. }
  30. return (
  31. <div>
  32. <div>
  33. <button onClick={() => setAvatar(!avatar)}>Аватар</button>
  34. {avatar &&
  35. <>
  36. <ConnectDropzone maxFiles={1} onSet={setAvatarData} />
  37. <button onClick={() => applyHandler("avatar")}>Установить</button>
  38. </>}
  39. </div>
  40. <div>
  41. <button onClick={() => setNick(!nick)}>Ник</button>
  42. {nick &&
  43. <>
  44. <input onChange={(e) => setNickData(e.target.value)} value={nickData} placeholder="введите новый ник" />
  45. <button onClick={() => applyHandler("nick")}>Установить</button>
  46. </>}
  47. </div>
  48. <div>
  49. <button onClick={() => setPassword(!password)}>Пароль</button>
  50. {password &&
  51. <>
  52. <input type='password' value={passwordData}
  53. onChange={(e) => setPasswordData(e.target.value)} placeholder="введите новый пароль" />
  54. <input type='password' value={passwordValidation}
  55. onChange={e => setPasswordValidation(e.target.value)} placeholder="повторите новый пароль" />
  56. <button disabled={!(passwordData === passwordValidation && validation.test(passwordData))}
  57. onClick={() => applyHandler("password")}>Установить</button>
  58. </>}
  59. </div>
  60. <a href="/chat">Вернуться на главную</a>
  61. </div>
  62. )
  63. }
  64. export const ConnectProfileEdit = connect(state => ({ userID: state.auth.payload.sub.id }),
  65. {
  66. onChangeAvatar: actionFullChangeUserAvatar,
  67. onChangeNick: actionFullChangeUserNick,
  68. onChangePassword: actionFullChangeUserPassword
  69. })(ProfileEdit)