Browse Source

CmsKit - Implement Page selection at MenuItem

pull/9261/head
Enis Necipoğlu 5 years ago
parent
commit
ffe8f0da8a
  1. 1
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs
  2. 1
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs
  3. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/IPageAdminAppService.cs
  4. 12
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageLookupDto.cs
  5. 1
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs
  6. 9
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs
  7. 17
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs
  8. 8
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs
  9. 29
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml
  10. 6
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs
  11. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml
  12. 26
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml
  13. 3
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs
  14. 52
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js
  15. 4
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js
  16. 52
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js
  17. 4
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  18. 4
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json
  19. 26
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs

1
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs

@ -14,7 +14,6 @@ namespace Volo.CmsKit.Admin.Menus
public bool IsActive { get; set; }
[Required]
public string Url { get; set; }
public string Icon { get; set; }

1
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs

@ -10,7 +10,6 @@ namespace Volo.CmsKit.Admin.Menus
public bool IsActive { get; set; }
[Required]
public string Url { get; set; }
public string Icon { get; set; }

2
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/IPageAdminAppService.cs

@ -1,5 +1,6 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Content;
@ -7,5 +8,6 @@ namespace Volo.CmsKit.Admin.Pages
{
public interface IPageAdminAppService : ICrudAppService<PageDto, PageDto, Guid, GetPagesInputDto, CreatePageInputDto, UpdatePageInputDto>
{
Task<PagedResultDto<PageLookupDto>> GetLookupAsync(GetPagesInputDto input);
}
}

12
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Pages/PageLookupDto.cs

@ -0,0 +1,12 @@
using System;
using Volo.Abp.Application.Dtos;
namespace Volo.CmsKit.Admin.Pages
{
public class PageLookupDto : EntityDto<Guid>
{
public string Title { get; set; }
public string Slug { get; set; }
}
}

1
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs

@ -27,6 +27,7 @@ namespace Volo.CmsKit.Admin
.Ignore(x => x.Author);
CreateMap<Page, PageDto>();
CreateMap<Page, PageLookupDto>();
CreateMap<BlogPost, BlogPostDto>(MemberList.Destination);
CreateMap<BlogPost, BlogPostListDto>()

9
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs

@ -2,7 +2,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices.ComTypes;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
@ -103,7 +102,7 @@ namespace Volo.CmsKit.Admin.Menus
GuidGenerator.Create(),
menuId,
input.DisplayName,
input.Url,
input.Url.IsNullOrEmpty() ? "#" : input.Url,
input.IsActive,
input.ParentId,
input.Icon,
@ -113,6 +112,12 @@ namespace Volo.CmsKit.Admin.Menus
input.CssClass,
input.RequiredPermissionName);
if (input.PageId.HasValue)
{
var page = await PageRepository.GetAsync(input.PageId.Value);
MenuManager.SetPageUrl(menuItem, page);
}
menu.Items.Add(menuItem);
MenuManager.OrganizeTreeOrderForMenuItem(menu, menuItem);

17
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs

@ -82,5 +82,22 @@ namespace Volo.CmsKit.Admin.Pages
{
await PageRepository.DeleteAsync(id);
}
public virtual async Task<PagedResultDto<PageLookupDto>> GetLookupAsync(GetPagesInputDto input)
{
var count = await PageRepository.GetCountAsync(input.Filter);
var pages = await PageRepository.GetListAsync(
input.Filter,
input.MaxResultCount,
input.SkipCount,
input.Sorting
);
return new PagedResultDto<PageLookupDto>(
count,
ObjectMapper.Map<List<Page>, List<PageLookupDto>>(pages)
);
}
}
}

8
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs

@ -59,5 +59,13 @@ namespace Volo.CmsKit.Admin.Pages
{
return PageAdminAppService.DeleteAsync(id);
}
[HttpGet]
[Route("lookup")]
[AllowAnonymous] // TODO: Find a way to get lookup
public virtual Task<PagedResultDto<PageLookupDto>> GetLookupAsync(GetPagesInputDto input)
{
return PageAdminAppService.GetLookupAsync(input);
}
}
}

29
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml

@ -12,12 +12,35 @@
Layout = null;
}
<abp-dynamic-form abp-model="ViewModel" asp-page="/CmsKit/Menus/MenuItems/CreateModal">
<form asp-page="/CmsKit/Menus/MenuItems/CreateModal">
<abp-modal>
<abp-modal-header title="@L["New"].Value"></abp-modal-header>
<abp-modal-body>
<abp-form-content />
<div class="form-group">
<label asp-for="ViewModel.PageId"></label>
<select class="form-control" asp-for="ViewModel.PageId"></select>
<span asp-validation-for="ViewModel.PageId"></span>
</div>
<abp-button id="page-id-clear-button" button-type="Outline_Danger" text="@L["Clear"]"/>
<hr/>
<abp-input asp-for="ViewModel.MenuId"/>
<abp-input asp-for="ViewModel.ParentId"/>
<abp-input asp-for="ViewModel.DisplayName"/>
<abp-input asp-for="ViewModel.IsActive"/>
<abp-input asp-for="ViewModel.Url"/>
<abp-input asp-for="ViewModel.Icon"/>
<abp-input asp-for="ViewModel.Order"/>
<abp-input asp-for="ViewModel.Target"/>
<abp-input asp-for="ViewModel.ElementId"/>
<abp-input asp-for="ViewModel.CssClass"/>
<abp-input asp-for="ViewModel.RequiredPermissionName"/>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel | AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>
</abp-dynamic-form>
</form>

6
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs

@ -6,6 +6,7 @@ using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form;
using Volo.CmsKit.Admin.Menus;
namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems
@ -53,10 +54,9 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems
public string DisplayName { get; set; }
public bool IsActive { get; set; }
[Required]
public string Url { get; set; }
public Guid? PageId { get; set; }
public string Icon { get; set; }

2
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml

@ -28,6 +28,8 @@
<abp-script-bundle name="@typeof(IndexModel).FullName">
<abp-style type="typeof(JsTreeScriptContributor)"/>
<abp-script src="/Pages/CmsKit/Menus/MenuItems/index.js"/>
<abp-script src="/Pages/CmsKit/Menus/MenuItems/createModal.js"/>
<abp-script src="/Pages/CmsKit/Menus/MenuItems/updateModal.js"/>
</abp-script-bundle>
}

26
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml

@ -12,14 +12,34 @@
Layout = null;
}
<abp-dynamic-form abp-model="ViewModel" asp-page="/CmsKit/Menus/MenuItems/UpdateModal">
<form asp-page="/CmsKit/Menus/MenuItems/UpdateModal">
<abp-modal>
<abp-modal-header title="@L["New"].Value"></abp-modal-header>
<abp-modal-body>
<abp-input asp-for="MenuId"/>
<abp-input asp-for="Id"/>
<abp-form-content/>
<div class="form-group">
<label asp-for="ViewModel.PageId"></label>
<select class="form-control" asp-for="ViewModel.PageId"></select>
<span asp-validation-for="ViewModel.PageId"></span>
</div>
<abp-button id="page-id-clear-button" button-type="Outline_Danger" text="@L["Clear"]"/>
<hr/>
<abp-input asp-for="ViewModel.DisplayName"/>
<abp-input asp-for="ViewModel.IsActive"/>
<abp-input asp-for="ViewModel.Url"/>
<abp-input asp-for="ViewModel.Icon"/>
<abp-input asp-for="ViewModel.Target"/>
<abp-input asp-for="ViewModel.ElementId"/>
<abp-input asp-for="ViewModel.CssClass"/>
<abp-input asp-for="ViewModel.RequiredPermissionName"/>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel | AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>
</abp-dynamic-form>
</form>

3
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs

@ -52,8 +52,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems
public string DisplayName { get; set; }
public bool IsActive { get; set; }
[Required]
public string Url { get; set; }
public string Icon { get; set; }

52
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js

@ -0,0 +1,52 @@
var abp = abp || {};
$(function () {
abp.modals.createMenuItem = function () {
var initModal = function (publicApi, args) {
var $pageId = $('#ViewModel_PageId');
var $url = $('#ViewModel_Url');
var $displayName = $('#ViewModel_DisplayName');
var $pageIdClearButton = $('#page-id-clear-button');
initSelectPageId();
$pageIdClearButton.hide();
$pageId.on('change', function (params) {
$url.prop('disabled', $pageId.val());
if ($pageId.val())
{
$pageIdClearButton.show();
if (!$displayName.val()){
$displayName.val($pageId.text());
}
}
else
{
$pageIdClearButton.hide();
}
})
$pageIdClearButton.click(function (){
$pageId.val('');
$pageId.trigger('change');
})
function initSelectPageId() {
$pageId.data('autocompleteApiUrl', '/api/cms-kit-admin/pages/lookup');
$pageId.data('autocompleteDisplayProperty', 'title');
$pageId.data('autocompleteValueProperty', 'id');
$pageId.data('autocompleteItemsProperty', 'items');
$pageId.data('autocompleteFilterParamName', 'filter');
abp.dom.initializers.initializeAutocompleteSelects($pageId);
}
};
return {
initModal: initModal
};
};
});

4
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js

@ -6,8 +6,8 @@ $(function () {
var menuService = volo.cmsKit.admin.menus.menuAdmin;
var createModal = new abp.ModalManager(abp.appPath + 'CmsKit/Menus/MenuItems/CreateModal');
var updateModal = new abp.ModalManager(abp.appPath + 'CmsKit/Menus/MenuItems/UpdateModal');
var createModal = new abp.ModalManager({ viewUrl: abp.appPath + 'CmsKit/Menus/MenuItems/CreateModal', modalClass: 'createMenuItem' });
var updateModal = new abp.ModalManager({ viewUrl: abp.appPath + 'CmsKit/Menus/MenuItems/UpdateModal', modalClass: 'updateMenuItem'});
var menuTree = {

52
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js

@ -0,0 +1,52 @@
var abp = abp || {};
$(function () {
abp.modals.updateMenuItem = function () {
var initModal = function (publicApi, args) {
var $pageId = $('#ViewModel_PageId');
var $url = $('#ViewModel_Url');
var $displayName = $('#ViewModel_DisplayName');
var $pageIdClearButton = $('#page-id-clear-button');
initSelectPageId();
$pageId.on('change', function (params) {
$url.prop('disabled', $pageId.val());
if ($pageId.val())
{
$pageIdClearButton.show();
if (!$displayName.val()){
$displayName.val($pageId.text());
}
}
else
{
$pageIdClearButton.hide();
}
})
$pageId.trigger('change');
$pageIdClearButton.click(function (){
$pageId.val('');
$pageId.trigger('change');
});
function initSelectPageId() {
$pageId.data('autocompleteApiUrl', '/api/cms-kit-admin/pages/lookup');
$pageId.data('autocompleteDisplayProperty', 'title');
$pageId.data('autocompleteValueProperty', 'id');
$pageId.data('autocompleteItemsProperty', 'items');
$pageId.data('autocompleteFilterParamName', 'filter');
abp.dom.initializers.initializeAutocompleteSelects($pageId);
}
};
return {
initModal: initModal
};
};
});

4
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json

@ -38,6 +38,7 @@
"Delete": "Delete",
"Detail": "Detail",
"Details": "Details",
"DisplayName": "Display Name",
"DoYouPreferAdditionalEmails": "Do you prefer additional emails?",
"Edit": "Edit",
"EndDate": "End Date",
@ -46,6 +47,7 @@
"ExportCSV": "Export CSV",
"Features": "Features",
"GenericDeletionConfirmationMessage": "Are you sure to delete '{0}'?",
"IsActive" : "Active",
"LastModification": "Last Modification",
"LastModificationTime": "Last Modification Time",
"LoginToAddComment": "Login to add comment",
@ -69,6 +71,7 @@
"NoMenuItems": "There is no menu item yet!",
"OK": "OK",
"PageDeletionConfirmationMessage": "Are you sure to delete this page?",
"PageId": "Page",
"Pages": "Pages",
"PageSlugInformation": "Slug is used on url. Your url will be '/pages/{{slug}}'.",
"Permission:BlogManagement": "Blog Management",
@ -115,6 +118,7 @@
"RatingUndoMessage": "Your rating will be undo.",
"Reactions": "Reactions",
"Read": "Read",
"RequiredPermissionName": "Required permission name",
"RepliesToThisComment": "Replies to this comment",
"Reply": "Reply",
"ReplyTo": "Reply to",

4
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json

@ -37,6 +37,7 @@
"DeleteSubscriptionSubject": "E-posta adresiniz silinmiştir.",
"Detail": "Detay",
"Details": "Detaylar",
"DisplayName": "İsim",
"DoYouPreferAdditionalEmails": "Ek e-postaları tercih ediyor musunuz?",
"Edit": "Düzenle",
"EndDate": "Bitiş Tarihi",
@ -45,6 +46,7 @@
"ExportCSV": "CSV olarak dışa aktar",
"Features": "Özellikler",
"GenericDeletionConfirmationMessage": "'{0}' kaydını silmek istediğinize emin misiniz?",
"IsActive" : "Aktif",
"LastModification": "Son Güncellenme",
"LastModificationTime": "Son Güncelleme Zamanı",
"LoginToAddComment": "Yorum yapmak için giriş yap",
@ -69,6 +71,7 @@
"NoMenuItems": "Herhangi bir menü elemanı bulunmuyor.",
"OK": "Tamam",
"PageDeletionConfirmationMessage": "Bu sayfayı silmek istediğinize emin misiniz?",
"PageId": "Sayfa",
"PageSlugInformation": "Etiket URL'de kullanılır. Url şöyle görünür: '/pages/{{slug}}'.",
"Permission:BlogManagement": "Blog Yönetimi",
"Permission:BlogManagement.Create": "Oluşturma",
@ -105,6 +108,7 @@
"RatingUndoMessage": "Oylamanız geri alınacak.",
"Reactions": "Reaksiyonlar",
"Read": "Oku",
"RequiredPermissionName": "Gerekli yetki adı",
"RepliesToThisComment": "Bu yoruma yapılan yorumlar",
"Reply": "Cevapla",
"ReplyTo": "Cevap",

26
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs

@ -0,0 +1,26 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events;
using Volo.Abp.EventBus;
using Volo.CmsKit.Pages;
namespace Volo.CmsKit.Menus
{
public class PageChangedHandler: ILocalEventHandler<EntityCreatedEventData<Page>>,
ITransientDependency
{
protected IMenuRepository MenuRepository { get; }
public PageChangedHandler(IMenuRepository menuRepository)
{
MenuRepository = menuRepository;
}
public Task HandleEventAsync(EntityCreatedEventData<Page> eventData)
{
// TODO: Find a way to get affected MenuItems.
throw new NotImplementedException();
}
}
}
Loading…
Cancel
Save