Skip to content

Commit

Permalink
Improvement/revision pagination (#6303)
Browse files Browse the repository at this point in the history
* #3764 add pagination to item revisions

* #3764 add collapse feature to revision date groups

* #3764 add pagination to item revisions

* #3764 add collapse feature to revision date groups

* dont pass a function into a prop and clean up

* remove code from divider and clean up code

* Use v-detail instead of v-divider

Co-authored-by: Nitwel <nitwel@arcor.de>
Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
  • Loading branch information
3 people committed Sep 22, 2021
1 parent d3ba3a4 commit 062d99b
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 24 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<template>
<v-detail v-model="expand" :label="group.dateFormatted" class="revisions-date-group">
<div v-show="expand" class="scroll-container">
<revision-item
v-for="(item, index) in group.revisions"
:key="item.id"
:revision="item"
:last="index === group.revisions.length - 1"
@click="$emit('click', item.id)"
/>
</div>
</v-detail>
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue';
import RevisionItem from './revision-item.vue';
export default defineComponent({
components: { RevisionItem },
props: {
group: {
type: Object,
required: true,
},
},
emits: ['click'],
setup() {
const expand = ref(true);
return { expand };
},
});
</script>

<style scoped>
.revisions-date-group .scroll-container {
padding-bottom: 24px;
}
</style>
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,17 @@

<template v-else>
<template v-for="group in revisionsByDate" :key="group.date.toString()">
<v-divider>{{ group.dateFormatted }}</v-divider>

<template v-for="(item, index) in group.revisions" :key="item.id">
<revision-item :revision="item" :last="index === group.revisions.length - 1" @click="openModal(item.id)" />
</template>
<RevisionsDateGroup :group="group" @click="openModal" />
</template>

<v-divider v-if="revisionsCount > 100" class="other">
{{ t('count_other_revisions', revisionsCount - 101) }}
</v-divider>

<template v-if="created">
<revision-item :revision="created" last @click="openModal(created.id)" />
</template>

<template v-else>
<template v-if="page == pagesCount && !created">
<v-divider v-if="revisionsByDate.length > 0" />

<div class="external">
{{ t('revision_delta_created_externally') }}
</div>
</template>
<v-pagination v-if="pagesCount > 1" v-model="page" :length="pagesCount" :total-visible="2" />
</template>

<revisions-drawer
Expand All @@ -44,20 +33,20 @@

<script lang="ts">
import { useI18n } from 'vue-i18n';
import { defineComponent, ref } from 'vue';
import { defineComponent, ref, watch } from 'vue';
import { Revision, RevisionsByDate } from './types';
import api from '@/api';
import { groupBy, orderBy } from 'lodash';
import { isToday, isYesterday, isThisYear } from 'date-fns';
import formatLocalized from '@/utils/localized-format';
import RevisionItem from './revision-item.vue';
import RevisionsDateGroup from './revisions-date-group.vue';
import RevisionsDrawer from './revisions-drawer.vue';
import { unexpectedError } from '@/utils/unexpected-error';
import { abbreviateNumber } from '@/utils/abbreviate-number';
export default defineComponent({
components: { RevisionItem, RevisionsDrawer },
components: { RevisionsDrawer, RevisionsDateGroup },
props: {
collection: {
type: String,
Expand All @@ -72,13 +61,21 @@ export default defineComponent({
setup(props) {
const { t } = useI18n();
const { revisions, revisionsByDate, loading, refresh, revisionsCount, created } = useRevisions(
const { revisions, revisionsByDate, loading, refresh, revisionsCount, pagesCount, created } = useRevisions(
props.collection,
props.primaryKey
);
const modalActive = ref(false);
const modalCurrentRevision = ref<number | null>(null);
const page = ref<number>(1);
watch(
() => page.value,
(newPage) => {
refresh(newPage);
}
);
return {
t,
Expand All @@ -91,6 +88,8 @@ export default defineComponent({
openModal,
revisionsCount,
created,
page,
pagesCount,
abbreviateNumber,
};
Expand All @@ -105,13 +104,15 @@ export default defineComponent({
const loading = ref(false);
const revisionsCount = ref(0);
const created = ref<Revision>();
const pagesCount = ref(0);
getRevisions();
return { created, revisions, revisionsByDate, loading, refresh, revisionsCount };
return { created, revisions, revisionsByDate, loading, refresh, revisionsCount, pagesCount };
async function getRevisions() {
async function getRevisions(page = 0) {
loading.value = true;
const pageSize = 100;
try {
const response = await api.get(`/revisions`, {
Expand All @@ -125,7 +126,8 @@ export default defineComponent({
},
},
sort: '-id',
limit: 100,
limit: pageSize,
page,
fields: [
'id',
'data',
Expand Down Expand Up @@ -217,15 +219,16 @@ export default defineComponent({
revisionsByDate.value = orderBy(revisionsGrouped, ['date'], ['desc']);
revisions.value = orderBy(response.data.data, ['activity.timestamp'], ['desc']);
revisionsCount.value = response.data.meta.filter_count;
} catch (err: any) {
pagesCount.value = Math.ceil(revisionsCount.value / pageSize);
} catch (err) {
unexpectedError(err);
} finally {
loading.value = false;
}
}
async function refresh() {
await getRevisions();
async function refresh(page = 0) {
await getRevisions(page);
}
}
},
Expand Down Expand Up @@ -276,4 +279,8 @@ export default defineComponent({
font-style: italic;
}
.v-pagination {
justify-content: center;
}
</style>

0 comments on commit 062d99b

Please sign in to comment.