Skip to content

Commit c4481e8

Browse files
committed
Ensure scroll position is reset when package + version is changed
1 parent add5bd1 commit c4481e8

File tree

1 file changed

+25
-17
lines changed

1 file changed

+25
-17
lines changed

app/pages/package-code/[[org]]/[packageName]/v/[version]/[...filePath].vue

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,6 @@ definePageMeta({
1212
1313
const route = useRoute('code')
1414
15-
// Preserve file-tree scroll position across navigation
16-
const fileTreeSidebarRef = useTemplateRef('file-tree-sidebar')
17-
const savedFileTreeSidebarScroll = useState('code-sidebar-scroll', () => 0)
18-
19-
onBeforeUnmount(() => {
20-
savedFileTreeSidebarScroll.value = fileTreeSidebarRef.value?.scrollTop ?? 0
21-
})
22-
23-
watch(
24-
fileTreeSidebarRef,
25-
fileTreeSidebarElement => {
26-
if (fileTreeSidebarElement && savedFileTreeSidebarScroll.value)
27-
fileTreeSidebarElement.scrollTop = savedFileTreeSidebarScroll.value
28-
},
29-
{ once: true, flush: 'post' },
30-
)
31-
3215
// Parse package name, version, and file path from URL
3316
// Patterns:
3417
// /code/nuxt/v/4.2.0 → packageName: "nuxt", version: "4.2.0", filePath: null (show tree)
@@ -46,6 +29,31 @@ const parsedRoute = computed(() => {
4629
4730
const packageName = computed(() => parsedRoute.value.packageName)
4831
const version = computed(() => parsedRoute.value.version)
32+
33+
// Preserve file-tree scroll position across navigation within same package (+ version)
34+
const fileTreeKey = computed(() => `${packageName.value}@${version.value}`)
35+
const fileTreeSidebarRef = useTemplateRef('file-tree-sidebar')
36+
const savedFileTreeSidebarScroll = useState('code-sidebar-scroll', () => ({
37+
key: '',
38+
scrollTop: 0,
39+
}))
40+
41+
onBeforeUnmount(() => {
42+
savedFileTreeSidebarScroll.value = {
43+
key: fileTreeKey.value,
44+
scrollTop: fileTreeSidebarRef.value?.scrollTop ?? 0,
45+
}
46+
})
47+
48+
watch(
49+
fileTreeSidebarRef,
50+
fileTreeSidebarElement => {
51+
if (fileTreeSidebarElement && savedFileTreeSidebarScroll.value.key === fileTreeKey.value)
52+
fileTreeSidebarElement.scrollTop = savedFileTreeSidebarScroll.value.scrollTop
53+
},
54+
{ once: true, flush: 'post' },
55+
)
56+
4957
const filePathOrig = computed(() => parsedRoute.value.filePath)
5058
const filePath = computed(() => parsedRoute.value.filePath?.replace(/\/$/, ''))
5159

0 commit comments

Comments
 (0)