From 15b6b9fb9333a331e803f9c3c84a52a2f4dcaf53 Mon Sep 17 00:00:00 2001 From: Marcus Kida Date: Tue, 31 Jan 2023 14:54:05 +0100 Subject: [PATCH] feat(Widget): Implement MultiFollowersCountWidget for medium size --- .../MultiFollowersCountWidget.swift | 2 +- .../MultiFollowersCountWidgetView.swift | 42 ++++++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/WidgetExtension/Variants/MultiFollowersCount/MultiFollowersCountWidget.swift b/WidgetExtension/Variants/MultiFollowersCount/MultiFollowersCountWidget.swift index 1dc4ec7e7..050c8bb47 100644 --- a/WidgetExtension/Variants/MultiFollowersCount/MultiFollowersCountWidget.swift +++ b/WidgetExtension/Variants/MultiFollowersCount/MultiFollowersCountWidget.swift @@ -56,7 +56,7 @@ struct MultiFollowersCountEntry: TimelineEntry { struct MultiFollowersCountWidget: Widget { private var availableFamilies: [WidgetFamily] { - return [.systemSmall] + return [.systemSmall, .systemMedium] } var body: some WidgetConfiguration { diff --git a/WidgetExtension/Variants/MultiFollowersCount/MultiFollowersCountWidgetView.swift b/WidgetExtension/Variants/MultiFollowersCount/MultiFollowersCountWidgetView.swift index 4fb374ea4..a73500d27 100644 --- a/WidgetExtension/Variants/MultiFollowersCount/MultiFollowersCountWidgetView.swift +++ b/WidgetExtension/Variants/MultiFollowersCount/MultiFollowersCountWidgetView.swift @@ -13,7 +13,9 @@ struct MultiFollowersCountWidgetView: View { if let accounts = entry.accounts { switch family { case .systemSmall: - viewForSmallWidgetNoChart(accounts) + viewForSmallWidget(accounts) + case .systemMedium: + viewForMediumWidget(accounts) default: Text("Sorry but this Widget family is unsupported.") } @@ -25,7 +27,7 @@ struct MultiFollowersCountWidgetView: View { } } - private func viewForSmallWidgetNoChart(_ accounts: [FollowersEntryAccountable]) -> some View { + private func viewForSmallWidget(_ accounts: [FollowersEntryAccountable]) -> some View { VStack(alignment: .leading, spacing: 0) { ForEach(accounts, id: \.acct) { account in HStack { @@ -55,4 +57,40 @@ struct MultiFollowersCountWidgetView: View { } .padding(.vertical, 16) } + + private func viewForMediumWidget(_ accounts: [FollowersEntryAccountable]) -> some View { + VStack(alignment: .leading, spacing: 0) { + LazyVGrid(columns: [ + GridItem(.flexible()), + GridItem(.flexible()) + ]) { + ForEach(accounts, id: \.acct) { account in + HStack { + if let avatarImage = account.avatarImage { + Image(uiImage: avatarImage) + .resizable() + .frame(width: 32, height: 32) + .cornerRadius(5) + } + VStack(alignment: .leading) { + Text(account.followersCount.asAbbreviatedCountString()) + .font(.title2) + .lineLimit(1) + .truncationMode(.tail) + + Text("@\(account.acct)") + .font(.caption2) + .foregroundColor(.secondary) + .lineLimit(1) + .truncationMode(.tail) + } + Spacer() + } + .padding(.leading, 20) + } + } + Spacer() + } + .padding(.vertical, 16) + } }