From c9703c0f74920cdc2b4e70163210858dad766897 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Tue, 19 Jul 2016 16:31:48 -0400 Subject: [PATCH] (js) Fix refresh after deleting card(s) --- NEWS | 3 +++ .../js/Contacts/AddressBook.service.js | 18 +++++++++++++++--- .../js/Contacts/AddressBookController.js | 6 ++++-- .../js/Contacts/CardController.js | 8 ++------ 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/NEWS b/NEWS index 2ec3e9c9a..2c72331c8 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,9 @@ Enhancements - [web] don't allow to send the message while an upload is in progress - [web] notify when successfuly copied or moved some messages +Bug fixes + - [web] fixed refresh of addressbook when deleting one or many cards + 3.1.4 (2016-07-12) ------------------ diff --git a/UI/WebServerResources/js/Contacts/AddressBook.service.js b/UI/WebServerResources/js/Contacts/AddressBook.service.js index e2e0ac94e..90a6a5f87 100644 --- a/UI/WebServerResources/js/Contacts/AddressBook.service.js +++ b/UI/WebServerResources/js/Contacts/AddressBook.service.js @@ -564,9 +564,21 @@ ids = _.map(cards, function(card) { return card.id; }); return AddressBook.$$resource.post(this.id, 'batchDelete', {uids: ids}).then(function() { - _this.$cards = _.differenceBy(_this.$cards, cards, 'id'); - _.forEach(cards, function(card) { - delete _this.idsMap[card.id]; + // Remove cards from $cards and idsMap + _.forEachRight(_this.$cards, function(card, index) { + var selectedIndex = _.findIndex(ids, function(id) { + return card.id == id; + }); + if (selectedIndex > -1) { + ids.splice(selectedIndex, 1); + delete _this.idsMap[card.id]; + if (_this.isSelectedCard(card.id)) + delete _this.selectedCard; + _this.$cards.splice(index, 1); + } + else { + _this.idsMap[card.id] -= ids.length; + } }); }); }; diff --git a/UI/WebServerResources/js/Contacts/AddressBookController.js b/UI/WebServerResources/js/Contacts/AddressBookController.js index 206ef3949..0b3b1ff68 100644 --- a/UI/WebServerResources/js/Contacts/AddressBookController.js +++ b/UI/WebServerResources/js/Contacts/AddressBookController.js @@ -58,8 +58,10 @@ .then(function() { // User confirmed the deletion var selectedCards = _.filter(vm.selectedFolder.$cards, function(card) { return card.selected; }); - vm.selectedFolder.$deleteCards(selectedCards); - delete vm.selectedFolder.selectedCard; + vm.selectedFolder.$deleteCards(selectedCards).then(function() { + if (!vm.selectedFolder.selectedCard) + $state.go('app.addressbook'); + }); }); } diff --git a/UI/WebServerResources/js/Contacts/CardController.js b/UI/WebServerResources/js/Contacts/CardController.js index 679f2f36a..06b6c5517 100644 --- a/UI/WebServerResources/js/Contacts/CardController.js +++ b/UI/WebServerResources/js/Contacts/CardController.js @@ -91,7 +91,7 @@ } } function close() { - $state.go('app.addressbook', { addressbookId: AddressBook.selectedFolder.id }).then(function() { + $state.go('app.addressbook').then(function() { vm.card = null; delete AddressBook.selectedFolder.selectedCard; }); @@ -118,12 +118,8 @@ { ok: l('Delete') }) .then(function() { // User confirmed the deletion - card.$delete() + AddressBook.selectedFolder.$deleteCards([card]) .then(function() { - // Remove card from addressbook - AddressBook.selectedFolder.$cards = _.reject(AddressBook.selectedFolder.$cards, function(o) { - return o.id == card.id; - }); close(); }, function(data, status) { Dialog.alert(l('Warning'), l('An error occured while deleting the card "%{0}".',