feat(track-list): show Album by default, and search smart playlists
Build & publish Arch package / arch-package (push) Successful in 2m3s
CI / check (push) Canceled after 1m17s
CI / e2e (push) Canceled after 0s
Search index maintenance / maintain-index (push) Canceled after 0s

H-15: the default columns were track, artist and duration, so a library
manager with duplicate detection could not tell its own duplicate
fixtures apart by eye. Album is a default now, in Go and in the
frontend fallback — both, because a fresh install persists the Go list
and the UI renders the TS one until the config arrives.

It does not deliver the finding's stated benefit, and that is worth
recording: the three `Tideline / Aurora Fields / 00:06` rows are
duplicates of the same album, so they read identically with an Album
column too. What tells them apart is the duplicate-detection feature or
a file path column, not this. Album is still the right default for
every other row in the list.

smart-playlist-details joins search-store's scope map. Checked before
adding, as asked: it reads searchCtrl.term in getVisibleTracks and
prints the term in the page, so the header box was disabled and
unlabelled on a view that filters as you type — the fix is a scope
entry, not a disabled state with a reason.
This commit is contained in:
2026-08-12 12:38:36 -04:00
parent 1aa1598ecb
commit bddfd37a5c
4 changed files with 25 additions and 3 deletions
+7 -2
View File
@@ -60,11 +60,16 @@ var AllColumnIDs = []ColumnID{
ColPlayCount,
}
// DefaultColumns is the initial column configuration matching the
// original hardcoded layout.
// DefaultColumns is the initial column configuration. Album is in it
// (H-15): without it the three identical `Tideline / Aurora Fields /
// 00:06` rows in this app's own fixture library cannot be told apart,
// in an app that has a duplicate-detection feature. Must match
// DEFAULT_COLUMN_IDS in frontend/src/components/track-list/columns.ts,
// which is what the UI falls back to before the config arrives.
var DefaultColumns = []Column{
{ID: ColTrackName},
{ID: ColArtistName},
{ID: ColAlbum},
{ID: ColTrackLength},
}
@@ -249,9 +249,16 @@ export const CORE_SEARCH_COLUMN_IDS: string[] = [
'album',
];
/** Default column IDs matching the original hardcoded layout. */
/**
* Default column IDs. Album is in them (H-15): without it, the three
* `Tideline / Aurora Fields / 00:06` rows in this app's own fixture
* library are indistinguishable, in an app that has duplicate
* detection. Must match `tracklist.DefaultColumns` in Go, which is what
* a fresh install actually persists.
*/
export const DEFAULT_COLUMN_IDS: string[] = [
'trackName',
'artistName',
'album',
'trackLength',
];
+6
View File
@@ -19,6 +19,12 @@ const SEARCH_SCOPES: Record<string, string> = {
genres: 'genres',
playlists: 'playlists',
'playlist-details': 'tracks in this playlist',
// Its sibling was in this map and it was not, so the box went
// disabled and unlabelled on a view that filters on the term all
// the same — typing narrowed the list under a placeholder saying
// there was nothing to search. Checked before adding: it reads
// `searchCtrl.term` in `getVisibleTracks` and says so in the page.
'smart-playlist-details': 'tracks in this smart playlist',
};
/**
+4
View File
@@ -54,6 +54,10 @@ describe('search store', () => {
'albums',
'playlists',
'playlist-details',
// A detail view that filters on the term has to be in the map:
// this one was not, so the box was disabled and unlabelled on a
// page that narrowed its list as you typed.
'smart-playlist-details',
'artists',
'genres',
].map((view) => {