Browse Source

Add ContentViewComponent

pull/6821/head
enisn 6 years ago
parent
commit
fdb55de819
  1. 10
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/ContentDto.cs
  2. 10
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs
  3. 13
      modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs
  4. 7
      modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationModule.cs
  5. 25
      modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs
  6. 55
      modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs
  7. 8
      modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml
  8. 11
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs
  9. 17
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs
  10. 17
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs

10
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/ContentDto.cs

@ -0,0 +1,10 @@
using System;
using Volo.Abp.Application.Dtos;
namespace Volo.CmsKit.Contents
{
public class ContentDto : EntityDto<Guid>
{
public string Value { get; set; }
}
}

10
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs

@ -0,0 +1,10 @@
using System.Threading.Tasks;
using Volo.CmsKit.Contents;
namespace Volo.CmsKit.Contents
{
public interface IContentAppService
{
Task<ContentDto> GetAsync(string entityType, string entityId);
}
}

13
modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs

@ -0,0 +1,13 @@
using AutoMapper;
using Volo.CmsKit.Contents;
namespace Volo.CmsKit.Common.Application.Volo.CmsKit
{
public class CmsKitCommonApplicationAutoMapperProfile : Profile
{
public CmsKitCommonApplicationAutoMapperProfile()
{
CreateMap<Content, ContentDto>();
}
}
}

7
modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationModule.cs

@ -12,5 +12,12 @@ namespace Volo.CmsKit
)]
public class CmsKitCommonApplicationModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpAutoMapperOptions>(options =>
{
options.AddMaps<CmsKitCommonApplicationModule>(validate: true);
});
}
}
}

25
modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Volo.CmsKit.Contents
{
public class ContentAppService : CmsKitAppServiceBase, IContentAppService
{
private readonly IContentRepository _contentRepository;
public ContentAppService(IContentRepository contentRepository)
{
_contentRepository = contentRepository;
}
public async Task<ContentDto> GetAsync(string entityType, string entityId)
{
var entity = await _contentRepository.FindAsync(entityType, entityId); // Tenant???
return ObjectMapper.Map<Content, ContentDto>(entity);
}
}
}

55
modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/ContentViewComponent.cs

@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI;
using Volo.Abp.AspNetCore.Mvc.UI.Widgets;
using Volo.CmsKit.Contents;
using Volo.CmsKit.Web.Contents;
namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents
{
[ViewComponent(Name = "CmsContent")]
public class ContentViewComponent : AbpViewComponent
{
private readonly IContentRenderer contentRenderer;
private readonly IContentAppService contentAppService;
public ContentViewComponent(
IContentRenderer contentRenderer,
IContentAppService contentAppService)
{
this.contentRenderer = contentRenderer;
this.contentAppService = contentAppService;
}
public virtual async Task<IViewComponentResult> InvokeAsync(
string entityType,
string entityId)
{
var content = await contentAppService.GetAsync(entityType, entityId);
var viewModel = new ContentViewModel
{
EntityId = entityId,
EntityType = entityType,
ContentId = content.Id,
Rendered = await contentRenderer.RenderAsync(content.Value)
};
return View("~/Pages/CmsKit/Shared/Components/Contents/Default.cshtml", viewModel);
}
public class ContentViewModel
{
public Guid ContentId { get; set; }
public string EntityType { get; set; }
public string EntityId { get; set; }
public string Rendered { get; set; }
}
}
}

8
modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Shared/Components/Contents/Default.cshtml

@ -0,0 +1,8 @@
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.CmsKit.Localization
@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents
@model ContentViewComponent.ContentViewModel
<div>
@Html.Raw(Model.Rendered)
</div>

11
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentRepository.cs

@ -1,10 +1,17 @@
using System;
using JetBrains.Annotations;
using System;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace Volo.CmsKit.Contents
{
public interface IContentRepository : IBasicRepository<Content, Guid>
{
Task<Content> FindAsync(
[NotNull] string entityType,
[NotNull] string entityId,
Guid? tenantId = null,
CancellationToken cancellationToken = default);
}
}

17
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Contents/EfCoreContentRepository.cs

@ -1,4 +1,6 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.EntityFrameworkCore;
@ -10,5 +12,20 @@ namespace Volo.CmsKit.Contents
public EfCoreContentRepository(IDbContextProvider<ICmsKitDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public Task<Content> FindAsync(
string entityType,
string entityId,
Guid? tenantId = null,
CancellationToken cancellationToken = default)
{
return FindAsync(x =>
!x.IsDeleted &&
x.EntityType == entityType &&
x.EntityId == entityId &&
x.TenantId == tenantId,
cancellationToken: cancellationToken
);
}
}
}

17
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Contents/MongoContentRepository.cs

@ -1,4 +1,6 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
using Volo.CmsKit.Contents;
@ -10,5 +12,20 @@ namespace Volo.CmsKit.MongoDB.Contents
public MongoContentRepository(IMongoDbContextProvider<ICmsKitMongoDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public Task<Content> FindAsync(
string entityType,
string entityId,
Guid? tenantId = null,
CancellationToken cancellationToken = default)
{
return FindAsync(x =>
!x.IsDeleted &&
x.EntityType == entityType &&
x.EntityId == entityId &&
x.TenantId == tenantId,
cancellationToken: cancellationToken
);
}
}
}
Loading…
Cancel
Save