Add channels thumbnails to cells and list

This commit is contained in:
Arkadiusz Fal
2022-12-14 12:56:47 +01:00
parent 3b31f21c81
commit 037d3a0481
7 changed files with 155 additions and 120 deletions

View File

@@ -0,0 +1,76 @@
import Foundation
import SwiftUI
struct ChannelLinkView<ChannelLabel: View>: View {
let channel: Channel
let channelLabel: ChannelLabel
@Environment(\.inChannelView) private var inChannelView
@Environment(\.navigationStyle) private var navigationStyle
init(
channel: Channel,
@ViewBuilder channelLabel: () -> ChannelLabel
) {
self.channel = channel
self.channelLabel = channelLabel()
}
var body: some View {
channelControl
}
@ViewBuilder private var channelControl: some View {
if !channel.name.isEmpty {
#if os(tvOS)
channelLabel
#else
if navigationStyle == .tab {
channelNavigationLink
} else {
channelButton
#if os(macOS)
.onHover(perform: onHover(_:))
#endif
}
#endif
}
}
@ViewBuilder private var channelNavigationLink: some View {
NavigationLink(destination: ChannelVideosView(channel: channel)) {
channelLabel
}
}
@ViewBuilder private var channelButton: some View {
Button {
guard !inChannelView else {
return
}
NavigationModel.shared.openChannel(
channel,
navigationStyle: navigationStyle
)
} label: {
channelLabel
}
#if os(tvOS)
.buttonStyle(.card)
#else
.buttonStyle(.plain)
#endif
.help("\(channel.name) Channel")
}
#if os(macOS)
private func onHover(_ inside: Bool) {
if inside {
NSCursor.pointingHand.push()
} else {
NSCursor.pop()
}
}
#endif
}