diff options
author | John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com> | 2021-07-01 11:07:58 +0200 |
---|---|---|
committer | John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com> | 2021-07-01 11:15:57 +0200 |
commit | 904273d4a1ade3fa07e26cac1fab44f0c2cb0333 (patch) | |
tree | db11f228be8426da053cc2f79573b5d8f3f87b63 /src | |
parent | ee443f249edd2a7f8506b98ade7e58eacfed5def (diff) |
Properlyu manage initiator on join/leave
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/mixins/CircleActionsMixin.js | 11 | ||||
-rw-r--r-- | src/models/circle.d.ts | 12 | ||||
-rw-r--r-- | src/models/circle.ts | 21 | ||||
-rw-r--r-- | src/models/constants.d.ts | 3 | ||||
-rw-r--r-- | src/models/constants.ts | 3 |
5 files changed, 35 insertions, 15 deletions
diff --git a/src/mixins/CircleActionsMixin.js b/src/mixins/CircleActionsMixin.js index 60e83765..d79b6511 100644 --- a/src/mixins/CircleActionsMixin.js +++ b/src/mixins/CircleActionsMixin.js @@ -94,6 +94,9 @@ export default { member, leave: true, }) + + // Reset initiator + this.circle.initiator = null } catch (error) { console.error('Could not leave the circle', member, error) showError(t('contacts', 'Could not leave the circle {displayName}', this.circle)) @@ -107,7 +110,13 @@ export default { this.loadingJoin = true try { const initiator = await joinCircle(this.circle.id) - this.circle.initiator = new Member(initiator) + const member = new Member(initiator, this.circle) + + // Update initiator with newest membership values + this.circle.initiator = member + + // Append new member + member.circle.addMember(member) } catch (error) { showError(t('contacts', 'Unable to join the circle')) console.error('Unable to join the circle', error) diff --git a/src/models/circle.d.ts b/src/models/circle.d.ts index 910c4b30..25dc0536 100644 --- a/src/models/circle.d.ts +++ b/src/models/circle.d.ts @@ -65,12 +65,14 @@ export default class Circle { /** * Circle ini_initiator the current * user info for this circle + * null if not a member */ - get initiator(): Member; + get initiator(): Member | null; /** * Set new circle initiator + * null if not a member */ - set initiator(initiator: Member); + set initiator(initiator: Member | null); /** * Circle ownership */ @@ -127,7 +129,7 @@ export default class Circle { /** * Is the initiator a member of this circle? */ - get isMember(): boolean; + get isMember(): boolean | 0 | undefined; /** * Is the initiator a pending member of this circle? */ @@ -139,11 +141,11 @@ export default class Circle { /** * Can the initiator leave this circle? */ - get canLeave(): boolean; + get canLeave(): boolean | 0 | undefined; /** * Can the initiator add/remove members to this circle? */ - get canManageMembers(): boolean; + get canManageMembers(): boolean | 0 | undefined; /** * Vue router param */ diff --git a/src/models/circle.ts b/src/models/circle.ts index 75346a0b..de08d191 100644 --- a/src/models/circle.ts +++ b/src/models/circle.ts @@ -23,7 +23,7 @@ import Vue from 'vue' import Member from './member' -import { CircleConfig, CircleConfigs, MemberLevels } from './constants' +import { CircleConfigs, MemberLevels } from './constants' type MemberList = Record<string, Member> @@ -116,16 +116,21 @@ export default class Circle { /** * Circle ini_initiator the current * user info for this circle + * null if not a member */ - get initiator(): Member { + get initiator(): Member|null { return this._initiator } /** * Set new circle initiator + * null if not a member */ - set initiator(initiator: Member) { - this._initiator = initiator + set initiator(initiator: Member|null) { + if (initiator && initiator.constructor.name !== Member.name) { + throw new Error('Initiator must be a Member type') + } + Vue.set(this, '_initiator', initiator) } /** @@ -142,7 +147,7 @@ export default class Circle { if (owner.constructor.name !== Member.name) { throw new Error('Owner must be a Member type') } - this._owner = owner + Vue.set(this, '_owner', owner) } /** @@ -250,7 +255,8 @@ export default class Circle { * Is the initiator a member of this circle? */ get isMember() { - return this.initiator?.level > MemberLevels.NONE + return this.initiator?.level + && this.initiator?.level > MemberLevels.NONE } /** @@ -278,7 +284,8 @@ export default class Circle { * Can the initiator add/remove members to this circle? */ get canManageMembers() { - return this.initiator?.level >= MemberLevels.MODERATOR + return this.initiator?.level + && this.initiator?.level >= MemberLevels.MODERATOR } // PARAMS --------------------------------------------- diff --git a/src/models/constants.d.ts b/src/models/constants.d.ts index dcfe6110..172623bb 100644 --- a/src/models/constants.d.ts +++ b/src/models/constants.d.ts @@ -78,6 +78,7 @@ export declare enum CircleConfigs { FEDERATED } export declare enum MemberStatus { - INVITED = "invited", + INVITED = "Invited", + MEMBER = "Member", REQUESTING = "Requesting" } diff --git a/src/models/constants.ts b/src/models/constants.ts index b7a9b7f5..67b0e7ee 100644 --- a/src/models/constants.ts +++ b/src/models/constants.ts @@ -211,6 +211,7 @@ export enum CircleConfigs { } export enum MemberStatus { - INVITED = 'invited', + INVITED = 'Invited', + MEMBER = 'Member', REQUESTING = 'Requesting', } |