<script setup lang="ts"> import singleStory from "~/components/listings/singleStory.vue"; import { IStory } from "@models/stories"; const route = useRoute(); let curPage = ref(route.query.page || 1); const props = defineProps<{ prefix: string; last?: boolean; }>(); let data = ( await useApiFetch<any>(props.prefix, { query: { page: curPage.value, }, }) ).data.value; let rdata = ref(data); const loading = ref<boolean>(false); const pagiChange = (page, pageSize) => { loading.value = true; curPage.value = page; useApiFetch(props.prefix, { query: { page, }, }).then(({ data }) => { rdata.value = data.value; loading.value = false; navigateTo({ path: useRoute().fullPath, query: { page, }, }); }); }; </script> <template> <div> <a-list v-model:data-source="rdata.stories" item-layout="vertical" v-model:loading="loading"> <template #renderItem="{ item }"> <single-story :key="item._id" :story="item" :last="last" /> </template> </a-list> <a-pagination v-model:disabled="loading" :default-page-size="20" :total="rdata.total" @change="pagiChange" :show-quick-jumper="true" :show-size-changer="false" /> </div> </template> <style scoped> .ant-list-items > * + * { margin-top: 1.2em; } .ant-pagination { text-align: center; } </style>