some advanced settings
This commit is contained in:
@@ -301,45 +301,19 @@ struct SystemOverviewView: View {
|
||||
} else {
|
||||
ViewThatFits(in: .horizontal) {
|
||||
HStack(spacing: 16) {
|
||||
summaryMetric(
|
||||
icon: "battery.100",
|
||||
label: batteryCountLabel,
|
||||
value: "\(batteries.count)",
|
||||
tint: .blue
|
||||
).frame(maxWidth: .infinity, alignment: .leading)
|
||||
summaryMetric(
|
||||
icon: "gauge.medium",
|
||||
label: batteryCapacityLabel,
|
||||
value: formattedValue(totalCapacity, unit: "Ah"),
|
||||
tint: .orange
|
||||
).frame(maxWidth: .infinity, alignment: .leading)
|
||||
summaryMetric(
|
||||
icon: "bolt.circle",
|
||||
label: batteryEnergyLabel,
|
||||
value: formattedValue(totalEnergy, unit: "Wh"),
|
||||
tint: .green
|
||||
).frame(maxWidth: .infinity, alignment: .leading)
|
||||
batteryMetricsContent
|
||||
}
|
||||
|
||||
LazyVGrid(
|
||||
columns: Array(repeating: GridItem(.flexible(), spacing: 16), count: 2),
|
||||
alignment: .leading,
|
||||
spacing: 16
|
||||
) {
|
||||
batteryMetricsContent
|
||||
}
|
||||
|
||||
VStack(alignment: .leading, spacing: 12) {
|
||||
summaryMetric(
|
||||
icon: "battery.100",
|
||||
label: batteryCountLabel,
|
||||
value: "\(batteries.count)",
|
||||
tint: .blue
|
||||
).frame(maxWidth: .infinity, alignment: .leading)
|
||||
summaryMetric(
|
||||
icon: "gauge.medium",
|
||||
label: batteryCapacityLabel,
|
||||
value: formattedValue(totalCapacity, unit: "Ah"),
|
||||
tint: .orange
|
||||
).frame(maxWidth: .infinity, alignment: .leading)
|
||||
summaryMetric(
|
||||
icon: "bolt.circle",
|
||||
label: batteryEnergyLabel,
|
||||
value: formattedValue(totalEnergy, unit: "Wh"),
|
||||
tint: .green
|
||||
).frame(maxWidth: .infinity, alignment: .leading)
|
||||
batteryMetricsContent
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -355,6 +329,34 @@ struct SystemOverviewView: View {
|
||||
.buttonStyle(.plain)
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private var batteryMetricsContent: some View {
|
||||
summaryMetric(
|
||||
icon: "battery.100",
|
||||
label: batteryCountLabel,
|
||||
value: "\(batteries.count)",
|
||||
tint: .blue
|
||||
)
|
||||
summaryMetric(
|
||||
icon: "gauge.medium",
|
||||
label: batteryCapacityLabel,
|
||||
value: formattedValue(totalCapacity, unit: "Ah"),
|
||||
tint: .orange
|
||||
)
|
||||
summaryMetric(
|
||||
icon: "battery.100.bolt",
|
||||
label: batteryUsableCapacityLabel,
|
||||
value: formattedValue(totalUsableCapacity, unit: "Ah"),
|
||||
tint: .teal
|
||||
)
|
||||
summaryMetric(
|
||||
icon: "bolt.circle",
|
||||
label: batteryUsableEnergyLabel,
|
||||
value: formattedValue(totalUsableEnergy, unit: "Wh"),
|
||||
tint: .green
|
||||
)
|
||||
}
|
||||
|
||||
private var chargersCard: some View {
|
||||
Button(action: onSelectChargers) {
|
||||
VStack(alignment: .leading, spacing: 16) {
|
||||
@@ -467,6 +469,18 @@ struct SystemOverviewView: View {
|
||||
}
|
||||
}
|
||||
|
||||
private var totalUsableCapacity: Double {
|
||||
batteries.reduce(0) { result, battery in
|
||||
result + battery.usableCapacityAmpHours
|
||||
}
|
||||
}
|
||||
|
||||
private var totalUsableEnergy: Double {
|
||||
batteries.reduce(0) { result, battery in
|
||||
result + battery.usableEnergyWattHours
|
||||
}
|
||||
}
|
||||
|
||||
private var totalChargerCurrent: Double {
|
||||
chargers.reduce(0) { result, charger in
|
||||
result + max(0, charger.maxCurrentAmps)
|
||||
@@ -611,8 +625,8 @@ struct SystemOverviewView: View {
|
||||
}
|
||||
|
||||
private var estimatedRuntimeHours: Double? {
|
||||
guard totalPower > 0, totalEnergy > 0 else { return nil }
|
||||
let hours = totalEnergy / totalPower
|
||||
guard totalPower > 0, totalUsableEnergy > 0 else { return nil }
|
||||
let hours = totalUsableEnergy / totalPower
|
||||
return hours.isFinite && hours > 0 ? hours : nil
|
||||
}
|
||||
|
||||
@@ -738,12 +752,21 @@ struct SystemOverviewView: View {
|
||||
)
|
||||
}
|
||||
|
||||
private var batteryEnergyLabel: String {
|
||||
private var batteryUsableCapacityLabel: String {
|
||||
NSLocalizedString(
|
||||
"battery.bank.metric.energy",
|
||||
"battery.bank.metric.usable_capacity",
|
||||
bundle: .main,
|
||||
value: "Energy",
|
||||
comment: "Label for total energy metric"
|
||||
value: "Usable Capacity",
|
||||
comment: "Label for usable capacity metric"
|
||||
)
|
||||
}
|
||||
|
||||
private var batteryUsableEnergyLabel: String {
|
||||
NSLocalizedString(
|
||||
"battery.bank.metric.usable_energy",
|
||||
bundle: .main,
|
||||
value: "Usable Energy",
|
||||
comment: "Label for usable energy metric"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user