summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2021-07-01 11:07:58 +0200
committerJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2021-07-01 11:15:57 +0200
commit904273d4a1ade3fa07e26cac1fab44f0c2cb0333 (patch)
treedb11f228be8426da053cc2f79573b5d8f3f87b63
parentee443f249edd2a7f8506b98ade7e58eacfed5def (diff)
Properlyu manage initiator on join/leave
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
-rw-r--r--src/mixins/CircleActionsMixin.js11
-rw-r--r--src/models/circle.d.ts12
-rw-r--r--src/models/circle.ts21
-rw-r--r--src/models/constants.d.ts3
-rw-r--r--src/models/constants.ts3
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',
}