pagination.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. async function getNextId(Model, where, items) {
  2. try {
  3. let maxId = await Model.max('id', { where })
  4. let lastItem = items.slice(-1)[0]
  5. if(!lastItem || maxId === lastItem.id) {
  6. return null
  7. } else {
  8. return lastItem.id
  9. }
  10. } catch (e) {
  11. console.log(e)
  12. return null
  13. }
  14. }
  15. async function getNextCount (Model, items, limit, where) {
  16. let lastItem
  17. if(Array.isArray(items)) {
  18. lastItem = items.slice(-1)[0]
  19. } else {
  20. lastItem = items
  21. }
  22. where.id = { $gt: lastItem.id }
  23. let remaining = await Model.count({ where })
  24. if(remaining - limit < 0) {
  25. return remaining
  26. } else {
  27. return limit
  28. }
  29. }
  30. function getPaginationProps(query) {
  31. let from = 0
  32. let limit = 10
  33. if(+query.from > 0) from = +query.from
  34. if(+query.limit > 0) limit = +query.limit
  35. if(+query.postNumber > 0) {
  36. let lowerFrom = +query.postNumber - Math.floor(limit / 2) + 1
  37. if(lowerFrom < 0) {
  38. from = 0
  39. } else {
  40. from = lowerFrom
  41. }
  42. }
  43. return { from, limit }
  44. }
  45. module.exports = {
  46. getNextId,
  47. getNextCount,
  48. getPaginationProps
  49. }