Ben Lin
2024-03-24 b72cc34ab2fef7d6bcaca3e2b11231713d622fce
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import type { Ref } from 'vue';
import { ref, unref, computed } from 'vue';
 
function pagination<T = any>(list: T[], pageNo: number, pageSize: number): T[] {
  const offset = (pageNo - 1) * Number(pageSize);
  const ret =
    offset + Number(pageSize) >= list.length
      ? list.slice(offset, list.length)
      : list.slice(offset, offset + Number(pageSize));
  return ret;
}
 
export function usePagination<T = any>(list: Ref<T[]>, pageSize: number) {
  const currentPage = ref(1);
  const pageSizeRef = ref(pageSize);
 
  const getPaginationList = computed(() => {
    return pagination(unref(list), unref(currentPage), unref(pageSizeRef));
  });
 
  const getTotal = computed(() => {
    return unref(list).length;
  });
 
  function setCurrentPage(page: number) {
    currentPage.value = page;
  }
 
  function setPageSize(pageSize: number) {
    pageSizeRef.value = pageSize;
  }
 
  return { setCurrentPage, getTotal, setPageSize, getPaginationList };
}