From 57d431a0ba0dbbf96df0d658eff5538ae3667043 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Sun, 13 Oct 2024 20:50:38 +0200 Subject: [PATCH] feat: categories pagination & sort --- src/components/CategoriesTable.vue | 39 ++++++++++++++++++++++++++---- src/components/CategoryCreate.vue | 7 +++--- src/stores/categories.ts | 33 +++++++++++++++++++++++-- src/views/CategoriesView.vue | 15 +++++++++--- 4 files changed, 79 insertions(+), 15 deletions(-) diff --git a/src/components/CategoriesTable.vue b/src/components/CategoriesTable.vue index cdc6964..9420464 100644 --- a/src/components/CategoriesTable.vue +++ b/src/components/CategoriesTable.vue @@ -10,10 +10,12 @@ interface CategoryItem { const props = defineProps<{ fetchedCategories: Category | undefined + loading: boolean + itemsTotal: number }>() const emit = defineEmits<{ - categoryDeleted: [id: number] + categoriesUpdated: [] }>() const categoriesStore = useCategoriesStore() @@ -21,6 +23,9 @@ const categoriesStore = useCategoriesStore() const deleteDialog: Ref = ref(false) const deleteDialogCategory: Ref = ref() +const itemsPerPageGlob: Ref = ref(10) +const itemsPage: Ref = ref(0) + function onDeleteClick(category: CategoryItem) { deleteDialogCategory.value = category deleteDialog.value = true @@ -28,25 +33,49 @@ function onDeleteClick(category: CategoryItem) { async function deleteCategory() { const categoryPromise = await categoriesStore.deleteCategory(deleteDialogCategory.value?.id ?? -1) - const response = await categoryPromise.json() - emit('categoryDeleted', response.id) + await categoryPromise.json() + const skip = itemsPage.value === 1 ? 0 : (itemsPage.value - 1) * itemsPerPageGlob.value + categoriesStore.updateSkipTake(skip, itemsPerPageGlob.value) + emit('categoriesUpdated') deleteDialog.value = false } + +async function loadItems({ + page, + itemsPerPage, + sortBy +}: { + page: number + itemsPerPage: number + sortBy: { key: string; order: 'asc' | 'desc' }[] +}) { + itemsPage.value = page + itemsPerPageGlob.value = itemsPerPage + const skip = page === 1 ? 0 : (page - 1) * itemsPerPage + categoriesStore.updateSkipTake(skip, itemsPerPage) + if (sortBy[0]) categoriesStore.updateSort(sortBy[0].key, sortBy[0].order) + else categoriesStore.updateSort(undefined, undefined) + emit('categoriesUpdated') +}