From 52de32e65d418e49d310566c6960086adeb4ccfe Mon Sep 17 00:00:00 2001 From: Vincent Date: Wed, 13 May 2020 05:08:23 +1000 Subject: [PATCH] filtering w comments --- js/views/create_group_dialog_view.js | 40 +++++++++++++++------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/js/views/create_group_dialog_view.js b/js/views/create_group_dialog_view.js index 83cb6c598..d2208002c 100644 --- a/js/views/create_group_dialog_view.js +++ b/js/views/create_group_dialog_view.js @@ -153,8 +153,6 @@ if (!Array.isArray(this.existingMembers)) { this.existingMembers = []; } - - console.log('[vince] UpdateGroupMembersDialogView this AFTER', this); } this.$el.focus(); @@ -181,35 +179,36 @@ this.$el.append(this.dialogView.el); return this; }, - onSubmit(newMembers) { + async onSubmit(newMembers) { const ourPK = textsecure.storage.user.getNumber(); const allMembers = window.Lodash.concat(newMembers, [ourPK]); - - // We need to NOT trigger an group update if the list of member is the same. const notPresentInOld = allMembers.filter( m => !this.existingMembers.includes(m) ); - // Filter out all linked devices for cases in which one device - // exists in group, but hasn't yet synced with its other devices. const notPresentInNew = this.existingMembers.filter( m => !allMembers.includes(m) ); - // Get all devices for notPresentInNew - const allDevicesOfMembersToRemove = []; - notPresentInNew.forEach(async member => { - const pairedDevices = await libloki.storage.getPairedDevicesFor(member); - allDevicesOfMembersToRemove.push(member, ...pairedDevices); - }); - const allToRemove = allDevicesOfMembersToRemove.filter( - m => this.existingMembers.includes(m) - ); + // Filter out all linked devices for cases in which one device + // exists in group, but hasn't yet synced with its other devices. + const getDevicesForRemoved = async () => { + const promises = notPresentInNew.map(member => libloki.storage.getPairedDevicesFor(member)); + const devices = window.Lodash.flatten(await Promise.all(promises)); + + return devices; + } - // would be easer with _.xor but for some reason we do not have it + // Get all devices for notPresentInNew + const allDevicesOfMembersToRemove = await getDevicesForRemoved(); + + // If any extra devices of removed exist in newMembers, ensure that you filter them + const filteredMemberes = allMembers.filter(member => !(window.Lodash.includes(allDevicesOfMembersToRemove, member))); + + // Would be easer with _.xor but for some reason we do not have it const xor = notPresentInNew.concat(notPresentInOld); if (xor.length === 0) { window.console.log( @@ -224,14 +223,17 @@ console.log('[vince] notPresentInOld:', notPresentInOld); console.log('[vince] notPresentInNew:', notPresentInNew); console.log('[vince] xor:', xor); - console.log('[vince] allToRemove:', allToRemove); + + console.log('[vince] filteredMemberes:', filteredMemberes); alert('returning earlyyyy'); + + // window.doUpdateGroup( // this.groupId, // this.groupName, - // allMembers, + // filteredMemberes, // this.avatarPath // ); },