1 contributor
//
// ChargedDeviceLibraryRowView.swift
// USB Meter
//
// Created by Codex on 22/04/2026.
//
import SwiftUI
struct ChargedDeviceLibraryRowView: View {
let chargedDevice: ChargedDeviceSummary
let isSelected: Bool
var body: some View {
HStack(alignment: .top, spacing: 14) {
ChargedDeviceQRCodeView(qrIdentifier: chargedDevice.qrIdentifier, side: 58)
VStack(alignment: .leading, spacing: 6) {
header
summaryText
}
}
.padding(.vertical, 4)
}
private var header: some View {
HStack {
ChargedDeviceIdentityLabelView(
chargedDevice: chargedDevice,
iconPointSize: 17
)
.font(.headline)
.foregroundColor(.primary)
Spacer()
if isSelected {
Image(systemName: "checkmark.circle.fill")
.foregroundColor(.green)
}
}
}
@ViewBuilder
private var summaryText: some View {
Text(chargedDevice.identityTitle)
.font(.caption.weight(.semibold))
.foregroundColor(.secondary)
if chargedDevice.isCharger {
chargerSummaryText
} else {
deviceSummaryText
}
}
@ViewBuilder
private var chargerSummaryText: some View {
if !chargedDevice.chargerObservedVoltageSelections.isEmpty {
Text(chargedDevice.chargerObservedVoltageSelections.map { "\($0.format(decimalDigits: 1)) V" }.joined(separator: ", "))
.font(.caption2)
.foregroundColor(.secondary)
} else if let chargerMaximumPowerWatts = chargedDevice.chargerMaximumPowerWatts {
Text("Max power: \(chargerMaximumPowerWatts.format(decimalDigits: 2)) W")
.font(.caption2)
.foregroundColor(.secondary)
} else {
Text("Wireless charger")
.font(.caption2)
.foregroundColor(.secondary)
}
}
@ViewBuilder
private var deviceSummaryText: some View {
Text(chargedDevice.supportedChargingModes.map(\.title).joined(separator: " + "))
.font(.caption2)
.foregroundColor(.secondary)
if let capacity = chargedDevice.estimatedBatteryCapacityWh {
Text("Estimated capacity: \(capacity.format(decimalDigits: 2)) Wh")
.font(.caption)
.foregroundColor(.secondary)
}
if let minimumCurrent = chargedDevice.minimumCurrentAmps {
Text("Completion current: \(minimumCurrent.format(decimalDigits: 2)) A")
.font(.caption2)
.foregroundColor(.secondary)
}
}
}