1
0
mirror of https://github.com/yattee/yattee.git synced 2024-12-15 23:00:32 +05:30
yattee/Shared/Channels/ChannelListItem.swift

98 lines
2.4 KiB
Swift
Raw Normal View History

import SwiftUI
struct ChannelListItem: View {
var channel: Channel
@Environment(\.inChannelView) private var inChannelView
@Environment(\.inNavigationView) private var inNavigationView
@Environment(\.navigationStyle) private var navigationStyle
var body: some View {
channelControl
.contentShape(Rectangle())
}
@ViewBuilder private var channelControl: some View {
if !channel.name.isEmpty {
#if os(tvOS)
channelButton
#else
if navigationStyle == .tab, inNavigationView {
channelNavigationLink
} else {
channelButton
}
#endif
}
}
@ViewBuilder private var channelNavigationLink: some View {
NavigationLink(destination: ChannelVideosView(channel: channel)) {
label
}
}
@ViewBuilder private var channelButton: some View {
Button {
guard !inChannelView else { return }
NavigationModel.shared.openChannel(
channel,
navigationStyle: navigationStyle
)
} label: {
label
}
#if os(tvOS)
.buttonStyle(.card)
#else
.buttonStyle(.plain)
#endif
.help("\(channel.name) Channel")
}
@ViewBuilder private var displayAuthor: some View {
if !channel.name.isEmpty {
Text(channel.name)
.fontWeight(.semibold)
}
}
private var label: some View {
HStack(alignment: .top, spacing: 12) {
VStack {
ChannelAvatarView(channel: channel)
#if os(tvOS)
.frame(width: 90, height: 90)
#else
.frame(width: 60, height: 60)
#endif
}
.frame(width: thumbnailWidth)
displayAuthor
.multilineTextAlignment(.leading)
}
.frame(maxWidth: .infinity, alignment: .leading)
#if os(tvOS)
.frame(minHeight: 120)
#else
.frame(minHeight: 60)
#endif
}
private var thumbnailWidth: Double {
#if os(tvOS)
250
#else
100
#endif
}
}
struct ChannelListItem_Previews: PreviewProvider {
static var previews: some View {
ChannelListItem(channel: Video.fixture.channel)
}
}