import { Injectable, EventEmitter } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class PaginationService {
resultsChanged: EventEmitter<any> = new EventEmitter();
constructor() { }
applyPaging(source: any[], pageSize: number = 10, page: number = 1) {
let pagedResult = {
items: source,
page: page,
pageSize: pageSize,
pageItemStart: 0,
pageItemEnd: 0
};
if (!(Array.isArray(source) && source.length)) {
pagedResult.page = 1;
return pagedResult;
}
const maxPageSize = source.length > pageSize ? Math.ceil(source.length / pageSize) : 1;
page = page > maxPageSize ? maxPageSize : page;
if (page > 0 && pageSize > 0 && source.length > pageSize) {
let pagedCollection = source.slice(((page - 1) * pageSize), ((page - 1) * pageSize + pageSize));
pagedResult.items = pagedCollection;
}
if (source.length > pageSize) {
pagedResult.pageItemStart = (pagedResult.page * pagedResult.pageSize) - (pagedResult.pageSize - 1);
pagedResult.pageItemEnd = ((pagedResult.page - 1) * pagedResult.pageSize) + pagedResult.items.length;
} else {
pagedResult.pageItemStart = 1;
pagedResult.pageItemEnd = pagedResult.items.length;
}
return pagedResult;
}
}