diff options
-rw-r--r-- | js/components/contactDetails/contactDetails_controller.js | 4 | ||||
-rw-r--r-- | js/models/contact_model.js | 2 | ||||
-rw-r--r-- | js/services/addressBook_service.js | 7 | ||||
-rw-r--r-- | js/services/contact_service.js | 23 | ||||
-rw-r--r-- | templates/contactDetails.html | 6 |
5 files changed, 27 insertions, 15 deletions
diff --git a/js/components/contactDetails/contactDetails_controller.js b/js/components/contactDetails/contactDetails_controller.js index 77e16ef1..0132d81a 100644 --- a/js/components/contactDetails/contactDetails_controller.js +++ b/js/components/contactDetails/contactDetails_controller.js @@ -91,7 +91,7 @@ angular.module('contactsApp') ctrl.focus = undefined; }; - ctrl.changeAddressBook = function (addressBook) { - ContactService.moveContact(ctrl.contact, addressBook); + ctrl.changeAddressBook = function (addressBook, oldAddressBook) { + ContactService.moveContact(ctrl.contact, addressBook, oldAddressBook); }; }); diff --git a/js/models/contact_model.js b/js/models/contact_model.js index ece54514..4d418ad8 100644 --- a/js/models/contact_model.js +++ b/js/models/contact_model.js @@ -432,6 +432,8 @@ angular.module('contactsApp') if(angular.isDefined(vCard)) { angular.extend(this.data, vCard); angular.extend(this.props, $filter('vCard2JSON')(this.data.addressData)); + // We do not want to store our addressbook within contacts + delete this.data.addressBook; } else { angular.extend(this.props, { version: [{value: '3.0'}], diff --git a/js/services/addressBook_service.js b/js/services/addressBook_service.js index d754d124..36bb4b16 100644 --- a/js/services/addressBook_service.js +++ b/js/services/addressBook_service.js @@ -108,6 +108,13 @@ angular.module('contactsApp') return DavClient.syncAddressBook(addressBook); }, + addContact: function(contact) { + return contact; + }, + + removeContact: function(contact) { + return contact; + }, toggleState: function(addressBook) { var xmlDoc = document.implementation.createDocument('', '', null); diff --git a/js/services/contact_service.js b/js/services/contact_service.js index 8a1b90c1..f23a7b78 100644 --- a/js/services/contact_service.js +++ b/js/services/contact_service.js @@ -36,7 +36,7 @@ angular.module('contactsApp') var xhrAddressBooks = []; contacts.forEach(function(contact) { // Regroup urls by addressbooks - if(addressBooks.indexOf(contact.data.addressBook) !== -1) { + if(addressBooks.indexOf(contact.addressBook) !== -1) { // Initiate array if no exists xhrAddressBooks[contact.addressBookId] = xhrAddressBooks[contact.addressBookId] || []; xhrAddressBooks[contact.addressBookId].push(contact.data.url); @@ -57,10 +57,11 @@ angular.module('contactsApp') contacts_.map(function(contact) { // Validate some fields if(contact.fix()) { - // Can't use this in those nested functions + // Can't use `this` in those nested functions contactService.update(contact); } contactsCache.put(contact.uid(), contact); + addressBook.contacts.push(contact); }); }); promises.push(promise); @@ -281,11 +282,11 @@ angular.module('contactsApp') } }; - this.moveContact = function(contact, addressBook) { - if (contact.addressBookId === addressBook.displayName) { + this.moveContact = function(contact, addressBook, oldAddressBook) { + if (addressBook !== null && contact.addressBookId === addressBook.displayName) { return; } - if(addressBook.readOnly) { + if (addressBook.readOnly) { OC.Notification.showTemporary(t('contacts', 'You don\'t have permission to write to this addressbook.')); return; } @@ -297,6 +298,8 @@ angular.module('contactsApp') ).then(function(response) { if (response.status === 201 || response.status === 204) { contact.setAddressBook(addressBook); + oldAddressBook.removeContact(contact); + addressBook.addContact(contact); } else { OC.Notification.showTemporary(t('contacts', 'Contact could not be moved.')); } @@ -326,16 +329,15 @@ angular.module('contactsApp') }; this.removeContactsFromAddressbook = function(addressBook, callback) { - angular.forEach(contactsCache.values(), function(contact) { - if (contact.addressBookId === addressBook.displayName) { - contactsCache.remove(contact.uid()); - } + angular.forEach(addressBook.contacts, function(contact) { + contactsCache.remove(contact.uid()); }); callback(); notifyObservers('groupsUpdate'); }; this.appendContactsFromAddressbook = function(addressBook, callback) { + // Addressbook has been initiated but contacts have not been fetched if (addressBook.objects === null) { AddressBookService.sync(addressBook).then(function(addressBook) { contactService.appendContactsFromAddressbook(addressBook, callback); @@ -345,9 +347,10 @@ angular.module('contactsApp') try { var contact = new Contact(addressBook, vcard); contactsCache.put(contact.uid(), contact); + addressBook.contacts.push(contact); } catch(error) { // eslint-disable-next-line no-console - console.log('Invalid contact received: ', vcard); + console.log('Invalid contact received: ', vcard, error); } }); } diff --git a/templates/contactDetails.html b/templates/contactDetails.html index 58a2f2d2..bd773fb3 100644 --- a/templates/contactDetails.html +++ b/templates/contactDetails.html @@ -46,8 +46,9 @@ <div class="select-addressbook" ng-if="ctrl.addressBooks.length > 1 && !ctrl.addressBook.readOnly"> <label for="details-addressbook">{{ctrl.t.addressBook}}</label> - <select ng-model="ctrl.addressBook" ng-change="ctrl.changeAddressBook(ctrl.addressBook)" id="details-addressbook" - ng-options="book.displayName for book in ctrl.addressBooks | filter: {readOnly: false}"> + <select ng-model="ctrl.addressBook" ng-change="ctrl.changeAddressBook(ctrl.addressBook, oldAddressBook)" id="details-addressbook" + ng-options="book.displayName for book in ctrl.addressBooks | filter: {readOnly: false}" + ng-click="oldAddressBook = ctrl.addressBook" ng-init="oldAddressBook = ctrl.addressBook"> </select> </div> <select class="add-field" ng-model="ctrl.field" ng-change="ctrl.addField(ctrl.field)" ng-if="!ctrl.addressBook.readOnly"> @@ -57,4 +58,3 @@ </section> </div> </div> - |