Files
Pulse/Sources/PulseUI/Features/MessageDetails/ConsoleMessageMetadataView.swift
T

62 lines
1.8 KiB
Swift

// The MIT License (MIT)
//
// Copyright (c) 2020-2024 Alexander Grebenyuk (github.com/kean).
import SwiftUI
import Pulse
@available(iOS 15, visionOS 1.0, *)
struct ConsoleMessageMetadataView: View {
let message: LoggerMessageEntity
var body: some View {
RichTextView(viewModel: .init(string: string))
#if !os(macOS)
.navigationTitle("Message Details")
#endif
}
private var string: NSAttributedString {
let renderer = TextRenderer()
renderer.render(sections)
return renderer.make()
}
private var sections: [KeyValueSectionViewModel] {
return [
KeyValueSectionViewModel(title: "Summary", color: .textColor(for: message.logLevel), items: [
("Date", DateFormatter.fullDateFormatter.string(from: message.createdAt)),
("Level", LoggerStore.Level(rawValue: message.level)?.name),
("Label", message.label.nonEmpty)
]),
KeyValueSectionViewModel(title: "Details", color: .primary, items: [
("File", message.file.nonEmpty),
("Function", message.function.nonEmpty),
("Line", message.line == 0 ? nil : "\(message.line)"),
]),
KeyValueSectionViewModel(title: "Metadata", color: .indigo, items: metadataItems)
]
}
private var metadataItems: [(String, String?)] {
message.metadata.sorted(by: { $0.key < $1.key }).map { ($0.key, $0.value )}
}
}
private extension String {
var nonEmpty: String? {
isEmpty ? nil : self
}
}
#if DEBUG
@available(iOS 15, visionOS 1.0, *)
struct ConsoleMessageMetadataView_Previews: PreviewProvider {
static var previews: some View {
NavigationView {
ConsoleMessageMetadataView(message: makeMockMessage())
}
}
}
#endif