novo-elements
Version:
Bullhorn's NOVO Element Repository for Angular 2
84 lines (70 loc) • 2.26 kB
text/typescript
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));
}
}
}