Skip to content

Commit 7da82ae

Browse files
committed
skeleton loaders are now being displayed when loading the releases/markdown & if loading them doesn't go well there is now a error msg instead of a blank screen
1 parent 04b2c21 commit 7da82ae

File tree

7 files changed

+98
-25
lines changed

7 files changed

+98
-25
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<script setup lang="ts">
2+
const { pkgName, changelogLink, viewOnGit } = defineProps<{
3+
pkgName?: string
4+
changelogLink: string
5+
viewOnGit: string
6+
}>()
7+
</script>
8+
<template>
9+
<div class="w-full flex items-center flex-col gap-2 mt-4">
10+
<p>{{ $t('changelog.error.p1', { package: pkgName }) }}</p>
11+
<i18n-t keypath="changelog.error.p2" tag="p" #viewon>
12+
<LinkBase :to="changelogLink">{{ viewOnGit.toLowerCase() }}</LinkBase>
13+
</i18n-t>
14+
</div>
15+
</template>

app/components/Changelog/Markdown.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ const { info, requestedVersion, tpTarget } = defineProps<{
77
88
const route = useRoute()
99
10-
const { data } = useLazyFetch(() => `/api/changelog/md/${info.provider}/${info.repo}/${info.path}`)
10+
const { data, error } = await useFetch(
11+
() => `/api/changelog/md/${info.provider}/${info.repo}/${info.path}`,
12+
)
1113
1214
watch(
1315
[() => data.value?.toc, () => requestedVersion?.toLowerCase(), () => route.hash],
@@ -38,4 +40,5 @@ watch(
3840
<ReadmeTocDropdown :toc="data.toc" class="justify-self-end" />
3941
</Teleport>
4042
<Readme v-if="data?.html" :html="data.html"></Readme>
43+
<slot v-else-if="error" name="error"></slot>
4144
</template>

app/components/Changelog/Releases.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const { info, requestedDate, requestedVersion } = defineProps<{
77
requestedVersion?: string | null | undefined
88
}>()
99
10-
const { data: releases } = useFetch<ReleaseData[]>(
10+
const { data: releases, error } = await useFetch<ReleaseData[]>(
1111
() => `/api/changelog/releases/${info.provider}/${info.repo}`,
1212
)
1313
@@ -59,4 +59,5 @@ watch(
5959
<div class="flex flex-col gap-2 py-3" v-if="releases">
6060
<ChangelogCard v-for="release of releases" :release :key="release.id" />
6161
</div>
62+
<slot v-else-if="error" name="error"></slot>
6263
</template>

app/pages/package-changes/[...path].vue

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -138,27 +138,50 @@ defineOgImageComponent('Default', {
138138
<SkeletonBlock class="h-5 w-3/4 max-w-2xl rounded" />
139139
</section>
140140

141-
<template v-else-if="!error">
142-
<LazyChangelogReleases
143-
v-if="changelog?.type == 'release'"
144-
:info="changelog"
145-
:requestedDate="versionDate"
146-
:requested-version="version || latestVersion?.version"
147-
/>
148-
<LazyChangelogMarkdown
149-
v-else-if="changelog?.type == 'md'"
150-
:info="changelog"
151-
:tpTarget="tptoc"
152-
:requested-version="version || latestVersion?.version"
153-
/>
154-
<p class="mt-5" v-else>{{ $t('changelog.no_logs') }}</p>
155-
</template>
156-
<section v-else class="flex items-center pa-3 flex-col text-lg gap-2">
157-
<p>{{ $t('changelog.error.p1', { package: pkg?.name }) }}</p>
158-
<i18n-t keypath="changelog.error.p2" tag="p" #viewon>
159-
<LinkBase :to="changelog?.link">{{ viewOnGit.toLowerCase() }}</LinkBase>
160-
</i18n-t>
161-
</section>
141+
<Suspense v-else>
142+
<template #default>
143+
<LazyChangelogReleases
144+
v-if="changelog?.type == 'release'"
145+
:info="changelog"
146+
:requestedDate="versionDate"
147+
:requested-version="version || latestVersion?.version"
148+
#error
149+
>
150+
<LazyChangelogErrorMsg
151+
:pkgName="pkg?.name"
152+
:changelog-link="changelog.link"
153+
:viewOnGit
154+
/>
155+
</LazyChangelogReleases>
156+
<LazyChangelogMarkdown
157+
v-else-if="changelog?.type == 'md'"
158+
:info="changelog"
159+
:tpTarget="tptoc"
160+
:requested-version="version || latestVersion?.version"
161+
#error
162+
>
163+
<LazyChangelogErrorMsg
164+
:pkgName="pkg?.name"
165+
:changelog-link="changelog.link"
166+
:viewOnGit
167+
/>
168+
</LazyChangelogMarkdown>
169+
<p class="mt-5" v-else>{{ $t('changelog.no_logs') }}</p>
170+
</template>
171+
<template #fallback>
172+
<section class="flex flex-col gap-2 py-3">
173+
<SkeletonBlock class="h-8 w-40 rounded" />
174+
<ul class="ms-3 list-disc my-[1rem] ps-[1.5rem] marker:color-[--border-hover]">
175+
<li class="mb-1" v-for="_n in 5">
176+
<SkeletonBlock class="h-7 w-full max-w-2xl rounded" />
177+
</li>
178+
</ul>
179+
180+
<SkeletonBlock class="h-5 w-5/6 max-w-2xl rounded" />
181+
<SkeletonBlock class="h-5 w-3/4 max-w-2xl rounded" />
182+
</section>
183+
</template>
184+
</Suspense>
162185
</section>
163186
</main>
164187
</template>

i18n/locales/en.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1372,7 +1372,7 @@
13721372
"draft": "Draft",
13731373
"no_logs": "Sorry, this package does not publish changelogs, or its changelog format is not supported.",
13741374
"error": {
1375-
"p1": "Sorry, the changelogs for {package} couldn't be loaded",
1375+
"p1": "Sorry, the changelog for {package} couldn't be loaded",
13761376
"p2": "Please try again later or {viewon}"
13771377
}
13781378
}

test/nuxt/a11y.spec.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ import {
151151
CompareLineChart,
152152
ComparePackageSelector,
153153
CompareReplacementSuggestion,
154+
ChangelogErrorMsg,
154155
DateTime,
155156
DependencyPathPopup,
156157
FilterChips,
@@ -2111,7 +2112,7 @@ describe('component accessibility audits', () => {
21112112
})
21122113

21132114
describe('Changelog', () => {
2114-
it('should have no accessibility violations', async () => {
2115+
it('ChangelogCard should have no accessibility violations', async () => {
21152116
const component = await mountSuspended(ChangelogCard, {
21162117
props: {
21172118
release: {
@@ -2125,6 +2126,18 @@ describe('component accessibility audits', () => {
21252126
const results = await runAxe(component)
21262127
expect(results.violations).toEqual([])
21272128
})
2129+
2130+
it('ChangelogErrorMsg should have no accessibility violations for warning variant', async () => {
2131+
const component = await mountSuspended(ChangelogErrorMsg, {
2132+
props: {
2133+
changelogLink: 'https://github.com/npmx-dev/npmx.dev/releases/',
2134+
pkgName: 'npmx-dev',
2135+
viewOnGit: 'View on Github',
2136+
},
2137+
})
2138+
const results = await runAxe(component)
2139+
expect(results.violations).toEqual([])
2140+
})
21282141
})
21292142

21302143
describe('CollapsibleSection', () => {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { describe, expect, it } from 'vitest'
2+
import { ChangelogErrorMsg } from '#components'
3+
import { mountSuspended } from '@nuxt/test-utils/runtime'
4+
5+
describe('Changelog', () => {
6+
it('Should display error message', async () => {
7+
const component = await mountSuspended(ChangelogErrorMsg, {
8+
props: {
9+
changelogLink: 'https://github.com/npmx-dev/npmx.dev/releases/',
10+
pkgName: 'npmx-dev',
11+
viewOnGit: 'View on Github',
12+
},
13+
})
14+
15+
expect(component.text()).toContain(`Sorry, the changelog for npmx-dev couldn't be loaded`)
16+
expect(component.text()).toContain(`Please try again later or view on github`)
17+
})
18+
})

0 commit comments

Comments
 (0)