class User { 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 (membershipContent) { membershipContent.forEach(m => { user.memberships.push(Membership.fromData(host, m)); }); } return user; } findMyGroup(groupUsername) { var membership = this.memberships.find(m => m.group.username === groupUsername); if (membership) { return membership.group; } return null } getGroupRole(group) { var membership = this.memberships.find(m => m.group.username === group.username); if (membership) { return membership.role; } return null } canManageEvent(event) { return false; // participations.length > 0 && participations[0].role === ParticipantRole.CREATOR // || MemberRole.MODERATOR|MemberRole.ADMINISTRATOR in person.memberships.elements[0].role } canEditGroup(group) { return group.canBeEditedBy(this.getGroupRole(group)); } canManageGroupEvents(group) { return group.canManageEvents(this.getGroupRole(group)); } } const ROLE = { ADMINISTRATOR: "ADMINISTRATOR", MODERATOR: "MODERATOR", // MEMBER, // GUEST, // PENDING, // REJECTED, // FOLLOWER (not a group membership status per see from the API) } class Membership { static fromData(host, content) { var membership = new Membership(); membership.role = content.role; if (content.group) { membership.group = Group.fromData(host, content.group.data); return membership; } else if (content.parent) { membership.group = Group.fromData(host, content.parent); return membership; } return null; } }