From a291f3114a653e72be6b6fd5f753c453bbfe28cb Mon Sep 17 00:00:00 2001 From: Justin Mazzocchi <2831158+jzzocc@users.noreply.github.com> Date: Mon, 25 Jan 2021 16:45:18 -0800 Subject: [PATCH] Keep references to identity context in view models --- View Controllers/ExploreViewController.swift | 5 +---- .../MainNavigationViewController.swift | 9 +++------ View Controllers/ProfileViewController.swift | 1 - View Controllers/TableViewController.swift | 16 ++++++---------- View Controllers/TimelinesViewController.swift | 6 ++---- .../View Models/AccountViewModel.swift | 2 +- .../View Models/AttachmentViewModel.swift | 2 +- .../View Models/CollectionItemsViewModel.swift | 2 +- .../View Models/CollectionViewModel.swift | 1 + .../View Models/ConversationViewModel.swift | 2 +- .../View Models/EditFilterViewModel.swift | 2 +- .../View Models/ExploreViewModel.swift | 2 +- .../View Models/FiltersViewModel.swift | 2 +- .../View Models/IdentitiesViewModel.swift | 2 +- .../ViewModels/View Models/ListsViewModel.swift | 2 +- .../View Models/MediaPreferencesViewModel.swift | 2 +- .../NotificationTypesPreferencesViewModel.swift | 2 +- .../View Models/NotificationViewModel.swift | 2 +- .../PostingReadingPreferencesViewModel.swift | 2 +- .../View Models/PreferencesViewModel.swift | 3 +-- .../View Models/ProfileViewModel.swift | 4 ++++ .../ViewModels/View Models/StatusViewModel.swift | 2 +- Views/FiltersView.swift | 5 ++--- Views/MainNavigationView.swift | 2 -- Views/MediaPreferencesView.swift | 7 ++++++- Views/PreferencesView.swift | 12 ++++++------ Views/SecondaryNavigationView.swift | 9 +++------ Views/StartupAndSyncingPreferencesView.swift | 5 ++--- Views/TableView.swift | 4 +--- 29 files changed, 52 insertions(+), 65 deletions(-) diff --git a/View Controllers/ExploreViewController.swift b/View Controllers/ExploreViewController.swift index a8501c9..1586e26 100644 --- a/View Controllers/ExploreViewController.swift +++ b/View Controllers/ExploreViewController.swift @@ -7,13 +7,11 @@ import ViewModels final class ExploreViewController: UICollectionViewController { private let viewModel: ExploreViewModel private let rootViewModel: RootViewModel - private let identityContext: IdentityContext private var cancellables = Set() - init(viewModel: ExploreViewModel, rootViewModel: RootViewModel, identityContext: IdentityContext) { + init(viewModel: ExploreViewModel, rootViewModel: RootViewModel) { self.viewModel = viewModel self.rootViewModel = rootViewModel - self.identityContext = identityContext super.init(collectionViewLayout: UICollectionViewFlowLayout()) @@ -36,7 +34,6 @@ final class ExploreViewController: UICollectionViewController { let searchResultsController = TableViewController( viewModel: viewModel.searchViewModel, rootViewModel: rootViewModel, - identityContext: identityContext, insetBottom: false, parentNavigationController: navigationController) diff --git a/View Controllers/MainNavigationViewController.swift b/View Controllers/MainNavigationViewController.swift index 738fbca..6466bb9 100644 --- a/View Controllers/MainNavigationViewController.swift +++ b/View Controllers/MainNavigationViewController.swift @@ -60,15 +60,13 @@ private extension MainNavigationViewController { rootViewModel: rootViewModel), ExploreViewController( viewModel: viewModel.exploreViewModel, - rootViewModel: rootViewModel, - identityContext: viewModel.identityContext) + rootViewModel: rootViewModel) ] if let notificationsViewModel = viewModel.notificationsViewModel { let notificationsViewController = TableViewController( viewModel: notificationsViewModel, - rootViewModel: rootViewModel, - identityContext: viewModel.identityContext) + rootViewModel: rootViewModel) notificationsViewController.tabBarItem = NavigationViewModel.Tab.notifications.tabBarItem @@ -78,8 +76,7 @@ private extension MainNavigationViewController { if let conversationsViewModel = viewModel.conversationsViewModel { let conversationsViewController = TableViewController( viewModel: conversationsViewModel, - rootViewModel: rootViewModel, - identityContext: viewModel.identityContext) + rootViewModel: rootViewModel) conversationsViewController.tabBarItem = NavigationViewModel.Tab.messages.tabBarItem conversationsViewController.navigationItem.title = NavigationViewModel.Tab.messages.title diff --git a/View Controllers/ProfileViewController.swift b/View Controllers/ProfileViewController.swift index cef9903..bb6182e 100644 --- a/View Controllers/ProfileViewController.swift +++ b/View Controllers/ProfileViewController.swift @@ -19,7 +19,6 @@ final class ProfileViewController: TableViewController { super.init( viewModel: viewModel, rootViewModel: rootViewModel, - identityContext: identityContext, parentNavigationController: parentNavigationController) } diff --git a/View Controllers/TableViewController.swift b/View Controllers/TableViewController.swift index 6d3d4ac..db9b283 100644 --- a/View Controllers/TableViewController.swift +++ b/View Controllers/TableViewController.swift @@ -13,7 +13,6 @@ class TableViewController: UITableViewController { private let viewModel: CollectionViewModel private let rootViewModel: RootViewModel - private let identityContext: IdentityContext private let loadingTableFooterView = LoadingTableFooterView() private let webfingerIndicatorView = WebfingerIndicatorView() @Published private var loading = false @@ -30,12 +29,10 @@ class TableViewController: UITableViewController { init(viewModel: CollectionViewModel, rootViewModel: RootViewModel, - identityContext: IdentityContext, insetBottom: Bool = true, parentNavigationController: UINavigationController? = nil) { self.viewModel = viewModel self.rootViewModel = rootViewModel - self.identityContext = identityContext self.insetBottom = insetBottom self.parentNavigationController = parentNavigationController @@ -130,7 +127,7 @@ class TableViewController: UITableViewController { return cellHeightCaches[tableView.frame.width]?[item] ?? item.estimatedHeight(width: tableView.readableContentGuide.layoutFrame.width, - identityContext: identityContext) + identityContext: viewModel.identityContext) } override func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool { @@ -346,10 +343,9 @@ private extension TableViewController { let vc = TableViewController( viewModel: CollectionItemsViewModel( collectionService: collectionService, - identityContext: identityContext), + identityContext: viewModel.identityContext), rootViewModel: rootViewModel, - identityContext: identityContext, - parentNavigationController: parentNavigationController) + parentNavigationController: parentNavigationController) if let parentNavigationController = parentNavigationController { parentNavigationController.pushViewController(vc, animated: true) @@ -360,9 +356,9 @@ private extension TableViewController { let vc = ProfileViewController( viewModel: ProfileViewModel( profileService: profileService, - identityContext: identityContext), + identityContext: viewModel.identityContext), rootViewModel: rootViewModel, - identityContext: identityContext, + identityContext: viewModel.identityContext, parentNavigationController: parentNavigationController) if let parentNavigationController = parentNavigationController { @@ -420,7 +416,7 @@ private extension TableViewController { func compose(inReplyToViewModel: StatusViewModel?, redraft: Status?) { let newStatusViewModel = rootViewModel.newStatusViewModel( - identityContext: identityContext, + identityContext: viewModel.identityContext, inReplyTo: inReplyToViewModel, redraft: redraft) let newStatusViewController = NewStatusViewController(viewModel: newStatusViewModel) diff --git a/View Controllers/TimelinesViewController.swift b/View Controllers/TimelinesViewController.swift index 8ac7e36..32d6826 100644 --- a/View Controllers/TimelinesViewController.swift +++ b/View Controllers/TimelinesViewController.swift @@ -21,8 +21,7 @@ final class TimelinesViewController: UIPageViewController { timelineViewControllers.append( TableViewController( viewModel: viewModel.viewModel(timeline: timeline), - rootViewModel: rootViewModel, - identityContext: viewModel.identityContext)) + rootViewModel: rootViewModel)) segmentedControl.insertSegment(withTitle: timeline.title, at: index, animated: false) } @@ -76,8 +75,7 @@ final class TimelinesViewController: UIPageViewController { let vc = TableViewController( viewModel: self.viewModel.viewModel(timeline: $0), - rootViewModel: self.rootViewModel, - identityContext: self.viewModel.identityContext) + rootViewModel: self.rootViewModel) vc.navigationItem.title = $0.title diff --git a/ViewModels/Sources/ViewModels/View Models/AccountViewModel.swift b/ViewModels/Sources/ViewModels/View Models/AccountViewModel.swift index 56e7579..098f836 100644 --- a/ViewModels/Sources/ViewModels/View Models/AccountViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/AccountViewModel.swift @@ -7,9 +7,9 @@ import ServiceLayer public struct AccountViewModel: CollectionItemViewModel { public let events: AnyPublisher, Never> + public let identityContext: IdentityContext private let accountService: AccountService - private let identityContext: IdentityContext private let eventsSubject = PassthroughSubject, Never>() init(accountService: AccountService, identityContext: IdentityContext) { diff --git a/ViewModels/Sources/ViewModels/View Models/AttachmentViewModel.swift b/ViewModels/Sources/ViewModels/View Models/AttachmentViewModel.swift index 14d32c3..1a00174 100644 --- a/ViewModels/Sources/ViewModels/View Models/AttachmentViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/AttachmentViewModel.swift @@ -10,8 +10,8 @@ public final class AttachmentViewModel: ObservableObject { @Published public var editingDescription: String @Published public var editingFocus: Attachment.Meta.Focus @Published public private(set) var descriptionRemainingCharacters = AttachmentViewModel.descriptionMaxCharacters + public let identityContext: IdentityContext - private let identityContext: IdentityContext private let status: Status? init(attachment: Attachment, identityContext: IdentityContext, status: Status? = nil) { diff --git a/ViewModels/Sources/ViewModels/View Models/CollectionItemsViewModel.swift b/ViewModels/Sources/ViewModels/View Models/CollectionItemsViewModel.swift index d8f1eef..c778aab 100644 --- a/ViewModels/Sources/ViewModels/View Models/CollectionItemsViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/CollectionItemsViewModel.swift @@ -7,6 +7,7 @@ import ServiceLayer // swiftlint:disable file_length public class CollectionItemsViewModel: ObservableObject { + public let identityContext: IdentityContext @Published public var alertItem: AlertItem? public private(set) var nextPageMaxId: String? @@ -15,7 +16,6 @@ public class CollectionItemsViewModel: ObservableObject { maintainScrollPositionItemId: nil, shouldAdjustContentInset: false) private let collectionService: CollectionService - private let identityContext: IdentityContext private var viewModelCache = [CollectionItem: (viewModel: CollectionItemViewModel, events: AnyCancellable)]() private let eventsSubject = PassthroughSubject() private let loadingSubject = PassthroughSubject() diff --git a/ViewModels/Sources/ViewModels/View Models/CollectionViewModel.swift b/ViewModels/Sources/ViewModels/View Models/CollectionViewModel.swift index 5be0fea..5b93468 100644 --- a/ViewModels/Sources/ViewModels/View Models/CollectionViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/CollectionViewModel.swift @@ -4,6 +4,7 @@ import Combine import Foundation public protocol CollectionViewModel { + var identityContext: IdentityContext { get } var updates: AnyPublisher { get } var title: AnyPublisher { get } var titleLocalizationComponents: AnyPublisher<[String], Never> { get } diff --git a/ViewModels/Sources/ViewModels/View Models/ConversationViewModel.swift b/ViewModels/Sources/ViewModels/View Models/ConversationViewModel.swift index 9c42a12..6fa9e97 100644 --- a/ViewModels/Sources/ViewModels/View Models/ConversationViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/ConversationViewModel.swift @@ -9,9 +9,9 @@ public final class ConversationViewModel: CollectionItemViewModel, ObservableObj public let accountViewModels: [AccountViewModel] public let statusViewModel: StatusViewModel? public let events: AnyPublisher, Never> + public let identityContext: IdentityContext private let conversationService: ConversationService - private let identityContext: IdentityContext private let eventsSubject = PassthroughSubject, Never>() init(conversationService: ConversationService, identityContext: IdentityContext) { diff --git a/ViewModels/Sources/ViewModels/View Models/EditFilterViewModel.swift b/ViewModels/Sources/ViewModels/View Models/EditFilterViewModel.swift index b7bf80c..b47e968 100644 --- a/ViewModels/Sources/ViewModels/View Models/EditFilterViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/EditFilterViewModel.swift @@ -10,12 +10,12 @@ public final class EditFilterViewModel: ObservableObject { @Published public var saving = false @Published public var alertItem: AlertItem? public let saveCompleted: AnyPublisher + public let identityContext: IdentityContext public var date: Date { didSet { filter.expiresAt = date } } - private let identityContext: IdentityContext private let saveCompletedSubject = PassthroughSubject() private var cancellables = Set() diff --git a/ViewModels/Sources/ViewModels/View Models/ExploreViewModel.swift b/ViewModels/Sources/ViewModels/View Models/ExploreViewModel.swift index 5f355e9..6f92081 100644 --- a/ViewModels/Sources/ViewModels/View Models/ExploreViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/ExploreViewModel.swift @@ -5,9 +5,9 @@ import ServiceLayer public final class ExploreViewModel: ObservableObject { public let searchViewModel: SearchViewModel + public let identityContext: IdentityContext private let exploreService: ExploreService - private let identityContext: IdentityContext init(service: ExploreService, identityContext: IdentityContext) { exploreService = service diff --git a/ViewModels/Sources/ViewModels/View Models/FiltersViewModel.swift b/ViewModels/Sources/ViewModels/View Models/FiltersViewModel.swift index 92ff673..f09ee51 100644 --- a/ViewModels/Sources/ViewModels/View Models/FiltersViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/FiltersViewModel.swift @@ -9,8 +9,8 @@ public final class FiltersViewModel: ObservableObject { @Published public var activeFilters = [Filter]() @Published public var expiredFilters = [Filter]() @Published public var alertItem: AlertItem? + public let identityContext: IdentityContext - private let identityContext: IdentityContext private var cancellables = Set() public init(identityContext: IdentityContext) { diff --git a/ViewModels/Sources/ViewModels/View Models/IdentitiesViewModel.swift b/ViewModels/Sources/ViewModels/View Models/IdentitiesViewModel.swift index 42f2dd2..0b6c96f 100644 --- a/ViewModels/Sources/ViewModels/View Models/IdentitiesViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/IdentitiesViewModel.swift @@ -10,8 +10,8 @@ public final class IdentitiesViewModel: ObservableObject { @Published public var unauthenticated = [Identity]() @Published public var pending = [Identity]() @Published public var alertItem: AlertItem? + public let identityContext: IdentityContext - private let identityContext: IdentityContext private var cancellables = Set() public init(identityContext: IdentityContext) { diff --git a/ViewModels/Sources/ViewModels/View Models/ListsViewModel.swift b/ViewModels/Sources/ViewModels/View Models/ListsViewModel.swift index c0922ec..efcd915 100644 --- a/ViewModels/Sources/ViewModels/View Models/ListsViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/ListsViewModel.swift @@ -9,8 +9,8 @@ public final class ListsViewModel: ObservableObject { @Published public private(set) var lists = [List]() @Published public private(set) var creatingList = false @Published public var alertItem: AlertItem? + public let identityContext: IdentityContext - private let identityContext: IdentityContext private var cancellables = Set() public init(identityContext: IdentityContext) { diff --git a/ViewModels/Sources/ViewModels/View Models/MediaPreferencesViewModel.swift b/ViewModels/Sources/ViewModels/View Models/MediaPreferencesViewModel.swift index 3964f6e..dce9df7 100644 --- a/ViewModels/Sources/ViewModels/View Models/MediaPreferencesViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/MediaPreferencesViewModel.swift @@ -5,7 +5,7 @@ import Foundation import ServiceLayer public final class MediaPreferencesViewModel: ObservableObject { - private let identityContext: IdentityContext + public let identityContext: IdentityContext public init(identityContext: IdentityContext) { self.identityContext = identityContext diff --git a/ViewModels/Sources/ViewModels/View Models/NotificationTypesPreferencesViewModel.swift b/ViewModels/Sources/ViewModels/View Models/NotificationTypesPreferencesViewModel.swift index 574c76f..280eaf5 100644 --- a/ViewModels/Sources/ViewModels/View Models/NotificationTypesPreferencesViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/NotificationTypesPreferencesViewModel.swift @@ -8,8 +8,8 @@ import ServiceLayer public final class NotificationTypesPreferencesViewModel: ObservableObject { @Published public var pushSubscriptionAlerts: PushSubscription.Alerts @Published public var alertItem: AlertItem? + public let identityContext: IdentityContext - private let identityContext: IdentityContext private var cancellables = Set() public init(identityContext: IdentityContext) { diff --git a/ViewModels/Sources/ViewModels/View Models/NotificationViewModel.swift b/ViewModels/Sources/ViewModels/View Models/NotificationViewModel.swift index 436292f..ca044f7 100644 --- a/ViewModels/Sources/ViewModels/View Models/NotificationViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/NotificationViewModel.swift @@ -9,9 +9,9 @@ public final class NotificationViewModel: CollectionItemViewModel, ObservableObj public let accountViewModel: AccountViewModel public let statusViewModel: StatusViewModel? public let events: AnyPublisher, Never> + public let identityContext: IdentityContext private let notificationService: NotificationService - private let identityContext: IdentityContext private let eventsSubject = PassthroughSubject, Never>() init(notificationService: NotificationService, identityContext: IdentityContext) { diff --git a/ViewModels/Sources/ViewModels/View Models/PostingReadingPreferencesViewModel.swift b/ViewModels/Sources/ViewModels/View Models/PostingReadingPreferencesViewModel.swift index 6301313..cbc37bb 100644 --- a/ViewModels/Sources/ViewModels/View Models/PostingReadingPreferencesViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/PostingReadingPreferencesViewModel.swift @@ -7,8 +7,8 @@ import ServiceLayer public final class PostingReadingPreferencesViewModel: ObservableObject { @Published public var preferences: Identity.Preferences @Published public var alertItem: AlertItem? + public let identityContext: IdentityContext - private let identityContext: IdentityContext private var cancellables = Set() public init(identityContext: IdentityContext) { diff --git a/ViewModels/Sources/ViewModels/View Models/PreferencesViewModel.swift b/ViewModels/Sources/ViewModels/View Models/PreferencesViewModel.swift index f6b46c2..73bcc53 100644 --- a/ViewModels/Sources/ViewModels/View Models/PreferencesViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/PreferencesViewModel.swift @@ -6,8 +6,7 @@ import ServiceLayer public final class PreferencesViewModel: ObservableObject { public let handle: String public let shouldShowNotificationTypePreferences: Bool - - private let identityContext: IdentityContext + public let identityContext: IdentityContext public init(identityContext: IdentityContext) { self.identityContext = identityContext diff --git a/ViewModels/Sources/ViewModels/View Models/ProfileViewModel.swift b/ViewModels/Sources/ViewModels/View Models/ProfileViewModel.swift index 8610574..2b5bf2d 100644 --- a/ViewModels/Sources/ViewModels/View Models/ProfileViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/ProfileViewModel.swift @@ -62,6 +62,10 @@ public extension ProfileViewModel { } extension ProfileViewModel: CollectionViewModel { + public var identityContext: IdentityContext { + collectionViewModel.value.identityContext + } + public var updates: AnyPublisher { collectionViewModel.flatMap(\.updates).eraseToAnyPublisher() } diff --git a/ViewModels/Sources/ViewModels/View Models/StatusViewModel.swift b/ViewModels/Sources/ViewModels/View Models/StatusViewModel.swift index 3b3fbf4..7eb4833 100644 --- a/ViewModels/Sources/ViewModels/View Models/StatusViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/StatusViewModel.swift @@ -19,9 +19,9 @@ public final class StatusViewModel: CollectionItemViewModel, AttachmentsRenderin @Published public var pollOptionSelections = Set() public var configuration = CollectionItem.StatusConfiguration.default public let events: AnyPublisher, Never> + public let identityContext: IdentityContext private let statusService: StatusService - private let identityContext: IdentityContext private let eventsSubject = PassthroughSubject, Never>() init(statusService: StatusService, identityContext: IdentityContext) { diff --git a/Views/FiltersView.swift b/Views/FiltersView.swift index 7417792..bd80d56 100644 --- a/Views/FiltersView.swift +++ b/Views/FiltersView.swift @@ -6,13 +6,12 @@ import ViewModels struct FiltersView: View { @StateObject var viewModel: FiltersViewModel - @EnvironmentObject var identityContext: IdentityContext var body: some View { Form { Section { NavigationLink(destination: EditFilterView( - viewModel: .init(filter: .new, identityContext: identityContext))) { + viewModel: .init(filter: .new, identityContext: viewModel.identityContext))) { Label("add", systemImage: "plus.circle") } } @@ -37,7 +36,7 @@ private extension FiltersView { Section(header: Text(title)) { ForEach(filters) { filter in NavigationLink(destination: EditFilterView( - viewModel: .init(filter: filter, identityContext: identityContext))) { + viewModel: .init(filter: filter, identityContext: viewModel.identityContext))) { HStack { Text(filter.phrase) Spacer() diff --git a/Views/MainNavigationView.swift b/Views/MainNavigationView.swift index ee922c4..b663ea1 100644 --- a/Views/MainNavigationView.swift +++ b/Views/MainNavigationView.swift @@ -6,7 +6,6 @@ import ViewModels struct MainNavigationView: UIViewControllerRepresentable { let viewModelClosure: () -> NavigationViewModel @EnvironmentObject var rootViewModel: RootViewModel - @EnvironmentObject var identityContext: IdentityContext func makeUIViewController(context: Context) -> MainNavigationViewController { MainNavigationViewController( @@ -25,7 +24,6 @@ import PreviewViewModels struct MainNavigationView_Previews: PreviewProvider { static var previews: some View { MainNavigationView { NavigationViewModel(identityContext: .preview) } - .environmentObject(IdentityContext.preview) .environmentObject(RootViewModel.preview) } } diff --git a/Views/MediaPreferencesView.swift b/Views/MediaPreferencesView.swift index fffc073..2b28488 100644 --- a/Views/MediaPreferencesView.swift +++ b/Views/MediaPreferencesView.swift @@ -5,9 +5,14 @@ import ViewModels struct MediaPreferencesView: View { @StateObject var viewModel: MediaPreferencesViewModel - @EnvironmentObject var identityContext: IdentityContext + @StateObject var identityContext: IdentityContext @Environment(\.accessibilityReduceMotion) var accessibilityReduceMotion + init(viewModel: MediaPreferencesViewModel) { + _viewModel = StateObject(wrappedValue: viewModel) + _identityContext = StateObject(wrappedValue: viewModel.identityContext) + } + var body: some View { Form { if accessibilityReduceMotion { diff --git a/Views/PreferencesView.swift b/Views/PreferencesView.swift index a7df2b2..960e7e9 100644 --- a/Views/PreferencesView.swift +++ b/Views/PreferencesView.swift @@ -5,21 +5,20 @@ import ViewModels struct PreferencesView: View { @StateObject var viewModel: PreferencesViewModel - @EnvironmentObject var identityContext: IdentityContext var body: some View { Form { Section(header: Text(viewModel.handle)) { NavigationLink("preferences.posting-reading", destination: PostingReadingPreferencesView( - viewModel: .init(identityContext: identityContext))) + viewModel: .init(identityContext: viewModel.identityContext))) NavigationLink("preferences.filters", destination: FiltersView( - viewModel: .init(identityContext: identityContext))) + viewModel: .init(identityContext: viewModel.identityContext))) if viewModel.shouldShowNotificationTypePreferences { NavigationLink("preferences.notification-types", destination: NotificationTypesPreferencesView( - viewModel: .init(identityContext: identityContext))) + viewModel: .init(identityContext: viewModel.identityContext))) } NavigationLink("preferences.muted-users", destination: TableView(viewModelClosure: viewModel.mutedUsersViewModel) @@ -33,9 +32,10 @@ struct PreferencesView: View { Section(header: Text("preferences.app")) { NavigationLink("preferences.media", destination: MediaPreferencesView( - viewModel: .init(identityContext: identityContext))) + viewModel: .init(identityContext: viewModel.identityContext))) NavigationLink("preferences.startup-and-syncing", - destination: StartupAndSyncingPreferencesView()) + destination: StartupAndSyncingPreferencesView( + identityContext: viewModel.identityContext)) } } .navigationTitle("preferences") diff --git a/Views/SecondaryNavigationView.swift b/Views/SecondaryNavigationView.swift index 71edc47..fcf950c 100644 --- a/Views/SecondaryNavigationView.swift +++ b/Views/SecondaryNavigationView.swift @@ -14,8 +14,7 @@ struct SecondaryNavigationView: View { Section { NavigationLink( destination: IdentitiesView(viewModel: .init(identityContext: viewModel.identityContext)) - .environmentObject(rootViewModel) - .environmentObject(viewModel.identityContext), + .environmentObject(rootViewModel), label: { HStack { KFImage(viewModel.identityContext.identity.image) @@ -55,8 +54,7 @@ struct SecondaryNavigationView: View { } Section { NavigationLink(destination: ListsView(viewModel: .init(identityContext: viewModel.identityContext)) - .environmentObject(rootViewModel) - .environmentObject(viewModel.identityContext)) { + .environmentObject(rootViewModel)) { Label("secondary-navigation.lists", systemImage: "scroll") } ForEach([Timeline.favorites, Timeline.bookmarks]) { timeline in @@ -74,8 +72,7 @@ struct SecondaryNavigationView: View { Section { NavigationLink( destination: PreferencesView(viewModel: .init(identityContext: viewModel.identityContext)) - .environmentObject(rootViewModel) - .environmentObject(viewModel.identityContext)) { + .environmentObject(rootViewModel)) { Label("secondary-navigation.preferences", systemImage: "gear") } } diff --git a/Views/StartupAndSyncingPreferencesView.swift b/Views/StartupAndSyncingPreferencesView.swift index 20d078f..dad7c82 100644 --- a/Views/StartupAndSyncingPreferencesView.swift +++ b/Views/StartupAndSyncingPreferencesView.swift @@ -4,7 +4,7 @@ import SwiftUI import ViewModels struct StartupAndSyncingPreferencesView: View { - @EnvironmentObject var identityContext: IdentityContext + @StateObject var identityContext: IdentityContext var body: some View { Form { @@ -46,8 +46,7 @@ import PreviewViewModels struct StartupAndSyncingPreferencesView_Previews: PreviewProvider { static var previews: some View { - StartupAndSyncingPreferencesView() - .environmentObject(IdentityContext.preview) + StartupAndSyncingPreferencesView(identityContext: .preview) } } #endif diff --git a/Views/TableView.swift b/Views/TableView.swift index d0e9986..770963a 100644 --- a/Views/TableView.swift +++ b/Views/TableView.swift @@ -4,14 +4,12 @@ import SwiftUI import ViewModels struct TableView: UIViewControllerRepresentable { - @EnvironmentObject var identityContext: IdentityContext @EnvironmentObject var rootViewModel: RootViewModel let viewModelClosure: () -> CollectionViewModel func makeUIViewController(context: Context) -> TableViewController { TableViewController(viewModel: viewModelClosure(), - rootViewModel: rootViewModel, - identityContext: identityContext) + rootViewModel: rootViewModel) } func updateUIViewController(_ uiViewController: TableViewController, context: Context) {