mirror of
https://github.com/kean/Pulse.git
synced 2026-05-30 21:07:33 +00:00
72 lines
1.7 KiB
Swift
72 lines
1.7 KiB
Swift
// The MIT License (MIT)
|
||
//
|
||
// Copyright (c) 2020–2022 Alexander Grebenyuk (github.com/kean).
|
||
|
||
import Foundation
|
||
import SwiftUI
|
||
import Pulse
|
||
|
||
#if os(watchOS) || os(tvOS) || os(iOS)
|
||
|
||
struct ConsoleMessagesForEach: View {
|
||
let messages: [LoggerMessageEntity]
|
||
|
||
var body: some View {
|
||
ForEach(messages, id: \.objectID, content: makeListItem)
|
||
}
|
||
|
||
@ViewBuilder
|
||
private func makeListItem(message: LoggerMessageEntity) -> some View {
|
||
if let task = message.task {
|
||
NetworkRequestRow(task: task)
|
||
} else {
|
||
NavigationLink(destination: LazyConsoleDetailsView(message: message)) {
|
||
ConsoleMessageView(viewModel: .init(message: message))
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private struct NetworkRequestRow: View {
|
||
let task: NetworkTaskEntity
|
||
|
||
var body: some View {
|
||
NavigationLink(destination: LazyNetworkInspectorView(task: task)) {
|
||
ConsoleNetworkRequestView(viewModel: .init(task: task))
|
||
}
|
||
}
|
||
}
|
||
|
||
// Create the underlying ViewModel lazily.
|
||
private struct LazyNetworkInspectorView: View {
|
||
let task: NetworkTaskEntity
|
||
|
||
var body: some View {
|
||
NetworkInspectorView(viewModel: .init(task: task))
|
||
}
|
||
}
|
||
|
||
// Create the underlying ViewModel lazily.
|
||
private struct LazyConsoleDetailsView: View {
|
||
let message: LoggerMessageEntity
|
||
|
||
var body: some View {
|
||
ConsoleMessageDetailsView(viewModel: .init(message: message))
|
||
}
|
||
}
|
||
|
||
struct NetworkMessagesForEach: View {
|
||
let entities: [NetworkTaskEntity]
|
||
|
||
var body: some View {
|
||
ForEach(entities, id: \.objectID, content: makeListItem)
|
||
}
|
||
|
||
@ViewBuilder
|
||
private func makeListItem(task: NetworkTaskEntity) -> some View {
|
||
NetworkRequestRow(task: task)
|
||
}
|
||
}
|
||
|
||
#endif
|