Created
September 23, 2015 07:56
-
-
Save tinusn/41d4597e6d6b0ef312c4 to your computer and use it in GitHub Desktop.
Virtual Repeat Model for angular-materials Virtual Repeat
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class VirtualRepeatModel { | |
PAGE_SIZE: number = 20; | |
totalItems: number = 0; | |
totalPages: number; | |
loadedItems = {}; | |
currentIndex: number; | |
extraParams = {}; | |
constructor(public api: restangular.IElement, public initialPage?: number) { | |
} | |
refresh() { | |
this.loadedItems = {}; | |
this.getItemAtIndex(0); | |
} | |
getItemAtIndex(index: number) { | |
if (this.initialPage > 1) { | |
index = index + this.initialPage * this.PAGE_SIZE; | |
} | |
this.currentIndex = index; | |
var pageNumber = Math.floor(index / this.PAGE_SIZE); | |
var page = this.loadedItems[pageNumber]; | |
if (page) { | |
return page[index % this.PAGE_SIZE]; | |
} else if (page !== null) { | |
this.fetchPage(pageNumber); | |
} | |
} | |
fetchPage(pageNumber: number) { | |
this.loadedItems[pageNumber] = null; | |
let request = { | |
page: pageNumber === 0 ? 1 : pageNumber, | |
pageSize: this.PAGE_SIZE | |
}; | |
angular.extend(request, this.extraParams); | |
return this.api.getList(request).then((data) => { | |
this.totalItems = data.meta.totalRecords; | |
this.totalPages = data.meta.totalPages; | |
this.loadedItems[pageNumber] = data.plain(); | |
}).catch((err) => { | |
return null; | |
}); | |
} | |
getLength(): number { | |
return this.totalItems; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment