Files
iceglass/IceGlass-iOS/Views/SeriesRow.swift
T
rzen f6785321f4 Enlarge logos, tricodes, and inline scores on iPhone rows
Game and series rows now lead with a 40pt logo + title3-monospaced
tricode + bold inline score + tricode + logo, so the matchup fills
the row's vertical space and reads at a glance. For future games the
score is replaced by an "@" separator. Right-side metadata (game number,
status, kickoff time) stays at subheadline/caption2 so it's secondary.

Tricodes and scores get .lineLimit(1).fixedSize() to keep everything
on one line on tighter widths.
2026-04-25 15:19:14 -04:00

96 lines
2.7 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// SeriesRow.swift
// IceGlass-iOS
//
// Copyright 2026 Rouslan Zenetl. All Rights Reserved.
//
import SwiftUI
struct SeriesRow: View {
let item: MainService.RoundSeriesItem
private static let logoSize: CGFloat = 40
var body: some View {
Button(action: open) {
HStack(alignment: .center, spacing: 10) {
matchupBlock
Spacer(minLength: 8)
rightContent
}
.padding(.horizontal, 14)
.padding(.vertical, 8)
.contentShape(Rectangle())
}
.buttonStyle(.plain)
}
private var matchupBlock: some View {
let bottom = item.series.bottomSeedTeam?.abbrev ?? "TBD"
let top = item.series.topSeedTeam?.abbrev ?? "TBD"
return HStack(spacing: 6) {
TeamLogo(abbrev: bottom, size: Self.logoSize)
Text(bottom)
.font(.title3.monospaced())
.fontWeight(.semibold)
.foregroundStyle(.primary)
.lineLimit(1)
.fixedSize()
Text(seriesScore)
.font(.title3.monospacedDigit())
.fontWeight(.bold)
.foregroundStyle(.primary)
.lineLimit(1)
.fixedSize()
.padding(.horizontal, 2)
Text(top)
.font(.title3.monospaced())
.fontWeight(.semibold)
.foregroundStyle(.primary)
.lineLimit(1)
.fixedSize()
TeamLogo(abbrev: top, size: Self.logoSize)
}
}
private var rightContent: some View {
VStack(alignment: .trailing, spacing: 2) {
Text(statusText)
.font(.subheadline)
.fontWeight(.medium)
.foregroundStyle(.secondary)
if let trailing = trailingText {
Text(trailing)
.font(.caption2)
.foregroundStyle(.tertiary)
}
}
}
private var seriesScore: String {
"\(item.series.bottomSeedWins)\(item.series.topSeedWins)"
}
private var statusText: String {
if let winner = item.series.winner {
return "\(winner) wins"
}
if let n = item.series.nextGameNumber {
return "Game \(n)"
}
return ""
}
private var trailingText: String? {
guard item.series.winner == nil else { return "Final" }
return item.nextGame?.nextGameLabel
}
private func open() {
guard let urlString = item.series.fullSeriesUrl,
let url = URL(string: urlString) else { return }
UIApplication.shared.open(url)
}
}