pagination.ts•1.25 kB
export type PaginationData = {
	currentPage: number;
	firstRowOnPage: number;
	lastRowOnPage: number;
	totalRows: number;
	prevPage?: number;
	nextPage?: number;
	endPage?: number;
	itemsPerPage: number;
	displayText: string;
};
export function getPaginationFor(table: string, page: number, totalRows: number, itemsPerPage: number): PaginationData {
	if (totalRows === 0) {
		return {
			currentPage: 1,
			firstRowOnPage: 0,
			lastRowOnPage: 0,
			totalRows: totalRows,
			endPage: 1,
			itemsPerPage,
			displayText: `Showing 0 to 0 of 0 records`
		};
	}
	const endPage = Math.ceil(totalRows / itemsPerPage);
	// Ensure the current page is within valid bounds
	const validPage = Math.min(Math.max(page, 1), endPage);
	const firstRowOnPage = (validPage - 1) * itemsPerPage + 1;
	const lastRowOnPage = validPage === endPage ? totalRows : validPage * itemsPerPage;
	return {
		currentPage: validPage,
		firstRowOnPage,
		lastRowOnPage,
		totalRows: totalRows,
		prevPage: validPage > 1 ? validPage - 1 : undefined,
		nextPage: validPage < endPage ? validPage + 1 : undefined,
		endPage,
		itemsPerPage,
		displayText: `Showing ${firstRowOnPage.toLocaleString()} to ${lastRowOnPage.toLocaleString()} of ${totalRows.toLocaleString()} records`
	};
}