Support read, search, and saved-search deep link formats

This commit is contained in:
Jackson Harper
2023-05-24 16:12:48 +08:00
parent bf8b0c0034
commit 8ba320e3d5
2 changed files with 23 additions and 5 deletions

View File

@ -179,11 +179,20 @@ struct AnimatingCellHeight: AnimatableModifier {
}
}
.onOpenURL { url in
withoutAnimation {
viewModel.linkRequest = nil
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) {
if let linkRequestID = DeepLink.make(from: url)?.linkRequestID {
viewModel.linkRequest = LinkRequest(id: UUID(), serverID: linkRequestID)
viewModel.linkRequest = nil
if let deepLink = DeepLink.make(from: url) {
switch deepLink {
case let .search(query):
viewModel.searchTerm = query
case let .savedSearch(named):
if let filter = LinkedItemFilter(rawValue: named) {
viewModel.appliedFilter = filter.rawValue
}
case let .webAppLinkRequest(requestID):
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(100)) {
withoutAnimation {
viewModel.linkRequest = LinkRequest(id: UUID(), serverID: requestID)
}
}
}
}

View File

@ -11,6 +11,8 @@ public struct LinkRequest: Identifiable, Hashable {
}
public enum DeepLink {
case search(query: String)
case savedSearch(named: String)
case webAppLinkRequest(requestID: String)
}
@ -32,6 +34,13 @@ public extension DeepLink {
private static func deepLinkFromOmnivoreScheme(url: URL) -> DeepLink? {
switch url.host {
case "search":
let query = url.path.replacingOccurrences(of: "/", with: "")
return .search(query: query)
case "saved-search":
let named = url.path.replacingOccurrences(of: "/", with: "")
return .savedSearch(named: named)
case "read":
case "shareExtensionRequestID":
let requestID = url.path.replacingOccurrences(of: "/", with: "")
return .webAppLinkRequest(requestID: requestID)