From 9feb6bb0e51114ed5b53f98b349376ad4087467f Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 10 Jan 2024 21:32:49 +0800 Subject: [PATCH] Improve read now by popping to root --- .../Sources/App/Views/LibrarySplitView.swift | 47 ++++++++++--------- .../Sources/App/Views/LibraryTabView.swift | 6 +++ .../Views/WebReader/WebReaderContainer.swift | 3 ++ 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/LibrarySplitView.swift b/apple/OmnivoreKit/Sources/App/Views/LibrarySplitView.swift index 9287b8b6c..7b31771eb 100644 --- a/apple/OmnivoreKit/Sources/App/Views/LibrarySplitView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/LibrarySplitView.swift @@ -48,27 +48,32 @@ public struct LibrarySplitView: View { $0.preferredPrimaryColumnWidth = 230 $0.displayModeButtonVisibility = .always } -// .onOpenURL { url in -// inboxViewModel.linkRequest = nil -// if let deepLink = DeepLink.make(from: url) { -// switch deepLink { -// case let .search(query): -// inboxViewModel.searchTerm = query -// case let .savedSearch(named): -// if let filter = inboxViewModel.findFilter(dataService, named: named) { -// inboxViewModel.appliedFilter = filter -// } -// case let .webAppLinkRequest(requestID): -// DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) { -// withoutAnimation { -// inboxViewModel.linkRequest = LinkRequest(id: UUID(), serverID: requestID) -// inboxViewModel.presentWebContainer = true -// } -// } -// } -// } -// // selectedTab = "inbox" -// } + .onOpenURL { url in + viewModel.linkRequest = nil + + withoutAnimation { + NotificationCenter.default.post(Notification(name: Notification.Name("PopToRoot"))) + } + + if let deepLink = DeepLink.make(from: url) { + switch deepLink { + case let .search(query): + viewModel.searchTerm = query + case let .savedSearch(named): + if let filter = viewModel.findFilter(dataService, named: named) { + viewModel.appliedFilter = filter + } + case let .webAppLinkRequest(requestID): + + DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) { + withoutAnimation { + viewModel.linkRequest = LinkRequest(id: UUID(), serverID: requestID) + viewModel.presentWebContainer = true + } + } + } + } + } .onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in Task { await syncManager.syncUpdates(dataService: dataService) diff --git a/apple/OmnivoreKit/Sources/App/Views/LibraryTabView.swift b/apple/OmnivoreKit/Sources/App/Views/LibraryTabView.swift index 71b7d0729..d298e5ed4 100644 --- a/apple/OmnivoreKit/Sources/App/Views/LibraryTabView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/LibraryTabView.swift @@ -135,6 +135,11 @@ struct LibraryTabView: View { } .onOpenURL { url in inboxViewModel.linkRequest = nil + + withoutAnimation { + NotificationCenter.default.post(Notification(name: Notification.Name("PopToRoot"))) + } + if let deepLink = DeepLink.make(from: url) { switch deepLink { case let .search(query): @@ -144,6 +149,7 @@ struct LibraryTabView: View { inboxViewModel.appliedFilter = filter } case let .webAppLinkRequest(requestID): + DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) { withoutAnimation { inboxViewModel.linkRequest = LinkRequest(id: UUID(), serverID: requestID) diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift index 0cdda475b..8244b4400 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift @@ -622,6 +622,9 @@ struct WebReaderContainerView: View { // WebViewManager.shared().loadHTMLString("", baseURL: nil) WebViewManager.shared().loadHTMLString(WebReaderContent.emptyContent(isDark: Color.isDarkMode), baseURL: nil) } + .onReceive(NotificationCenter.default.publisher(for: Notification.Name("PopToRoot"))) { _ in + pop() + } .popup(isPresented: $viewModel.showSnackbar) { if let operation = viewModel.snackbarOperation { Snackbar(isShowing: $viewModel.showSnackbar, operation: operation)