1
0
mirror of https://github.com/yattee/yattee.git synced 2024-12-14 06:10:32 +05:30
yattee/Shared/Channels/ChannelLinkView.swift

78 lines
1.9 KiB
Swift
Raw Normal View History

import Foundation
import SwiftUI
struct ChannelLinkView<ChannelLabel: View>: View {
let channel: Channel
let channelLabel: ChannelLabel
@Environment(\.inChannelView) private var inChannelView
2022-12-14 22:40:50 +05:30
@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
2022-12-14 22:40:50 +05:30
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
}
}
@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
}