notify when a page changes in the pagination manager + calculate skip value

This commit is contained in:
Mads Rasmussen
2023-11-02 16:31:40 +01:00
parent f1e557bb85
commit 8432f44fbc

View File

@@ -1,6 +1,7 @@
import { UmbChangeEvent } from "@umbraco-cms/backoffice/event";
import { UmbNumberState } from "@umbraco-cms/backoffice/observable-api";
export class UmbPaginationManager {
export class UmbPaginationManager extends EventTarget {
#pageSize = new UmbNumberState(10);
public readonly pageSize = this.#pageSize.asObservable();
@@ -14,6 +15,9 @@ export class UmbPaginationManager {
#currentPage = new UmbNumberState(1);
public readonly currentPage = this.#currentPage.asObservable();
#skip = new UmbNumberState(0);
public readonly skip = this.#skip.asObservable();
/**
* Sets the number of items per page and recalculates the total number of pages
* @param {number} pageSize
@@ -77,8 +81,19 @@ export class UmbPaginationManager {
*/
public setCurrentPageNumber(pageNumber: number) {
this.#currentPage.next(pageNumber);
this.#calculateSkip();
this.dispatchEvent(new UmbChangeEvent());
}
/**
* Gets the number of items to skip
* @return {number}
* @memberof UmbPaginationManager
*/
public getSkip() {
return this.#skip.getValue();
}
/**
* Calculates the total number of pages
* @memberof UmbPaginationManager
@@ -87,4 +102,9 @@ export class UmbPaginationManager {
const totalPages = Math.ceil(this.#totalItems.getValue() / this.#pageSize.getValue());
this.#totalPages.next(totalPages);
}
#calculateSkip() {
const skip = (this.#currentPage.getValue() - 1) * this.#pageSize.getValue();
this.#skip.next(skip);
}
}