mirror of
https://github.com/kean/Pulse.git
synced 2026-05-30 21:07:33 +00:00
62 lines
2.5 KiB
Swift
62 lines
2.5 KiB
Swift
// The MIT License (MIT)
|
|
//
|
|
// Copyright (c) 2020-2026 Alexander Grebenyuk (github.com/kean).
|
|
|
|
import SwiftUI
|
|
import Pulse
|
|
|
|
@available(iOS 18, tvOS 18, macOS 15, watchOS 11, visionOS 1, *)
|
|
extension NetworkInspectorView {
|
|
@ViewBuilder
|
|
static func makeRequestSection(task: NetworkTaskEntity, isCurrentRequest: Bool) -> some View {
|
|
let url = URL(string: task.url ?? "")
|
|
NetworkRequestBodyCell(viewModel: .init(task: task))
|
|
if isCurrentRequest {
|
|
NetworkHeadersCell(viewModel: .init(title: "Request Headers", headers: task.currentRequest?.headers))
|
|
NetworkCookiesCell(viewModel: .init(title: "Request Cookies", headers: task.currentRequest?.headers, url: url))
|
|
} else {
|
|
NetworkHeadersCell(viewModel: .init(title: "Request Headers", headers: task.originalRequest?.headers))
|
|
NetworkCookiesCell(viewModel: .init(title: "Request Cookies", headers: task.originalRequest?.headers, url: url))
|
|
}
|
|
}
|
|
|
|
@ViewBuilder
|
|
static func makeResponseSection(task: NetworkTaskEntity) -> some View {
|
|
let url = URL(string: task.url ?? "")
|
|
NetworkResponseBodyCell(viewModel: .init(task: task))
|
|
NetworkHeadersCell(viewModel: .init(title: "Response Headers", headers: task.response?.headers))
|
|
NetworkCookiesCell(viewModel: .init(title: "Response Cookies", headers: task.response?.headers, url: url))
|
|
}
|
|
|
|
@ViewBuilder
|
|
static func makeHeaderView(task: NetworkTaskEntity, store: LoggerStoreProtocol) -> some View {
|
|
ZStack {
|
|
NetworkInspectorTransferInfoView(viewModel: .init(empty: true))
|
|
.hidden()
|
|
.accessibilityHidden(true)
|
|
if task.hasMetrics {
|
|
NetworkInspectorTransferInfoView(viewModel: .init(task: task))
|
|
} else if task.state == .pending {
|
|
SpinnerView(viewModel: ProgressViewModel(task: task))
|
|
} else {
|
|
// Fallback in case metrics are disabled
|
|
let status = NetworkRequestStatusSectionViewModel(task: task, store: store).status
|
|
Image(systemName: status.status.systemImage)
|
|
.foregroundColor(status.status.tint)
|
|
.font(.system(size: 64))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
struct NetworkInspectorRequestTypePicker: View {
|
|
@Binding var isCurrentRequest: Bool
|
|
|
|
var body: some View {
|
|
Picker("Request Type", selection: $isCurrentRequest) {
|
|
Text("Original").tag(false)
|
|
Text("Current").tag(true)
|
|
}
|
|
}
|
|
}
|