public override object ConvertIntermediateToObject(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) { var jsonObject = JsonConvert.DeserializeObject <JObject>((string)inter); if (jsonObject == null) { return(null); } jsonObject["ncContentTypeAlias"] = jsonObject["elementType"]?.ToObject <string>(); return(_nestedContentSingleValueConverter.ConvertIntermediateToObject(owner, propertyType, referenceCacheLevel, "[" + jsonObject?.ToString() + "]", preview) as IPublishedElement); }
public override object ConvertIntermediateToObject(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) { ContentBlocksModelValue modelValue = _deserializer.Deserialize(inter?.ToString()); if (modelValue == null) { return(Rendering.ContentBlocks.Empty); } var config = propertyType.DataType.ConfigurationAs <ContentBlocksConfiguration>(); var header = config.Structure.HasFlag(Structure.Header) ? createViewModel(modelValue.Header) : null; var blocks = config.Structure.HasFlag(Structure.Blocks) ? modelValue.Blocks.Select(createViewModel).Where(rm => rm != null).ToList() : Enumerable.Empty <IContentBlockViewModel>(); return(new Rendering.ContentBlocks { Header = header, Blocks = blocks }); IContentBlockViewModel createViewModel(ContentBlockModelValue block) { if (block == null || block.IsDisabled) { return(null); } IContentBlockDefinitionRepository definitionRepository = Current.Factory.GetInstance <IContentBlockDefinitionRepository>(); if (definitionRepository == null) { return(null); } IContentBlockDefinition definition = definitionRepository.GetById(block.DefinitionId); if (definition == null || definition.Layouts == null || definition.Layouts.Any() == false) { return(null); } IContentBlockLayout layout = definition.Layouts.FirstOrDefault(l => l.Id == block.LayoutId); if (layout == null) { return(null); } IPublishedElement content = _nestedContentSingleValueConverter.ConvertIntermediateToObject(owner, propertyType, referenceCacheLevel, block?.Content?.ToString(), preview) as IPublishedElement; if (content == null) { return(null); } var contentType = content.GetType(); var genericViewModelFactoryType = typeof(IContentBlockViewModelFactory <>).MakeGenericType(new[] { contentType }); var viewModelFactory = Current.Factory.GetInstance(genericViewModelFactoryType) as IContentBlockViewModelFactory; if (viewModelFactory == null) { return(null); } return(viewModelFactory.Create(content, block.Id, block.DefinitionId, block.LayoutId)); } }