yattee/Apple TV/PlaylistsView.swift

76 lines
1.8 KiB
Swift
Raw Normal View History

2021-06-26 09:39:35 +00:00
import SwiftUI
struct PlaylistsView: View {
@EnvironmentObject private var state: AppState
@ObservedObject private var provider = PlaylistsProvider()
@State private var selectedPlaylist: Playlist?
var body: some View {
Section {
VStack(alignment: .leading, spacing: 2) {
HStack(alignment: .top) {
Spacer()
selectPlaylistButton
Spacer()
}
.padding(.bottom, 5)
VStack {
if selectedPlaylist != nil {
2021-06-26 23:29:55 +00:00
VideosView(videos: selectedPlaylist!.videos)
2021-06-26 09:39:35 +00:00
}
}
}
}.task {
Task {
provider.load { playlists in
selectedPlaylist = playlists.first
}
}
}
}
var playlists: [Playlist] {
if provider.playlists.isEmpty {
provider.load()
}
return provider.playlists
}
var selectPlaylistButton: some View {
Button(selectedPlaylist?.title ?? "Select playlist") {
guard selectedPlaylist != nil else {
return
}
selectedPlaylist = playlists.next(after: selectedPlaylist!)
}
.contextMenu {
ForEach(provider.playlists) { playlist in
Button(playlist.title) {
selectedPlaylist = playlist
}
}
}
}
}
extension Array where Element: Equatable {
func next(after element: Element) -> Element? {
2021-06-26 11:37:24 +00:00
let idx = firstIndex(of: element)
if idx == nil {
return first
}
let next = index(after: idx!)
2021-06-26 09:39:35 +00:00
return self[next == endIndex ? startIndex : next]
}
}