mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-04-02 12:02:45 +00:00
136 lines
4.6 KiB
JavaScript
136 lines
4.6 KiB
JavaScript
(function() {
|
|
'use strict';
|
|
|
|
function AddressBook(futureAddressBookData) {
|
|
/* DATA IS IMMEDIATELY AVAILABLE */
|
|
if (typeof futureAddressBookData.then !== 'function') {
|
|
angular.extend(this, futureAddressBookData);
|
|
return;
|
|
}
|
|
|
|
/* THE PROMISE WILL BE UNWRAPPED FIRST */
|
|
this.$unwrap(futureAddressBookData);
|
|
}
|
|
|
|
/* THE FACTORY WE'LL USE TO REGISTER WITH ANGULAR */
|
|
AddressBook.$factory = ['$timeout', 'sgSettings', 'sgResource', 'sgContact', function($timeout, Settings, Resource, Contact) {
|
|
angular.extend(AddressBook, {
|
|
$$resource: new Resource(Settings.baseURL),
|
|
$timeout: $timeout,
|
|
$Contact: Contact
|
|
});
|
|
|
|
return AddressBook; // return constructor
|
|
}];
|
|
|
|
/* ANGULAR MODULE REGISTRATION */
|
|
angular.module('SOGo').factory('sgAddressBook', AddressBook.$factory);
|
|
|
|
// AddressBook.$selectedId = function(addressbook_id) {
|
|
// if (addressbook_id) angular.extend(AddressBook, { $selected_id: addressbook_id });
|
|
// console.debug("selected id = " + AddressBook.$selected_id);
|
|
// return AddressBook.$selected_id;
|
|
// };
|
|
|
|
/* Fetch list of contacts */
|
|
AddressBook.$find = function(addressbook_id) {
|
|
var futureAddressBookData = this.$$resource.find(addressbook_id); // should return attributes of addressbook +
|
|
// AddressBook.$selectedId(addressbook_id);
|
|
return new AddressBook(futureAddressBookData);
|
|
};
|
|
|
|
// Instance methods
|
|
|
|
AddressBook.prototype.$id = function() {
|
|
var self = this;
|
|
return this.$futureAddressBookData.then(function(data) {
|
|
return data.id;
|
|
});
|
|
};
|
|
|
|
AddressBook.prototype.$getContact = function(contact_id) {
|
|
var self = this;
|
|
// return this.$futureAddressBookData.then(function(data) {
|
|
// return data.id;
|
|
// }).then(function(addressbook_id) {
|
|
return this.$id().then(function(addressbook_id) {
|
|
var contact = AddressBook.$Contact.$find(addressbook_id, contact_id);
|
|
|
|
AddressBook.$timeout(function() {
|
|
self.contact = contact;
|
|
});
|
|
|
|
return contact.$futureContactData.then(function() {
|
|
return self.contact;
|
|
});
|
|
});
|
|
};
|
|
|
|
AddressBook.prototype.$resetContact = function() {
|
|
this.$getContact(this.contact.id);
|
|
};
|
|
|
|
AddressBook.prototype.$viewerIsActive = function(editMode) {
|
|
return (typeof this.contact != "undefined" && !editMode);
|
|
};
|
|
|
|
// AddressBook.prototype.$getContacts = function() {
|
|
// var self = this;
|
|
|
|
// return AddressBook.$timeout(function() {
|
|
// var contacts = [];
|
|
// angular.forEach(self.contacts, function(addressBookContact, index) {
|
|
// var contact = AddressBook.$Contact.$find(addressBookContact.c_name);
|
|
// angular.extend(contact, addressBookContact); // useless?
|
|
// this.push(contact);
|
|
// }, contacts);
|
|
|
|
// AddressBook.$timeout(function() {
|
|
// self.contacts = contacts;
|
|
// });
|
|
|
|
// var futureContactData = [];
|
|
// angular.forEach(contacts, function(contact, index) {
|
|
// this.push(contact.$futureContactData);
|
|
// }, futureContactData);
|
|
// return this._q.all(futureContactData).then(function() {
|
|
// //self.$$emitter.emit('update');
|
|
// return self.contacts;
|
|
// });
|
|
// });
|
|
// };
|
|
|
|
// Unwrap a promise
|
|
AddressBook.prototype.$unwrap = function(futureAddressBookData) {
|
|
var self = this;
|
|
|
|
this.$futureAddressBookData = futureAddressBookData;
|
|
this.$futureAddressBookData.then(function(data) {
|
|
// The success callback. Calling _.extend from $timeout will wrap it into a try/catch call
|
|
// and return a promise.
|
|
AddressBook.$timeout(function() { angular.extend(self, data); });
|
|
});
|
|
};
|
|
|
|
// $omit returns a sanitized object used to send to the server
|
|
AddressBook.prototype.$omit = function() {
|
|
var addressbook = {};
|
|
angular.forEach(this, function(value, key) {
|
|
if (key != 'constructor' &&
|
|
key != 'contact' &&
|
|
key != 'contacts' &&
|
|
key[0] != '$') {
|
|
addressbook[key] = value;
|
|
}
|
|
});
|
|
console.debug(angular.toJson(addressbook));
|
|
return addressbook;
|
|
};
|
|
|
|
AddressBook.prototype.$save = function() {
|
|
return AddressBook.$$resource.set(this.id, this.$omit()).then(function (data) {
|
|
return data;
|
|
});
|
|
};
|
|
})();
|