-
+
+
+
{{ member.name || unnamedMember }}
@@ -110,17 +120,23 @@
v-if="
showOrganizerTools && isOrganizer && member.did !== activeDid
"
- class="flex items-center gap-1"
+ class="flex items-center gap-1.5"
>
@@ -129,7 +145,7 @@
title="Admission Info"
@click="informAboutAdmission()"
>
-
+
@@ -378,17 +394,44 @@ export default class MembersList extends Vue {
}
membersToShow(): DecryptedMember[] {
+ let members: DecryptedMember[] = [];
+
if (this.isOrganizer) {
if (this.showOrganizerTools) {
- return this.decryptedMembers;
+ members = this.decryptedMembers;
} else {
- return this.decryptedMembers.filter(
+ members = this.decryptedMembers.filter(
(member: DecryptedMember) => member.member.admitted,
);
}
+ } else {
+ // non-organizers only get visible members from server
+ members = this.decryptedMembers;
}
- // non-organizers only get visible members from server
- return this.decryptedMembers;
+
+ // Sort members according to priority:
+ // 1. Organizer at the top
+ // 2. Non-admitted members next
+ // 3. 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;
+
+ // 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
+
+ // Non-admitted members come before admitted members
+ if (!a.member.admitted && b.member.admitted) return -1;
+ if (a.member.admitted && !b.member.admitted) return 1;
+
+ // If admission status is the same, maintain original order
+ return 0;
+ });
}
informAboutAdmission() {
@@ -718,23 +761,26 @@ export default class MembersList extends Vue {
.btn-add-contact {
/* stylelint-disable-next-line at-rule-no-unknown */
- @apply w-6 h-6 flex items-center justify-center rounded-full
- bg-green-100 text-green-600 hover:bg-green-200 hover:text-green-800
+ @apply text-lg text-green-600 hover:text-green-800
transition-colors;
}
.btn-info-contact,
.btn-info-admission {
/* stylelint-disable-next-line at-rule-no-unknown */
- @apply w-6 h-6 flex items-center justify-center rounded-full
- bg-slate-100 text-slate-400 hover:text-slate-600
+ @apply text-slate-400 hover:text-slate-600
transition-colors;
}
-.btn-admission {
+.btn-admission-add {
/* stylelint-disable-next-line at-rule-no-unknown */
- @apply w-6 h-6 flex items-center justify-center rounded-full
- bg-blue-100 text-blue-600 hover:bg-blue-200 hover:text-blue-800
+ @apply text-lg text-blue-500 hover:text-blue-700
+ transition-colors;
+}
+
+.btn-admission-remove {
+ /* stylelint-disable-next-line at-rule-no-unknown */
+ @apply text-lg text-rose-500 hover:text-rose-700
transition-colors;
}
diff --git a/src/libs/fontawesome.ts b/src/libs/fontawesome.ts
index efd8ff03..b2e1ad13 100644
--- a/src/libs/fontawesome.ts
+++ b/src/libs/fontawesome.ts
@@ -29,6 +29,7 @@ import {
faCircle,
faCircleCheck,
faCircleInfo,
+ faCircleMinus,
faCirclePlus,
faCircleQuestion,
faCircleRight,
@@ -37,6 +38,7 @@ import {
faCoins,
faComment,
faCopy,
+ faCrown,
faDollar,
faDownload,
faEllipsis,
@@ -123,6 +125,7 @@ library.add(
faCircle,
faCircleCheck,
faCircleInfo,
+ faCircleMinus,
faCirclePlus,
faCircleQuestion,
faCircleRight,
@@ -131,6 +134,7 @@ library.add(
faCoins,
faComment,
faCopy,
+ faCrown,
faDollar,
faDownload,
faEllipsis,