From 485c4315acc38a249e79462388f86fb8a383bf1c Mon Sep 17 00:00:00 2001 From: Arkadiusz Fal Date: Sat, 17 Dec 2022 14:24:09 +0100 Subject: [PATCH] Add channel description --- Fixtures/Video+Fixtures.swift | 1 + Model/Channel.swift | 2 ++ Shared/Channels/ChannelVideosView.swift | 37 +++++++++++++++++++++++-- 3 files changed, 37 insertions(+), 3 deletions(-) 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 } }