diff --git a/src/components/MembersList.vue b/src/components/MembersList.vue index bf1aeb3a..81963dad 100644 --- a/src/components/MembersList.vue +++ b/src/components/MembersList.vue @@ -73,7 +73,8 @@ 'border-b px-2 sm:px-3 py-1.5', { 'bg-blue-50 border-t border-blue-300 -mt-[1px]': - !member.member.admitted && isOrganizer, + !member.member.admitted && + (isOrganizer || member.did === activeDid), }, { 'border-slate-300': member.member.admitted }, ]" @@ -84,7 +85,9 @@ :class="[ 'font-semibold truncate', { - 'text-slate-500': !member.member.admitted && isOrganizer, + 'text-slate-500': + !member.member.admitted && + (isOrganizer || member.did === activeDid), }, ]" > @@ -94,7 +97,15 @@ class="fa-fw text-amber-400" /> + @@ -348,7 +359,10 @@ export default class MembersList extends Vue { const content = JSON.parse(decryptedContent); this.decryptedMembers.push({ - member: member, + member: { + ...member, + admitted: member.admitted !== undefined ? member.admitted : true, // Default to true for non-organizers + }, name: content.name, did: content.did, isRegistered: !!content.isRegistered, @@ -403,37 +417,55 @@ export default class MembersList extends Vue { } else { // non-organizers only get visible members from server, plus themselves - // this is a stub for this user just in case they are waiting to get in - // which is especially useful so they can see their own DID - const currentUser: DecryptedMember = { - member: { - admitted: false, - content: "{}", - memberId: -1, - }, - name: this.firstName, - did: this.activeDid, - isRegistered: false, - }; - const otherMembersPlusUser = [currentUser, ...this.decryptedMembers]; - members = otherMembersPlusUser; + // Check if current user is already in the decrypted members list + if ( + !this.decryptedMembers.find((member) => member.did === this.activeDid) + ) { + // this is a stub for this user just in case they are waiting to get in + // which is especially useful so they can see their own DID + const currentUser: DecryptedMember = { + member: { + admitted: false, + content: "{}", + memberId: -1, + }, + name: this.firstName, + did: this.activeDid, + isRegistered: false, + }; + members = [currentUser, ...this.decryptedMembers]; + } else { + members = this.decryptedMembers; + } } // Sort members according to priority: // 1. Organizer at the top - // 2. Non-admitted members next - // 3. Everyone else after + // 2. Current user next + // 3. Non-admitted members next + // 4. Everyone else after return members.sort((a, b) => { // Check if either member is the organizer (first member in original list) const aIsOrganizer = a.member.memberId === this.members[0]?.memberId; const bIsOrganizer = b.member.memberId === this.members[0]?.memberId; + // Check if either member is the current user + const aIsCurrentUser = a.did === this.activeDid; + const bIsCurrentUser = b.did === this.activeDid; + // Organizer always comes first if (aIsOrganizer && !bIsOrganizer) return -1; if (!aIsOrganizer && bIsOrganizer) return 1; - // If both are organizers or neither are organizers, sort by admission status - if (aIsOrganizer && bIsOrganizer) return 0; // Both organizers, maintain original order + // If both are organizers, maintain original order + if (aIsOrganizer && bIsOrganizer) return 0; + + // Current user comes second (after organizer) + if (aIsCurrentUser && !bIsCurrentUser && !bIsOrganizer) return -1; + if (!aIsCurrentUser && bIsCurrentUser && !aIsOrganizer) return 1; + + // If both are current users, maintain original order + if (aIsCurrentUser && bIsCurrentUser) return 0; // Non-admitted members come before admitted members if (!a.member.admitted && b.member.admitted) return -1;