refactor: replace TrackTableView playlist params with TrackContextMenuConfig

feat/music-streaming
Laurent 1 month ago
parent cce5779430
commit b006bf75c3
  1. 27
      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

Loading…
Cancel
Save