Pinia colada query setup

This commit is contained in:
Alexis
2026-03-24 22:14:52 +01:00
parent 6ab92ba64f
commit e7cc6c432e

View File

@@ -2,11 +2,9 @@
import type { ApiResponse } from '@/types/Api' import type { ApiResponse } from '@/types/Api'
import type { BikeParking } from '@/types/Bikes' import type { BikeParking } from '@/types/Bikes'
import { API_BASE_URL, API_LIMIT } from '@/utils/const' import { API_BASE_URL, API_LIMIT } from '@/utils/const'
import { ref } from 'vue' import { useQuery } from '@pinia/colada'
const res = ref<BikeParking[]>([])
async function fetchAllBikeParkings(): Promise<BikeParking[]> {
const firstPage = await fetch(`${API_BASE_URL}?limit=${API_LIMIT}`).then(r => r.json()) as ApiResponse const firstPage = await fetch(`${API_BASE_URL}?limit=${API_LIMIT}`).then(r => r.json()) as ApiResponse
const { total_count } = firstPage const { total_count } = firstPage
@@ -17,10 +15,16 @@ const remainingPages = await Promise.all(
) )
) )
res.value = [ return [
...(firstPage.results ?? []), ...(firstPage.results ?? []),
...remainingPages.flatMap(page => page.results ?? []) ...remainingPages.flatMap(page => page.results ?? [])
] ]
}
const { state } = useQuery({
key: ['bike-parkings'],
query: fetchAllBikeParkings,
})
</script> </script>
<template> <template>
@@ -31,8 +35,8 @@ res.value = [
</header> </header>
<main class="h-screen w-screen grid place-items-center"> <main class="h-screen w-screen grid place-items-center">
<pre> <div v-if="state.status === 'pending'">Loading...</div>
{{ res }} <div v-else-if="state.status === 'error'">Error: {{ state.error.message }}</div>
</pre> <pre v-else>{{ state.data }}</pre>
</main> </main>
</template> </template>