hrms-mgt/src/composables/usePagination.ts
2025-09-29 17:07:35 +07:00

54 lines
1.4 KiB
TypeScript

import { ref, computed } from "vue";
import type { PropsTable } from "@/interface/index/PropsTable";
export function usePagination(
defaultSort = "",
fetchFunction?: () => Promise<any>
) {
const pagination = ref<PropsTable.Pagination>({
sortBy: defaultSort,
descending: true,
page: 1,
rowsPerPage: 10,
rowsNumber: 0,
});
const params = computed(() => {
const queryParams: Record<string, string> = {
page: pagination.value.page.toString(),
pageSize: pagination.value.rowsPerPage.toString(),
};
if (pagination.value.sortBy) {
queryParams.sortBy = pagination.value.sortBy;
queryParams.descending = (
pagination.value.descending ?? false
).toString();
}
return queryParams;
});
async function onRequest(props: PropsTable.RequestProps) {
const newPagination = props?.pagination || props;
if (!newPagination?.page || !newPagination?.rowsPerPage) return;
pagination.value = { ...newPagination };
if (fetchFunction) {
await fetchFunction(); // เรียกฟังก์ชันที่ส่งเข้ามา
}
}
async function checkAndUpdatePage(totalRows: number) {
if (totalRows === 1 && pagination.value.page > 1) {
pagination.value.page = pagination.value.page - 1;
}
}
return {
pagination,
params,
onRequest,
checkAndUpdatePage,
};
}