(js) Add caching of cards

pull/105/head
Francis Lachapelle 2015-08-27 15:55:56 -04:00
parent 1667f8879d
commit c9d9f7b47a
2 changed files with 31 additions and 20 deletions

View File

@ -471,8 +471,25 @@
* @returns a promise of the HTTP operation
*/
AddressBook.prototype.$getCard = function(cardId) {
var _this = this;
return this.$id().then(function(addressbookId) {
return AddressBook.$Card.$find(addressbookId, cardId);
var fullCard,
cachedCard = _.find(_this.cards, function(data) {
return cardId == data.id;
});
if (cachedCard && cachedCard.$futureCardData)
// Full card is available
return cachedCard;
fullCard = AddressBook.$Card.$find(addressbookId, cardId);
fullCard.$id().then(function(cardId) {
// Extend the Card object of the addressbook list with the full card description
if (cachedCard)
angular.extend(cachedCard, fullCard);
});
return fullCard;
});
};

View File

@ -447,26 +447,20 @@
var _this = this;
// Expose the promise
this.$futureCardData = futureCardData;
// Resolve the promise
this.$futureCardData.then(function(data) {
// Calling $timeout will force Angular to refresh the view
return Card.$timeout(function() {
_this.init(data);
// Instanciate Card objects for list members
angular.forEach(_this.refs, function(o, i) {
if (o.email) o.emails = [{value: o.email}];
o.id = o.reference;
_this.refs[i] = new Card(o);
});
if (_this.birthday) {
_this.birthday = new Date(_this.birthday * 1000);
}
// Make a copy of the data for an eventual reset
_this.$shadowData = _this.$omit(true);
return _this;
this.$futureCardData = futureCardData.then(function(data) {
_this.init(data);
// Instanciate Card objects for list members
angular.forEach(_this.refs, function(o, i) {
if (o.email) o.emails = [{value: o.email}];
o.id = o.reference;
_this.refs[i] = new Card(o);
});
if (_this.birthday) {
_this.birthday = new Date(_this.birthday * 1000);
}
// Make a copy of the data for an eventual reset
_this.$shadowData = _this.$omit(true);
return _this;
});
};