class User { static fromData(host, content) { if (typeof content === "string") { content = JSON.parse(content); } var user = new User(); user.host = host; user.data = content; user.memberships = []; if (content.memberships) { content.memberships.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) { 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.type === "GROUP") { membership.group = Group.fromData(host, content.parent); return membership; } return null; } }