Skip to content

Commit f557b7b

Browse files
authored
fix: make 'other versions' list expand correctly (#156)
1 parent 8204c50 commit f557b7b

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

app/components/PackageVersions.vue

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,8 @@ const tagVersions = ref<Map<string, VersionDisplay[]>>(new Map())
120120
const loadingTags = ref<Set<string>>(new Set())
121121
122122
const otherVersionsExpanded = shallowRef(false)
123-
const otherMajorGroups = shallowRef<
124-
Array<{ major: number; versions: VersionDisplay[]; expanded: boolean }>
125-
>([])
123+
const expandedMajorGroups = ref<Set<number>>(new Set())
124+
const otherMajorGroups = shallowRef<Array<{ major: number; versions: VersionDisplay[] }>>([])
126125
const otherVersionsLoading = shallowRef(false)
127126
128127
// Cached full version list (local to component instance)
@@ -222,8 +221,8 @@ function processLoadedVersions(allVersions: PackageVersionInfo[]) {
222221
otherMajorGroups.value = sortedMajors.map(major => ({
223222
major,
224223
versions: byMajor.get(major)!,
225-
expanded: false,
226224
}))
225+
expandedMajorGroups.value.clear()
227226
}
228227
229228
// Expand a tag row
@@ -277,10 +276,11 @@ async function expandOtherVersions() {
277276
}
278277
279278
// Toggle a major group
280-
function toggleMajorGroup(index: number) {
281-
const group = otherMajorGroups.value[index]
282-
if (group) {
283-
group.expanded = !group.expanded
279+
function toggleMajorGroup(major: number) {
280+
if (expandedMajorGroups.value.has(major)) {
281+
expandedMajorGroups.value.delete(major)
282+
} else {
283+
expandedMajorGroups.value.add(major)
284284
}
285285
}
286286
@@ -497,20 +497,24 @@ function getTagVersions(tag: string): VersionDisplay[] {
497497

498498
<!-- Major version groups (untagged versions) -->
499499
<template v-if="otherMajorGroups.length > 0">
500-
<div v-for="(group, groupIndex) in otherMajorGroups" :key="group.major">
500+
<div v-for="group in otherMajorGroups" :key="group.major">
501501
<!-- Major group header -->
502502
<button
503503
v-if="group.versions.length > 1"
504504
type="button"
505505
class="w-full text-left py-1"
506-
:aria-expanded="group.expanded"
506+
:aria-expanded="expandedMajorGroups.has(group.major)"
507507
:title="group.versions[0]?.version"
508-
@click="toggleMajorGroup(groupIndex)"
508+
@click="toggleMajorGroup(group.major)"
509509
>
510510
<div class="flex items-center gap-2">
511511
<span
512512
class="w-3 h-3 transition-transform duration-200 text-fg-subtle"
513-
:class="group.expanded ? 'i-carbon-chevron-down' : 'i-carbon-chevron-right'"
513+
:class="
514+
expandedMajorGroups.has(group.major)
515+
? 'i-carbon-chevron-down'
516+
: 'i-carbon-chevron-right'
517+
"
514518
/>
515519
<span
516520
class="font-mono text-xs truncate"
@@ -567,7 +571,10 @@ function getTagVersions(tag: string): VersionDisplay[] {
567571
</div>
568572

569573
<!-- Major group versions -->
570-
<div v-if="group.expanded && group.versions.length > 1" class="ml-5 space-y-0.5">
574+
<div
575+
v-if="expandedMajorGroups.has(group.major) && group.versions.length > 1"
576+
class="ml-5 space-y-0.5"
577+
>
571578
<div v-for="v in group.versions.slice(1)" :key="v.version" class="py-1">
572579
<div class="flex items-center justify-between gap-2">
573580
<NuxtLink

0 commit comments

Comments
 (0)