Skip to content

Commit 8d6e7b0

Browse files
committed
fix(a11y): render podium entries in 1-2-3 order in the DOM
1 parent d5859e9 commit 8d6e7b0

2 files changed

Lines changed: 12 additions & 10 deletions

File tree

app/pages/leaderboard/likes.vue

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,6 @@ const isLoadingLeaderboard = computed(
3838
)
3939
4040
const highlightedEntries = computed(() => leaderboardEntries.value.slice(0, 3))
41-
const desktopPodiumEntries = computed(() =>
42-
[2, 1, 3]
43-
.map(rank => highlightedEntries.value.find(entry => entry.rank === rank))
44-
.filter((entry): entry is LikesLeaderboardEntry => entry != null),
45-
)
4641
const remainingEntries = computed(() => leaderboardEntries.value.slice(3))
4742
4843
function getPreviewFallbackClass(rank: number): string {
@@ -74,11 +69,11 @@ function getMedalBadgeClass(rank: number): string {
7469
function getPodiumItemClass(rank: number): string {
7570
switch (rank) {
7671
case 1:
77-
return 'lg:-translate-y-6'
72+
return 'lg:col-start-2 lg:row-start-1 lg:-translate-y-6'
7873
case 2:
79-
return 'lg:translate-y-8'
74+
return 'lg:col-start-1 lg:row-start-1 lg:translate-y-8'
8075
case 3:
81-
return 'lg:translate-y-14'
76+
return 'lg:col-start-3 lg:row-start-1 lg:translate-y-14'
8277
default:
8378
return ''
8479
}
@@ -168,7 +163,7 @@ function formatCompactStat(value: number | null): string | null {
168163
class="hidden list-none m-0 gap-4 p-0 pb-4 lg:grid lg:grid-cols-[minmax(0,0.96fr)_minmax(0,1.08fr)_minmax(0,0.96fr)] lg:items-end lg:gap-6 lg:pb-16"
169164
>
170165
<li
171-
v-for="rank in [2, 1, 3]"
166+
v-for="rank in [1, 2, 3]"
172167
:key="rank"
173168
class="space-y-4"
174169
:class="getPodiumItemClass(rank)"
@@ -371,10 +366,11 @@ function formatCompactStat(value: number | null): string | null {
371366
</ol>
372367

373368
<ol
369+
data-testid="likes-leaderboard-desktop-podium"
374370
class="hidden list-none m-0 gap-4 p-0 pb-4 lg:grid lg:grid-cols-[minmax(0,0.96fr)_minmax(0,1.08fr)_minmax(0,0.96fr)] lg:items-end lg:gap-6 lg:pb-16"
375371
>
376372
<li
377-
v-for="entry in desktopPodiumEntries"
373+
v-for="entry in highlightedEntries"
378374
:key="entry.subjectRef"
379375
class="space-y-4"
380376
:class="getPodiumItemClass(entry.rank)"

test/nuxt/pages/LikesLeaderboardPage.spec.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,12 @@ describe('likes leaderboard page', () => {
6060

6161
expect(wrapper.text()).toContain('#1')
6262
expect(wrapper.find('img[src="https://images.example.com/vue-home.png"]').exists()).toBe(true)
63+
expect(
64+
wrapper
65+
.find('[data-testid="likes-leaderboard-desktop-podium"]')
66+
.findAll('a')
67+
.map(link => link.attributes('href')),
68+
).toEqual(['/package/vue', '/package/@nuxt/kit', '/package/react'])
6369
expect(wrapper.find('img[src="https://images.example.com/svelte-logo.svg"]').exists()).toBe(
6470
true,
6571
)

0 commit comments

Comments
 (0)