IceCubesApp/Packages/Env/Sources/Env/Routeur.swift

61 lines
1.7 KiB
Swift
Raw Normal View History

2022-11-29 10:46:02 +00:00
import Foundation
import SwiftUI
2022-12-17 12:37:46 +00:00
import Models
2022-11-29 10:46:02 +00:00
public enum RouteurDestinations: Hashable {
case accountDetail(id: String)
2022-12-17 12:37:46 +00:00
case accountDetailWithAccount(account: Account)
2022-11-29 10:46:02 +00:00
case statusDetail(id: String)
2022-12-21 19:26:38 +00:00
case hashTag(tag: String, account: String?)
2022-12-23 17:47:19 +00:00
case followers(id: String)
case following(id: String)
2022-12-24 12:41:25 +00:00
case favouritedBy(id: String)
case rebloggedBy(id: String)
2022-11-29 10:46:02 +00:00
}
2022-12-20 08:37:07 +00:00
public enum SheetDestinations: Identifiable {
2022-12-26 07:24:55 +00:00
case newStatusEditor
2022-12-27 06:51:44 +00:00
case editStatusEditor(status: AnyStatus)
case replyToStatusEditor(status: AnyStatus)
case quoteStatusEditor(status: AnyStatus)
2022-12-20 08:37:07 +00:00
public var id: String {
switch self {
2022-12-27 06:51:44 +00:00
case .editStatusEditor, .newStatusEditor, .replyToStatusEditor, .quoteStatusEditor:
return "statusEditor"
2022-12-20 08:37:07 +00:00
}
}
}
2022-11-29 10:46:02 +00:00
public class RouterPath: ObservableObject {
@Published public var path: [RouteurDestinations] = []
2022-12-20 08:37:07 +00:00
@Published public var presentedSheet: SheetDestinations?
2022-11-29 10:46:02 +00:00
public init() {}
public func navigate(to: RouteurDestinations) {
path.append(to)
}
2022-12-19 14:51:25 +00:00
public func handleStatus(status: AnyStatus, url: URL) -> OpenURLAction.Result {
2022-12-20 14:37:51 +00:00
if url.pathComponents.contains(where: { $0 == "tags" }),
let tag = url.pathComponents.last {
2022-12-21 19:26:38 +00:00
navigate(to: .hashTag(tag: tag, account: nil))
2022-12-20 14:37:51 +00:00
return .handled
} else if let mention = status.mentions.first(where: { $0.url == url }) {
2022-12-19 14:51:25 +00:00
navigate(to: .accountDetail(id: mention.id))
return .handled
}
return .systemAction
}
public func handle(url: URL) -> OpenURLAction.Result {
if url.pathComponents.contains(where: { $0 == "tags" }),
let tag = url.pathComponents.last {
navigate(to: .hashTag(tag: tag, account: nil))
return .handled
}
return .systemAction
}
2022-11-29 10:46:02 +00:00
}