import { CommonModule } from '@angular/common'; import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core'; @Component({ selector: 'app-paginator', standalone: true, imports: [CommonModule], template: ` `, }) export class PaginatorComponent implements OnChanges { @Input() page = 1; @Input() pageCount = 1; @Output() pageChange = new EventEmitter(); currentPage = 1; visiblePages: (number | string)[] = []; ngOnChanges(changes: SimpleChanges): void { if (changes['page'] || changes['pageCount']) { this.currentPage = this.page; this.updateVisiblePages(); } } updateVisiblePages(): void { const totalPages = this.pageCount; const current = this.currentPage; if (totalPages <= 6) { this.visiblePages = Array.from({ length: totalPages }, (_, i) => i + 1); } else { if (current <= 3) { this.visiblePages = [1, 2, 3, 4, '...', totalPages]; } else if (current >= totalPages - 2) { this.visiblePages = [1, '...', totalPages - 3, totalPages - 2, totalPages - 1, totalPages]; } else { this.visiblePages = [1, '...', current - 1, current, current + 1, '...', totalPages]; } } } onPageChange(page: number | string): void { if (typeof page === 'string') { return; } if (page >= 1 && page <= this.pageCount && page !== this.currentPage) { this.currentPage = page; this.pageChange.emit(page); this.updateVisiblePages(); } } }