2017-09-15 13:39:18 -04:00
|
|
|
angular.module('umbraco.services').factory('archetypeCacheService', function (archetypePropertyEditorResource, $q, entityResource) {
|
2015-06-01 10:13:29 -04:00
|
|
|
//private
|
|
|
|
|
var entityCache = [];
|
|
|
|
|
var datatypeCache = [];
|
2017-09-13 18:18:29 -04:00
|
|
|
|
2015-06-01 10:13:29 -04:00
|
|
|
return {
|
2017-09-13 18:18:29 -04:00
|
|
|
initialize: function() {
|
|
|
|
|
return archetypePropertyEditorResource.getAllDataTypesForCache().then(function(data) {
|
2017-09-19 08:52:51 -04:00
|
|
|
_.each(data, function(datatype) {
|
|
|
|
|
datatypeCache[datatype.dataTypeGuid] = datatype;
|
|
|
|
|
});
|
2017-09-13 18:18:29 -04:00
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
getDataTypeFromCache: function(guid) {
|
2017-09-19 08:52:51 -04:00
|
|
|
return datatypeCache[guid];
|
2017-09-13 18:18:29 -04:00
|
|
|
},
|
2015-06-01 11:16:12 -04:00
|
|
|
|
2017-09-13 18:18:29 -04:00
|
|
|
getDatatypeByGuid: function(guid) {
|
|
|
|
|
var cachedDatatype = this.getDataTypeFromCache(guid);
|
|
|
|
|
|
|
|
|
|
if(cachedDatatype) {
|
|
|
|
|
return cachedDatatype;
|
|
|
|
|
}
|
2015-06-01 10:13:29 -04:00
|
|
|
|
2017-09-13 18:18:29 -04:00
|
|
|
return null;
|
2015-06-01 10:13:29 -04:00
|
|
|
},
|
2015-06-01 11:16:12 -04:00
|
|
|
|
2017-09-15 13:39:18 -04:00
|
|
|
getEntityById: function(id, type) {
|
2017-09-15 10:58:04 -04:00
|
|
|
var deferred = $q.defer();
|
|
|
|
|
|
2017-09-19 08:52:51 -04:00
|
|
|
//console.log(entityCache);
|
|
|
|
|
|
|
|
|
|
var cachedEntity = entityCache[id];
|
2015-06-01 10:13:29 -04:00
|
|
|
|
2017-09-13 18:18:29 -04:00
|
|
|
if(cachedEntity) {
|
2017-09-19 08:52:51 -04:00
|
|
|
//console.log("Found ID " + id);
|
|
|
|
|
|
2017-09-15 10:58:04 -04:00
|
|
|
deferred.resolve(cachedEntity);
|
|
|
|
|
|
|
|
|
|
return deferred.promise;
|
2017-09-13 18:18:29 -04:00
|
|
|
}
|
2015-06-01 10:13:29 -04:00
|
|
|
|
2017-09-13 18:18:29 -04:00
|
|
|
//go get it from server
|
2017-09-15 13:39:18 -04:00
|
|
|
entityResource.getById(id, type).then(function(entity) {
|
2017-09-19 08:52:51 -04:00
|
|
|
entityCache[id] = entity;
|
2017-09-15 10:58:04 -04:00
|
|
|
|
2017-09-19 08:52:51 -04:00
|
|
|
//console.log("entity ID is now resolved into cache...");
|
|
|
|
|
//console.log(entityCache);
|
2017-09-15 10:58:04 -04:00
|
|
|
|
|
|
|
|
deferred.resolve(entity);
|
2017-09-13 21:56:43 -04:00
|
|
|
});
|
2015-06-01 10:13:29 -04:00
|
|
|
|
2017-09-15 10:58:04 -04:00
|
|
|
return deferred.promise;
|
2017-09-13 18:18:29 -04:00
|
|
|
},
|
2015-06-01 10:13:29 -04:00
|
|
|
|
2017-09-13 21:56:43 -04:00
|
|
|
//perhaps this should return a promise?
|
2017-09-15 13:39:18 -04:00
|
|
|
getEntityByUmbracoId: function(udi, type) {
|
2017-09-15 10:58:04 -04:00
|
|
|
var deferred = $q.defer();
|
|
|
|
|
|
2017-09-19 08:52:51 -04:00
|
|
|
var cachedEntity = entityCache[udi];
|
2017-06-08 09:02:31 +02:00
|
|
|
|
2017-09-13 18:18:29 -04:00
|
|
|
if(cachedEntity) {
|
2017-09-19 08:52:51 -04:00
|
|
|
//console.log("Found UDI " + udi);
|
|
|
|
|
|
2017-09-15 10:58:04 -04:00
|
|
|
deferred.resolve(cachedEntity);
|
|
|
|
|
|
|
|
|
|
return deferred.promise;
|
2017-09-13 18:18:29 -04:00
|
|
|
}
|
2017-06-08 09:02:31 +02:00
|
|
|
|
2017-09-13 18:18:29 -04:00
|
|
|
//go get it from server
|
2017-09-15 13:39:18 -04:00
|
|
|
entityResource.getByIds([udi], type).then(function (entities) {
|
2017-09-15 10:58:04 -04:00
|
|
|
// prevent infinite lookups with a default entity
|
|
|
|
|
var entity = entities.length > 0 ? entities[0] : { udi: udi, name: "" };
|
2017-06-08 09:02:31 +02:00
|
|
|
|
2017-09-19 08:52:51 -04:00
|
|
|
entityCache[udi] = entity;
|
|
|
|
|
|
|
|
|
|
//console.log("entity UDI is now resolved into cache...");
|
|
|
|
|
//console.log(entityCache);
|
2017-06-08 09:02:31 +02:00
|
|
|
|
2017-09-15 10:58:04 -04:00
|
|
|
deferred.resolve(entity);
|
2017-09-13 21:56:43 -04:00
|
|
|
});
|
2017-06-08 09:02:31 +02:00
|
|
|
|
2017-09-15 10:58:04 -04:00
|
|
|
return deferred.promise;
|
2017-09-13 18:18:29 -04:00
|
|
|
}
|
2015-06-01 10:13:29 -04:00
|
|
|
}
|
|
|
|
|
});
|