pagination.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 getNextIdDesc(Model, where, items) {
  16. try {
  17. let minId = await Model.min('id', { where })
  18. let lastItem = items.slice(-1)[0]
  19. if(!lastItem || minId === lastItem.id) {
  20. return null
  21. } else {
  22. return lastItem.id
  23. }
  24. } catch (e) {
  25. console.log(e)
  26. return null
  27. }
  28. }
  29. async function getNextCount (Model, items, limit, where) {
  30. let lastItem
  31. if(Array.isArray(items)) {
  32. lastItem = items.slice(-1)[0]
  33. } else {
  34. lastItem = items
  35. }
  36. where.id = { $gt: lastItem.id }
  37. let remaining = await Model.count({ where })
  38. if(remaining - limit < 0) {
  39. return remaining
  40. } else {
  41. return limit
  42. }
  43. }
  44. function getPaginationProps(query, desc) {
  45. let from = 0
  46. let limit = 10
  47. if(desc) {
  48. from = null
  49. }
  50. if(+query.from > 0) from = +query.from
  51. if(+query.limit > 0) limit = +query.limit
  52. if(+query.postNumber > 0) {
  53. let lowerFrom = +query.postNumber - Math.floor(limit / 2) + 1
  54. if(lowerFrom < 0) {
  55. from = 0
  56. } else {
  57. from = lowerFrom
  58. }
  59. }
  60. return { from, limit }
  61. }
  62. module.exports = {
  63. getNextId,
  64. getNextIdDesc,
  65. getNextCount,
  66. getPaginationProps
  67. }