UserPasswordEditor.jsx 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { Button, TextField } from "@mui/material"
  2. import { useEffect, useState } from "react";
  3. import { connect } from "react-redux";
  4. import { actionCheckPassword } from "../../../actions/actionLogin";
  5. import { actionUpsertUser } from "../../../actions/actionsForUser";
  6. import { UserEditorSubModalsTitle, UserEditorSubModalsWrap, UserEditorSubModalsFooter } from "./UserEditorSubModals.style"
  7. const UserPasswordEditor = ({login, disabled, handleClose, updateUser, checkPassword}) => {
  8. const [currPassword, setCurrPassword] = useState('');
  9. const [newPassword, setNewPassword] = useState('');
  10. const [errorP, setErrorP] = useState('')
  11. useEffect(() => {
  12. checkPassword(login, currPassword);
  13. }, [currPassword])
  14. useEffect(() => {
  15. if(errorP === false) {
  16. handleClose()
  17. updateUser(null, null, newPassword, null)
  18. }
  19. }, [errorP]);
  20. function validatePassword(p){
  21. let errorsP = [];
  22. if (p.length < 4 || p.length > 12) {
  23. errorsP.push("Your password must be at least 4 and no more than 12 characters");
  24. }
  25. if (!/[a-z]/.test(p)) {
  26. errorsP.push("Your password must contain at least one letter.");
  27. }
  28. if (!/[0-9]/.test(p)) {
  29. errorsP.push("Your password must contain at least one digit.");
  30. }
  31. if (errorsP.length > 0) {
  32. setErrorP(errorsP.join('/'))
  33. } else {
  34. setErrorP(false)
  35. }
  36. }
  37. return(
  38. <UserEditorSubModalsWrap>
  39. <UserEditorSubModalsTitle>Edit your password</UserEditorSubModalsTitle>
  40. <TextField
  41. autoFocus
  42. sx={{width: '100%', mt: '20px'}}
  43. id="standard-basic"
  44. label="Password"
  45. variant="standard"
  46. value={currPassword}
  47. onChange={(e) => setCurrPassword(e.target.value)}
  48. />
  49. <TextField
  50. autoFocus
  51. error={!!errorP}
  52. helperText={errorP}
  53. sx={{width: '100%', mt: '20px'}}
  54. id="standard-basic"
  55. label="New Password"
  56. variant="standard"
  57. disabled={!disabled}
  58. value={newPassword}
  59. onChange={(e) => setNewPassword(e.target.value)}
  60. />
  61. <UserEditorSubModalsFooter>
  62. <Button variant="text" onClick={handleClose}>Cancel</Button>
  63. <Button variant="text" disabled={newPassword ? false : true} onClick={() => {validatePassword(newPassword); }}>Save</Button>
  64. </UserEditorSubModalsFooter>
  65. </UserEditorSubModalsWrap>
  66. )
  67. }
  68. export default connect(state =>
  69. ({login: state?.promise?.aboutMe?.payload?.login || '', disabled: state?.promise?.checkedPassword?.payload || null}),
  70. {updateUser: actionUpsertUser, checkPassword: actionCheckPassword})(UserPasswordEditor);