Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make lists sortable with ordering setting #3711

Merged
merged 19 commits into from Jan 30, 2020
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -1,42 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using OrchardCore.ContentManagement;
using OrchardCore.ContentManagement.Display.ContentDisplay;
using OrchardCore.ContentManagement.Display.Models;
using OrchardCore.ContentManagement.Metadata;
using OrchardCore.ContentManagement.Metadata.Models;
using OrchardCore.DisplayManagement.ModelBinding;
using OrchardCore.DisplayManagement.Views;
using OrchardCore.Lists.Models;
using OrchardCore.Lists.Services;
using OrchardCore.Lists.ViewModels;
using OrchardCore.Navigation;
using YesSql;

namespace OrchardCore.Lists.Drivers
{
public class ListPartDisplayDriver : ContentPartDisplayDriver<ListPart>
{
private readonly IContentManager _contentManager;
private readonly ISession _session;
private readonly IServiceProvider _serviceProvider;
private readonly IContentDefinitionManager _contentDefinitionManager;
private readonly IContainerService _containerService;

public ListPartDisplayDriver(
IContentDefinitionManager contentDefinitionManager,
IContentManager contentManager,
ISession session,
IServiceProvider serviceProvider,
IContainerService containerService
)
{
_contentDefinitionManager = contentDefinitionManager;
_serviceProvider = serviceProvider;
_session = session;
_contentManager = contentManager;
_containerService = containerService;
}

Expand All @@ -46,24 +33,24 @@ public override IDisplayResult Display(ListPart listPart, BuildPartDisplayContex
Combine(
Initialize<ListPartViewModel>("ListPart", async model =>
{
var pager = await GetPagerAsync(context.Updater, listPart);
var settings = GetSettings(listPart);
var pager = await GetPagerAsync(context);
var settings = context.TypePartDefinition.GetSettings<ListPartSettings>();

model.ListPart = listPart;
model.ContentItems = (await _containerService.QueryContainedItemsAsync(listPart.ContentItem.ContentItemId, settings.EnableOrdering, pager, true)).ToArray();
model.ContainedContentTypeDefinitions = GetContainedContentTypes(listPart);
model.ContainedContentTypeDefinitions = GetContainedContentTypes(context);
model.Context = context;
model.Pager = await context.New.PagerSlim(pager);
})
.Location("Detail", "Content:10"),
Initialize<ListPartViewModel>("ListPart", async model =>
{
var pager = await GetPagerAsync(context.Updater, listPart);
var settings = GetSettings(listPart);
var pager = await GetPagerAsync(context);
var settings = context.TypePartDefinition.GetSettings<ListPartSettings>();

model.ListPart = listPart;
model.ContentItems = (await _containerService.QueryContainedItemsAsync(listPart.ContentItem.ContentItemId, settings.EnableOrdering, pager, false)).ToArray();
model.ContainedContentTypeDefinitions = GetContainedContentTypes(listPart);
model.ContainedContentTypeDefinitions = GetContainedContentTypes(context);
model.Context = context;
model.EnableOrdering = settings.EnableOrdering;
model.Pager = await context.New.PagerSlim(pager);
Expand All @@ -72,29 +59,22 @@ public override IDisplayResult Display(ListPart listPart, BuildPartDisplayContex
);
}

private async Task<PagerSlim> GetPagerAsync(IUpdateModel updater, ListPart part)
private async Task<PagerSlim> GetPagerAsync(BuildPartDisplayContext context)
Copy link
Contributor

@Skrypt Skrypt Jan 28, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should be GetPagerSlimAsync and we should also have GetPagerAsync

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should be GetPagerSlimAsync and we should also have GetPagerAsync

Changed to GetPagerSlimAsync.
What did you mean by also having GetPagerAsync? As a settings option too have the other type of pager?

{
var settings = GetSettings(part);
PagerSlimParameters pagerParameters = new PagerSlimParameters();
await updater.TryUpdateModelAsync(pagerParameters);
var settings = context.TypePartDefinition.GetSettings<ListPartSettings>();
var pagerParameters = new PagerSlimParameters();
await context.Updater.TryUpdateModelAsync(pagerParameters);

PagerSlim pager = new PagerSlim(pagerParameters, settings.PageSize);
var pager = new PagerSlim(pagerParameters, settings.PageSize);

return pager;
}

private IEnumerable<ContentTypeDefinition> GetContainedContentTypes(ListPart listPart)
private IEnumerable<ContentTypeDefinition> GetContainedContentTypes(BuildPartDisplayContext context)
{
var settings = GetSettings(listPart);
var settings = context.TypePartDefinition.GetSettings<ListPartSettings>();
var contentTypes = settings.ContainedContentTypes ?? Enumerable.Empty<string>();
return contentTypes.Select(contentType => _contentDefinitionManager.GetTypeDefinition(contentType));
}

private ListPartSettings GetSettings(ListPart listPart)
{
var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(listPart.ContentItem.ContentType);
var contentTypePartDefinition = contentTypeDefinition.Parts.FirstOrDefault(x => String.Equals(x.PartDefinition.Name, "ListPart"));
return contentTypePartDefinition.GetSettings<ListPartSettings>();
}
}
}