@ -134,8 +134,9 @@ import { Vue, Component, Prop } from "vue-facing-decorator";
import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin" ;
import { SOMEONE_UNNAMED } from "@/constants/entities" ;
import { MemberData } from "@/interfaces" ;
import { setVisibilityUtil , getHeaders } from "@/libs/endorserServer" ;
import { setVisibilityUtil , getHeaders , register } from "@/libs/endorserServer" ;
import { createNotifyHelpers } from "@/utils/notify" ;
import { Contact } from "@/db/tables/contacts" ;
@ Component ( {
mixins : [ PlatformServiceMixin ] ,
@ -253,33 +254,37 @@ export default class BulkMembersDialog extends Vue {
async handleMainAction ( ) {
if ( this . dialogType === "admit" ) {
await this . admitWithVisibility ( ) ;
await this . org anizerA dmitAndAdd WithVisibility( ) ;
} else {
await this . a ddContactWithVisibility( ) ;
await this . memberA ddContactWithVisibility( ) ;
}
}
async admitWithVisibility ( ) {
async org anizerA dmitAndAdd WithVisibility( ) {
try {
const selectedMembers = this . membersData . filter ( ( member ) =>
const selectedMembers : MemberData [ ] = this . membersData . filter ( ( member ) =>
this . selectedMembers . includes ( member . did ) ,
) ;
const notSelectedMembers = this . membersData . filter (
const notSelectedMembers : MemberData [ ] = this . membersData . filter (
( member ) => ! this . selectedMembers . includes ( member . did ) ,
) ;
let admittedCount = 0 ;
let contactAddedCount = 0 ;
let errors = 0 ;
for ( const member of selectedMembers ) {
try {
/ / F i r s t , a d m i t t h e m e m b e r
await this . admitMember ( member ) ;
/ / R e g i s t e r t h e m
await this . registerMember ( member ) ;
admittedCount ++ ;
/ / I f t h e y ' r e n o t a c o n t a c t y e t , a d d t h e m a s a c o n t a c t
if ( ! member . isContact ) {
await this . addAsContact ( member ) ;
await this . addAsContact ( member , true ) ;
contactAddedCount ++ ;
}
@ -289,19 +294,33 @@ export default class BulkMembersDialog extends Vue {
/ / e s l i n t - d i s a b l e - n e x t - l i n e n o - c o n s o l e
console . error ( ` Error processing member ${ member . did } : ` , error ) ;
/ / C o n t i n u e w i t h o t h e r m e m b e r s e v e n i f o n e f a i l s
errors ++ ;
}
}
/ / S h o w s u c c e s s n o t i f i c a t i o n
this . $notify (
{
group : "alert" ,
type : "success" ,
title : "Members Admitted Successfully" ,
text : ` ${ admittedCount } member ${ admittedCount === 1 ? "" : "s" } admitted ${ contactAddedCount === 0 ? "" : admittedCount === contactAddedCount ? " and" : ` , ${ contactAddedCount } ` } ${ contactAddedCount === 0 ? "" : ` added as contact ${ contactAddedCount === 1 ? "" : "s" } ` } . ` ,
} ,
10000 ,
) ;
if ( admittedCount > 0 ) {
this . $notify (
{
group : "alert" ,
type : "success" ,
title : "Members Admitted Successfully" ,
text : ` ${ admittedCount } member ${ admittedCount === 1 ? "" : "s" } admitted and registered ${ contactAddedCount === 0 ? "" : admittedCount === contactAddedCount ? " and" : ` , ${ contactAddedCount } ` } ${ contactAddedCount === 0 ? "" : ` added as contact ${ contactAddedCount === 1 ? "" : "s" } ` } . ` ,
} ,
10000 ,
) ;
}
if ( errors > 0 ) {
this . $notify (
{
group : "alert" ,
type : "danger" ,
title : "Error" ,
text : "Failed to fully admit some members. Work with them individually below." ,
} ,
5000 ,
) ;
}
this . close ( notSelectedMembers . map ( ( member ) => member . did ) ) ;
} catch ( error ) {
@ -312,19 +331,19 @@ export default class BulkMembersDialog extends Vue {
group : "alert" ,
type : "danger" ,
title : "Error" ,
text : "Failed to admit some members. Please try again ." ,
text : "Some errors occurred. Work with members individually below ." ,
} ,
5000 ,
) ;
}
}
async a ddContactWithVisibility( ) {
async memberA ddContactWithVisibility( ) {
try {
const selectedMembers = this . membersData . filter ( ( member ) =>
const selectedMembers : MemberData [ ] = this . membersData . filter ( ( member ) =>
this . selectedMembers . includes ( member . did ) ,
) ;
const notSelectedMembers = this . membersData . filter (
const notSelectedMembers : MemberData [ ] = this . membersData . filter (
( member ) => ! this . selectedMembers . includes ( member . did ) ,
) ;
@ -334,7 +353,7 @@ export default class BulkMembersDialog extends Vue {
try {
/ / I f t h e y ' r e n o t a c o n t a c t y e t , a d d t h e m a s a c o n t a c t f i r s t
if ( ! member . isContact ) {
await this . addAsContact ( member ) ;
await this . addAsContact ( member , undefined ) ;
contactsAddedCount ++ ;
}
@ -367,7 +386,7 @@ export default class BulkMembersDialog extends Vue {
group : "alert" ,
type : "danger" ,
title : "Error" ,
text : "Failed to add some members as contacts. Please try again ." ,
text : "Some errors occurred. Work with members individually below ." ,
} ,
5000 ,
) ;
@ -393,11 +412,39 @@ export default class BulkMembersDialog extends Vue {
}
}
async addAsContact ( member : { did : string ; name : string } ) {
async registerMember ( member : MemberData ) {
try {
const contact : Contact = { did : member . did } ;
const result = await register (
this . activeDid ,
this . apiServer ,
this . axios ,
contact ,
) ;
if ( result . success ) {
if ( result . embeddedRecordError ) {
throw new Error ( result . embeddedRecordError ) ;
}
await this . $updateContact ( member . did , { registered : true } ) ;
} else {
throw result ;
}
} catch ( err ) {
/ / e s l i n t - d i s a b l e - n e x t - l i n e n o - c o n s o l e
console . error ( "Error registering member:" , err ) ;
throw err ;
}
}
async addAsContact (
member : { did : string ; name : string } ,
isRegistered ? : boolean ,
) {
try {
const newContact = {
const newContact : Contact = {
did : member . did ,
name : member . name ,
registered : isRegistered ,
} ;
await this . $insertContact ( newContact ) ;