diff --git a/helpers/api/pagination.js b/helpers/api/pagination.js new file mode 100644 index 0000000..671eda5 --- /dev/null +++ b/helpers/api/pagination.js @@ -0,0 +1,44 @@ +export class PaginatedList { + constructor({ list, perPage }) { + this.list = list + this.perPage = perPage + } + + get total () { + return this.list.length + } + + get pageCount () { + return Math.ceil( this.total / this.perPage ) + } + + makePageItems ( pageNumber ) { + const start = (pageNumber - 1) * this.perPage + const end = start + this.perPage + + return this.list.slice(start, end) + } + + makePage ( pageNumber ) { + const items = this.makePageItems( pageNumber ) + + return { + number: pageNumber, + items, + json: JSON.stringify( items ) + } + } + + get pages () { + // Create an empty array of pages + const pages = Array( this.pageCount ).fill({}) + + return pages.map( ( _, index ) => { + const pageNumber = index + 1 + + return this.makePage( pageNumber ) + }) + } +} + +