Allow deletion of measurements
This commit is contained in:
@@ -21,14 +21,14 @@ struct DeviceInfoView: View {
|
||||
private var runTimeString: String {
|
||||
let number = info.numberOfSecondsRunning
|
||||
guard number >= 60 else {
|
||||
return "\(number) seconds"
|
||||
return "\(number) s"
|
||||
}
|
||||
let minutes = number / 60
|
||||
guard minutes > 1 else {
|
||||
return "1 minute"
|
||||
return "1 min"
|
||||
}
|
||||
guard minutes >= 60 else {
|
||||
return "\(minutes) minutes"
|
||||
return "\(minutes) min"
|
||||
}
|
||||
let hours = minutes / 60
|
||||
guard hours > 1 else {
|
||||
@@ -49,7 +49,7 @@ struct DeviceInfoView: View {
|
||||
guard secs > 1 else {
|
||||
return "Now"
|
||||
}
|
||||
return "In \(secs) seconds"
|
||||
return "In \(secs) s"
|
||||
}
|
||||
|
||||
private var storageIcon: SFSymbol {
|
||||
@@ -74,13 +74,7 @@ struct DeviceInfoView: View {
|
||||
HStack {
|
||||
Image(systemSymbol: sensor.temperatureIcon)
|
||||
.frame(width: 30)
|
||||
Text(sensor.temperatureText)
|
||||
}
|
||||
HStack {
|
||||
Image(systemSymbol: .arrowTriangle2Circlepath)
|
||||
.frame(width: 30)
|
||||
Text(sensor.updateText)
|
||||
Spacer()
|
||||
Text("\(sensor.temperatureText) (\(sensor.updateText))")
|
||||
}
|
||||
HStack {
|
||||
Image(systemSymbol: .tag)
|
||||
@@ -112,41 +106,40 @@ struct DeviceInfoView: View {
|
||||
guard abs(offset) > 1 else {
|
||||
return "No clock offset"
|
||||
}
|
||||
return "Offset: \(offset) seconds"
|
||||
return "Offset: \(offset) s"
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
VStack(alignment: .leading, spacing: 5) {
|
||||
VStack(alignment: .leading, spacing: 5) {
|
||||
Text("Recording")
|
||||
Text("System")
|
||||
.font(.headline)
|
||||
HStack {
|
||||
Image(systemSymbol: .power)
|
||||
.frame(width: 30)
|
||||
Text(df.string(from: info.deviceStartTime))
|
||||
Text("\(df.string(from: info.deviceStartTime)) (\(runTimeString))")
|
||||
Spacer()
|
||||
}
|
||||
HStack {
|
||||
Image(systemSymbol: .clock)
|
||||
.frame(width: 30)
|
||||
Text("\(runTimeString)")
|
||||
}
|
||||
HStack {
|
||||
Image(systemSymbol: .clockBadgeExclamationmark)
|
||||
.frame(width: 30)
|
||||
Text(clockOffsetText)
|
||||
}
|
||||
HStack {
|
||||
Image(systemSymbol: .stopwatch)
|
||||
Image(systemSymbol: .autostartstop)
|
||||
.frame(width: 30)
|
||||
Text("Every \(info.measurementInterval) seconds")
|
||||
Text("Wakeup: \(info.wakeupReason.text)")
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
VStack(alignment: .leading, spacing: 5) {
|
||||
Text("Recording")
|
||||
.font(.headline)
|
||||
HStack {
|
||||
Image(systemSymbol: .arrowTriangle2Circlepath)
|
||||
Image(systemSymbol: .stopwatch)
|
||||
.frame(width: 30)
|
||||
Text(nextUpdateText)
|
||||
Text("\(nextUpdateText) (Every \(info.measurementInterval) s)")
|
||||
Spacer()
|
||||
}
|
||||
}
|
||||
@@ -192,7 +185,6 @@ struct DeviceInfoView: View {
|
||||
struct DeviceInfoView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
DeviceInfoView(info: .mock, isPresented: .constant(true))
|
||||
.previewLayout(.fixed(width: 375, height: 650))
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -12,12 +12,24 @@ struct HistoryList: View {
|
||||
TemperatureDayOverview(storage: storage, dateIndex: day.dateIndex)
|
||||
}) {
|
||||
HistoryListRow(entry: day)
|
||||
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
|
||||
Button {
|
||||
deleteRow(for: day.dateIndex)
|
||||
} label: {
|
||||
Label("Delete", systemSymbol: .pencil)
|
||||
}
|
||||
.tint(.purple)
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("History")
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
}
|
||||
}
|
||||
|
||||
private func deleteRow(for dateIndex: Int) {
|
||||
storage.removeMeasurements(for: dateIndex)
|
||||
}
|
||||
}
|
||||
|
||||
struct HistoryList_Previews: PreviewProvider {
|
||||
|
Reference in New Issue
Block a user