fix(library): browse-all-tracks shares the Search song-list view (#854)

* fix(library): browse-all-tracks shares the Search song-list view (#841)

"Browse all tracks" rendered virtualized, transform-positioned rows inside
its own scroll box, so the sticky column header got painted over while
scrolling. Extract the Search / Advanced-Search song-list chrome (sticky
header + plain SongRows + IntersectionObserver sentinel paging) into a
shared PagedSongList and route all three through it; Browse now flows in the
page like the Search pages, so the header can no longer be overlapped.

Trade-off: Browse-all drops its bespoke row virtualization to match the
Search pages (DOM grows with scroll as they do); paging is unchanged. Also
removes the duplicated sentinel/observer in SearchResults and AdvancedSearch.

# Conflicts:
#	src/components/VirtualSongList.tsx
#	src/pages/SearchResults.tsx

* docs(changelog): browse-all-tracks sticky header fix (#854)
This commit is contained in:
Frank Stellmacher
2026-05-22 19:53:22 +02:00
committed by GitHub
parent cc8e6cc811
commit cb4d331f99
6 changed files with 84 additions and 145 deletions
-19
View File
@@ -77,22 +77,3 @@
border-radius: var(--radius-lg);
}
.virtual-song-list-scroll {
max-height: 70vh;
min-height: 320px;
overflow-y: auto;
border: 1px solid var(--border-subtle);
border-radius: var(--radius-lg);
background: var(--bg-card);
}
.virtual-song-list-loading {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: var(--space-3);
font-size: 12px;
color: var(--text-muted);
}