UNPKG

vue-use-paginator

Version:
70 lines (69 loc) 2.24 kB
import { ref as m, computed as h, watch as z } from "vue"; const B = { page: 1, pageSize: 5, numItems: 0, numButtons: 5 }, b = (e) => { const s = { ...B, ...e }, u = m(s.page), t = m(s.pageSize), n = m(s.numItems), o = m(s.numButtons), l = h({ get: () => u.value, set: (p) => { p <= 0 ? u.value = 1 : p > a.value ? u.value = a.value || 1 : u.value = p; } }), a = h(() => Math.ceil(n.value / t.value)); z(a, () => { l.value > a.value && (l.value = a.value); }); const i = h(() => { const p = (l.value - 1) * t.value, S = Math.min(p + t.value, n.value); return [p, S]; }), c = h(() => l.value > 1), r = h(() => l.value < a.value), f = () => (c.value && l.value--, l.value), d = () => (r.value && l.value++, l.value), M = () => (l.value = 1, 1), g = () => (l.value = a.value, a.value), x = h(() => a.value <= o.value ? I(l.value, a.value) : N(l.value, a.value, o.value)); return { page: l, pageSize: t, numItems: n, numButtons: o, numPages: a, slice: i, hasPrev: c, hasNext: r, goPrev: f, goNext: d, goStart: M, goEnd: g, buttons: x }; }; function I(e, s) { return v(1, e).concat({ page: e, active: !0, ellipsis: !1 }).concat(v(e + 1, s + 1)); } function N(e, s, u) { let t = 0, n = 0; const o = Math.floor(u / 2); e <= o ? (t = e - 1, n = u - t - 1) : e >= s - o ? (n = s - e, t = u - n - 1) : u % 2 === 0 ? (t = o - 1, n = o) : (t = o, n = o); const l = e - 1, a = s - e; let i = []; if (l <= t) i = v(1, l + 1); else if (t > 0) { const c = t === 2 ? 2 : Math.ceil(t / 2), r = t - c; let f = Math.ceil(l / 2); l % 2 === 0 && f++, i = v(1, c).concat({ page: f, active: !1, ellipsis: !0 }).concat(v(e - r, e)); } if (i.push({ page: e, active: !0, ellipsis: !1 }), a <= n) i = i.concat(v(e + 1, s + 1)); else if (n > 0) { const c = n === 2 ? 1 : Math.floor(n / 2) + 1, r = n - c, f = e + Math.ceil(a / 2); i = i.concat(v(e + 1, e + c)).concat({ page: f, active: !1, ellipsis: !0 }).concat(v(s - r + 1, s + 1)); } return i; } function v(e, s) { const u = []; for (let t = e; t < s; t++) u.push({ page: t, active: !1, ellipsis: !1 }); return u; } export { b as default };