149 lines
5.3 KiB
JavaScript
Executable File
149 lines
5.3 KiB
JavaScript
Executable File
class Login extends HTMLElement {
|
|
|
|
static get observedAttributes() {
|
|
return ['firstname', 'surname'];
|
|
}
|
|
|
|
clickCheck(){
|
|
console.log('login.clickCheck');
|
|
if(this.checkbox.checked){
|
|
this.createAccountButton.disabled = false;
|
|
}else{
|
|
this.createAccountButton.disabled = true;
|
|
}
|
|
}
|
|
|
|
createAccount() {
|
|
console.log('login.createAccount');
|
|
|
|
/* where to make a data call for points/events */
|
|
let sr = this.shadowRoot
|
|
var firstname = sr.getElementById('firstname').innerHTML;
|
|
var surname = sr.getElementById('surname').innerHTML;
|
|
var email = sr.getElementById('email').innerHTML;
|
|
|
|
var phoneview = document.getElementById("phoneview");
|
|
var mobileview = phoneview.getMobileView();
|
|
this.MODE = this.getAttribute('mode')
|
|
let previousMobileView = mobileview.innerHTML
|
|
mobileview.innerHTML = "";
|
|
|
|
// create loading spinner first
|
|
var element = document.createElement('loading-spinner-element');
|
|
element.setAttribute("status", "Creating account...")
|
|
mobileview.appendChild(element)
|
|
|
|
createAccountAppId(firstname, surname, firstname + "" + surname, email, (json) => {
|
|
console.log(json)
|
|
if (json.status == "user created successfully") {
|
|
|
|
element.setAttribute("status", "Logging in...")
|
|
let usernamepassword = firstname + "" + surname
|
|
loginWithAppId(usernamepassword, usernamepassword, (jsonWithTokens) => {
|
|
// when creation of account
|
|
// and login complete, create the profile
|
|
element.setAttribute("status", "Creating user profile...")
|
|
createProfile(jsonWithTokens.access_token, success => {
|
|
// then show account view
|
|
if (success) {
|
|
this.createTransactionsView(firstname, surname)
|
|
}
|
|
// else edge case when failed to create user profile
|
|
})
|
|
// edge case when unable to sign in
|
|
})
|
|
} else {
|
|
// edge case when failed to register with app id
|
|
element.setAttribute("status", json.message)
|
|
setTimeout(() => {
|
|
mobileview.innerHTML = previousMobileView
|
|
}, 2000)
|
|
}
|
|
})
|
|
}
|
|
|
|
createTransactionsView(firstname, surname) {
|
|
var accountinfo ={
|
|
firstname:firstname,
|
|
surname: surname
|
|
}
|
|
|
|
var fullname = accountinfo.firstname + ' ' + accountinfo.surname
|
|
|
|
var phoneview = document.getElementById("phoneview");
|
|
var mobileview = phoneview.getMobileView();
|
|
let element = document.createElement('transactions-element')
|
|
element.setAttribute('name', fullname);
|
|
element.setAttribute('mode', this.MODE);
|
|
mobileview.innerHTML = "";
|
|
mobileview.appendChild(element);
|
|
|
|
localStorage.setItem("loyaltyname", fullname);
|
|
|
|
phoneview.showNavigation();
|
|
}
|
|
|
|
constructor() {
|
|
// Always call super first in constructor
|
|
super();
|
|
|
|
let template = document.getElementById('loginview');
|
|
let templateContent = template.content;
|
|
|
|
const shadow = this.attachShadow({mode: 'open'})
|
|
.appendChild(templateContent.cloneNode(true));
|
|
|
|
var sr = this.shadowRoot;
|
|
|
|
this.checkbox = sr.getElementById('gdprcheck');
|
|
|
|
this.checkbox.addEventListener('click', e => {
|
|
this.clickCheck();
|
|
});
|
|
|
|
this.createAccountButton = sr.getElementById('createAccountButton');
|
|
|
|
this.createAccountButton.addEventListener('click', e =>{
|
|
this.createAccount();
|
|
});
|
|
|
|
}
|
|
|
|
connectedCallback(){
|
|
|
|
var ids = ['firstname', 'surname', 'password', 'username', 'email'];
|
|
|
|
var sr = this.shadowRoot;
|
|
var customElement = this;
|
|
|
|
ids.forEach(function(id){
|
|
var element = sr.getElementById(id);
|
|
var data = customElement.getAttribute(id);
|
|
element.innerHTML = data;
|
|
})
|
|
let firstnameDiv = sr.getElementById('firstname')
|
|
let surnameDiv = sr.getElementById('surname')
|
|
let usernameDiv = sr.getElementById('username')
|
|
let passwordDiv = sr.getElementById('password')
|
|
let emailDiv = sr.getElementById('email')
|
|
firstnameDiv.addEventListener('input', function () {
|
|
usernameDiv.innerHTML = this.innerHTML + surnameDiv.innerHTML
|
|
passwordDiv.innerHTML = this.innerHTML.replace(/./g,'*') + surnameDiv.innerHTML.replace(/./g,'*')
|
|
emailDiv.innerHTML = this.innerHTML + "@" + surnameDiv.innerHTML + ".org"
|
|
})
|
|
surnameDiv.addEventListener('input', function () {
|
|
usernameDiv.innerHTML = firstnameDiv.innerHTML + this.innerHTML
|
|
passwordDiv.innerHTML = firstnameDiv.innerHTML.replace(/./g,'*') + this.innerHTML.replace(/./g,'*')
|
|
emailDiv.innerHTML = firstnameDiv.innerHTML + "@" + this.innerHTML + ".org"
|
|
})
|
|
}
|
|
}
|
|
|
|
try {
|
|
customElements.define('login-element', Login);
|
|
} catch (err) {
|
|
const h3 = document.createElement('h3')
|
|
h3.innerHTML = err
|
|
document.body.appendChild(h3)
|
|
}
|