Fix Month view showing fake data and show all 5 moods in exports

- Fix critical bug in generateObjectNotInArray() that ignored the mood
  parameter and generated random moods instead of placeholders, causing
  Month view to display fake colored entries for days without real data
- Update Month and Year shareableView exports to show all 5 mood types
  even when some have 0 entries (previously filtered out empty moods)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Trey t
2025-12-30 20:49:28 -06:00
parent bea2d3bbc9
commit e78e848951
3 changed files with 24 additions and 15 deletions

View File

@@ -292,6 +292,11 @@ struct MonthCard: View, Equatable {
cachedMetrics.filter { $0.total > 0 }.sorted { $0.mood.rawValue > $1.mood.rawValue }
}
// All 5 moods for share view (shows 0% for moods with no entries)
private var allMoodMetrics: [MoodMetrics] {
cachedMetrics.sorted { $0.mood.rawValue > $1.mood.rawValue }
}
private var topMood: Mood? {
displayMetrics.max(by: { $0.total < $1.total })?.mood
}
@@ -355,9 +360,9 @@ struct MonthCard: View, Equatable {
}
.padding(.bottom, 30)
// Mood breakdown with bars
// Mood breakdown with bars (all 5 moods)
VStack(spacing: 12) {
ForEach(displayMetrics) { metric in
ForEach(allMoodMetrics) { metric in
HStack(spacing: 12) {
Circle()
.fill(moodTint.color(forMood: metric.mood))
@@ -376,9 +381,11 @@ struct MonthCard: View, Equatable {
RoundedRectangle(cornerRadius: 6)
.fill(Color.gray.opacity(0.2))
RoundedRectangle(cornerRadius: 6)
.fill(moodTint.color(forMood: metric.mood))
.frame(width: max(8, geo.size.width * CGFloat(metric.percent / 100)))
if metric.percent > 0 {
RoundedRectangle(cornerRadius: 6)
.fill(moodTint.color(forMood: metric.mood))
.frame(width: max(8, geo.size.width * CGFloat(metric.percent / 100)))
}
}
}
.frame(height: 12)