// // HeaderPercView.swift // Feels (iOS) // // Created by Trey Tartt on 1/29/22. // import SwiftUI struct HeaderPercView: View { typealias model = (mood: Mood, total: Int, percent: Float) var entries = [model]() let backDays: Int init(fakeData: Bool, backDays: Int) { self.backDays = backDays var moodEntries: [MoodEntry]? if fakeData { moodEntries = PersistenceController.shared.randomEntries(count: 10) } else { var daysAgo = Calendar.current.date(byAdding: .day, value: -backDays, to: Date())! daysAgo = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: daysAgo)! moodEntries = PersistenceController.shared.getData(startDate: daysAgo, endDate: Date(), includedDays: [1,2,3,4,5,6,7]) } let totalEntryCount = moodEntries?.count ?? 0 if let moodEntries = moodEntries { for (_, mood) in Mood.allValues.enumerated() { let moodEntries = moodEntries.filter({ Int($0.moodValue) == mood.rawValue }) let total = moodEntries.count let perc = (Float(total) / Float(totalEntryCount)) * 100 entries.append((mood, total, perc)) } } entries = entries.sorted(by: { $0.0.rawValue > $1.0.rawValue }) } var body: some View { VStack { Spacer() HStack { ForEach(entries.prefix(3), id: \.0) { model in Text("\(model.percent, specifier: "%.0f")%") .font(.title) .fontWeight(.bold) .foregroundColor(model.mood.color) .frame(maxWidth: .infinity) } } Spacer() HStack { ForEach(entries.suffix(2), id: \.0) { model in Text("\(model.percent, specifier: "%.0f")%") .font(.title) .fontWeight(.bold) .foregroundColor(model.mood.color) .frame(maxWidth: .infinity) } } Spacer() } } } struct HeaderPercView_Previews: PreviewProvider { static var previews: some View { SmallRollUpHeaderView(fakeData: true, backDays: 30) } }