@ -66,16 +66,6 @@
Refresh
< span class = "text-xs" > ( { { countdownTimer } } s ) < / span >
< / button >
< button
v - if = "getMembersForVisibility().length > 0"
class = "text-sm bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-3 py-1.5 rounded-md"
title = "Set visibility for meeting members"
@ click = "showSetBulkVisibilityDialog"
>
< font -awesome icon = "eye" / >
Set Visibility
< / button >
< / div >
< ul
v - if = "membersToShow().length > 0"
@ -163,16 +153,6 @@
Refresh
< span class = "text-xs" > ( { { countdownTimer } } s ) < / span >
< / button >
< button
v - if = "getMembersForVisibility().length > 0"
class = "text-sm bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-3 py-1.5 rounded-md"
title = "Set visibility for meeting members"
@ click = "showSetBulkVisibilityDialog"
>
< font -awesome icon = "eye" / >
Set Visibility
< / button >
< / div >
< p v-if ="members.length === 0" class="text-gray-500 py-4" >
@ -272,6 +252,9 @@ export default class MembersList extends Vue {
autoRefreshInterval : NodeJS . Timeout | null = null ;
lastRefreshTime = 0 ;
/ / T r a c k p r e v i o u s v i s i b i l i t y m e m b e r s t o d e t e c t c h a n g e s
previousVisibilityMembers : string [ ] = [ ] ;
/ * *
* Get the unnamed member constant
* /
@ -296,12 +279,18 @@ export default class MembersList extends Vue {
/ / S t a r t a u t o - r e f r e s h
this . startAutoRefresh ( ) ;
/ / C h e c k i f w e s h o u l d s h o w t h e v i s i b i l i t y d i a l o g o n i n i t i a l l o a d
this . checkAndShowVisibilityDialog ( ) ;
}
async refreshData ( ) {
/ / F o r c e r e f r e s h b o t h c o n t a c t s a n d m e m b e r s
await this . loadContacts ( ) ;
await this . fetchMembers ( ) ;
/ / C h e c k i f w e s h o u l d s h o w t h e v i s i b i l i t y d i a l o g a f t e r r e f r e s h
this . checkAndShowVisibilityDialog ( ) ;
}
async fetchMembers ( ) {
@ -456,6 +445,55 @@ export default class MembersList extends Vue {
} ) ) ;
}
/ * *
* Check if we should show the visibility dialog
* Returns true if there are members for visibility and either :
* - This is the first time ( no previous members tracked ) , OR
* - New members have been added since last check ( not removed )
* /
shouldShowVisibilityDialog ( ) : boolean {
const currentMembers = this . getMembersForVisibility ( ) ;
if ( currentMembers . length === 0 ) {
return false ;
}
/ / I f n o p r e v i o u s m e m b e r s t r a c k e d , s h o w d i a l o g
if ( this . previousVisibilityMembers . length === 0 ) {
return true ;
}
/ / C h e c k i f n e w m e m b e r s h a v e b e e n a d d e d ( n o t j u s t a n y c h a n g e )
const currentMemberIds = currentMembers . map ( ( m ) => m . did ) ;
const previousMemberIds = this . previousVisibilityMembers ;
/ / F i n d n e w m e m b e r s ( m e m b e r s i n c u r r e n t b u t n o t i n p r e v i o u s )
const newMembers = currentMemberIds . filter (
( id ) => ! previousMemberIds . includes ( id ) ,
) ;
/ / O n l y s h o w d i a l o g i f t h e r e a r e n e w m e m b e r s a d d e d
return newMembers . length > 0 ;
}
/ * *
* Update the tracking of previous visibility members
* /
updatePreviousVisibilityMembers ( ) {
const currentMembers = this . getMembersForVisibility ( ) ;
this . previousVisibilityMembers = currentMembers . map ( ( m ) => m . did ) ;
}
/ * *
* Show the visibility dialog if conditions are met
* /
checkAndShowVisibilityDialog ( ) {
if ( this . shouldShowVisibilityDialog ( ) ) {
this . showSetBulkVisibilityDialog ( ) ;
}
this . updatePreviousVisibilityMembers ( ) ;
}
checkWhetherContactBeforeAdmitting ( decrMember : DecryptedMember ) {
const contact = this . getContactFor ( decrMember . did ) ;
if ( ! decrMember . member . admitted && ! contact ) {
@ -616,7 +654,7 @@ export default class MembersList extends Vue {
if ( timeSinceLastRefresh >= 10 ) {
/ / T i m e t o r e f r e s h
this . fetchMembers ( ) ;
this . refreshData ( ) ;
this . lastRefreshTime = now ;
this . countdownTimer = 10 ;
} else {
@ -644,8 +682,13 @@ export default class MembersList extends Vue {
}
/ / T r i g g e r i m m e d i a t e r e f r e s h a n d r e s t a r t t i m e r
this . fetchMembers ( ) ;
this . refreshData ( ) ;
this . startAutoRefresh ( ) ;
/ / A l w a y s s h o w d i a l o g o n m a n u a l r e f r e s h i f t h e r e a r e m e m b e r s f o r v i s i b i l i t y
if ( this . getMembersForVisibility ( ) . length > 0 ) {
this . showSetBulkVisibilityDialog ( ) ;
}
}
/ / S e t V i s i b i l i t y D i a l o g m e t h o d s