11<script setup lang="ts">
22import { slugify } from ' ~~/shared/utils/html'
33
4- const { info, requestedDate, requestedVersion } = defineProps <{
4+ const { info, requestedDate, goToVersion } = defineProps <{
55 info: ChangelogReleaseInfo
66 requestedDate? : string
7- requestedVersion ? : string | null | undefined
7+ goToVersion ? : string | null | undefined
88}>()
99
10- const { data : releases, error } = await useFetch <ReleaseData []>(
10+ const { data : releases, error } = await useLazyFetch <ReleaseData []>(
1111 () => ` /api/changelog/releases/${info .provider }/${info .repo } ` ,
1212)
1313
@@ -27,15 +27,22 @@ const matchingDateReleases = computed(() => {
2727})
2828
2929if (import .meta .client ) {
30+ const { settings } = useSettings ()
31+
3032 // doing this server side can make it that we go to the homepage
31- watchEffect (() => {
33+ const stopWatching = watchEffect (() => {
3234 const uReleases = releases .value
3335 if (route .hash && uReleases ) {
36+ // scroll if there is a hash in the url
3437 navigateTo (route .hash , { replace: true })
3538 return
3639 }
40+ // don't allow auto scrolling when disabled and there was no hash before
41+ if (! settings .value .changelogAutoScroll ) {
42+ return
43+ }
3744 const date = requestedDate ?.toLowerCase ()
38- if (route .hash || ! date || ! uReleases ) {
45+ if (route .hash || ! date || ! uReleases || ! goToVersion ) {
3946 return
4047 }
4148 const uMatchingDateReleases = matchingDateReleases .value
@@ -44,21 +51,28 @@ if (import.meta.client) {
4451 return
4552 }
4653
47- if (requestedVersion ) {
54+ if (goToVersion ) {
4855 for (const match of uMatchingDateReleases ) {
49- if (match .title .toLowerCase ().includes (requestedVersion )) {
56+ if (match .title .toLowerCase ().includes (goToVersion )) {
5057 navigateTo (` #release-${slugify (match .title )} ` , { replace: true })
5158 return
5259 }
5360 }
5461 }
5562 navigateTo (` #date-${date } ` , { replace: true })
5663 })
64+ // stops watchEffect from trigger just before navigating
65+ onBeforeRouteLeave (stopWatching )
5766}
5867 </script >
5968<template >
6069 <div class =" flex flex-col gap-2 py-3" v-if =" releases" >
61- <ChangelogCard v-for =" release of releases" :release :key =" release.id" />
70+ <LazyChangelogCard
71+ v-for =" release of releases"
72+ :release
73+ :key =" release.id"
74+ hydrate-on-interaction
75+ />
6276 </div >
6377 <slot v-else-if =" error" name =" error" ></slot >
6478</template >
0 commit comments