diff --git a/Gruntfile.js b/Gruntfile.js index e0fd03e..c0b9ac2 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -62,7 +62,8 @@ module.exports = function(grunt) { 'app/helpers/labelhelpers.js', 'app/resources/propertyeditor.js', 'app/services/archetypeService.js', - 'app/services/archetypeLabelService.js' + 'app/services/archetypeLabelService.js', + 'app/services/archetypeCacheService.js' ], dest: '<%= basePath %>/js/archetype.js' } diff --git a/app/services/archetypeCacheService.js b/app/services/archetypeCacheService.js new file mode 100644 index 0000000..4e77d0c --- /dev/null +++ b/app/services/archetypeCacheService.js @@ -0,0 +1,63 @@ +angular.module('umbraco.services').factory('archetypeCacheService', function (archetypePropertyEditorResource) { + //private + + var isEntityLookupLoading = false; + var entityCache = []; + var isDatatypeLookupLoading = false; + var datatypeCache = []; + + return { + getDatatypeByGuid: function(guid) { + var cachedDatatype = _.find(datatypeCache, function (dt){ + return dt.dataTypeGuid == guid; + }); + + if(cachedDatatype) { + return cachedDatatype; + } + + //go get it from server + if (!isDatatypeLookupLoading) { + isDatatypeLookupLoading = true; + + archetypePropertyEditorResource.getDataType(guid).then(function(datatype) { + + datatype.dataTypeGuid = guid; + + datatypeCache.push(datatype); + + isDatatypeLookupLoading = false; + + return datatype; + }); + } + + return null; + }, + getEntityById: function(scope, id, type) { + var cachedEntity = _.find(entityCache, function (e){ + return e.id == id; + }); + + if(cachedEntity) { + return cachedEntity; + } + + //go get it from server + if (!isEntityLookupLoading) { + isEntityLookupLoading = true; + + scope.resources.entityResource.getById(id, type).then(function(entity) { + + entityCache.push(entity); + + isEntityLookupLoading = false; + + return entity; + }); + } + + return null; + } + } +}); \ No newline at end of file diff --git a/app/services/archetypeLabelService.js b/app/services/archetypeLabelService.js index 94458f8..56b9e4a 100644 --- a/app/services/archetypeLabelService.js +++ b/app/services/archetypeLabelService.js @@ -1,4 +1,4 @@ -angular.module('umbraco.services').factory('archetypeLabelService', function (archetypePropertyEditorResource) { +angular.module('umbraco.services').factory('archetypeLabelService', function (archetypeCacheService) { //private var isEntityLookupLoading = false; @@ -109,7 +109,7 @@ angular.module('umbraco.services').factory('archetypeLabelService', function (ar }); if(propertyConfig) { - var datatype = this.getDatatypeByGuid(propertyConfig.dataTypeGuid); + var datatype = archetypeCacheService.getDatatypeByGuid(propertyConfig.dataTypeGuid); if(datatype) { //console.log(datatype); @@ -136,58 +136,6 @@ angular.module('umbraco.services').factory('archetypeLabelService', function (ar return parsedTemplate; }, - getDatatypeByGuid: function(guid) { - var cachedDatatype = _.find(datatypeCache, function (dt){ - return dt.dataTypeGuid == guid; - }); - - if(cachedDatatype) { - return cachedDatatype; - } - - //go get it from server - if (!isDatatypeLookupLoading) { - isDatatypeLookupLoading = true; - - archetypePropertyEditorResource.getDataType(guid).then(function(datatype) { - - datatype.dataTypeGuid = guid; - - datatypeCache.push(datatype); - - isDatatypeLookupLoading = false; - - return datatype; - }); - } - - return null; - }, - getEntityById: function(scope, id, type) { - var cachedEntity = _.find(entityCache, function (e){ - return e.id == id; - }); - - if(cachedEntity) { - return cachedEntity; - } - - //go get it from server - if (!isEntityLookupLoading) { - isEntityLookupLoading = true; - - scope.resources.entityResource.getById(id, type).then(function(entity) { - - entityCache.push(entity); - - isEntityLookupLoading = false; - - return entity; - }); - } - - return null; - }, urlPicker: function(value, scope, args) { if(!args.propertyName) { @@ -199,13 +147,13 @@ angular.module('umbraco.services').factory('archetypeLabelService', function (ar switch (value.type) { case "content": if(value.typeData.contentId) { - entity = this.getEntityById(scope, value.typeData.contentId, "Document"); + entity = archetypeCacheService.getEntityById(scope, value.typeData.contentId, "Document"); } break; case "media": if(value.typeData.mediaId) { - entity = this.getEntityById(scope, value.typeData.mediaId, "Media"); + entity = archetypeCacheService.getEntityById(scope, value.typeData.mediaId, "Media"); } break;