Files
Pulse/Sources/PulseUI/Features/Console/Views/ConsoleMessageCellViewModel.swift
T
2023-01-30 16:24:13 -05:00

72 lines
2.0 KiB
Swift
Raw 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) 20202023 Alexander Grebenyuk (github.com/kean).
import SwiftUI
import Pulse
import CoreData
import Combine
final class ConsoleMessageCellViewModel {
let message: LoggerMessageEntity
private let searchCriteriaViewModel: ConsoleSearchCriteriaViewModel?
// TODO: Trim whitespaces and remove newlines?
var preprocessedText: String { message.text }
private(set) lazy var time = ConsoleMessageCellViewModel.timeFormatter.string(from: message.createdAt)
static let timeFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US")
formatter.dateFormat = "HH:mm:ss.SSS"
return formatter
}()
init(message: LoggerMessageEntity, searchCriteriaViewModel: ConsoleSearchCriteriaViewModel? = nil) {
self.message = message
self.searchCriteriaViewModel = searchCriteriaViewModel
}
// MARK: Context Menu
#if os(iOS) || os(macOS)
func share() -> ShareItems {
ShareItems([message.text])
}
func focus() {
searchCriteriaViewModel?.criteria.messages.labels.isEnabled = true
searchCriteriaViewModel?.criteria.messages.labels.focused = message.label
}
func hide() {
searchCriteriaViewModel?.criteria.messages.labels.isEnabled = true
searchCriteriaViewModel?.criteria.messages.labels.hidden.insert(message.label)
}
#endif
}
extension UXColor {
static func textColor(for level: LoggerStore.Level) -> UXColor {
switch level {
case .trace: return .secondaryLabel
case .debug, .info: return .label
case .notice, .warning: return .systemOrange
case .error, .critical: return .red
}
}
}
extension Color {
static func textColor(for level: LoggerStore.Level) -> Color {
switch level {
case .trace: return .secondary
case .debug, .info: return .primary
case .notice, .warning: return .orange
case .error, .critical: return .red
}
}
}