mirror of
https://github.com/yattee/yattee.git
synced 2024-11-15 10:38:22 +00:00
79 lines
1.9 KiB
Swift
79 lines
1.9 KiB
Swift
import Foundation
|
|
import SwiftUI
|
|
|
|
struct ChannelLinkView<ChannelLabel: View>: View {
|
|
let channel: Channel
|
|
let channelLabel: ChannelLabel
|
|
|
|
@Environment(\.inChannelView) private var inChannelView
|
|
@Environment(\.inNavigationView) private var inNavigationView
|
|
@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, inNavigationView {
|
|
channelNavigationLink
|
|
} else {
|
|
channelButton
|
|
#if os(macOS)
|
|
.onHover(perform: onHover(_:))
|
|
#endif
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
|
|
@ViewBuilder private var channelNavigationLink: some View {
|
|
NavigationLink(destination: ChannelVideosView(channel: channel)) {
|
|
channelLabel
|
|
.lineLimit(1)
|
|
}
|
|
}
|
|
|
|
@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
|
|
}
|