authRegistration.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import React, {useState} from 'react';
  2. import {Link} from 'react-router-dom';
  3. import { actionAuthLogin } from '../store/authReducer';
  4. import { store } from '../store/store';
  5. import { connect } from 'react-redux';
  6. async function sendForm (url, data) {
  7. let error = await fetch(`http://player-api/api/${url}`, {
  8. method: 'POST',
  9. body: data
  10. }).then(res => res.json())
  11. .then(data => {
  12. if(data.token) {
  13. store.dispatch(actionAuthLogin(data.token, data.user));
  14. return data
  15. } else {
  16. console.log(data);
  17. return data.login[0];
  18. }
  19. })
  20. return error;
  21. }
  22. export const RegisterForm = ({authState}) => {
  23. const [login, setLogin] = useState('');
  24. const [password, setPassword] = useState('');
  25. const [name, setName] = useState('');
  26. const [passwordConfirm, setPasswordConfirm] = useState('');
  27. const [textModal, setTextModal] = useState('');
  28. const postForm = async (event) =>{
  29. event.preventDefault();
  30. const data = new FormData();
  31. data.append("login", login);
  32. data.append("password", password);
  33. data.append("name", name);
  34. setTextModal(( typeof(await sendForm('register', data))==='string')? (await sendForm('register', data)) : '');
  35. }
  36. return (
  37. <form onSubmit={postForm} id="register_form">
  38. <div className="register container align-items-center justify-content-center vw-100 vh-100 d-flex">
  39. <div className="col-4">
  40. <h4 className="w-100 text-center">Sign Up</h4>
  41. <hr/>
  42. <label className="form-label">*Login</label><br/>
  43. <input type="text" id="username" className="input form-control mb-3" placeholder="asya123"
  44. value={login} onChange={e => setLogin(e.target.value)}
  45. />
  46. <label className="form-label">*Full Name</label><br/>
  47. <input type="text" id="name" className="input form-control mb-3" placeholder="Anastasiia"
  48. value={name} onChange={e => setName(e.target.value)}
  49. />
  50. <label className="form-label">*Password (8+ symbols)</label>
  51. <input type="password" id="password" className="form-control mb-3" value={password} onChange={e => setPassword(e.target.value)} />
  52. <label className="form-label">*Confirm password</label>
  53. <input type="password" id="confirm_password" className="form-control mb-3" value={passwordConfirm} onChange={e => setPasswordConfirm(e.target.value)}/>
  54. <p className='text-danger'>{textModal ? ('*' + textModal) : ''}</p>
  55. <div className="d-flex justify-content-between align-items-center">
  56. <h6>Already a member? <Link to="/login" className="">Log in</Link></h6>
  57. <button type="submit" className="btn btn-outline-danger" disabled={password !== passwordConfirm || password.length < 8 || login.length < 3} onClick={() => console.log('/user')}>
  58. Sign Up
  59. </button>
  60. </div>
  61. </div>
  62. </div>
  63. </form>
  64. )
  65. }
  66. export const CRegisterForm = connect(state => ({ authState: state.auth?.token }))(RegisterForm);