diff --git a/Fixtures/Video+Fixtures.swift b/Fixtures/Video+Fixtures.swift index fcf1b5fb..101cfd94 100644 --- a/Fixtures/Video+Fixtures.swift +++ b/Fixtures/Video+Fixtures.swift @@ -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: [] diff --git a/Model/Channel.swift b/Model/Channel.swift index 4bdb1561..b146964e 100644 --- a/Model/Channel.swift +++ b/Model/Channel.swift @@ -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, diff --git a/Shared/Channels/ChannelVideosView.swift b/Shared/Channels/ChannelVideosView.swift index 57b3a5d5..e55dc240 100644 --- a/Shared/Channels/ChannelVideosView.swift +++ b/Shared/Channels/ChannelVideosView.swift @@ -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() @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 } }