1 contributor
//
// BatteryCheckpointEditorSheetView.swift
// USB Meter
//
// Created by Codex on 10/04/2026.
//
import SwiftUI
struct BatteryCheckpointEditorSheetView: View {
@EnvironmentObject private var appData: AppData
@EnvironmentObject private var meter: Meter
@Environment(\.dismiss) private var dismiss
@State private var batteryPercent = ""
@State private var label = ""
var body: some View {
NavigationView {
Form {
Section(header: Text("Checkpoint")) {
TextField("Battery %", text: $batteryPercent)
.keyboardType(.decimalPad)
TextField("Label (optional)", text: $label)
}
Section {
Text("The checkpoint is stored on the active charge session and later used for capacity estimation and the typical charge curve.")
.font(.footnote)
.foregroundColor(.secondary)
}
}
.navigationTitle("Battery Checkpoint")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .cancellationAction) {
Button("Cancel") {
dismiss()
}
}
ToolbarItem(placement: .confirmationAction) {
Button("Save") {
guard let percent = Double(batteryPercent) else {
return
}
_ = appData.ensureChargeSession(for: meter)
let didSave = appData.addBatteryCheckpoint(
percent: percent,
label: label,
for: meter
)
if didSave {
dismiss()
}
}
.disabled(
(Double(batteryPercent) ?? -1) < 0
|| (Double(batteryPercent) ?? 101) > 100
|| appData.currentChargedDeviceSummary(for: meter.btSerial.macAddress.description) == nil
)
}
}
}
.navigationViewStyle(StackNavigationViewStyle())
}
}