Created
April 22, 2022 15:14
-
-
Save odrobnik/506dde39aabe89c5ff28d869c132e493 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// RankingsView.swift | |
// ChessClub | |
// | |
// Created by Oliver Drobnik on 22.04.22. | |
// | |
import SwiftUI | |
struct RankingsView: View | |
{ | |
@Environment(\.managedObjectContext) private var viewContext | |
// @SectionedFetchRequest<Bool, Member>( | |
// sectionIdentifier: \.rating, | |
// | |
// sortDescriptors: [] | |
// ) | |
// private var members: SectionedFetchResults<Bool, Member> | |
@FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \Member.rating, ascending: false)], predicate: NSPredicate(format: "rating > 0"), animation: .default) | |
var members: FetchedResults<Member> | |
func membersWithBiggerRanking(than member: Member) -> [Member] | |
{ | |
return members.filter { otherMember in | |
guard otherMember.isRankedAsAdult == member.isRankedAsAdult else | |
{ | |
return false | |
} | |
return otherMember.rating > member.rating | |
} | |
} | |
var body: some View | |
{ | |
List | |
{ | |
Section("Adult") | |
{ | |
ForEach(members) { member in | |
let higherRanked = self.membersWithBiggerRanking(than: member) | |
if member.isRankedAsAdult | |
{ | |
HStack { | |
ZStack(alignment: .trailing) { | |
Text("\(higherRanked.count + 1)") | |
Text("00").hidden() | |
}.font(.caption.monospacedDigit()) | |
Text(member.displayName).lineLimit(1) | |
Spacer() | |
if let string = member.ratingString | |
{ | |
Text(string) | |
.font(.caption.monospacedDigit()) | |
} | |
} | |
} | |
} | |
} | |
Section("Youth") | |
{ | |
ForEach(members) { member in | |
let higherRanked = self.membersWithBiggerRanking(than: member) | |
if !member.isRankedAsAdult | |
{ | |
HStack { | |
ZStack(alignment: .trailing) { | |
Text("\(higherRanked.count + 1)") | |
Text("00").hidden() | |
}.font(.caption.monospacedDigit()) | |
Text(member.displayName).lineLimit(1) | |
Spacer() | |
if let string = member.ratingString | |
{ | |
Text(string) | |
.font(.caption.monospacedDigit()) | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment