Files
Pulse/Sources/PulseUI/Features/Console/Views/ConsoleEntityDetailsView.swift
2023-04-29 10:41:34 -04:00

85 lines
2.3 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// The MIT License (MIT)
//
// Copyright (c) 2020–2023 Alexander Grebenyuk (github.com/kean).
#if os(macOS)
import Foundation
import SwiftUI
import Pulse
import CoreData
struct ConsoleEntityDetailsRouterView: View {
let selection: ConsoleSelectedItem
@Environment(\.router) private var router
@Environment(\.store) private var store
var body: some View {
switch selection {
case .entity(let objectID):
makeDetails(for: objectID)
case .occurrence(let objectID, let occurrence):
if let entity = entity(withID: objectID) {
ConsoleSearchResultView.makeDestination(for: occurrence, entity: entity)
.id(occurrence.id)
}
}
}
@ViewBuilder
private func makeDetails(for objectID: NSManagedObjectID) -> some View {
if let entity = entity(withID: objectID) {
switch LoggerEntity(entity) {
case .message(let message):
ConsoleMessageDetailsView(message: message)
case .task(let task):
NetworkInspectorView(task: task)
}
}
}
private func entity(withID objectID: NSManagedObjectID) -> NSManagedObject? {
try? store.viewContext.existingObject(with: objectID)
}
}
struct ButtonChangeContentModeLayout: View {
@SceneStorage("is-details-vertical") private var isVertical = false
var body: some View {
Button(action: { isVertical.toggle() }, label: {
Image(systemName: isVertical ? "square.split.2x1" : "square.split.1x2")
.foregroundColor(.secondary)
})
.help(isVertical ? "Switch to Horizontal Layout" : "Switch to Vertical Layout")
.buttonStyle(.plain)
}
}
struct ButtonCloseDetailsView: View {
@Environment(\.router) private var router
var body: some View {
Button(action: { router.selection = nil }) {
Image(systemName: "xmark")
.foregroundColor(.secondary)
}.buttonStyle(.plain)
}
}
struct ConsoleEntityStandaloneDetailsView: View {
let entity: NSManagedObject
var body: some View {
switch LoggerEntity(entity) {
case .message(let message):
ConsoleMessageDetailsView(message: message)
case .task(let task):
NetworkInspectorView(task: task)
}
}
}
#endif