@ -34,7 +34,7 @@
class = "flex items-center"
>
< button
@ click = "toggleAdmission(member.member )"
@ 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'"
>
@ -105,6 +105,7 @@ import { logConsoleAndDb, retrieveSettingsForActiveAccount, db } from "@/db/inde
import {
errorStringForLog ,
getHeaders ,
register ,
serverMessageForUser ,
} from "@/libs/endorserServer" ;
import { decryptMessage } from "@/libs/crypto" ;
@ -114,6 +115,7 @@ interface Member {
admitted : boolean ;
content : string ;
memberId : number ;
registered : boolean ;
}
interface DecryptedMember {
@ -144,16 +146,51 @@ export default class MembersList extends Vue {
apiServer = "" ;
contacts : Array < Contact > = [ ] ;
async toggleAdmission ( member : Member ) {
async toggleAdmission ( member : Decrypted Member) {
try {
const headers = await getHeaders ( this . activeDid ) ;
await this . axios . put (
` ${ this . apiServer } /api/partner/groupOnboardMember/ ${ member . memberId } ` ,
{ admitted : ! member . admitted } ,
` ${ this . apiServer } /api/partner/groupOnboardMember/ ${ member . member . member Id} ` ,
{ admitted : ! member . member . admitted } ,
{ headers }
) ;
/ / U p d a t e l o c a l s t a t e
member . admitted = ! member . admitted ;
member . member . admitted = ! member . member . admitted ;
/ / i f a d m i t t e d , n o w r e g i s t e r t h a t u s e r i f t h e y a r e n o t r e g i s t e r e d
if ( member . member . admitted && ! member . member . registered ) {
const contact = {
did : member . did ,
name : member . name ,
} ;
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 } ) ;
this . $notify (
{
group : "alert" ,
type : "success" ,
title : "Registered" ,
text : "Besides being admitted, they were also registered." ,
} ,
3000 ,
) ;
} else {
const additionalInfo = result . error || "" ;
this . $notify (
{
group : "alert" ,
type : "danger" ,
title : "Registration failed" ,
text :
"They were admitted, but registration failed. You can try again, or register from your contacts screen. " +
additionalInfo ,
} ,
10000 ,
) ;
}
}
} catch ( error ) {
logConsoleAndDb ( "Error toggling admission: " + errorStringForLog ( error ) , true ) ;
this . $emit ( "error" , serverMessageForUser ( error ) || "Failed to update member admission status." ) ;
@ -239,7 +276,7 @@ export default class MembersList extends Vue {
group : "alert" ,
type : "info" ,
title : "Admission info" ,
text : "This is to admit people to the meeting. A '+' symbol means they are not yet admitted and you can admit them. A '-' means you can remove them." ,
text : "This is to register people and admit them to the meeting. A '+' symbol means they are not yet admitted and you can register and admit them. A '-' means you can remove them, but they will stay registered ." ,
} ,
10000 ,
) ;