Skip to content

Instantly share code, notes, and snippets.

@odrobnik
Created April 22, 2022 15:14
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save odrobnik/506dde39aabe89c5ff28d869c132e493 to your computer and use it in GitHub Desktop.
Save odrobnik/506dde39aabe89c5ff28d869c132e493 to your computer and use it in GitHub Desktop.
//
// 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