From bd97d060a0d183baa5ebcb6648b450f301013373 Mon Sep 17 00:00:00 2001 From: Laurent Date: Sat, 30 May 2026 13:19:52 +0200 Subject: [PATCH] feat: wire TrackContextMenuConfig to bottom controls and track table Extract shared `trackContextMenuConfig` computed property and pass it to both TrackTableView and PlayerControlsView, so right-clicking the now-playing area shows the same context menu as right-clicking a track row. --- Music/ContentView.swift | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/Music/ContentView.swift b/Music/ContentView.swift index 5264381..f70abd5 100644 --- a/Music/ContentView.swift +++ b/Music/ContentView.swift @@ -178,20 +178,7 @@ struct ContentView: View { player.setQueue(trackList) player.play(track) }, - playlists: playlist.playlists, - lastUsedPlaylistName: playlist.lastUsedPlaylistName, - selectedPlaylist: playlist.selectedPlaylist, - onAddToPlaylist: { track, targetPlaylist in - try? playlist.addTrack(track, to: targetPlaylist) - }, - onAddToLastPlaylist: { track in - try? playlist.addTrackToLastUsedPlaylist(track) - }, - onRemoveFromPlaylist: playlist.selectedPlaylist != nil ? { track in - if let selected = playlist.selectedPlaylist { - try? playlist.removeTrack(track, from: selected) - } - } : nil, + contextMenuConfig: trackContextMenuConfig, onReorder: playlist.selectedPlaylist != nil ? { from, to in if let selected = playlist.selectedPlaylist { try? playlist.moveTrack(in: selected, from: from, to: to) @@ -368,6 +355,25 @@ struct ContentView: View { } } + private var trackContextMenuConfig: TrackContextMenuConfig { + TrackContextMenuConfig( + playlists: playlist.playlists, + lastUsedPlaylistName: playlist.lastUsedPlaylistName, + selectedPlaylist: playlist.selectedPlaylist, + onAddToPlaylist: { track, targetPlaylist in + try? playlist.addTrack(track, to: targetPlaylist) + }, + onAddToLastPlaylist: { track in + try? playlist.addTrackToLastUsedPlaylist(track) + }, + onRemoveFromPlaylist: playlist.selectedPlaylist != nil ? { track in + if let selected = playlist.selectedPlaylist { + try? playlist.removeTrack(track, from: selected) + } + } : nil + ) + } + private var playerControls: some View { PlayerControlsView( currentTrack: player.currentTrack, @@ -397,7 +403,8 @@ struct ContentView: View { onScrubEnd: { player.endScrubbing(at: $0) }, onVolumeChange: { player.setVolume($0) }, onShuffleToggle: { player.toggleShuffle() }, - onNowPlayingTap: { scrollToPlayingTrigger = UUID() } + onNowPlayingTap: { scrollToPlayingTrigger = UUID() }, + contextMenuConfig: trackContextMenuConfig ) }