|
|
@ -7,7 +7,6 @@ |
|
|
|
|
|
|
|
<!-- Members List --> |
|
|
|
<div v-else class="space-y-4"> |
|
|
|
|
|
|
|
<div v-if="missingMyself" class="py-4"> |
|
|
|
You are not yet admitted. The organizer will admit you. |
|
|
|
</div> |
|
|
@ -30,15 +29,22 @@ |
|
|
|
<div class="flex"> |
|
|
|
<h3 class="text-lg font-medium">{{ member.name }}</h3> |
|
|
|
<span |
|
|
|
v-if="showOrganizerTools && isOrganizer && member.did !== activeDid" |
|
|
|
v-if=" |
|
|
|
showOrganizerTools && isOrganizer && member.did !== activeDid |
|
|
|
" |
|
|
|
class="flex items-center" |
|
|
|
> |
|
|
|
<button |
|
|
|
@click="toggleAdmission(member)" |
|
|
|
class="ml-2 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 transition-colors" |
|
|
|
:title="member.member.admitted ? 'Remove member' : 'Admit member'" |
|
|
|
:title=" |
|
|
|
member.member.admitted ? 'Remove member' : 'Admit member' |
|
|
|
" |
|
|
|
> |
|
|
|
<fa :icon="member.member.admitted ? 'minus' : 'plus'" class="text-sm" /> |
|
|
|
<fa |
|
|
|
:icon="member.member.admitted ? 'minus' : 'plus'" |
|
|
|
class="text-sm" |
|
|
|
/> |
|
|
|
</button> |
|
|
|
<button |
|
|
|
@click="informAboutAdmission()" |
|
|
@ -93,7 +99,6 @@ |
|
|
|
"Your password failed. Please go back and try again." |
|
|
|
}} |
|
|
|
</p> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</template> |
|
|
@ -101,7 +106,11 @@ |
|
|
|
<script lang="ts"> |
|
|
|
import { Component, Vue, Prop } from "vue-facing-decorator"; |
|
|
|
|
|
|
|
import { logConsoleAndDb, retrieveSettingsForActiveAccount, db } from "@/db/index"; |
|
|
|
import { |
|
|
|
logConsoleAndDb, |
|
|
|
retrieveSettingsForActiveAccount, |
|
|
|
db, |
|
|
|
} from "@/db/index"; |
|
|
|
import { |
|
|
|
errorStringForLog, |
|
|
|
getHeaders, |
|
|
@ -152,7 +161,7 @@ export default class MembersList extends Vue { |
|
|
|
await this.axios.put( |
|
|
|
`${this.apiServer}/api/partner/groupOnboardMember/${member.member.memberId}`, |
|
|
|
{ admitted: !member.member.admitted }, |
|
|
|
{ headers } |
|
|
|
{ headers }, |
|
|
|
); |
|
|
|
// Update local state |
|
|
|
member.member.admitted = !member.member.admitted; |
|
|
@ -163,7 +172,12 @@ export default class MembersList extends Vue { |
|
|
|
did: member.did, |
|
|
|
name: member.name, |
|
|
|
}; |
|
|
|
const result = await register(this.activeDid, this.apiServer, this.axios, contact); |
|
|
|
const result = await register( |
|
|
|
this.activeDid, |
|
|
|
this.apiServer, |
|
|
|
this.axios, |
|
|
|
contact, |
|
|
|
); |
|
|
|
if (result.success) { |
|
|
|
member.member.registered = true; |
|
|
|
await db.contacts.update(member.did, { registered: true }); |
|
|
@ -192,8 +206,15 @@ export default class MembersList extends Vue { |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
logConsoleAndDb("Error toggling admission: " + errorStringForLog(error), true); |
|
|
|
this.$emit("error", serverMessageForUser(error) || "Failed to update member admission status."); |
|
|
|
logConsoleAndDb( |
|
|
|
"Error toggling admission: " + errorStringForLog(error), |
|
|
|
true, |
|
|
|
); |
|
|
|
this.$emit( |
|
|
|
"error", |
|
|
|
serverMessageForUser(error) || |
|
|
|
"Failed to update member admission status.", |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -240,7 +261,8 @@ export default class MembersList extends Vue { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
let isFirstEntry = true, foundMyself = false; |
|
|
|
let isFirstEntry = true, |
|
|
|
foundMyself = false; |
|
|
|
for (const member of this.members) { |
|
|
|
try { |
|
|
|
const decryptedContent = await decryptMessage( |
|
|
@ -299,7 +321,7 @@ export default class MembersList extends Vue { |
|
|
|
} |
|
|
|
|
|
|
|
isContactAlready(did: string): boolean { |
|
|
|
return this.contacts.some(contact => contact.did === did); |
|
|
|
return this.contacts.some((contact) => contact.did === did); |
|
|
|
} |
|
|
|
|
|
|
|
async addAsContact(member: DecryptedMember) { |
|
|
|