import React, { useState } from 'react'; //utilities const validateEmail = require('../../../common/utilities/validate-email.js'); const validateUsername = require('../../../common/utilities/validate-username.js'); const SignUp = props => { //refs let emailElement, usernameElement, passwordElement, retypeElement; return (

Signup

{ evt.preventDefault(); handleSubmit(emailElement.value, usernameElement.value, passwordElement.value, retypeElement.value) .then(res => res ? alert(res) : null) .then(() => emailElement.value = usernameElement.value = passwordElement.value = retypeElement.value = '') //clear input .catch(e => console.error(e)) ; } }>
emailElement = e} />
usernameElement = e} />
passwordElement = e} />
retypeElement = e} />
); }; const handleSubmit = async (email, username, password, retype) => { email = email.trim(); username = username.trim(); const err = handleValidation(email, username, password, retype); if (err) { return err; } //generate a new formdata payload let formData = new FormData(); formData.append('email', email); formData.append('username', username); formData.append('password', password); const result = await fetch('/api/accounts/signup', { method: 'POST', body: formData }); if (result.ok) { return result.text(); } else { return result.text(); } }; //returns an error message, or null on success const handleValidation = (email, username, password, retype) => { if (!validateEmail(email)) { return 'invalid email'; } if (!validateUsername(username)) { return 'invalid username'; } if (password.length < 8) { return 'invalid password (Must be at least 8 characters long)'; } if (password !== retype) { return 'passwords do not match'; } return null; }; export default SignUp;