From cac4e77796a67ca059a0adff7715a4b861b760ae Mon Sep 17 00:00:00 2001 From: Tobias Klika Date: Fri, 28 Aug 2020 14:26:26 +0200 Subject: [PATCH] pagination for page revisions --- zero.Core/Api/RevisionsApi.cs | 20 +++++++++--- zero.Web.UI/App/components/revisions.vue | 38 ++++++++++++++++------- zero.Web.UI/App/pages/pages/page-info.vue | 21 +++++-------- zero.Web.UI/App/pages/pages/page.vue | 2 +- zero.Web/Controllers/PagesController.cs | 2 +- 5 files changed, 52 insertions(+), 31 deletions(-) diff --git a/zero.Core/Api/RevisionsApi.cs b/zero.Core/Api/RevisionsApi.cs index 4e47db22..f2ed0447 100644 --- a/zero.Core/Api/RevisionsApi.cs +++ b/zero.Core/Api/RevisionsApi.cs @@ -1,6 +1,9 @@ using Newtonsoft.Json; using Raven.Client.Documents; +using Raven.Client.Documents.Commands; +using Raven.Client.Documents.Operations; using Raven.Client.Documents.Session; +using Sparrow.Json; using System; using System.Collections.Generic; using System.Linq; @@ -32,16 +35,25 @@ namespace zero.Core.Api { using IAsyncDocumentSession session = Raven.OpenAsyncSession(); - List items = await session.Advanced.Revisions.GetForAsync(id, pageNumber - 1, pageSize); + // get paged revisions + List items = await session.Advanced.Revisions.GetForAsync(id, (pageNumber - 1) * pageSize, pageSize); + double totalResults = items.Count; - List continuedItems = await session.Advanced.Revisions.GetForAsync(id, pageNumber, 1); - bool hasMore = continuedItems.Count > 0; + // get total results in case items count equals page size + if (pageSize <= items.Count || pageNumber > 1) + { + GetRevisionsCommand command = new GetRevisionsCommand(id, 0, 1, true); + session.Advanced.RequestExecutor.Execute(command, session.Advanced.Context); + command.Result.Results.Parent.TryGet("TotalResults", out totalResults); + } List revisions = new List(); + // load affected users as the revisions could have been edited by other users too string[] userIds = items.Select(x => x.LastModifiedById).Distinct().ToArray(); Dictionary users = await session.LoadAsync(userIds); + // create revision objects foreach (T item in items) { DateTime? date = session.Advanced.GetLastModifiedFor(item); @@ -66,7 +78,7 @@ namespace zero.Core.Api revisions.Add(revision); } - return new ListResult(revisions, hasMore ? revisions.Count + 1 : revisions.Count, pageNumber, pageSize); + return new ListResult(revisions, Convert.ToInt64(totalResults), pageNumber, pageSize); } } diff --git a/zero.Web.UI/App/components/revisions.vue b/zero.Web.UI/App/components/revisions.vue index 19c86828..e4ac6c13 100644 --- a/zero.Web.UI/App/components/revisions.vue +++ b/zero.Web.UI/App/components/revisions.vue @@ -1,7 +1,7 @@  @@ -23,28 +24,43 @@ name: 'uiRevisions', props: { - value: { - type: Object, - default: () => ({ - totalItems: 0, - items: [] - }) + get: { + type: Function, + required: true } }, data: () => ({ - userRoute: zero.alias.sections.settings + '-' + zero.alias.settings.users + '-edit' + userRoute: zero.alias.sections.settings + '-' + zero.alias.settings.users + '-edit', + items: [], + page: 1, + pages: 0 }), + mounted() + { + this.setPage(this.page); + }, + + methods: { getImage(id) { return MediaApi.getImageSource(id); + }, + + setPage(page) + { + this.page = page; + this.get(page).then(res => + { + this.items = res.items; + this.pages = res.totalPages; + }); } } - } diff --git a/zero.Web.UI/App/pages/pages/page-info.vue b/zero.Web.UI/App/pages/pages/page-info.vue index e645d52f..9c46a78d 100644 --- a/zero.Web.UI/App/pages/pages/page-info.vue +++ b/zero.Web.UI/App/pages/pages/page-info.vue @@ -5,7 +5,7 @@





- +
@@ -44,11 +44,7 @@ }, data: () => ({ - pageType: null, - revisions: { - totalItems: 0, - items: [] - } + pageType: null }), computed: { @@ -64,19 +60,16 @@ { this.pageType = pageType; }); - - if (!this.isCreate) - { - PagesApi.getRevisions(this.value.id).then(response => - { - this.revisions = response; - }); - } }, methods: { + getRevisions(page) + { + return PagesApi.getRevisions(this.value.id, page); + }, + onRangeChange(value) { this.value.publishDate = value.from; diff --git a/zero.Web.UI/App/pages/pages/page.vue b/zero.Web.UI/App/pages/pages/page.vue index 95f3a13c..967077c4 100644 --- a/zero.Web.UI/App/pages/pages/page.vue +++ b/zero.Web.UI/App/pages/pages/page.vue @@ -6,7 +6,7 @@ - + diff --git a/zero.Web/Controllers/PagesController.cs b/zero.Web/Controllers/PagesController.cs index dee5053f..42516adb 100644 --- a/zero.Web/Controllers/PagesController.cs +++ b/zero.Web/Controllers/PagesController.cs @@ -33,7 +33,7 @@ namespace zero.Web.Controllers return Edit>(new PageEditModel() { Entity = entity, - Revisions = await RevisionsApi.GetPaged(id), + //Revisions = await RevisionsApi.GetPaged(id), PageType = Api.GetPageType(entity.PageTypeAlias) }); }