From 85185f189e0f4afe44985931a95045533c6efffa Mon Sep 17 00:00:00 2001 From: Terry Yiu Date: Fri, 8 Dec 2023 15:55:42 -0800 Subject: [PATCH] Use opacity modifier instead of conditionals to hide unselected timelines to retain scroll positions Changelog-Fixed: Use opacity modifier instead of conditionals to hide unselected timelines to retain scroll positions --- damus/ContentView.swift | 37 +++++++++---------- damus/Views/DirectMessagesView.swift | 11 ++++-- .../Notifications/NotificationsView.swift | 3 +- 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/damus/ContentView.swift b/damus/ContentView.swift index 1bbf76aa..64cb2b3d 100644 --- a/damus/ContentView.swift +++ b/damus/ContentView.swift @@ -153,26 +153,25 @@ struct ContentView: View { } func MainContent(damus: DamusState) -> some View { - VStack { - switch selected_timeline { - case .search: - if #available(iOS 16.0, *) { - SearchHomeView(damus_state: damus_state!, model: SearchHomeModel(damus_state: damus_state!)) - .scrollDismissesKeyboard(.immediately) - } else { - // Fallback on earlier versions - SearchHomeView(damus_state: damus_state!, model: SearchHomeModel(damus_state: damus_state!)) - } - - case .home: - PostingTimelineView - - case .notifications: - NotificationsView(state: damus, notifications: home.notifications) - - case .dms: - DirectMessagesView(damus_state: damus_state!, model: damus_state!.dms, settings: damus_state!.settings) + ZStack { + if #available(iOS 16.0, *) { + SearchHomeView(damus_state: damus_state!, model: SearchHomeModel(damus_state: damus_state!)) + .scrollDismissesKeyboard(.immediately) + .opacity(selected_timeline == .search ? 1 : 0) + } else { + // Fallback on earlier versions + SearchHomeView(damus_state: damus_state!, model: SearchHomeModel(damus_state: damus_state!)) + .opacity(selected_timeline == .search ? 1 : 0) } + + PostingTimelineView + .opacity(selected_timeline == .home ? 1 : 0) + + NotificationsView(state: damus, notifications: home.notifications) + .opacity(selected_timeline == .notifications ? 1 : 0) + + DirectMessagesView(damus_state: damus_state!, model: damus_state!.dms, settings: damus_state!.settings) + .opacity(selected_timeline == .dms ? 1 : 0) } .navigationBarTitle(timeline_name(selected_timeline), displayMode: .inline) .toolbar { diff --git a/damus/Views/DirectMessagesView.swift b/damus/Views/DirectMessagesView.swift index 2ff3da74..b64caf8b 100644 --- a/damus/Views/DirectMessagesView.swift +++ b/damus/Views/DirectMessagesView.swift @@ -18,6 +18,7 @@ struct DirectMessagesView: View { @State var dm_type: DMType = .friend @ObservedObject var model: DirectMessagesModel @ObservedObject var settings: UserSettingsStore + @SceneStorage("ContentView.selected_timeline") var selected_timeline: Timeline = .home func MainContent(requests: Bool) -> some View { ScrollView { @@ -90,10 +91,12 @@ struct DirectMessagesView: View { .tabViewStyle(.page(indexDisplayMode: .never)) } .toolbar { - ToolbarItem(placement: .navigationBarTrailing) { - if would_filter_non_friends_from_dms(contacts: damus_state.contacts, dms: self.model.dms) { - - FriendsButton(filter: $settings.friend_filter) + if selected_timeline == .dms { + ToolbarItem(placement: .navigationBarTrailing) { + if would_filter_non_friends_from_dms(contacts: damus_state.contacts, dms: self.model.dms) { + + FriendsButton(filter: $settings.friend_filter) + } } } } diff --git a/damus/Views/Notifications/NotificationsView.swift b/damus/Views/Notifications/NotificationsView.swift index 9328ba95..35e1a560 100644 --- a/damus/Views/Notifications/NotificationsView.swift +++ b/damus/Views/Notifications/NotificationsView.swift @@ -82,7 +82,8 @@ struct NotificationsView: View { @ObservedObject var notifications: NotificationsModel @StateObject var filter = NotificationFilter() @SceneStorage("NotificationsView.filter_state") var filter_state: NotificationFilterState = .all - + @SceneStorage("ContentView.selected_timeline") var selected_timeline: Timeline = .home + @Environment(\.colorScheme) var colorScheme var mystery: some View {