UNPKG

2.38 kBJavaScriptView Raw
1
2/*
3sort object
4{ direction: 'DESC',
5 property: 'createdAt',
6 ignoreCase: false,
7 nullHandling: 'NATIVE',
8 ascending: false,
9 descending: true }
10
11*/
12
13var d = require("debug")("raptorjs:pager")
14
15class Pager {
16
17 constructor(json) {
18
19 const defaults = {
20 content: [],
21 last: true,
22 totalPages: 0,
23 totalElements: 0,
24 sort: [],
25 first: true,
26 numberOfElements: 0,
27 size: 25,
28 number: 0
29 }
30
31 this.json = Object.assign({}, defaults, json)
32 }
33
34 getContent() {
35 return this.json.content || []
36 }
37
38 isFirst() {
39 return this.json.first
40 }
41
42 isLast() {
43 return this.json.last
44 }
45
46 getPage() {
47 return this.json.page
48 }
49
50 getTotalPages() {
51 return this.json.totalPages
52 }
53
54 getTotalElements() {
55 return this.json.totalElements
56 }
57
58 getNumberOfElements() {
59 return this.json.numberOfElements
60 }
61
62 getSize() {
63 return this.json.size
64 }
65
66 getSort(key) {
67 if(!key) return this.json.sort
68 const keys = this.json.sort.filter((s) => s.property === key)
69 return keys.length ? keys[0] : null
70 }
71
72}
73
74module.exports = Pager
75module.exports.create = (raw, mapCallback) => {
76
77 if(mapCallback && typeof mapCallback === "function") {
78 raw.content = raw.content.map(mapCallback)
79 }
80
81 return new Pager(raw)
82}
83
84module.exports.buildQuery = (pageOptions, q) => {
85 const query = []
86
87 if(pageOptions) {
88
89 if(pageOptions.size && pageOptions.limit === undefined) {
90 pageOptions.limit = pageOptions.size
91 }
92
93 if (pageOptions.page) {
94 query.push(`page=${pageOptions.page}`)
95 }
96 if (pageOptions.limit) {
97 query.push(`size=${pageOptions.limit}`)
98 }
99 if (pageOptions.sort) {
100 pageOptions.sortDir = pageOptions.sortDir.toLowerCase() === "desc" ? "desc" : "asc"
101 query.push(`sort=${pageOptions.sort},${pageOptions.sortDir}`)
102 }
103 }
104
105 //collect other query parameters
106 if(q) {
107 Object.keys(q).forEach((field) => {
108 const value = q[field]
109 query.push(`${field}=${value}`)
110 })
111 }
112
113 return (query.length) ? encodeURI(`?${query.join("&")}`) : ""
114}