pagination for page revisions

This commit is contained in:
2020-08-28 14:26:26 +02:00
parent ff5dc93a20
commit cac4e77796
5 changed files with 52 additions and 31 deletions
+16 -4
View File
@@ -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<T> items = await session.Advanced.Revisions.GetForAsync<T>(id, pageNumber - 1, pageSize);
// get paged revisions
List<T> items = await session.Advanced.Revisions.GetForAsync<T>(id, (pageNumber - 1) * pageSize, pageSize);
double totalResults = items.Count;
List<T> continuedItems = await session.Advanced.Revisions.GetForAsync<T>(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<Revision> revisions = new List<Revision>();
// load affected users as the revisions could have been edited by other users too
string[] userIds = items.Select(x => x.LastModifiedById).Distinct().ToArray();
Dictionary<string, User> users = await session.LoadAsync<User>(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<Revision>(revisions, hasMore ? revisions.Count + 1 : revisions.Count, pageNumber, pageSize);
return new ListResult<Revision>(revisions, Convert.ToInt64(totalResults), pageNumber, pageSize);
}
}
+27 -11
View File
@@ -1,7 +1,7 @@
<template>
<div class="ui-revisions" :class="{ 'is-empty': value.items.length < 1 }">
<div class="ui-revision" v-for="revision in value.items">
<span class="ui-revision-action" v-localize="'@revisions.actions.updated'"></span>
<div class="ui-revisions" :class="{ 'is-empty': items.length < 1 }">
<div class="ui-revision" v-for="revision in items">
<span class="ui-revision-action" v-localize="'@revisions.actions.updated'"></span>
<ui-date class="ui-revision-date" v-model="revision.date" format="long" :split="true" />
<router-link :to="{ name: userRoute, params: { id: revision.user.id }}" v-if="revision.user" class="ui-revision-user">
<img class="ui-revision-user-image" v-if="revision.user" :src="getImage(revision.user.avatarId)" :alt="revision.user.name" />
@@ -10,6 +10,7 @@
<div v-else></div>
<button type="button" class="ui-link is-minor" v-localize="'@revisions.view'"></button>
</div>
<ui-pagination v-if="pages > 1" :pages="pages" :page="page" @change="setPage" />
</div>
</template>
@@ -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;
});
}
}
}
</script>
+7 -14
View File
@@ -5,7 +5,7 @@
<h3 class="ui-headline" v-localize="'Links'"></h3>
<div><ui-button type="light" label="Open page" /><br /><br /><br /><br /></div>
<h3 class="ui-headline" v-localize="'@revisions.label'"></h3>
<ui-revisions v-model="revisions" />
<ui-revisions v-if="!isCreate" :get="getRevisions" />
</div>
</div>
<div class="ui-view-box-aside editor-infos">
@@ -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;
+1 -1
View File
@@ -6,7 +6,7 @@
</template>
</ui-form-header>
<ui-editor v-if="!loading" :config="renderer" v-model="model" :meta="meta" :is-page="true" infos="none" :on-configure="onEditorConfigure"/>
<ui-editor v-if="!loading" :config="renderer" v-model="model" :meta="meta" :is-page="true" infos="none" :on-configure="onEditorConfigure" :active-tab="2" />
</ui-form>
</template>
+1 -1
View File
@@ -33,7 +33,7 @@ namespace zero.Web.Controllers
return Edit<IPage, PageEditModel<IPage>>(new PageEditModel<IPage>()
{
Entity = entity,
Revisions = await RevisionsApi.GetPaged<IPage>(id),
//Revisions = await RevisionsApi.GetPaged<IPage>(id),
PageType = Api.GetPageType(entity.PageTypeAlias)
});
}