UNPKG

novo-elements

Version:

Bullhorn's NOVO Element Repository for Angular 2

84 lines (70 loc) 2.26 kB
import { EventEmitter } from '@angular/core'; import { ArrayCollection } from './ArrayCollection'; import { PagedCollection } from './PagedCollection'; import { CollectionEvent } from './CollectionEvent'; export class PagedArrayCollection<T> extends ArrayCollection<T> implements PagedCollection<T> { _page: number = 1; _numberOfPages: number = 1; _pageSize: number = 10; constructor(source: Array<T> = []) { super(source); } get numberOfPages(): number { let result: number = this.source.length / this.pageSize; result = Math.ceil(result); return result; } get page(): number { return this._page; } set page(value: number) { this._page = value; this.refresh(); } get pageSize(): number { return this._pageSize; } set pageSize(value: number) { this._pageSize = value; this.refresh(); } next(): number { if (this.page === this.numberOfPages) { return this.page; } this.page++; return this.page; } prev(): number { if (this._page === 1) { return this.page; } this.page--; return this.page; } first(): number { if (this.page === 1) { return this.page; } this.page = 1; return this.page; } last(): number { if (this.page === this.numberOfPages) { return this.page; } this.page = this.numberOfPages; return this.page; } refresh(): void { this.filterData = this.isEditing ? this.editData.slice() : this.source.slice(); for (let item of this._sort.reverse()) { this.sortOn(item.field, item.reverse); } for (let key in this._filter) { if (key) { this.filterOn(key, this._filter[key]); } } if (this.page >= 0) { let start = (this.page - 1) * this.pageSize; let end = start + this.pageSize; let result = this.filterData.slice(start, end); this.onDataChange(new CollectionEvent(CollectionEvent.CHANGE, result)); } else { this.onDataChange(new CollectionEvent(CollectionEvent.CHANGE, this.filterData)); } } }