Add channel description

This commit is contained in:
Arkadiusz Fal 2022-12-17 14:24:09 +01:00
parent adc32d5ae1
commit 485c4315ac
3 changed files with 37 additions and 3 deletions

View File

@ -25,6 +25,7 @@ extension Video {
name: "The Channel",
bannerURL: URL(string: bannerURL)!,
thumbnailURL: URL(string: thumbnailURL)!,
description: "The best channel that ever existed.\nThe best channel that ever existed. The best channel that ever existed. The best channel that ever existed. The best channel that ever existed. ",
subscriptionsCount: 2300,
totalViews: 3_260_378_817,
videos: []

View File

@ -142,6 +142,7 @@ struct Channel: Identifiable, Hashable {
"name": name,
"bannerURL": bannerURL?.absoluteString as Any,
"thumbnailURL": thumbnailURL?.absoluteString as Any,
"description": description,
"subscriptionsCount": subscriptionsCount as Any,
"subscriptionsText": subscriptionsText as Any,
"totalViews": totalViews as Any,
@ -157,6 +158,7 @@ struct Channel: Identifiable, Hashable {
name: json["name"].stringValue,
bannerURL: json["bannerURL"].url,
thumbnailURL: json["thumbnailURL"].url,
description: json["description"].stringValue,
subscriptionsCount: json["subscriptionsCount"].int,
subscriptionsText: json["subscriptionsText"].string,
totalViews: json["totalViews"].int,

View File

@ -14,6 +14,7 @@ struct ChannelVideosView: View {
@State private var contentType = Channel.ContentType.videos
@StateObject private var contentTypeItems = Store<[ContentItem]>()
@State private var descriptionExpanded = false
@StateObject private var store = Store<Channel>()
@Environment(\.colorScheme) private var colorScheme
@ -68,7 +69,33 @@ struct ChannelVideosView: View {
#endif
VerticalCells(items: contentItems) {
banner
if let description = presentedChannel?.description, !description.isEmpty {
Button {
withAnimation(.spring()) {
descriptionExpanded.toggle()
}
} label: {
VStack(alignment: .leading) {
banner
ZStack(alignment: .topTrailing) {
Text(description)
.frame(maxWidth: .infinity, alignment: .leading)
.lineLimit(descriptionExpanded ? 50 : 1)
.multilineTextAlignment(.leading)
#if os(tvOS)
.foregroundColor(.primary)
#else
.foregroundColor(.secondary)
#endif
}
}
.padding(.bottom, descriptionExpanded ? 10 : 0)
}
.buttonStyle(.plain)
} else {
banner
}
}
.environment(\.inChannelView, true)
.environment(\.listingStyle, channelPlaylistListingStyle)
@ -383,9 +410,13 @@ struct ChannelVideosView: View {
struct ChannelVideosView_Previews: PreviewProvider {
static var previews: some View {
NavigationView {
#if os(macOS)
ChannelVideosView(channel: Video.fixture.channel)
.environment(\.navigationStyle, .sidebar)
}
#else
NavigationView {
ChannelVideosView(channel: Video.fixture.channel)
}
#endif
}
}