From 3f2fbeeec41d4cb65a63c020c977f2afe2583c1c Mon Sep 17 00:00:00 2001 From: Thomas Ricouard Date: Thu, 18 Jul 2024 20:10:49 +0200 Subject: [PATCH 1/4] Remove id in ForEach --- .../StatusKit/Sources/StatusKit/List/StatusesListView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/StatusKit/Sources/StatusKit/List/StatusesListView.swift b/Packages/StatusKit/Sources/StatusKit/List/StatusesListView.swift index 43f3c368..09c47706 100644 --- a/Packages/StatusKit/Sources/StatusKit/List/StatusesListView.swift +++ b/Packages/StatusKit/Sources/StatusKit/List/StatusesListView.swift @@ -44,7 +44,7 @@ public struct StatusesListView: View where Fetcher: StatusesFetcher { .listRowSeparator(.hidden) case let .display(statuses, nextPageState): - ForEach(statuses, id: \.id) { status in + ForEach(statuses) { status in StatusRowView(viewModel: StatusRowViewModel(status: status, client: client, routerPath: routerPath, From 54768772b55556a9548e06d450827865ca04d794 Mon Sep 17 00:00:00 2001 From: Thomas Ricouard Date: Thu, 18 Jul 2024 20:59:13 +0200 Subject: [PATCH 2/4] Remove external init for StatusRowView --- .../Tabs/Settings/DisplaySettingsView.swift | 4 ++-- .../Sources/Account/AccountDetailView.swift | 2 +- .../Explore/Sources/Explore/ExploreView.swift | 6 +++--- .../Notifications/NotificationRowView.swift | 18 +++++++++--------- .../StatusKit/Detail/StatusDetailView.swift | 2 +- .../Sources/StatusKit/Editor/EditorView.swift | 3 ++- .../StatusKit/Embed/StatusEmbeddedView.swift | 3 ++- .../StatusKit/List/StatusesListView.swift | 6 ++++-- .../StatusKit/Row/StatusRowExternalView.swift | 15 +++++++++++++++ .../Sources/StatusKit/Row/StatusRowView.swift | 11 ++++------- .../Row/Subviews/StatusRowContextMenu.swift | 2 +- 11 files changed, 44 insertions(+), 28 deletions(-) create mode 100644 Packages/StatusKit/Sources/StatusKit/Row/StatusRowExternalView.swift diff --git a/IceCubesApp/App/Tabs/Settings/DisplaySettingsView.swift b/IceCubesApp/App/Tabs/Settings/DisplaySettingsView.swift index 0e3ce244..7327fc5f 100644 --- a/IceCubesApp/App/Tabs/Settings/DisplaySettingsView.swift +++ b/IceCubesApp/App/Tabs/Settings/DisplaySettingsView.swift @@ -37,7 +37,7 @@ struct DisplaySettingsView: View { ZStack(alignment: .top) { Form { #if !os(visionOS) - StatusRowView(viewModel: previewStatusViewModel) + StatusRowExternalView(viewModel: previewStatusViewModel) .allowsHitTesting(false) .opacity(0) .hidden() @@ -85,7 +85,7 @@ struct DisplaySettingsView: View { private var examplePost: some View { VStack(spacing: 0) { - StatusRowView(viewModel: previewStatusViewModel) + StatusRowExternalView(viewModel: previewStatusViewModel) .allowsHitTesting(false) .padding(.layoutPadding) .background(theme.primaryBackgroundColor) diff --git a/Packages/Account/Sources/Account/AccountDetailView.swift b/Packages/Account/Sources/Account/AccountDetailView.swift index 9bf02fbd..85119479 100644 --- a/Packages/Account/Sources/Account/AccountDetailView.swift +++ b/Packages/Account/Sources/Account/AccountDetailView.swift @@ -242,7 +242,7 @@ public struct AccountDetailView: View { .listRowBackground(theme.primaryBackgroundColor) #endif ForEach(viewModel.pinned) { status in - StatusRowView(viewModel: .init(status: status, client: client, routerPath: routerPath)) + StatusRowExternalView(viewModel: .init(status: status, client: client, routerPath: routerPath)) } Rectangle() #if os(visionOS) diff --git a/Packages/Explore/Sources/Explore/ExploreView.swift b/Packages/Explore/Sources/Explore/ExploreView.swift index be1d3ae5..0675cde5 100644 --- a/Packages/Explore/Sources/Explore/ExploreView.swift +++ b/Packages/Explore/Sources/Explore/ExploreView.swift @@ -155,7 +155,7 @@ public struct ExploreView: View { private var loadingView: some View { ForEach(Status.placeholders()) { status in - StatusRowView(viewModel: .init(status: status, client: client, routerPath: routerPath)) + StatusRowExternalView(viewModel: .init(status: status, client: client, routerPath: routerPath)) .padding(.vertical, 8) .redacted(reason: .placeholder) .allowsHitTesting(false) @@ -201,7 +201,7 @@ public struct ExploreView: View { if !results.statuses.isEmpty, viewModel.searchScope == .all || viewModel.searchScope == .posts { Section("explore.section.posts") { ForEach(results.statuses) { status in - StatusRowView(viewModel: .init(status: status, client: client, routerPath: routerPath)) + StatusRowExternalView(viewModel: .init(status: status, client: client, routerPath: routerPath)) #if !os(visionOS) .listRowBackground(theme.primaryBackgroundColor) #else @@ -279,7 +279,7 @@ public struct ExploreView: View { ForEach(viewModel.trendingStatuses .prefix(upTo: viewModel.trendingStatuses.count > 3 ? 3 : viewModel.trendingStatuses.count)) { status in - StatusRowView(viewModel: .init(status: status, client: client, routerPath: routerPath)) + StatusRowExternalView(viewModel: .init(status: status, client: client, routerPath: routerPath)) #if !os(visionOS) .listRowBackground(theme.primaryBackgroundColor) #else diff --git a/Packages/Notifications/Sources/Notifications/NotificationRowView.swift b/Packages/Notifications/Sources/Notifications/NotificationRowView.swift index b512c039..e180fb53 100644 --- a/Packages/Notifications/Sources/Notifications/NotificationRowView.swift +++ b/Packages/Notifications/Sources/Notifications/NotificationRowView.swift @@ -156,17 +156,17 @@ struct NotificationRowView: View { if let status = notification.status { HStack { if type == .mention { - StatusRowView(viewModel: .init(status: status, - client: client, - routerPath: routerPath, - showActions: true)) + StatusRowExternalView(viewModel: .init(status: status, + client: client, + routerPath: routerPath, + showActions: true)) .environment(\.isMediaCompact, false) } else { - StatusRowView(viewModel: .init(status: status, - client: client, - routerPath: routerPath, - showActions: false, - textDisabled: true)) + StatusRowExternalView(viewModel: .init(status: status, + client: client, + routerPath: routerPath, + showActions: false, + textDisabled: true)) .lineLimit(4) .environment(\.isMediaCompact, true) } diff --git a/Packages/StatusKit/Sources/StatusKit/Detail/StatusDetailView.swift b/Packages/StatusKit/Sources/StatusKit/Detail/StatusDetailView.swift index ee5bbe11..648d0bb5 100644 --- a/Packages/StatusKit/Sources/StatusKit/Detail/StatusDetailView.swift +++ b/Packages/StatusKit/Sources/StatusKit/Detail/StatusDetailView.swift @@ -155,7 +155,7 @@ public struct StatusDetailView: View { private var loadingDetailView: some View { ForEach(Status.placeholders()) { status in - StatusRowView(viewModel: .init(status: status, client: client, routerPath: routerPath)) + StatusRowView(viewModel: .init(status: status, client: client, routerPath: routerPath), context: .timeline) .redacted(reason: .placeholder) .allowsHitTesting(false) } diff --git a/Packages/StatusKit/Sources/StatusKit/Editor/EditorView.swift b/Packages/StatusKit/Sources/StatusKit/Editor/EditorView.swift index a445cc61..70b56db1 100644 --- a/Packages/StatusKit/Sources/StatusKit/Editor/EditorView.swift +++ b/Packages/StatusKit/Sources/StatusKit/Editor/EditorView.swift @@ -129,7 +129,8 @@ extension StatusEditor { StatusRowView(viewModel: .init(status: status, client: client, routerPath: RouterPath(), - showActions: false)) + showActions: false), + context: .timeline) .accessibilityLabel(status.content.asRawText) .environment(RouterPath()) .allowsHitTesting(false) diff --git a/Packages/StatusKit/Sources/StatusKit/Embed/StatusEmbeddedView.swift b/Packages/StatusKit/Sources/StatusKit/Embed/StatusEmbeddedView.swift index df96a64b..86343216 100644 --- a/Packages/StatusKit/Sources/StatusKit/Embed/StatusEmbeddedView.swift +++ b/Packages/StatusKit/Sources/StatusKit/Embed/StatusEmbeddedView.swift @@ -26,7 +26,8 @@ public struct StatusEmbeddedView: View { StatusRowView(viewModel: .init(status: status, client: client, routerPath: routerPath, - showActions: false)) + showActions: false), + context: .timeline) .accessibilityLabel(status.content.asRawText) .environment(\.isCompact, true) .environment(\.isMediaCompact, true) diff --git a/Packages/StatusKit/Sources/StatusKit/List/StatusesListView.swift b/Packages/StatusKit/Sources/StatusKit/List/StatusesListView.swift index 09c47706..c9ac217e 100644 --- a/Packages/StatusKit/Sources/StatusKit/List/StatusesListView.swift +++ b/Packages/StatusKit/Sources/StatusKit/List/StatusesListView.swift @@ -29,7 +29,8 @@ public struct StatusesListView: View where Fetcher: StatusesFetcher { switch fetcher.statusesState { case .loading: ForEach(Status.placeholders()) { status in - StatusRowView(viewModel: .init(status: status, client: client, routerPath: routerPath)) + StatusRowView(viewModel: .init(status: status, client: client, routerPath: routerPath), + context: .timeline) .redacted(reason: .placeholder) .allowsHitTesting(false) } @@ -48,7 +49,8 @@ public struct StatusesListView: View where Fetcher: StatusesFetcher { StatusRowView(viewModel: StatusRowViewModel(status: status, client: client, routerPath: routerPath, - isRemote: isRemote)) + isRemote: isRemote), + context: .timeline) .onAppear { fetcher.statusDidAppear(status: status) } diff --git a/Packages/StatusKit/Sources/StatusKit/Row/StatusRowExternalView.swift b/Packages/StatusKit/Sources/StatusKit/Row/StatusRowExternalView.swift new file mode 100644 index 00000000..4f75e536 --- /dev/null +++ b/Packages/StatusKit/Sources/StatusKit/Row/StatusRowExternalView.swift @@ -0,0 +1,15 @@ +import SwiftUI + +public struct StatusRowExternalView: View { + @State private var viewModel: StatusRowViewModel + private let context: StatusRowView.Context + + public init(viewModel: StatusRowViewModel, context: StatusRowView.Context = .timeline) { + _viewModel = .init(initialValue: viewModel) + self.context = context + } + + public var body: some View { + StatusRowView(viewModel: viewModel, context: context) + } +} diff --git a/Packages/StatusKit/Sources/StatusKit/Row/StatusRowView.swift b/Packages/StatusKit/Sources/StatusKit/Row/StatusRowView.swift index 7cc5981d..8d30e8a9 100644 --- a/Packages/StatusKit/Sources/StatusKit/Row/StatusRowView.swift +++ b/Packages/StatusKit/Sources/StatusKit/Row/StatusRowView.swift @@ -23,17 +23,13 @@ public struct StatusRowView: View { @Environment(Theme.self) private var theme @Environment(Client.self) private var client - @State private var viewModel: StatusRowViewModel @State private var showSelectableText: Bool = false @State private var isBlockConfirmationPresented = false public enum Context { case timeline, detail } - private let context: Context - - public init(viewModel: StatusRowViewModel, context: Context = .timeline) { - _viewModel = .init(initialValue: viewModel) - self.context = context - } + + @State public var viewModel: StatusRowViewModel + public let context: Context var contextMenu: some View { StatusRowContextMenu(viewModel: viewModel, @@ -42,6 +38,7 @@ public struct StatusRowView: View { } public var body: some View { + let _ = Self._printChanges() HStack(spacing: 0) { if !isCompact { HStack(spacing: 3) { diff --git a/Packages/StatusKit/Sources/StatusKit/Row/Subviews/StatusRowContextMenu.swift b/Packages/StatusKit/Sources/StatusKit/Row/Subviews/StatusRowContextMenu.swift index 8d2c4301..e44ae4b9 100644 --- a/Packages/StatusKit/Sources/StatusKit/Row/Subviews/StatusRowContextMenu.swift +++ b/Packages/StatusKit/Sources/StatusKit/Row/Subviews/StatusRowContextMenu.swift @@ -104,7 +104,7 @@ struct StatusRowContextMenu: View { Button { let view = HStack { - StatusRowView(viewModel: viewModel) + StatusRowView(viewModel: viewModel, context: .timeline) .padding(16) } .environment(\.isInCaptureMode, true) From fc6b2129dd7d7f2fe4818380729f9d6a147594f8 Mon Sep 17 00:00:00 2001 From: Thomas Ricouard Date: Thu, 18 Jul 2024 20:59:48 +0200 Subject: [PATCH 3/4] Cleanup --- Packages/StatusKit/Sources/StatusKit/Row/StatusRowView.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Packages/StatusKit/Sources/StatusKit/Row/StatusRowView.swift b/Packages/StatusKit/Sources/StatusKit/Row/StatusRowView.swift index 8d30e8a9..7b0c2c7b 100644 --- a/Packages/StatusKit/Sources/StatusKit/Row/StatusRowView.swift +++ b/Packages/StatusKit/Sources/StatusKit/Row/StatusRowView.swift @@ -38,7 +38,6 @@ public struct StatusRowView: View { } public var body: some View { - let _ = Self._printChanges() HStack(spacing: 0) { if !isCompact { HStack(spacing: 3) { From f18f3e0e84155a658cd12af716647bb50cc976c7 Mon Sep 17 00:00:00 2001 From: Thomas Ricouard Date: Sat, 20 Jul 2024 19:14:31 +0200 Subject: [PATCH 4/4] Bump version to 1.10.46 --- IceCubesApp.xcodeproj/project.pbxproj | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/IceCubesApp.xcodeproj/project.pbxproj b/IceCubesApp.xcodeproj/project.pbxproj index a2375d15..a1e271c9 100644 --- a/IceCubesApp.xcodeproj/project.pbxproj +++ b/IceCubesApp.xcodeproj/project.pbxproj @@ -1193,7 +1193,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.10.45; + MARKETING_VERSION = 1.10.46; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID_PREFIX).IceCubesApp.IceCubesNotifications"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -1228,7 +1228,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.10.45; + MARKETING_VERSION = 1.10.46; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID_PREFIX).IceCubesApp.IceCubesNotifications"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -1267,7 +1267,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.10.45; + MARKETING_VERSION = 1.10.46; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID_PREFIX).IceCubesApp.IceCubesAppWidgetsExtension"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -1303,7 +1303,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.10.45; + MARKETING_VERSION = 1.10.46; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID_PREFIX).IceCubesApp.IceCubesAppWidgetsExtension"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -1336,7 +1336,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.10.45; + MARKETING_VERSION = 1.10.46; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID_PREFIX).IceCubesApp.IceCubesShareExtension"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -1370,7 +1370,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.10.45; + MARKETING_VERSION = 1.10.46; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID_PREFIX).IceCubesApp.IceCubesShareExtension"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -1552,7 +1552,7 @@ LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.10.45; + MARKETING_VERSION = 1.10.46; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID_PREFIX).IceCubesApp"; PRODUCT_NAME = "Ice Cubes"; SDKROOT = auto; @@ -1608,7 +1608,7 @@ LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 13.0; - MARKETING_VERSION = 1.10.45; + MARKETING_VERSION = 1.10.46; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID_PREFIX).IceCubesApp"; PRODUCT_NAME = "Ice Cubes"; SDKROOT = auto; @@ -1643,7 +1643,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.10.45; + MARKETING_VERSION = 1.10.46; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID_PREFIX).IceCubesApp.IceCubesActionExtension"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -1678,7 +1678,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.10.45; + MARKETING_VERSION = 1.10.46; PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_ID_PREFIX).IceCubesApp.IceCubesActionExtension"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos;