Skip to content

Commit db85244

Browse files
committed
feat(DomainList): complete first iteration
1 parent 4c0a5a2 commit db85244

17 files changed

+324
-149
lines changed

Sources/NetworkViewer/Common/Models/CustomError.swift

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,25 @@
77

88
import Foundation
99

10-
public struct CustomError: Codable {
10+
public extension NetworkViewer {
1111

12-
public let code: Int
13-
public let message: String
12+
struct CustomError: Codable {
1413

15-
public init(code: Int, message: String) {
16-
self.code = code
17-
self.message = message
18-
}
14+
public let code: Int
15+
public let message: String
1916

20-
public init(_ error: NSError) {
21-
self.init(code: error.code, message: error.localizedDescription)
22-
}
17+
public init(code: Int, message: String) {
18+
self.code = code
19+
self.message = message
20+
}
21+
22+
public init(_ error: NSError) {
23+
self.init(code: error.code, message: error.localizedDescription)
24+
}
2325

24-
public init(_ error: Error) {
25-
let nsError = error as NSError
26-
self.init(nsError)
26+
public init(_ error: Error) {
27+
let nsError = error as NSError
28+
self.init(nsError)
29+
}
2730
}
2831
}

Sources/NetworkViewer/Common/Models/Header.swift

Lines changed: 0 additions & 19 deletions
This file was deleted.

Sources/NetworkViewer/Common/Models/Operation.swift

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,28 @@
77

88
import Foundation
99

10-
public struct Operation {
10+
public extension NetworkViewer {
11+
12+
struct Operation {
1113

12-
let request: Request
13-
let response: Response?
14-
let error: CustomError?
14+
let request: Request
15+
let response: Response?
16+
let error: CustomError?
17+
let startAt: TimeInterval
18+
let endAt: TimeInterval?
1519

16-
public init(request: Request, response: Response?, error: CustomError?) {
17-
self.request = request
18-
self.response = response
19-
self.error = error
20+
public init(
21+
request: Request,
22+
response: Response?,
23+
error: CustomError?,
24+
startAt: TimeInterval,
25+
endAt: TimeInterval?
26+
) {
27+
self.request = request
28+
self.response = response
29+
self.error = error
30+
self.startAt = startAt
31+
self.endAt = endAt
32+
}
2033
}
2134
}

Sources/NetworkViewer/Common/Models/Request.swift

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,27 @@
77

88
import Foundation
99

10-
public struct Request: Codable {
10+
public extension NetworkViewer {
1111

12-
public let url: String
13-
public let method: String
14-
public let headers: [Header]
15-
public let body: Data?
12+
struct Request: Codable {
1613

17-
public init(url: String, method: String, headers: [Header], body: Data?) {
18-
self.url = url
19-
self.method = method
20-
self.headers = headers
21-
self.body = body
22-
}
14+
public let url: String
15+
public let method: String
16+
public let headers: [String: String]
17+
public let body: Data?
18+
19+
public init(url: String, method: String, headers: [String: String], body: Data?) {
20+
self.url = url
21+
self.method = method
22+
self.headers = headers
23+
self.body = body
24+
}
2325

24-
public init(_ urlRequest: URLRequest) {
25-
url = urlRequest.url?.absoluteString ?? "-"
26-
method = urlRequest.httpMethod ?? "-"
27-
headers = urlRequest.allHTTPHeaderFields?.map { Header(key: $0.key, value: $0.value ) } ?? []
28-
body = urlRequest.httpBody
26+
public init(_ urlRequest: URLRequest) {
27+
url = urlRequest.url?.absoluteString ?? "-"
28+
method = urlRequest.httpMethod ?? "-"
29+
headers = urlRequest.allHTTPHeaderFields ?? [:]
30+
body = urlRequest.httpBody
31+
}
2932
}
3033
}

Sources/NetworkViewer/Common/Models/Response.swift

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,33 @@
77

88
import Foundation
99

10-
public struct Response: Codable {
10+
public extension NetworkViewer {
1111

12-
public let statusCode: Int
13-
public let headers: [Header]
12+
struct Response: Codable {
1413

15-
public init(statusCode: Int, headers: [Header]) {
16-
self.statusCode = statusCode
17-
self.headers = headers
18-
}
14+
public let statusCode: Int
15+
public let headers: [String: String]
16+
17+
public init(statusCode: Int, headers: [String: String]) {
18+
self.statusCode = statusCode
19+
self.headers = headers
20+
}
1921

20-
public init?(_ response: URLResponse) {
21-
if let httpResponse = response as? HTTPURLResponse {
22-
statusCode = httpResponse.statusCode
23-
headers = httpResponse.allHeaderFields.map {
24-
Header(
25-
key: $0.key as? String ?? "Unknown Key",
26-
value: $0.value as? String ?? "Unknown Value"
27-
)
22+
public init?(_ response: URLResponse) {
23+
if let httpResponse = response as? HTTPURLResponse {
24+
statusCode = httpResponse.statusCode
25+
var headers: [String: String] = [:]
26+
httpResponse.allHeaderFields.forEach {
27+
headers[$0.key as? String ?? "Unknown key"] = $0.value as? String ?? "Unknown value"
28+
}
29+
self.headers = headers
30+
} else {
31+
statusCode = 200
32+
headers = [
33+
"Content-Length": "\(response.expectedContentLength)",
34+
"Content-Type": response.mimeType ?? "plain/text"
35+
]
2836
}
29-
} else {
30-
statusCode = 200
31-
headers = [
32-
Header(key: "Content-Length", value: "\(response.expectedContentLength)"),
33-
Header(key: "Content-Type", value: response.mimeType ?? "plain/text")
34-
]
3537
}
3638
}
3739
}

Sources/NetworkViewer/Common/Views/SettingsDetailedRow.swift

Lines changed: 49 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,30 @@ struct SettingsDetailedRow: View {
1616
let color: Color?
1717
}
1818

19+
struct TextData {
20+
let text: String
21+
let font: Font?
22+
23+
init(text: String, font: Font? = nil) {
24+
self.text = text
25+
self.font = font
26+
}
27+
}
28+
1929
var id: String
2030
let icon: Icon?
21-
let title: String
22-
var detail: String?
31+
let title: TextData
32+
var detail: TextData?
2333
var disclosureIndicator: Bool
2434

2535
init(
2636
id: String? = nil,
2737
icon: Icon? = nil,
28-
title: String,
29-
detail: String? = nil,
38+
title: TextData,
39+
detail: TextData? = nil,
3040
disclosureIndicator: Bool = false
3141
) {
32-
self.id = id ?? title
42+
self.id = id ?? title.text
3343
self.icon = icon
3444
self.title = title
3545
self.detail = detail
@@ -53,22 +63,18 @@ struct SettingsDetailedRow: View {
5363
.renderingMode(icon.color != nil ? .template : .original)
5464
.foregroundColor(icon.color)
5565
}
56-
Text(data.title)
57-
.font(.system(size: 17, weight: .medium))
66+
Text(data.title.text)
67+
.font(data.title.font ?? .system(size: 17, weight: .medium))
5868
.frame(
59-
maxWidth: contentSize.width / 2,
69+
maxWidth: contentSize.width,
6070
alignment: .leading
6171
)
6272
Spacer()
63-
if let detail = data.detail, !detail.isEmpty {
64-
Text(detail)
65-
.frame(
66-
maxWidth: contentSize.width / 2,
67-
alignment: .trailing
68-
)
73+
if let detail = data.detail, !detail.text.isEmpty {
74+
Text(detail.text)
6975
.multilineTextAlignment(.trailing)
7076
.lineLimit(2)
71-
.font(.system(size: 15))
77+
.font(detail.font ?? .system(size: 15))
7278
.foregroundColor(.secondary)
7379
}
7480
if data.disclosureIndicator {
@@ -100,8 +106,32 @@ struct SettingsDetailedRow: View {
100106
image: .init(systemName: "folder")!,
101107
color: .blue
102108
),
103-
title: "Test Title",
104-
detail: "Test Detail",
109+
title: .init(text: "Test title"),
110+
detail: .init(text: "Test detail"),
111+
disclosureIndicator: true
112+
)
113+
)
114+
SettingsDetailedRow(
115+
data: .init(
116+
id: nil,
117+
icon: .init(
118+
image: .init(systemName: "folder")!,
119+
color: .blue
120+
),
121+
title: .init(text: "Long long long long title"),
122+
detail: .init(text: "Short detail"),
123+
disclosureIndicator: true
124+
)
125+
)
126+
SettingsDetailedRow(
127+
data: .init(
128+
id: nil,
129+
icon: .init(
130+
image: .init(systemName: "folder")!,
131+
color: .blue
132+
),
133+
title: .init(text: "Long long long long title"),
134+
detail: .init(text: "Long long long long long long Detail"),
105135
disclosureIndicator: true
106136
)
107137
)
@@ -112,8 +142,8 @@ struct SettingsDetailedRow: View {
112142
image: .init(systemName: "network")!,
113143
color: .blue
114144
),
115-
title: "Test Title",
116-
detail: "Test Detail",
145+
title: .init(text: "Title"),
146+
detail: .init(text: "Long long long long long long Detail"),
117147
disclosureIndicator: true
118148
)
119149
)

Sources/NetworkViewer/Modules/DomainList/Common/Models/DomainData.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import Foundation
99

1010
struct DomainData {
1111

12-
let domain: String
13-
let operationsCount: Int
12+
let cellData: SettingsDetailedRow.Data
1413
let isPinned: Bool
1514
}

Sources/NetworkViewer/Modules/DomainList/DomainListConfigurator.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ import SwiftUI
1515
struct DomainListConfigurator {
1616

1717
static func createModule(
18-
domainList: [DomainData],
18+
operations: [NetworkViewer.Operation],
1919
output: DomainListModuleOutput? = nil
2020
) -> (view: some View, input: DomainListModuleInput) {
21-
let viewModel = DomainListViewModel(domainList: domainList, output: output)
21+
let viewModel = DomainListViewModel(operations: operations, output: output)
2222
let view = DomainListScreen(viewModel: viewModel)
2323

2424
return (view, viewModel)

Sources/NetworkViewer/Modules/DomainList/DomainListProtocols.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ struct DomainListModuleOutput {
2424
// MARK: - Presenter
2525
protocol DomainListViewModelInterface: ObservableObject {
2626

27-
var domainsData: [SettingsDetailedRow.Data] { get }
27+
var domainsData: [DomainData] { get }
28+
var pinnedDomainCellsData: [SettingsDetailedRow.Data] { get }
29+
var unpinnedDomainCellsData: [SettingsDetailedRow.Data] { get }
30+
31+
func operations(forId id: String) -> [NetworkViewer.Operation]
2832

2933
// MARK: - Lifecycle
3034
func viewDidLoad()

0 commit comments

Comments
 (0)