Skip to content

Commit 9f51bed

Browse files
committed
fix(ui): first-load expansion no longer sets showAllGroups unconditionally.
1 parent 2f18d06 commit 9f51bed

File tree

3 files changed

+53
-6
lines changed

3 files changed

+53
-6
lines changed

app/components/VersionSelector.vue

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -344,12 +344,15 @@ async function toggleGroup(groupId: string) {
344344
try {
345345
const allVersions = await loadAllVersions()
346346
processLoadedVersions(allVersions)
347-
showAllGroups.value = hasAdditionalGroups.value
348347
349348
// Find the group again after processing (it may have moved)
350349
const updatedGroup = versionGroups.value.find(g => g.id === groupId)
351-
if (updatedGroup && hasNestedVersions(updatedGroup)) {
352-
updatedGroup.isExpanded = true
350+
if (updatedGroup) {
351+
if (hasNestedVersions(updatedGroup)) {
352+
updatedGroup.isExpanded = true
353+
} else if (controlsAdditionalGroups(updatedGroup)) {
354+
showAllGroups.value = true
355+
}
353356
}
354357
} catch (error) {
355358
// eslint-disable-next-line no-console

test/nuxt/components/Package/Versions.spec.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,7 @@ function isVersionLink(a: DOMWrapper<Element>): boolean {
4040
)
4141
}
4242

43-
function getRouter(
44-
component: Awaited<ReturnType<typeof mountSuspended>>,
45-
): Pick<typeof component.vm.$router, 'resolve'> {
43+
function getRouter(component: Awaited<ReturnType<typeof mountSuspended>>): Pick<typeof component.vm.$router, 'resolve'> {
4644
return component.vm.$router
4745
}
4846

test/nuxt/components/VersionSelector.spec.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,52 @@ describe('VersionSelector', () => {
468468
})
469469
})
470470

471+
it('does not reveal unrelated older groups when expanding a tagged row with nested versions', async () => {
472+
mockFetchAllPackageVersions.mockResolvedValue([
473+
{ version: '1.2.0', time: '2024-01-15T12:00:00.000Z', hasProvenance: false },
474+
{ version: '1.1.0', time: '2024-01-12T12:00:00.000Z', hasProvenance: false },
475+
{ version: '1.0.0', time: '2024-01-10T12:00:00.000Z', hasProvenance: false },
476+
{ version: '0.9.0', time: '2024-01-08T12:00:00.000Z', hasProvenance: false },
477+
])
478+
479+
const component = await mountSuspended(VersionSelector, {
480+
props: {
481+
packageName: 'test-package',
482+
currentVersion: '1.2.0',
483+
versions: { '1.2.0': {}, '1.1.0': {}, '1.0.0': {}, '0.9.0': {} },
484+
distTags: { latest: '1.2.0' },
485+
urlPattern: '/package-docs/test-package/v/{version}',
486+
},
487+
})
488+
489+
const trigger = component.find('button[aria-haspopup="listbox"]')
490+
await trigger.trigger('click')
491+
492+
const expandButton = component.find('[role="listbox"] button[aria-expanded="false"]')
493+
await expandButton.trigger('click')
494+
495+
await vi.waitFor(() => {
496+
expect(mockFetchAllPackageVersions).toHaveBeenCalledWith('test-package')
497+
})
498+
499+
await vi.waitFor(() => {
500+
const listboxText = component.find('[role="listbox"]').text()
501+
expect(listboxText).toContain('1.1.0')
502+
expect(listboxText).toContain('1.0.0')
503+
expect(listboxText).not.toContain('0.9')
504+
})
505+
506+
const expandedButton = component.find('[role="listbox"] button[aria-expanded="true"]')
507+
await expandedButton.trigger('click')
508+
509+
await vi.waitFor(() => {
510+
const listboxText = component.find('[role="listbox"]').text()
511+
expect(listboxText).not.toContain('1.1.0')
512+
expect(listboxText).not.toContain('1.0.0')
513+
expect(listboxText).not.toContain('0.9')
514+
})
515+
})
516+
471517
it('collapses additional version groups with ArrowLeft when showAllGroups is open', async () => {
472518
mockFetchAllPackageVersions.mockResolvedValue([
473519
{ version: '1.0.0', time: '2024-01-15T12:00:00.000Z', hasProvenance: false },

0 commit comments

Comments
 (0)