Files
MobileMusicAssistant/Mobile Music Assistant/HelpersMANavigationDestination.swift
2026-04-19 16:57:57 +02:00

61 lines
2.0 KiB
Swift

//
// MANavigationDestination.swift
// Mobile Music Assistant
//
// Created by Sven Hanold on 26.03.26.
//
import SwiftUI
/// Central navigation destination enum for type-safe navigation throughout the app
enum MANavigationDestination: Hashable {
case artist(MAArtist)
case album(MAAlbum)
case playlist(MAPlaylist)
case podcast(MAPodcast)
case genre(MAGenre)
}
/// ViewModifier to apply all navigation destinations consistently
struct MANavigationDestinations: ViewModifier {
func body(content: Content) -> some View {
content
.navigationDestination(for: MAArtist.self) { artist in
ArtistDetailView(artist: artist)
}
.navigationDestination(for: MAAlbum.self) { album in
AlbumDetailView(album: album)
}
.navigationDestination(for: MAPlaylist.self) { playlist in
PlaylistDetailView(playlist: playlist)
}
.navigationDestination(for: MAPodcast.self) { podcast in
PodcastDetailView(podcast: podcast)
}
.navigationDestination(for: MAGenre.self) { genre in
GenreDetailView(genre: genre)
}
.navigationDestination(for: MANavigationDestination.self) { destination in
switch destination {
case .artist(let artist):
ArtistDetailView(artist: artist)
case .album(let album):
AlbumDetailView(album: album)
case .playlist(let playlist):
PlaylistDetailView(playlist: playlist)
case .podcast(let podcast):
PodcastDetailView(podcast: podcast)
case .genre(let genre):
GenreDetailView(genre: genre)
}
}
}
}
extension View {
/// Apply standard Music Assistant navigation destinations to any view
func withMANavigation() -> some View {
modifier(MANavigationDestinations())
}
}