Show source value difference vs previous check-in (green/red coloring)

When a source has been updated this cycle, shows the value change from the
previous snapshot in green (increase) or red (decrease).

Fixes #21

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
alexandrev-tibco
2026-02-11 23:47:49 +01:00
parent 7d1eb874d8
commit aceed608ed
@@ -437,6 +437,15 @@ struct MonthlyCheckInView: View {
ForEach(viewModel.sources, id: \.objectID) { source in ForEach(viewModel.sources, id: \.objectID) { source in
let latestSnapshot = source.latestSnapshot let latestSnapshot = source.latestSnapshot
let updatedThisCycle = isSnapshotInCurrentCycle(latestSnapshot) let updatedThisCycle = isSnapshotInCurrentCycle(latestSnapshot)
let snapshots = source.sortedSnapshotsByDateAscending
let previousSnapshot: Snapshot? = {
guard snapshots.count >= 2 else { return nil }
return snapshots[snapshots.count - 2]
}()
let valueDiff: Decimal? = {
guard let latest = latestSnapshot, let previous = previousSnapshot else { return nil }
return latest.decimalValue - previous.decimalValue
}()
Button { Button {
if updatedThisCycle, let snapshot = latestSnapshot { if updatedThisCycle, let snapshot = latestSnapshot {
editingSnapshot = snapshot editingSnapshot = snapshot
@@ -459,6 +468,12 @@ struct MonthlyCheckInView: View {
Spacer() Spacer()
if let diff = valueDiff, updatedThisCycle {
Text(diff >= 0 ? "+\(diff.compactCurrencyString)" : diff.compactCurrencyString)
.font(.caption.weight(.semibold))
.foregroundColor(diff >= 0 ? .positiveGreen : .negativeRed)
}
Text(latestSnapshot?.date.relativeDescription ?? String(localized: "date_never")) Text(latestSnapshot?.date.relativeDescription ?? String(localized: "date_never"))
.font(.caption) .font(.caption)
.foregroundColor(.secondary) .foregroundColor(.secondary)