<template> <form v-if="active === 'register'" v-on:submit="register" id="register-form"> <h3>Registration</h3> <div>{{errorMessage}}</div> <div> <label for='sender_name'>Name</label> <input id='register-name' required type='name' name='sender_name' placeholder='' spellcheck='false'> </div> <div> <label for='sender_email'>Email</label> <input v-on:input="checkPasswords" id='register-email' required type='email' name='sender_email' placeholder='' spellcheck='false'> </div> <div> <label for='sender_password'>Password</label> <input v-on:input="checkPasswords" id='register-password' required type='password' name='sender_password' placeholder='' spellcheck='false'> </div> <div> <label for='confirm_password'>Confirm Password</label> <input v-on:input="checkPasswords" id='confirm-password' required type='password' name='sender_password' placeholder='' spellcheck='false'> </div> <button class="submit-btn" type="submit">Submit</button> </form> <form v-if="active === 'forgot'" v-on:submit="forgotPassword" id="forgot-form"> <h3>Forgot Password</h3> <div> <label for='sender_email'>Email</label> <input id='forgot-email' required type='email' name='sender_email' placeholder='' spellcheck='false'> </div> <button class="submit-btn" type="submit">Submit</button> </form> <img v-if="active === 'loading'" type="image/svg+xml" class="loading-icon" src="../../images/loading.svg" alt=""/> <div v-if="active === 'register-completed'"> <img class="medium-icon" src="../../images/checked2.svg" alt=""> <h3>Success!</h3> <p>A verification link has been sent to your inbox.</p> </div> <div v-if="active === 'forgot-completed'"> <img class="medium-icon" src="../../images/checked2.svg" alt=""> <h3>Success!</h3> <p>A password reset link has been sent.</p> </div> <div v-if="active === 'error'"> <img class="medium-icon" src="../../images/warning-colored.svg" alt=""> <h3>An Error Occured.</h3> <p>{{`${error}: ${errorMessage}`}}</p> </div> <div v-on:click="closeArea" class="cancel-button"></div> </template> <script> function getCookie(name) { var re = new RegExp(name + "=([^;]+)") var value = re.exec(document.cookie) return (value != null) ? unescape(value[1]) : null } function getToken() { return fetch("/sanctum/csrf-cookie", { method: 'GET' }).then( () => { this.token = this.getCookie('XSRF-TOKEN') return this.token }) } function register(event) { this.active = 'loading' this.getToken().then(() => {fetch("/register", { method: 'POST', headers: {'Content-Type': 'application/json', 'Accept': 'application/json', 'X-XSRF-TOKEN': this.token}, body: JSON.stringify({"name": document.getElementById("register-name").value, "email": document.getElementById("register-email").value, "password": document.getElementById("register-password").value, "password_confirmation": document.getElementById("confirm-password").value})}) .then(response => { //Give completed or error if (response.ok) { this.active = 'register-completed' } else { if (response.status === 422) { this.errorMessage = 'That email is already registered.' this.active = 'register' } else { this.error = response.status this.errorMessage = response.statusText this.active = 'error' } } /* console.log(response.json()) */ }); event.preventDefault(); }) } function checkPasswords() { let passInput = document.getElementById('register-password') let passInput2 = document.getElementById('confirm-password') if (passInput.value != passInput2.value) { passInput2.setCustomValidity('Passwords must be matching') } else { passInput2.setCustomValidity(''); } } function forgotPassword(event) { this.active = 'loading' fetch("/forgot-password", { method: 'POST', headers: {'Content-Type': 'application/json', 'Accept': 'application/json', 'X-XSRF-TOKEN': this.token}, body: JSON.stringify({"email": document.getElementById("forgot-email").value})}) .then(response => { //Give completed or error console.log(response.status) console.log(response.json()) if (response.ok) { this.active = 'forgot-completed' } else { this.error = response.status this.errorMessage = response.statusText this.active = 'error' } /* console.log(response.json()) */ }); event.preventDefault(); } module.exports = { data() { return {active: 'register', token: '', errorMessage: ''} }, methods: { getToken, getCookie, register, checkPasswords, forgotPassword, closeArea() { document.querySelector(".register-area").classList.remove("active") }, } } </script>