feat(track-info): integrate TrackInfoModal with views
Phase 3 - Integration: - Add onTrackShowInfo prop to TrackRow, AlbumDetailView, PlaylistDetailView, SearchView - Add TrackInfoModal to +page.svelte with state management - Pass showTrackInfo callback from main page to all views cc
This commit is contained in:
1 parent
e767809857
commit
6601a3a5e6
5 files changed
+36
No files matched your search
@@ -49,6 +49,7 @@
|
|||||||
onShareSonglink?: () => void;
|
onShareSonglink?: () => void;
|
||||||
onGoToAlbum?: () => void;
|
onGoToAlbum?: () => void;
|
||||||
onGoToArtist?: () => void;
|
onGoToArtist?: () => void;
|
||||||
|
onShowInfo?: () => void;
|
||||||
onDownload?: () => void;
|
onDownload?: () => void;
|
||||||
isTrackDownloaded?: boolean;
|
isTrackDownloaded?: boolean;
|
||||||
onReDownload?: () => void;
|
onReDownload?: () => void;
|
||||||
@@ -248,6 +249,7 @@
|
|||||||
onShareSonglink={menuActions?.onShareSonglink}
|
onShareSonglink={menuActions?.onShareSonglink}
|
||||||
onGoToAlbum={menuActions?.onGoToAlbum}
|
onGoToAlbum={menuActions?.onGoToAlbum}
|
||||||
onGoToArtist={menuActions?.onGoToArtist}
|
onGoToArtist={menuActions?.onGoToArtist}
|
||||||
|
onShowInfo={menuActions?.onShowInfo}
|
||||||
onDownload={menuActions?.onDownload}
|
onDownload={menuActions?.onDownload}
|
||||||
isTrackDownloaded={menuActions?.isTrackDownloaded}
|
isTrackDownloaded={menuActions?.isTrackDownloaded}
|
||||||
onReDownload={menuActions?.onReDownload}
|
onReDownload={menuActions?.onReDownload}
|
||||||
|
|||||||
@@ -60,6 +60,7 @@
|
|||||||
onTrackShareSonglink?: (track: Track) => void;
|
onTrackShareSonglink?: (track: Track) => void;
|
||||||
onTrackGoToAlbum?: (albumId: string) => void;
|
onTrackGoToAlbum?: (albumId: string) => void;
|
||||||
onTrackGoToArtist?: (artistId: number) => void;
|
onTrackGoToArtist?: (artistId: number) => void;
|
||||||
|
onTrackShowInfo?: (trackId: number) => void;
|
||||||
onPlayAll?: () => void;
|
onPlayAll?: () => void;
|
||||||
onShuffleAll?: () => void;
|
onShuffleAll?: () => void;
|
||||||
onPlayAllNext?: () => void;
|
onPlayAllNext?: () => void;
|
||||||
@@ -103,6 +104,7 @@
|
|||||||
onTrackShareSonglink,
|
onTrackShareSonglink,
|
||||||
onTrackGoToAlbum,
|
onTrackGoToAlbum,
|
||||||
onTrackGoToArtist,
|
onTrackGoToArtist,
|
||||||
|
onTrackShowInfo,
|
||||||
onPlayAll,
|
onPlayAll,
|
||||||
onShuffleAll,
|
onShuffleAll,
|
||||||
onPlayAllNext,
|
onPlayAllNext,
|
||||||
@@ -408,6 +410,7 @@
|
|||||||
onShareQobuz: onTrackShareQobuz ? () => onTrackShareQobuz(track.id) : undefined,
|
onShareQobuz: onTrackShareQobuz ? () => onTrackShareQobuz(track.id) : undefined,
|
||||||
onShareSonglink: onTrackShareSonglink ? () => onTrackShareSonglink(track) : undefined,
|
onShareSonglink: onTrackShareSonglink ? () => onTrackShareSonglink(track) : undefined,
|
||||||
onGoToArtist: album.artistId && onTrackGoToArtist ? () => onTrackGoToArtist(album.artistId!) : undefined,
|
onGoToArtist: album.artistId && onTrackGoToArtist ? () => onTrackGoToArtist(album.artistId!) : undefined,
|
||||||
|
onShowInfo: onTrackShowInfo ? () => onTrackShowInfo(track.id) : undefined,
|
||||||
onDownload: onTrackDownload ? () => onTrackDownload(track) : undefined,
|
onDownload: onTrackDownload ? () => onTrackDownload(track) : undefined,
|
||||||
isTrackDownloaded,
|
isTrackDownloaded,
|
||||||
onReDownload: isTrackDownloaded && onTrackReDownload ? () => onTrackReDownload(track) : undefined,
|
onReDownload: isTrackDownloaded && onTrackReDownload ? () => onTrackReDownload(track) : undefined,
|
||||||
|
|||||||
@@ -127,6 +127,7 @@
|
|||||||
onTrackShareSonglink?: (track: DisplayTrack) => void;
|
onTrackShareSonglink?: (track: DisplayTrack) => void;
|
||||||
onTrackGoToAlbum?: (albumId: string) => void;
|
onTrackGoToAlbum?: (albumId: string) => void;
|
||||||
onTrackGoToArtist?: (artistId: number) => void;
|
onTrackGoToArtist?: (artistId: number) => void;
|
||||||
|
onTrackShowInfo?: (trackId: number) => void;
|
||||||
onTrackDownload?: (track: DisplayTrack) => void;
|
onTrackDownload?: (track: DisplayTrack) => void;
|
||||||
onTrackRemoveDownload?: (trackId: number) => void;
|
onTrackRemoveDownload?: (trackId: number) => void;
|
||||||
onTrackReDownload?: (track: DisplayTrack) => void;
|
onTrackReDownload?: (track: DisplayTrack) => void;
|
||||||
@@ -155,6 +156,7 @@
|
|||||||
onTrackShareSonglink,
|
onTrackShareSonglink,
|
||||||
onTrackGoToAlbum,
|
onTrackGoToAlbum,
|
||||||
onTrackGoToArtist,
|
onTrackGoToArtist,
|
||||||
|
onTrackShowInfo,
|
||||||
onTrackDownload,
|
onTrackDownload,
|
||||||
onTrackRemoveDownload,
|
onTrackRemoveDownload,
|
||||||
onTrackReDownload,
|
onTrackReDownload,
|
||||||
@@ -1213,6 +1215,7 @@
|
|||||||
onShareSonglink: !track.isLocal && onTrackShareSonglink ? () => onTrackShareSonglink(track) : undefined,
|
onShareSonglink: !track.isLocal && onTrackShareSonglink ? () => onTrackShareSonglink(track) : undefined,
|
||||||
onGoToAlbum: !track.isLocal && track.albumId && onTrackGoToAlbum ? () => onTrackGoToAlbum(track.albumId!) : undefined,
|
onGoToAlbum: !track.isLocal && track.albumId && onTrackGoToAlbum ? () => onTrackGoToAlbum(track.albumId!) : undefined,
|
||||||
onGoToArtist: !track.isLocal && track.artistId && onTrackGoToArtist ? () => onTrackGoToArtist(track.artistId!) : undefined,
|
onGoToArtist: !track.isLocal && track.artistId && onTrackGoToArtist ? () => onTrackGoToArtist(track.artistId!) : undefined,
|
||||||
|
onShowInfo: !track.isLocal && onTrackShowInfo ? () => onTrackShowInfo(track.id) : undefined,
|
||||||
onDownload: !track.isLocal && onTrackDownload ? () => onTrackDownload(track) : undefined,
|
onDownload: !track.isLocal && onTrackDownload ? () => onTrackDownload(track) : undefined,
|
||||||
isTrackDownloaded: !track.isLocal ? downloadInfo.status === 'ready' : false,
|
isTrackDownloaded: !track.isLocal ? downloadInfo.status === 'ready' : false,
|
||||||
onReDownload: !track.isLocal && downloadInfo.status === 'ready' && onTrackReDownload ? () => onTrackReDownload(track) : undefined,
|
onReDownload: !track.isLocal && downloadInfo.status === 'ready' && onTrackReDownload ? () => onTrackReDownload(track) : undefined,
|
||||||
|
|||||||
@@ -88,6 +88,7 @@
|
|||||||
onTrackShareSonglink?: (track: Track) => void;
|
onTrackShareSonglink?: (track: Track) => void;
|
||||||
onTrackGoToAlbum?: (albumId: string) => void;
|
onTrackGoToAlbum?: (albumId: string) => void;
|
||||||
onTrackGoToArtist?: (artistId: number) => void;
|
onTrackGoToArtist?: (artistId: number) => void;
|
||||||
|
onTrackShowInfo?: (trackId: number) => void;
|
||||||
onTrackDownload?: (track: Track) => void;
|
onTrackDownload?: (track: Track) => void;
|
||||||
onTrackRemoveDownload?: (trackId: number) => void;
|
onTrackRemoveDownload?: (trackId: number) => void;
|
||||||
onTrackReDownload?: (track: Track) => void;
|
onTrackReDownload?: (track: Track) => void;
|
||||||
@@ -119,6 +120,7 @@
|
|||||||
onTrackShareSonglink,
|
onTrackShareSonglink,
|
||||||
onTrackGoToAlbum,
|
onTrackGoToAlbum,
|
||||||
onTrackGoToArtist,
|
onTrackGoToArtist,
|
||||||
|
onTrackShowInfo,
|
||||||
onTrackDownload,
|
onTrackDownload,
|
||||||
onTrackRemoveDownload,
|
onTrackRemoveDownload,
|
||||||
onTrackReDownload,
|
onTrackReDownload,
|
||||||
@@ -880,6 +882,7 @@
|
|||||||
onShareSonglink={onTrackShareSonglink ? () => onTrackShareSonglink(track) : undefined}
|
onShareSonglink={onTrackShareSonglink ? () => onTrackShareSonglink(track) : undefined}
|
||||||
onGoToAlbum={track.album?.id && onTrackGoToAlbum ? (() => { const albumId = track.album!.id!; return () => onTrackGoToAlbum(albumId); })() : undefined}
|
onGoToAlbum={track.album?.id && onTrackGoToAlbum ? (() => { const albumId = track.album!.id!; return () => onTrackGoToAlbum(albumId); })() : undefined}
|
||||||
onGoToArtist={track.performer?.id && onTrackGoToArtist ? (() => { const artistId = track.performer!.id!; return () => onTrackGoToArtist(artistId); })() : undefined}
|
onGoToArtist={track.performer?.id && onTrackGoToArtist ? (() => { const artistId = track.performer!.id!; return () => onTrackGoToArtist(artistId); })() : undefined}
|
||||||
|
onShowInfo={onTrackShowInfo ? () => onTrackShowInfo(track.id) : undefined}
|
||||||
onDownload={onTrackDownload ? () => onTrackDownload(track) : undefined}
|
onDownload={onTrackDownload ? () => onTrackDownload(track) : undefined}
|
||||||
isTrackDownloaded={isTrackDownloaded}
|
isTrackDownloaded={isTrackDownloaded}
|
||||||
onReDownload={isTrackDownloaded && onTrackReDownload ? () => onTrackReDownload(track) : undefined}
|
onReDownload={isTrackDownloaded && onTrackReDownload ? () => onTrackReDownload(track) : undefined}
|
||||||
@@ -1014,6 +1017,7 @@
|
|||||||
onShareSonglink={onTrackShareSonglink ? () => onTrackShareSonglink(track) : undefined}
|
onShareSonglink={onTrackShareSonglink ? () => onTrackShareSonglink(track) : undefined}
|
||||||
onGoToAlbum={track.album?.id && onTrackGoToAlbum ? (() => { const albumId = track.album!.id!; return () => onTrackGoToAlbum(albumId); })() : undefined}
|
onGoToAlbum={track.album?.id && onTrackGoToAlbum ? (() => { const albumId = track.album!.id!; return () => onTrackGoToAlbum(albumId); })() : undefined}
|
||||||
onGoToArtist={track.performer?.id && onTrackGoToArtist ? (() => { const artistId = track.performer!.id!; return () => onTrackGoToArtist(artistId); })() : undefined}
|
onGoToArtist={track.performer?.id && onTrackGoToArtist ? (() => { const artistId = track.performer!.id!; return () => onTrackGoToArtist(artistId); })() : undefined}
|
||||||
|
onShowInfo={onTrackShowInfo ? () => onTrackShowInfo(track.id) : undefined}
|
||||||
onDownload={onTrackDownload ? () => onTrackDownload(track) : undefined}
|
onDownload={onTrackDownload ? () => onTrackDownload(track) : undefined}
|
||||||
isTrackDownloaded={isTrackDownloaded}
|
isTrackDownloaded={isTrackDownloaded}
|
||||||
onReDownload={isTrackDownloaded && onTrackReDownload ? () => onTrackReDownload(track) : undefined}
|
onReDownload={isTrackDownloaded && onTrackReDownload ? () => onTrackReDownload(track) : undefined}
|
||||||
|
|||||||
@@ -282,6 +282,7 @@
|
|||||||
import FocusMode from '$lib/components/FocusMode.svelte';
|
import FocusMode from '$lib/components/FocusMode.svelte';
|
||||||
import PlaylistModal from '$lib/components/PlaylistModal.svelte';
|
import PlaylistModal from '$lib/components/PlaylistModal.svelte';
|
||||||
import PlaylistImportModal from '$lib/components/PlaylistImportModal.svelte';
|
import PlaylistImportModal from '$lib/components/PlaylistImportModal.svelte';
|
||||||
|
import TrackInfoModal from '$lib/components/TrackInfoModal.svelte';
|
||||||
import CastPicker from '$lib/components/CastPicker.svelte';
|
import CastPicker from '$lib/components/CastPicker.svelte';
|
||||||
import LyricsSidebar from '$lib/components/lyrics/LyricsSidebar.svelte';
|
import LyricsSidebar from '$lib/components/lyrics/LyricsSidebar.svelte';
|
||||||
import OfflinePlaceholder from '$lib/components/OfflinePlaceholder.svelte';
|
import OfflinePlaceholder from '$lib/components/OfflinePlaceholder.svelte';
|
||||||
@@ -337,6 +338,10 @@
|
|||||||
let playlistModalTracksAreLocal = $state(false);
|
let playlistModalTracksAreLocal = $state(false);
|
||||||
let isPlaylistImportOpen = $state(false);
|
let isPlaylistImportOpen = $state(false);
|
||||||
let isAboutModalOpen = $state(false);
|
let isAboutModalOpen = $state(false);
|
||||||
|
|
||||||
|
// Track Info Modal State
|
||||||
|
let isTrackInfoOpen = $state(false);
|
||||||
|
let trackInfoTrackId = $state<number | null>(null);
|
||||||
let userPlaylists = $state<{ id: number; name: string; tracks_count: number }[]>([]);
|
let userPlaylists = $state<{ id: number; name: string; tracks_count: number }[]>([]);
|
||||||
|
|
||||||
// Sidebar reference for refreshing playlists
|
// Sidebar reference for refreshing playlists
|
||||||
@@ -1667,6 +1672,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Track Info Modal
|
||||||
|
function showTrackInfo(trackId: number) {
|
||||||
|
trackInfoTrackId = trackId;
|
||||||
|
isTrackInfoOpen = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Auth Handlers
|
// Auth Handlers
|
||||||
async function handleStartOffline() {
|
async function handleStartOffline() {
|
||||||
// Enable manual offline mode and enter app without authentication
|
// Enable manual offline mode and enter app without authentication
|
||||||
@@ -2430,6 +2441,7 @@
|
|||||||
onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)}
|
onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)}
|
||||||
onTrackGoToAlbum={handleAlbumClick}
|
onTrackGoToAlbum={handleAlbumClick}
|
||||||
onTrackGoToArtist={handleArtistClick}
|
onTrackGoToArtist={handleArtistClick}
|
||||||
|
onTrackShowInfo={showTrackInfo}
|
||||||
onTrackDownload={handleDisplayTrackDownload}
|
onTrackDownload={handleDisplayTrackDownload}
|
||||||
onTrackReDownload={handleDisplayTrackDownload}
|
onTrackReDownload={handleDisplayTrackDownload}
|
||||||
onTrackRemoveDownload={handleTrackRemoveDownload}
|
onTrackRemoveDownload={handleTrackRemoveDownload}
|
||||||
@@ -2462,6 +2474,7 @@
|
|||||||
onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)}
|
onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)}
|
||||||
onTrackGoToAlbum={handleAlbumClick}
|
onTrackGoToAlbum={handleAlbumClick}
|
||||||
onTrackGoToArtist={handleArtistClick}
|
onTrackGoToArtist={handleArtistClick}
|
||||||
|
onTrackShowInfo={showTrackInfo}
|
||||||
onPlayAll={handlePlayAllAlbum}
|
onPlayAll={handlePlayAllAlbum}
|
||||||
onShuffleAll={handleShuffleAlbum}
|
onShuffleAll={handleShuffleAlbum}
|
||||||
onPlayAllNext={handleAddAlbumToQueueNext}
|
onPlayAllNext={handleAddAlbumToQueueNext}
|
||||||
@@ -2546,6 +2559,7 @@
|
|||||||
onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)}
|
onTrackShareSonglink={(track) => shareSonglinkTrack(track.id, track.isrc)}
|
||||||
onTrackGoToAlbum={handleAlbumClick}
|
onTrackGoToAlbum={handleAlbumClick}
|
||||||
onTrackGoToArtist={handleArtistClick}
|
onTrackGoToArtist={handleArtistClick}
|
||||||
|
onTrackShowInfo={showTrackInfo}
|
||||||
onTrackDownload={handleDisplayTrackDownload}
|
onTrackDownload={handleDisplayTrackDownload}
|
||||||
onTrackRemoveDownload={handleTrackRemoveDownload}
|
onTrackRemoveDownload={handleTrackRemoveDownload}
|
||||||
onTrackReDownload={handleDisplayTrackDownload}
|
onTrackReDownload={handleDisplayTrackDownload}
|
||||||
@@ -2828,6 +2842,16 @@
|
|||||||
onClose={() => isAboutModalOpen = false}
|
onClose={() => isAboutModalOpen = false}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<!-- Track Info Modal -->
|
||||||
|
<TrackInfoModal
|
||||||
|
isOpen={isTrackInfoOpen}
|
||||||
|
trackId={trackInfoTrackId}
|
||||||
|
onClose={() => {
|
||||||
|
isTrackInfoOpen = false;
|
||||||
|
trackInfoTrackId = null;
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
<!-- Cast Picker -->
|
<!-- Cast Picker -->
|
||||||
<CastPicker
|
<CastPicker
|
||||||
isOpen={isCastPickerOpen}
|
isOpen={isCastPickerOpen}
|
||||||
|
|||||||
Reference in new issue
Block a user