1 contributor
//
// PowerbankSidebarCardView.swift
// USB Meter
//
import SwiftUI
struct PowerbankSidebarCardView: View {
let powerbank: PowerbankSummary
var body: some View {
HStack(alignment: .top, spacing: 12) {
ChargedDeviceQRCodeView(qrIdentifier: powerbank.qrIdentifier, side: 54)
VStack(alignment: .leading, spacing: 6) {
header
Text(powerbank.identityTitle)
.font(.caption.weight(.semibold))
.foregroundColor(.secondary)
details
}
}
.padding(.vertical, 4)
}
private var header: some View {
HStack {
Label(powerbank.name, systemImage: powerbank.identitySymbolName)
.font(.headline)
if powerbank.openSession != nil {
Spacer()
Text("Live")
.font(.caption.weight(.bold))
.foregroundColor(.green)
}
}
}
@ViewBuilder
private var details: some View {
Text(reportingSummary)
.font(.caption2)
.foregroundColor(.secondary)
if let capacityWh = powerbank.apparentCapacityWh ?? powerbank.estimatedBatteryCapacityWh {
Text("Capacity: \(capacityWh.format(decimalDigits: 2)) Wh")
.font(.caption2)
.foregroundColor(.secondary)
} else {
Text("Capacity: learning")
.font(.caption2)
.foregroundColor(.secondary)
}
}
private var reportingSummary: String {
switch powerbank.batteryLevelReporting {
case .percent:
return "Battery: 0–100%"
case .bars:
return "Battery: \(powerbank.batteryBarsCount) bars"
case .fullOnly:
return "Battery: full-only LED"
case .none:
return "Battery: not reported"
}
}
}