From 7df578b61120b591142cd354c0d5f0f92c350008 Mon Sep 17 00:00:00 2001 From: Ruyther Costa Date: Sun, 1 Mar 2026 21:12:57 -0700 Subject: [PATCH 1/6] Added creator property in the News card following similar UI from Apple News app. --- .../Sources/FeedLibrary/Database/FeedDB.swift | 3 +++ .../FeedLibrary/Services/Parser/XMLPost.swift | 1 + .../FeedLibrary/Services/StorageService.swift | 1 + .../Cards/Model/CardContent.swift | 3 +++ .../Cards/Views/LeadingImageCard.swift | 26 ++++++++++++------- .../PreviewData/ContentPreview.swift | 3 +++ .../Extensions/FeedDBExtensions.swift | 1 + MacMagazine/WatchApp/Extension/FeedDB.swift | 2 ++ 8 files changed, 31 insertions(+), 9 deletions(-) diff --git a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Database/FeedDB.swift b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Database/FeedDB.swift index 69741cf8..a1cc9334 100644 --- a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Database/FeedDB.swift +++ b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Database/FeedDB.swift @@ -8,6 +8,7 @@ public final class FeedDB { public var title: String = "" public var subtitle: String = "" public var pubDate: Date = Date() + public var creator: String = "" public var artworkURL: String = "" public var link: String = "" public var categories: [String] = [] @@ -21,6 +22,7 @@ public final class FeedDB { title: String = "", subtitle: String = "", pubDate: Date = Date(), + creator: String = "", artworkURL: String = "", link: String = "", categories: [String] = [], @@ -33,6 +35,7 @@ public final class FeedDB { self.title = title self.subtitle = subtitle self.pubDate = pubDate + self.creator = creator self.artworkURL = artworkURL self.link = link self.categories = categories diff --git a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/Parser/XMLPost.swift b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/Parser/XMLPost.swift index db1d8c33..3d0e95ab 100644 --- a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/Parser/XMLPost.swift +++ b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/Parser/XMLPost.swift @@ -28,6 +28,7 @@ extension Array where Element == XMLPost { title: $0.title, subtitle: "", pubDate: $0.pubDate, + creator: $0.creator, artworkURL: $0.artworkURL, link: $0.link, categories: $0.categories, diff --git a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/StorageService.swift b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/StorageService.swift index 05389e24..82fd48cb 100644 --- a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/StorageService.swift +++ b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/StorageService.swift @@ -25,6 +25,7 @@ extension Database { existing.title = feed.title existing.subtitle = feed.subtitle existing.pubDate = feed.pubDate + existing.creator = feed.creator existing.artworkURL = feed.artworkURL existing.link = feed.link existing.categories = Array(Set(existing.categories + feed.categories)) diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Model/CardContent.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Model/CardContent.swift index 6f324bec..8bacef07 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Model/CardContent.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Model/CardContent.swift @@ -67,6 +67,7 @@ public struct CardContent { public let analytics: AnalyticsManager? public let title: String public let pubDate: Date + public let creator: String? public let artworkUrl: String public let urlToShare: String public let favorite: Bool @@ -81,6 +82,7 @@ public struct CardContent { analytics: AnalyticsManager? = nil, title: String, pubDate: Date, + creator: String? = nil, artworkUrl: String, urlToShare: String, favorite: Bool, @@ -91,6 +93,7 @@ public struct CardContent { self.title = title self.analytics = analytics self.pubDate = pubDate + self.creator = creator self.urlToShare = urlToShare self.artworkUrl = artworkUrl self.favorite = favorite diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift index 81cdd551..4f4efa5f 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift @@ -61,8 +61,7 @@ private extension LeadingImageCard { var metadataContent: some View { VStack(alignment: .leading, spacing: 6) { titleRow - dateRow - Spacer(minLength: 0) + dateAndCreatorRow } .frame(maxWidth: .infinity, alignment: .leading) } @@ -82,12 +81,21 @@ private extension LeadingImageCard { } } - var dateRow: some View { - MetadataContent( - image: "calendar", - text: data.pubDate.toTimeAgoDisplay(showTime: true) - ) - .foregroundStyle(.primary.opacity(0.9)) - .font(.caption2) + var dateAndCreatorRow: some View { + VStack { + HStack(spacing: 4) { + MetadataContent( + image: "calendar", + text: data.pubDate.toTimeAgoDisplay(showTime: true) + ) + if let creator = data.creator, !creator.isEmpty { + Text("•") + Text(creator) + } + } + .foregroundStyle(.primary.opacity(0.9)) + .font(.caption2) + } + .frame(maxHeight: .infinity, alignment: .center) } } diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/PreviewData/ContentPreview.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/PreviewData/ContentPreview.swift index f0f05d66..1c487a54 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/PreviewData/ContentPreview.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/PreviewData/ContentPreview.swift @@ -7,6 +7,7 @@ struct ContentPreview { type: .video(views: "5,6K", likes: "782", duration: "4:46"), title: "Apresento-lhes o… iPhone Pocket?!", pubDate: Date(), + creator: "MacMagazine", artworkUrl: "https://i.ytimg.com/vi/5rKJeiG-Rug/sddefault.jpg", urlToShare: "", favorite: true, @@ -18,6 +19,7 @@ struct ContentPreview { type: .podcast(duration: "45:30"), title: "MacMagazine no Ar #123: Especial WWDC 2024", pubDate: Date(), + creator: "", artworkUrl: "https://macmagazine.com.br/wp-content/uploads/2025/11/28-podcast-1260x709.jpg", urlToShare: "", favorite: true, @@ -29,6 +31,7 @@ struct ContentPreview { type: .news(categories: [.appletv], style: .leadingImage), title: "Apple TV anuncia série de culinária com Awkwafina, vencedora do Emmy e Globo de Ouro", pubDate: Date(), + creator: "", artworkUrl: "https://macmagazine.com.br/wp-content/uploads/2025/11/112025_Apple-TV_announces_The_Unlikely_Cook_with_Awkwafina_Big_Image_02-600x400.jpg", urlToShare: "", favorite: true, diff --git a/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Extensions/FeedDBExtensions.swift b/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Extensions/FeedDBExtensions.swift index fab160bc..a689e851 100644 --- a/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Extensions/FeedDBExtensions.swift +++ b/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Extensions/FeedDBExtensions.swift @@ -21,6 +21,7 @@ extension FeedDB { analytics: analytics, title: self.title, pubDate: self.pubDate, + creator: self.creator, artworkUrl: self.artworkURL, urlToShare: self.link, favorite: self.favorite, diff --git a/MacMagazine/WatchApp/Extension/FeedDB.swift b/MacMagazine/WatchApp/Extension/FeedDB.swift index c474fcee..61943167 100644 --- a/MacMagazine/WatchApp/Extension/FeedDB.swift +++ b/MacMagazine/WatchApp/Extension/FeedDB.swift @@ -39,6 +39,7 @@ extension FeedDB { title: "Apple lança atualização do watchOS", subtitle: "Mudanças importantes para o Apple Watch", pubDate: Date().addingTimeInterval(-3600), + creator: "MacMagazine", artworkURL: "https://picsum.photos/400/400", link: "https://macmagazine.com.br", categories: ["watchos", "news", "teste1", "teste2", "teste 3"], @@ -55,6 +56,7 @@ extension FeedDB { title: "Notícia \(index): título de teste para o Watch", subtitle: "Subtítulo \(index)", pubDate: Date().addingTimeInterval(TimeInterval(-index * 900)), + creator: "MacMagazine", artworkURL: "https://picsum.photos/seed/\(index)/600/600", link: "https://macmagazine.com.br", categories: ["news", "teste1", "teste2", "teste 3"], From 76993710e5189d81b886d8329e80dab018b70555 Mon Sep 17 00:00:00 2001 From: Ruyther Costa Date: Sun, 1 Mar 2026 21:14:34 -0700 Subject: [PATCH 2/6] Fixed UI issue for smaller devices (e.g. iPhone SE) height was not enough for displaying all categories in New tab. --- MacMagazine/MacMagazine/Features/News/NewsView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MacMagazine/MacMagazine/Features/News/NewsView.swift b/MacMagazine/MacMagazine/Features/News/NewsView.swift index aa0baa24..1258ad7b 100644 --- a/MacMagazine/MacMagazine/Features/News/NewsView.swift +++ b/MacMagazine/MacMagazine/Features/News/NewsView.swift @@ -28,7 +28,7 @@ struct NewsView: View { .sheet(isPresented: $category) { categories .presentationDragIndicator(.visible) - .presentationDetents([.fraction(0.33)]) + .presentationDetents([.fraction(0.33), .medium]) } .onChange(of: viewModel.news) { _, newValue in let newCategory = newValue.toNewsCategory From 9050f2d8b04d53b3d445b34751a214ef6654dbdd Mon Sep 17 00:00:00 2001 From: Ruyther Costa Date: Sun, 1 Mar 2026 21:38:12 -0700 Subject: [PATCH 3/6] Added accessibility description and fixed bottom padding for dateAndCreatorRow for iPads. --- .../Cards/Views/LeadingImageCard.swift | 37 ++++++++++++------- .../NewsLibrary/Views/Mock/PreviewData.swift | 1 + 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift index 4f4efa5f..f4b08952 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift @@ -62,6 +62,7 @@ private extension LeadingImageCard { VStack(alignment: .leading, spacing: 6) { titleRow dateAndCreatorRow + Spacer(minLength: 0) } .frame(maxWidth: .infinity, alignment: .leading) } @@ -80,22 +81,30 @@ private extension LeadingImageCard { .highPriorityGesture(TapGesture()) } } - + var dateAndCreatorRow: some View { - VStack { - HStack(spacing: 4) { - MetadataContent( - image: "calendar", - text: data.pubDate.toTimeAgoDisplay(showTime: true) - ) - if let creator = data.creator, !creator.isEmpty { - Text("•") - Text(creator) - } + HStack(spacing: 4) { + MetadataContent( + image: "calendar", + text: data.pubDate.toTimeAgoDisplay(showTime: true) + ) + if let creator = data.creator, !creator.isEmpty { + Text("•") + Text(creator) } - .foregroundStyle(.primary.opacity(0.9)) - .font(.caption2) } - .frame(maxHeight: .infinity, alignment: .center) + .foregroundStyle(.primary.opacity(0.9)) + .font(.caption2) + .lineLimit(1) + .truncationMode(.tail) + .accessibilityElement(children: .ignore) + .accessibilityLabel({ + let dateText = data.pubDate.toTimeAgoDisplay(showTime: true) + if let creator = data.creator, !creator.isEmpty { + return "Publicado \(dateText) por \(creator)" + } else { + return "Publicado \(dateText)" + } + }()) } } diff --git a/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Views/Mock/PreviewData.swift b/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Views/Mock/PreviewData.swift index 8e256304..fb5781f1 100644 --- a/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Views/Mock/PreviewData.swift +++ b/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Views/Mock/PreviewData.swift @@ -20,6 +20,7 @@ enum PreviewData { title: title, subtitle: "Subtítulo da notícia", pubDate: Date().addingTimeInterval(-3600), + creator: "MacMagazine", artworkURL: "https://picsum.photos/id/\(Int.random(in: 100...500))/800/450", link: "https://www.macmagazine.com/", categories: categories, From 1eea09d4a0408d2f8037ae30fa709629b8566e80 Mon Sep 17 00:00:00 2001 From: Ruyther Costa Date: Sun, 1 Mar 2026 21:54:17 -0700 Subject: [PATCH 4/6] Added dateAndCreatorRow view also in GlassCardView. --- .../Cards/Views/GlassCardView.swift | 33 ++++++++++++++----- .../PreviewData/ContentPreview.swift | 3 -- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift index c630a07a..d8cc6b05 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift @@ -162,7 +162,7 @@ private extension GlassCardView { } layout { - dateRow + dateAndCreatorRow Spacer(minLength: 0) duration } @@ -187,7 +187,7 @@ private extension GlassCardView { layout { innerLayout { - dateRow + dateAndCreatorRow statistics } Spacer(minLength: 4) @@ -195,13 +195,30 @@ private extension GlassCardView { } .font(.caption2) } - - var dateRow: some View { - MetadataContent( - image: "calendar", - text: data.pubDate.toTimeAgoDisplay(showTime: false) - ) + + var dateAndCreatorRow: some View { + HStack(spacing: 4) { + MetadataContent( + image: "calendar", + text: data.pubDate.toTimeAgoDisplay(showTime: false) + ) + if let creator = data.creator, !creator.isEmpty { + Text("•") + Text(creator) + } + } .foregroundStyle(.white.opacity(0.9)) + .lineLimit(1) + .truncationMode(.tail) + .accessibilityElement(children: .ignore) + .accessibilityLabel({ + let dateText = data.pubDate.toTimeAgoDisplay(showTime: true) + if let creator = data.creator, !creator.isEmpty { + return "Publicado \(dateText) por \(creator)" + } else { + return "Publicado \(dateText)" + } + }()) } @ViewBuilder diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/PreviewData/ContentPreview.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/PreviewData/ContentPreview.swift index 1c487a54..f0f05d66 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/PreviewData/ContentPreview.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/PreviewData/ContentPreview.swift @@ -7,7 +7,6 @@ struct ContentPreview { type: .video(views: "5,6K", likes: "782", duration: "4:46"), title: "Apresento-lhes o… iPhone Pocket?!", pubDate: Date(), - creator: "MacMagazine", artworkUrl: "https://i.ytimg.com/vi/5rKJeiG-Rug/sddefault.jpg", urlToShare: "", favorite: true, @@ -19,7 +18,6 @@ struct ContentPreview { type: .podcast(duration: "45:30"), title: "MacMagazine no Ar #123: Especial WWDC 2024", pubDate: Date(), - creator: "", artworkUrl: "https://macmagazine.com.br/wp-content/uploads/2025/11/28-podcast-1260x709.jpg", urlToShare: "", favorite: true, @@ -31,7 +29,6 @@ struct ContentPreview { type: .news(categories: [.appletv], style: .leadingImage), title: "Apple TV anuncia série de culinária com Awkwafina, vencedora do Emmy e Globo de Ouro", pubDate: Date(), - creator: "", artworkUrl: "https://macmagazine.com.br/wp-content/uploads/2025/11/112025_Apple-TV_announces_The_Unlikely_Cook_with_Awkwafina_Big_Image_02-600x400.jpg", urlToShare: "", favorite: true, From a4080b26e7e7024c66f36ba99fec8f4381eeeb8c Mon Sep 17 00:00:00 2001 From: Ruyther Costa Date: Sun, 1 Mar 2026 22:03:34 -0700 Subject: [PATCH 5/6] Fixed lint warnings. --- .../MacMagazineUILibrary/Cards/Views/GlassCardView.swift | 2 +- .../MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift index d8cc6b05..34a983ec 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift @@ -195,7 +195,7 @@ private extension GlassCardView { } .font(.caption2) } - + var dateAndCreatorRow: some View { HStack(spacing: 4) { MetadataContent( diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift index f4b08952..73ea7e12 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift @@ -81,7 +81,7 @@ private extension LeadingImageCard { .highPriorityGesture(TapGesture()) } } - + var dateAndCreatorRow: some View { HStack(spacing: 4) { MetadataContent( From 821ffb18469450571ea3fc9150f489ca784b0159 Mon Sep 17 00:00:00 2001 From: Ruyther Costa Date: Mon, 2 Mar 2026 20:26:15 -0700 Subject: [PATCH 6/6] Fixed code review commented issues. --- .../Sources/FeedLibrary/Database/FeedDB.swift | 6 +-- .../FeedLibrary/Services/Parser/XMLPost.swift | 2 +- .../FeedLibrary/Services/StorageService.swift | 2 +- .../Cards/Model/CardContent.swift | 6 +-- .../Cards/Views/GlassCardView.swift | 41 +++++++++--------- .../Cards/Views/LeadingImageCard.swift | 42 +++++++++---------- .../Extensions/FeedDBExtensions.swift | 2 +- .../NewsLibrary/Views/Mock/PreviewData.swift | 2 +- MacMagazine/WatchApp/Extension/FeedDB.swift | 2 - 9 files changed, 49 insertions(+), 56 deletions(-) diff --git a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Database/FeedDB.swift b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Database/FeedDB.swift index a1cc9334..6511e0f0 100644 --- a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Database/FeedDB.swift +++ b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Database/FeedDB.swift @@ -8,7 +8,7 @@ public final class FeedDB { public var title: String = "" public var subtitle: String = "" public var pubDate: Date = Date() - public var creator: String = "" + public var author: String? public var artworkURL: String = "" public var link: String = "" public var categories: [String] = [] @@ -22,7 +22,7 @@ public final class FeedDB { title: String = "", subtitle: String = "", pubDate: Date = Date(), - creator: String = "", + author: String? = nil, artworkURL: String = "", link: String = "", categories: [String] = [], @@ -35,7 +35,7 @@ public final class FeedDB { self.title = title self.subtitle = subtitle self.pubDate = pubDate - self.creator = creator + self.author = author self.artworkURL = artworkURL self.link = link self.categories = categories diff --git a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/Parser/XMLPost.swift b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/Parser/XMLPost.swift index 3d0e95ab..7c173d79 100644 --- a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/Parser/XMLPost.swift +++ b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/Parser/XMLPost.swift @@ -28,7 +28,7 @@ extension Array where Element == XMLPost { title: $0.title, subtitle: "", pubDate: $0.pubDate, - creator: $0.creator, + author: $0.creator, artworkURL: $0.artworkURL, link: $0.link, categories: $0.categories, diff --git a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/StorageService.swift b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/StorageService.swift index 82fd48cb..5e825850 100644 --- a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/StorageService.swift +++ b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/StorageService.swift @@ -25,7 +25,7 @@ extension Database { existing.title = feed.title existing.subtitle = feed.subtitle existing.pubDate = feed.pubDate - existing.creator = feed.creator + existing.author = feed.author existing.artworkURL = feed.artworkURL existing.link = feed.link existing.categories = Array(Set(existing.categories + feed.categories)) diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Model/CardContent.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Model/CardContent.swift index 8bacef07..90c44941 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Model/CardContent.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Model/CardContent.swift @@ -67,7 +67,7 @@ public struct CardContent { public let analytics: AnalyticsManager? public let title: String public let pubDate: Date - public let creator: String? + public let author: String? public let artworkUrl: String public let urlToShare: String public let favorite: Bool @@ -82,7 +82,7 @@ public struct CardContent { analytics: AnalyticsManager? = nil, title: String, pubDate: Date, - creator: String? = nil, + author: String? = nil, artworkUrl: String, urlToShare: String, favorite: Bool, @@ -93,7 +93,7 @@ public struct CardContent { self.title = title self.analytics = analytics self.pubDate = pubDate - self.creator = creator + self.author = author self.urlToShare = urlToShare self.artworkUrl = artworkUrl self.favorite = favorite diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift index 34a983ec..60cb525d 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift @@ -162,7 +162,7 @@ private extension GlassCardView { } layout { - dateAndCreatorRow + dateRow Spacer(minLength: 0) duration } @@ -187,7 +187,8 @@ private extension GlassCardView { layout { innerLayout { - dateAndCreatorRow + dateRow + authorRow statistics } Spacer(minLength: 4) @@ -196,29 +197,25 @@ private extension GlassCardView { .font(.caption2) } - var dateAndCreatorRow: some View { - HStack(spacing: 4) { + var dateRow: some View { + MetadataContent( + image: "calendar", + text: data.pubDate.toTimeAgoDisplay(showTime: true) + ) + .foregroundStyle(.white.opacity(0.9)) + } + + @ViewBuilder + var authorRow: some View { + if let authorName = data.author, !authorName.isEmpty { MetadataContent( - image: "calendar", - text: data.pubDate.toTimeAgoDisplay(showTime: false) + image: "person.fill", + text: authorName ) - if let creator = data.creator, !creator.isEmpty { - Text("•") - Text(creator) - } + .foregroundStyle(.white.opacity(0.9)) + } else { + EmptyView() } - .foregroundStyle(.white.opacity(0.9)) - .lineLimit(1) - .truncationMode(.tail) - .accessibilityElement(children: .ignore) - .accessibilityLabel({ - let dateText = data.pubDate.toTimeAgoDisplay(showTime: true) - if let creator = data.creator, !creator.isEmpty { - return "Publicado \(dateText) por \(creator)" - } else { - return "Publicado \(dateText)" - } - }()) } @ViewBuilder diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift index 73ea7e12..a2948f39 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift @@ -61,7 +61,8 @@ private extension LeadingImageCard { var metadataContent: some View { VStack(alignment: .leading, spacing: 6) { titleRow - dateAndCreatorRow + dateRow + authorRow Spacer(minLength: 0) } .frame(maxWidth: .infinity, alignment: .leading) @@ -82,29 +83,26 @@ private extension LeadingImageCard { } } - var dateAndCreatorRow: some View { - HStack(spacing: 4) { + var dateRow: some View { + MetadataContent( + image: "calendar", + text: data.pubDate.toTimeAgoDisplay(showTime: true) + ) + .foregroundStyle(.primary.opacity(0.9)) + .font(.caption2) + } + + @ViewBuilder + var authorRow: some View { + if let authorName = data.author, !authorName.isEmpty { MetadataContent( - image: "calendar", - text: data.pubDate.toTimeAgoDisplay(showTime: true) + image: "person.fill", + text: authorName ) - if let creator = data.creator, !creator.isEmpty { - Text("•") - Text(creator) - } + .foregroundStyle(.primary.opacity(0.9)) + .font(.caption2) + } else { + EmptyView() } - .foregroundStyle(.primary.opacity(0.9)) - .font(.caption2) - .lineLimit(1) - .truncationMode(.tail) - .accessibilityElement(children: .ignore) - .accessibilityLabel({ - let dateText = data.pubDate.toTimeAgoDisplay(showTime: true) - if let creator = data.creator, !creator.isEmpty { - return "Publicado \(dateText) por \(creator)" - } else { - return "Publicado \(dateText)" - } - }()) } } diff --git a/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Extensions/FeedDBExtensions.swift b/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Extensions/FeedDBExtensions.swift index a689e851..8c067d96 100644 --- a/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Extensions/FeedDBExtensions.swift +++ b/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Extensions/FeedDBExtensions.swift @@ -21,7 +21,7 @@ extension FeedDB { analytics: analytics, title: self.title, pubDate: self.pubDate, - creator: self.creator, + author: self.author, artworkUrl: self.artworkURL, urlToShare: self.link, favorite: self.favorite, diff --git a/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Views/Mock/PreviewData.swift b/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Views/Mock/PreviewData.swift index fb5781f1..f2cfdd72 100644 --- a/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Views/Mock/PreviewData.swift +++ b/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Views/Mock/PreviewData.swift @@ -20,7 +20,7 @@ enum PreviewData { title: title, subtitle: "Subtítulo da notícia", pubDate: Date().addingTimeInterval(-3600), - creator: "MacMagazine", + author: "MacMagazine", artworkURL: "https://picsum.photos/id/\(Int.random(in: 100...500))/800/450", link: "https://www.macmagazine.com/", categories: categories, diff --git a/MacMagazine/WatchApp/Extension/FeedDB.swift b/MacMagazine/WatchApp/Extension/FeedDB.swift index 61943167..c474fcee 100644 --- a/MacMagazine/WatchApp/Extension/FeedDB.swift +++ b/MacMagazine/WatchApp/Extension/FeedDB.swift @@ -39,7 +39,6 @@ extension FeedDB { title: "Apple lança atualização do watchOS", subtitle: "Mudanças importantes para o Apple Watch", pubDate: Date().addingTimeInterval(-3600), - creator: "MacMagazine", artworkURL: "https://picsum.photos/400/400", link: "https://macmagazine.com.br", categories: ["watchos", "news", "teste1", "teste2", "teste 3"], @@ -56,7 +55,6 @@ extension FeedDB { title: "Notícia \(index): título de teste para o Watch", subtitle: "Subtítulo \(index)", pubDate: Date().addingTimeInterval(TimeInterval(-index * 900)), - creator: "MacMagazine", artworkURL: "https://picsum.photos/seed/\(index)/600/600", link: "https://macmagazine.com.br", categories: ["news", "teste1", "teste2", "teste 3"],