▍ humdrum codex / sportsball v0.1.0
license AGPL-3.0
2.1 KB raw
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package ui

import (
	"strings"

	"github.com/charmbracelet/lipgloss"

	"github.com/humdrum-tiv/sportsball/internal/model"
)

// settingsView renders the leagues settings screen: a checklist of every
// league — enabled ones first in display order, then a hidden group — with the
// cursor row marked. Toggling and reordering happen in handleSettingsKey; this
// only draws current state. Flows through View()'s paintBackground like the
// other views.
func (a App) settingsView() string {
	header := styleTitle.Render(" LEAGUES ") +
		lipgloss.NewStyle().Foreground(colAccent2).Bold(true).Render("  show, hide & reorder  ") +
		styleSubtle.Render("(auto-hidden off-season · "+keys.ResetLeagues.Help().Key+" resets overrides)")

	rows, enabled := a.settingsRows()
	var lines []string
	dividerShown := false
	for i := range rows {
		if !enabled[i] && !dividerShown {
			lines = append(lines, styleFaint.Render("  ── hidden ──"))
			dividerShown = true
		}
		lines = append(lines, a.settingsRow(rows[i], enabled[i], i == a.settingsCursor))
	}

	help := styleHelp.Render(strings.Join([]string{
		keys.Up.Help().Key + "/" + keys.Down.Help().Key + " move",
		keys.Toggle.Help().Key + " toggle",
		keys.MoveUp.Help().Key + "/" + keys.MoveDown.Help().Key + " reorder",
		keys.ResetLeagues.Help().Key + " auto",
		keys.Back.Help().Key + " done",
	}, styleFaint.Render("  ·  ")))

	parts := []string{header, "", strings.Join(lines, "\n"), "", help}
	return styleApp.Render(strings.Join(parts, "\n"))
}

// settingsRow renders one league line: cursor marker, checkbox, league glyph
// and name. Enabled rows get a green check; the cursor row gets an accent ▸.
func (a App) settingsRow(l model.League, on, selected bool) string {
	box := styleSubtle.Render("[ ]")
	if on {
		box = lipgloss.NewStyle().Foreground(colWin).Bold(true).Render("[x]")
	}
	cursor := "  "
	if selected {
		cursor = lipgloss.NewStyle().Foreground(colAccent).Bold(true).Render("▸ ")
	}
	name := lipgloss.NewStyle().Foreground(teamColor(l.Color)).Bold(true).Render(l.Icon + " " + l.Name)
	return cursor + box + " " + name
}