diff --git a/Music/Views/TrackTableView.swift b/Music/Views/TrackTableView.swift index ecb919a..ae48535 100644 --- a/Music/Views/TrackTableView.swift +++ b/Music/Views/TrackTableView.swift @@ -42,12 +42,7 @@ struct TrackTableView: NSViewRepresentable { let sortAscending: Bool let onSort: (String) -> Void let onDoubleClick: (Track) -> Void - var playlists: [Playlist] - var lastUsedPlaylistName: String? - var selectedPlaylist: Playlist? - var onAddToPlaylist: ((Track, Playlist) -> Void)? - var onAddToLastPlaylist: ((Track) -> Void)? - var onRemoveFromPlaylist: ((Track) -> Void)? + var contextMenuConfig: TrackContextMenuConfig? var onReorder: ((Int, Int) -> Void)? var scrollToPlayingTrigger: UUID = UUID() @@ -333,8 +328,9 @@ struct TrackTableView: NSViewRepresentable { func menuNeedsUpdate(_ menu: NSMenu) { menu.removeAllItems() guard let tableView, tableView.clickedRow >= 0, tableView.clickedRow < tracks.count else { return } + guard let config = parent.contextMenuConfig else { return } - if let lastPlaylistName = parent.lastUsedPlaylistName, parent.onAddToLastPlaylist != nil { + if let lastPlaylistName = config.lastUsedPlaylistName, config.onAddToLastPlaylist != nil { let lastItem = NSMenuItem( title: "Add to \(lastPlaylistName)", action: #selector(addToLastPlaylist(_:)), @@ -345,9 +341,9 @@ struct TrackTableView: NSViewRepresentable { menu.addItem(.separator()) } - if !parent.playlists.isEmpty { + if !config.playlists.isEmpty { let submenu = NSMenu() - for (index, playlist) in parent.playlists.enumerated() { + for (index, playlist) in config.playlists.enumerated() { let item = NSMenuItem( title: playlist.name, action: #selector(addToPlaylist(_:)), @@ -362,7 +358,7 @@ struct TrackTableView: NSViewRepresentable { menu.addItem(submenuItem) } - if parent.selectedPlaylist != nil, parent.onRemoveFromPlaylist != nil { + if config.selectedPlaylist != nil, config.onRemoveFromPlaylist != nil { menu.addItem(.separator()) let removeItem = NSMenuItem( title: "Remove from Playlist", @@ -376,21 +372,24 @@ struct TrackTableView: NSViewRepresentable { @objc func addToPlaylist(_ sender: NSMenuItem) { guard let tableView, tableView.clickedRow >= 0, tableView.clickedRow < tracks.count else { return } + guard let config = parent.contextMenuConfig else { return } let track = tracks[tableView.clickedRow] - let playlist = parent.playlists[sender.tag] - parent.onAddToPlaylist?(track, playlist) + let playlist = config.playlists[sender.tag] + config.onAddToPlaylist(track, playlist) } @objc func addToLastPlaylist(_ sender: NSMenuItem) { guard let tableView, tableView.clickedRow >= 0, tableView.clickedRow < tracks.count else { return } + guard let config = parent.contextMenuConfig else { return } let track = tracks[tableView.clickedRow] - parent.onAddToLastPlaylist?(track) + config.onAddToLastPlaylist?(track) } @objc func removeFromPlaylist(_ sender: NSMenuItem) { guard let tableView, tableView.clickedRow >= 0, tableView.clickedRow < tracks.count else { return } + guard let config = parent.contextMenuConfig else { return } let track = tracks[tableView.clickedRow] - parent.onRemoveFromPlaylist?(track) + config.onRemoveFromPlaylist?(track) } // MARK: - Drag and Drop