Cache album slider data

This commit is contained in:
lucast committed 2026-10-04 22:01:34 +02:00
1 parent 3393c133fd
commit 30541eab8d
2 files changed
+32 -19

No files matched your search

+30 -18
View File
@@ -1,27 +1,39 @@
<script setup lang="ts"> <script setup lang="ts">
const { data: genresData } = await useApiFetch<Genre[]>("/genres/random") const cacheKey = "album-slider-data"
const data = ref<{ genre: Genre; albums: Album[] }[]>([])
const data = await Promise.allSettled( onMounted(async () => {
(genresData.value ?? []).map(async (genre: Genre) => { const cached = sessionStorage.getItem(cacheKey)
const albums = await cfetch<Album[]>(`/genres/albums/${genre._id}`) if (cached) {
try {
return { data.value = JSON.parse(cached)
genre, return
albums, } catch {
sessionStorage.removeItem(cacheKey)
} }
}), }
).then((results) =>
results const genres = await cfetch<Genre[]>("/genres/random")
const results = await Promise.allSettled(
(genres ?? []).map(async (genre) => ({
genre,
albums: await cfetch<Album[]>(`/genres/albums/${genre._id}`),
})),
)
data.value = results
.filter( .filter(
( (
r, result,
): r is PromiseFulfilledResult<{ ): result is PromiseFulfilledResult<{
genre: any genre: Genre
albums: any[] albums: Album[]
}> => r.status === "fulfilled", }> => result.status === "fulfilled",
)
.map((r) => r.value),
) )
.map((result) => result.value)
sessionStorage.setItem(cacheKey, JSON.stringify(data.value))
})
</script> </script>
<template> <template>
+2 -1
View File
@@ -1,4 +1,5 @@
<script setup lang="ts">useHead({ title: "Home" }) <script setup lang="ts">
useHead({ title: "Home" })
</script> </script>
<template> <template>