24 lines
839 B
TypeScript
24 lines
839 B
TypeScript
|
|
import { Pipe, PipeTransform } from '@angular/core';
|
||
|
|
|
||
|
|
@Pipe({
|
||
|
|
standalone: true,
|
||
|
|
name: 'calculatePageRange'
|
||
|
|
})
|
||
|
|
export class CalculatePageRangePipe implements PipeTransform {
|
||
|
|
transform(totalPages: number, currentPage: number, totalPagesCount: number): number[] {
|
||
|
|
const visiblePages = 10;
|
||
|
|
let startPage = Math.max(currentPage - 5, 1);
|
||
|
|
let endPage = Math.min(startPage + visiblePages - 1, totalPagesCount);
|
||
|
|
|
||
|
|
// Adjust the start and end if near the beginning or end
|
||
|
|
if (currentPage < 6) {
|
||
|
|
endPage = Math.min(visiblePages, totalPagesCount);
|
||
|
|
} else if (currentPage > totalPagesCount - 5) {
|
||
|
|
startPage = Math.max(totalPagesCount - visiblePages + 1, 1);
|
||
|
|
}
|
||
|
|
|
||
|
|
// Generate the range of page numbers to display
|
||
|
|
return Array.from({ length: (endPage - startPage) + 1 }, (_, i) => startPage + i);
|
||
|
|
}
|
||
|
|
}
|