FlashCardResults shows colorized statistics
This commit is contained in:
		@@ -11,26 +11,52 @@ struct FlashCardResultsView: View {
 | 
			
		||||
    @Environment(\.managedObjectContext) private var viewContext
 | 
			
		||||
 | 
			
		||||
    @FetchRequest(fetchRequest: K.getFlashCardAnswersFetchRequest) var answers: FetchedResults<FlashCardAnswer>
 | 
			
		||||
    
 | 
			
		||||
    @ObservedObject var tokiDictionaryViewModel = TokiDictionaryViewModel()
 | 
			
		||||
 | 
			
		||||
    @State private var wordStatistics: [String: Double] = [:]
 | 
			
		||||
    @State private var statistics = 0.0
 | 
			
		||||
    
 | 
			
		||||
    func calculateStatistics() {
 | 
			
		||||
        for answer in answers {
 | 
			
		||||
            if answer.triesCount != 0 {
 | 
			
		||||
                print("word: \(answer.word)")
 | 
			
		||||
                print("tries: \(answer.triesCount)")
 | 
			
		||||
                print("correct: \(answer.correctCount)")
 | 
			
		||||
                self.statistics = Double(answer.correctCount) / Double(answer.triesCount)
 | 
			
		||||
            if answer.triesCount > 0 {
 | 
			
		||||
                self.wordStatistics[answer.word!] = (Double(answer.correctCount) / Double(answer.triesCount)) * 100
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        print(wordStatistics)
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    func calculateBackgroundColor(_ percent: Double) -> Color {
 | 
			
		||||
        if percent >= 80 {
 | 
			
		||||
            return Color.green
 | 
			
		||||
        } else if percent >= 40 {
 | 
			
		||||
            return Color.yellow
 | 
			
		||||
        } else {
 | 
			
		||||
            return Color.red
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    var body: some View {
 | 
			
		||||
        Text("Percentage: \(statistics)")
 | 
			
		||||
            .onAppear {
 | 
			
		||||
                calculateStatistics()
 | 
			
		||||
        List(wordStatistics.sorted(by: <), id: \.key) { entry in
 | 
			
		||||
            HStack {
 | 
			
		||||
                Text(entry.key)
 | 
			
		||||
                Spacer()
 | 
			
		||||
                Text("\(String(format: "%.2f", entry.value)) %")
 | 
			
		||||
            }
 | 
			
		||||
            .listRowBackground(calculateBackgroundColor(entry.value))
 | 
			
		||||
        }
 | 
			
		||||
        .onAppear {
 | 
			
		||||
            calculateStatistics()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extension Double {
 | 
			
		||||
    func formatAsPercent(places: Int) -> String {
 | 
			
		||||
        let formattedValue = String(format: "%.2f", self)
 | 
			
		||||
        return formattedValue
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -103,8 +103,10 @@ struct FlashCardStack: View {
 | 
			
		||||
    func setFlashCardAnswersCoreData(_ correct: Bool) {
 | 
			
		||||
        var cardInDatabase = false
 | 
			
		||||
        for answer in flashCardAnswers {
 | 
			
		||||
            print(answer.word)
 | 
			
		||||
            if answer.word == dictionary[currentFlashCard].word {
 | 
			
		||||
                print("word in database: \(answer.word)")
 | 
			
		||||
                print("tries: \(answer.triesCount)")
 | 
			
		||||
                print("correct`: \(answer.correctCount)")
 | 
			
		||||
                cardInDatabase = true
 | 
			
		||||
                answer.setValue((answer.triesCount + 1), forKey: "triesCount")
 | 
			
		||||
                if correct {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user