fix(ui): wire active state in lists
cx
This commit is contained in:
1 parent
c59ab226b9
commit
1fae9b7d9f
4 files changed
+31
-7
No files matched your search
@@ -205,11 +205,18 @@
|
|||||||
|
|
||||||
let showArtistGroupMenu = $state(false);
|
let showArtistGroupMenu = $state(false);
|
||||||
let artistGroupingEnabled = $state(false);
|
let artistGroupingEnabled = $state(false);
|
||||||
let customIconSrc = $derived.by(() =>
|
function resolveCustomIconSrc(path: string | null): string | null {
|
||||||
favoritesPreferences.custom_icon_path
|
if (!path) return null;
|
||||||
? convertFileSrc(favoritesPreferences.custom_icon_path)
|
if (path.startsWith('asset://') || path.startsWith('http://asset.localhost') || path.startsWith('https://asset.localhost')) {
|
||||||
: null
|
return path;
|
||||||
);
|
}
|
||||||
|
if (path.startsWith('file://')) {
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
return convertFileSrc(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
let customIconSrc = $derived.by(() => resolveCustomIconSrc(favoritesPreferences.custom_icon_path));
|
||||||
|
|
||||||
async function scrollToTrack(trackId: number) {
|
async function scrollToTrack(trackId: number) {
|
||||||
await tick();
|
await tick();
|
||||||
|
|||||||
@@ -61,6 +61,8 @@
|
|||||||
downloadStateVersion?: number;
|
downloadStateVersion?: number;
|
||||||
onArtistClick?: (artistId: number) => void;
|
onArtistClick?: (artistId: number) => void;
|
||||||
onTrackPlay?: (track: DisplayTrack) => void;
|
onTrackPlay?: (track: DisplayTrack) => void;
|
||||||
|
activeTrackId?: number | null;
|
||||||
|
isPlaybackActive?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
let {
|
let {
|
||||||
@@ -77,7 +79,9 @@
|
|||||||
checkAlbumFullyDownloaded,
|
checkAlbumFullyDownloaded,
|
||||||
downloadStateVersion,
|
downloadStateVersion,
|
||||||
onArtistClick,
|
onArtistClick,
|
||||||
onTrackPlay
|
onTrackPlay,
|
||||||
|
activeTrackId = null,
|
||||||
|
isPlaybackActive = false
|
||||||
}: Props = $props();
|
}: Props = $props();
|
||||||
|
|
||||||
// Home settings state
|
// Home settings state
|
||||||
@@ -775,6 +779,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="track-list compact">
|
<div class="track-list compact">
|
||||||
{#each continueTracks as track, index}
|
{#each continueTracks as track, index}
|
||||||
|
{@const isActiveTrack = isPlaybackActive && activeTrackId === track.id}
|
||||||
<TrackRow
|
<TrackRow
|
||||||
trackId={track.id}
|
trackId={track.id}
|
||||||
number={index + 1}
|
number={index + 1}
|
||||||
@@ -783,6 +788,7 @@
|
|||||||
album={track.album}
|
album={track.album}
|
||||||
duration={track.duration}
|
duration={track.duration}
|
||||||
quality={getTrackQuality(track)}
|
quality={getTrackQuality(track)}
|
||||||
|
isPlaying={isActiveTrack}
|
||||||
hideDownload={true}
|
hideDownload={true}
|
||||||
compact={true}
|
compact={true}
|
||||||
onArtistClick={track.artistId && onArtistClick ? () => onArtistClick(track.artistId!) : undefined}
|
onArtistClick={track.artistId && onArtistClick ? () => onArtistClick(track.artistId!) : undefined}
|
||||||
|
|||||||
@@ -131,6 +131,8 @@
|
|||||||
onTrackPlayLater?: (track: LocalTrack) => void;
|
onTrackPlayLater?: (track: LocalTrack) => void;
|
||||||
onTrackAddToPlaylist?: (trackId: number) => void;
|
onTrackAddToPlaylist?: (trackId: number) => void;
|
||||||
onSetLocalQueue?: (trackIds: number[]) => void;
|
onSetLocalQueue?: (trackIds: number[]) => void;
|
||||||
|
activeTrackId?: number | null;
|
||||||
|
isPlaybackActive?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
let {
|
let {
|
||||||
@@ -140,7 +142,9 @@
|
|||||||
onTrackPlayNext,
|
onTrackPlayNext,
|
||||||
onTrackPlayLater,
|
onTrackPlayLater,
|
||||||
onTrackAddToPlaylist,
|
onTrackAddToPlaylist,
|
||||||
onSetLocalQueue
|
onSetLocalQueue,
|
||||||
|
activeTrackId = null,
|
||||||
|
isPlaybackActive = false
|
||||||
}: Props = $props();
|
}: Props = $props();
|
||||||
|
|
||||||
// View state
|
// View state
|
||||||
@@ -1499,6 +1503,7 @@
|
|||||||
artist={track.artist !== selectedAlbum?.artist ? track.artist : undefined}
|
artist={track.artist !== selectedAlbum?.artist ? track.artist : undefined}
|
||||||
duration={formatDuration(track.duration_secs)}
|
duration={formatDuration(track.duration_secs)}
|
||||||
quality={getQualityBadge(track)}
|
quality={getQualityBadge(track)}
|
||||||
|
isPlaying={isPlaybackActive && activeTrackId === track.id}
|
||||||
isLocal={true}
|
isLocal={true}
|
||||||
hideDownload={true}
|
hideDownload={true}
|
||||||
hideFavorite={true}
|
hideFavorite={true}
|
||||||
@@ -2139,6 +2144,7 @@
|
|||||||
artist={track.artist}
|
artist={track.artist}
|
||||||
duration={formatDuration(track.duration_secs)}
|
duration={formatDuration(track.duration_secs)}
|
||||||
quality={getQualityBadge(track)}
|
quality={getQualityBadge(track)}
|
||||||
|
isPlaying={isPlaybackActive && activeTrackId === track.id}
|
||||||
isLocal={true}
|
isLocal={true}
|
||||||
hideDownload={true}
|
hideDownload={true}
|
||||||
hideFavorite={true}
|
hideFavorite={true}
|
||||||
@@ -2162,6 +2168,7 @@
|
|||||||
artist={track.artist}
|
artist={track.artist}
|
||||||
duration={formatDuration(track.duration_secs)}
|
duration={formatDuration(track.duration_secs)}
|
||||||
quality={getQualityBadge(track)}
|
quality={getQualityBadge(track)}
|
||||||
|
isPlaying={isPlaybackActive && activeTrackId === track.id}
|
||||||
isLocal={true}
|
isLocal={true}
|
||||||
hideDownload={true}
|
hideDownload={true}
|
||||||
hideFavorite={true}
|
hideFavorite={true}
|
||||||
|
|||||||
@@ -2058,6 +2058,8 @@
|
|||||||
{downloadStateVersion}
|
{downloadStateVersion}
|
||||||
onArtistClick={handleArtistClick}
|
onArtistClick={handleArtistClick}
|
||||||
onTrackPlay={handleDisplayTrackPlay}
|
onTrackPlay={handleDisplayTrackPlay}
|
||||||
|
activeTrackId={currentTrack?.id ?? null}
|
||||||
|
isPlaybackActive={isPlaying}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
{:else if activeView === 'search'}
|
{:else if activeView === 'search'}
|
||||||
@@ -2168,6 +2170,8 @@
|
|||||||
onTrackAddToPlaylist={(trackId) => openAddToPlaylist([trackId], true)}
|
onTrackAddToPlaylist={(trackId) => openAddToPlaylist([trackId], true)}
|
||||||
onSetLocalQueue={handleSetLocalQueue}
|
onSetLocalQueue={handleSetLocalQueue}
|
||||||
onQobuzArtistClick={handleArtistClick}
|
onQobuzArtistClick={handleArtistClick}
|
||||||
|
activeTrackId={currentTrack?.id ?? null}
|
||||||
|
isPlaybackActive={isPlaying}
|
||||||
/>
|
/>
|
||||||
{:else if activeView === 'playlist' && selectedPlaylistId}
|
{:else if activeView === 'playlist' && selectedPlaylistId}
|
||||||
<PlaylistDetailView
|
<PlaylistDetailView
|
||||||
|
|||||||
Reference in new issue
Block a user