I want to implement custom pagination in my Vue app, but it's calculated incorrectly
- page start from 0 pages but need from 1
- when going to the last page I can't return to the 1 page
- if I set items for example 5 per page and then go to the last page and then choose 100 items per page I didn't see any items and in info about pages showed like 2 of 1 page.
please help me with implementation pagination algorithm
pageNumber: 0,
pageSize: 50,
pageSizeChoices: [
5, 10, 20, 50, 100
],
usersCount() {
return this.isMappingsLoading ? 0 : this.resolvedUsers.length
},
pageCount() {
return Math.ceil(this.usersCount / this.pageSize)
},
paginatedData(){
const start = this.pageNumber * this.pageSize
const end = start + this.pageSize
return this.filteredUsers.slice(start, end)
},
isPrevPageDisabled() {
return this.pageNumber <= 1
},
isNextPageDisabled() {
return this.pageNumber === this.pageCount
},
pageInfo() {
return `${this.pageNumber + 1} of ${this.pageCount}`
}
prevPage() {
this.pageNumber = Math.max(this.pageNumber - 1, 1)
},
nextPage() {
this.pageNumber = Math.min(this.pageNumber + 1, this.pageCount)
}
<div class="user-mgmt-info"
v-if="!isMappingsLoading && usersCount > 0">
<span>Rows per Page:</span>
<z-select
class="user-mgmt-info-rows"
v-model="pageSize"
:items="pageSizeChoices"
/>
<v-icon
:disabled="isPrevPageDisabled"
@click="prevPage"
data-user-mgmt-prev-page
>
mdi-chevron-left
</v-icon>
<span class="user-mgmt-info-page-count">
{{ pageInfo }}
</span>
<v-icon
:disabled="isNextPageDisabled"
@click="nextPage"
data-user-mgmt-next-page
>
mdi-chevron-right
</v-icon>
</div>
isPrevPageDisabled() { return this.pageNumber <= 1 },doesn't look right. That should be this.pageNumber === 0 - tgreen