pagination for page revisions
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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)
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user