mirror of
https://github.com/kean/Pulse.git
synced 2026-05-30 21:07:33 +00:00
85 lines
2.3 KiB
Swift
85 lines
2.3 KiB
Swift
// 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
|