mirror of
https://github.com/kean/Pulse.git
synced 2026-05-30 21:07:33 +00:00
55 lines
1.6 KiB
Swift
55 lines
1.6 KiB
Swift
// The MIT License (MIT)
|
||
//
|
||
// Copyright (c) 2020–2022 Alexander Grebenyuk (github.com/kean).
|
||
|
||
import SwiftUI
|
||
import CoreData
|
||
import Pulse
|
||
|
||
struct ConsoleMessageDetailsRouter: View {
|
||
@ObservedObject var viewModel: ConsoleDetailsRouterViewModel
|
||
|
||
var body: some View {
|
||
if let viewModel = viewModel.viewModel {
|
||
switch viewModel {
|
||
case .message(let viewModel):
|
||
ConsoleMessageDetailsView(viewModel: viewModel, onClose: onClose)
|
||
.id(self.viewModel.id)
|
||
case .task(let viewModel):
|
||
// TODO: rework the inspector to not require id workaround
|
||
NetworkInspectorView(viewModel: viewModel, onClose: onClose)
|
||
.id(self.viewModel.id)
|
||
}
|
||
}
|
||
}
|
||
|
||
private func onClose() {
|
||
viewModel.select(nil)
|
||
}
|
||
}
|
||
|
||
final class ConsoleDetailsRouterViewModel: ObservableObject {
|
||
@Published private(set) var viewModel: DetailsViewModel?
|
||
var id: NSManagedObjectID?
|
||
|
||
func select(_ entity: NSManagedObject?) {
|
||
self.id = entity?.objectID
|
||
if let message = entity as? LoggerMessageEntity {
|
||
if let task = message.task {
|
||
viewModel = .task(.init(task: task))
|
||
} else {
|
||
viewModel = .message(.init(message: message))
|
||
}
|
||
} else if let task = entity as? NetworkTaskEntity {
|
||
viewModel = .task(.init(task: task))
|
||
} else {
|
||
viewModel = nil
|
||
}
|
||
}
|
||
|
||
enum DetailsViewModel {
|
||
case message(ConsoleMessageDetailsViewModel)
|
||
case task(NetworkInspectorViewModel)
|
||
}
|
||
}
|