diff --git a/src/context.js b/src/context.js index 424772d..fe67473 100644 --- a/src/context.js +++ b/src/context.js @@ -84,7 +84,7 @@ class Context { var user = sessionStorage.getItem("user"); if (user) { var rawUser = JSON.parse(user); - this.user = User.fromData(rawUser.host, rawUser.data); + this.user = User.fromData(rawUser.host, rawUser.data, rawUser.membershipData); } var hostConfig = sessionStorage.getItem("host"); if (hostConfig) { diff --git a/src/model/user.js b/src/model/user.js index 093303a..a102955 100644 --- a/src/model/user.js +++ b/src/model/user.js @@ -1,31 +1,24 @@ class User { - static fromData(host, content) { + static fromData(host, content, membershipContent) { if (typeof content === "string") { content = JSON.parse(content); } + if (typeof membershipContent === "string") { + membershipContent = JSON.parse(membershipContent); + } var user = new User(); user.host = host; user.data = content; + user.membershipData = membershipContent; user.memberships = []; - if (content.memberships) { - content.memberships.forEach(m => { + if (membershipContent) { + membershipContent.forEach(m => { user.memberships.push(Membership.fromData(host, m)); }); } return user; } - getMemberships() { - var memberships = []; - var host = this.host; - if (this.data.memberships) { - this.data.memberships.forEach(m => { - memberships.push(Membership.fromData(host, m)); - }); - } - return memberships; - } - findMyGroup(groupUsername) { var membership = this.memberships.find(m => m.group.username === groupUsername); if (membership) { @@ -72,7 +65,7 @@ class Membership { if (content.group) { membership.group = Group.fromData(host, content.group.data); return membership; - } else if (content.parent.type === "GROUP") { + } else if (content.parent) { membership.group = Group.fromData(host, content.parent); return membership; } diff --git a/src/pages/page_index.js b/src/pages/page_index.js index 3f366bc..16a1b08 100644 --- a/src/pages/page_index.js +++ b/src/pages/page_index.js @@ -74,22 +74,22 @@ class PageIndex extends Page { return true; } login() { - var host = document.getElementById("user-host").value; - if (host.startsWith("http://")) { - host = host.substring(7); - } else if (host.startsWith("https://")) { - host = host.substring(8); + this.requestHost = document.getElementById("user-host").value; + if (this.requestHost.startsWith("http://")) { + this.requestHost = host.substring(7); + } else if (this.requestHost.startsWith("https://")) { + this.requestHost = host.substring(8); } var email = document.getElementById("user-email").value; var password = document.getElementById("user-password").value; - requestLogin(host, email, password, this.loginCallback.bind(this)); + requestLogin(this.requestHost, email, password, this.loginCallback.bind(this)); return false; } loginCallback(request, status, result) { if (status === 200) { CTX.setUser(result); - requestHostConfig(host, this.hostConfigCallback.bind(this)); - requestTimezones(host, this.hostTimezonesCallback.bind(this)); + requestHostConfig(this.requestHost, this.hostConfigCallback.bind(this)); + requestTimezones(this.requestHost, this.hostTimezonesCallback.bind(this)); } else if (status === 404) { } @@ -97,7 +97,7 @@ class PageIndex extends Page { // TODO: See promise for mutex https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Using_promises hostConfigCallback(request, status, result) { if (status === 200) { - this.hostConfig = HostConfig.formConfigData(result); + this.hostConfig = HostConfig.fromConfigData(this.requestHost, result); if (this.timezonesData) { this.hostConfig.setTimezonesFromData(this.timezoneData); this.loginFinished(); @@ -115,6 +115,7 @@ class PageIndex extends Page { } } loginFinished() { + this.requestHost = undefined; location.replace("index.html"); } } diff --git a/src/request/req_host.js b/src/request/req_host.js index e9d4126..665867d 100644 --- a/src/request/req_host.js +++ b/src/request/req_host.js @@ -1,4 +1,4 @@ -function requestHostConfig(host) { +function requestHostConfig(host, callback) { var request = new XMLHttpRequest(); request.onreadystatechange = function() { if (request.readyState === XMLHttpRequest.DONE) { @@ -182,7 +182,7 @@ function requestHostConfig(host) { request.send(JSON.stringify(content)); } -function requestTimezones(host) { +function requestTimezones(host, callback) { var request = new XMLHttpRequest(); request.onreadystatechange = function() { if (request.readyState === XMLHttpRequest.DONE) { diff --git a/src/request/req_login.js b/src/request/req_login.js index 9be6a10..90780ef 100644 --- a/src/request/req_login.js +++ b/src/request/req_login.js @@ -20,8 +20,7 @@ function requestLogin(host, email, password, callback) { callback(request, 500, "No login data"); return; } - var user = User.fromData(host, data["login"]); - requestLoggedMembership(host, user, callback); + requestLoggedMembership(host, data["login"], callback); return; } callback(request, request.status, request.responseText); @@ -52,7 +51,7 @@ function requestLogin(host, email, password, callback) { request.send(JSON.stringify(content)); } -function requestLoggedMembership(host, loggedUser, callback) { +function requestLoggedMembership(host, userData, callback) { var request = new XMLHttpRequest(); request.onreadystatechange = function() { if (request.readyState === XMLHttpRequest.DONE) { @@ -75,17 +74,8 @@ function requestLoggedMembership(host, loggedUser, callback) { return; } data = data["loggedUser"]["memberships"]["elements"]; - var memberships = []; - data.forEach(d => { - var m = Membership.fromData(host, d); - if (m) { - memberships.push(m); - } else { - console.error("Could not parse membership from " + d); - } - }); - loggedUser.memberships = memberships; - callback(request, request.status, loggedUser); + let user = User.fromData(host, userData, data); + callback(request, request.status, user); return; } callback(request, request.status, request.responseText); @@ -93,7 +83,7 @@ function requestLoggedMembership(host, loggedUser, callback) { }; request.open("POST", "https://" + host + "/api"); request.setRequestHeader("Content-type", "application/json"); - request.setRequestHeader("authorization", "Bearer " + loggedUser.data.accessToken); + request.setRequestHeader("authorization", "Bearer " + userData.accessToken); var content = { operationName:"LoggedUserMemberships", variables:{}, @@ -113,10 +103,8 @@ function requestLoggedMembership(host, loggedUser, callback) { ...ActorFragment organizedEvents { elements { - id title picture { - id url __typename } @@ -142,7 +130,6 @@ function requestLoggedMembership(host, loggedUser, callback) { fragment ActorFragment on Actor { id avatar { - id url __typename }