package seasonsview import "git.haelnorr.com/h/oslstats/internal/db" import "git.haelnorr.com/h/oslstats/internal/permissions" import "git.haelnorr.com/h/oslstats/internal/contexts" import "fmt" import "sort" import "time" templ SeasonLeagueFixturesPage(season *db.Season, league *db.League, fixtures []*db.Fixture, scheduleMap map[int]*db.FixtureSchedule, resultMap map[int]*db.FixtureResult) { @SeasonLeagueLayout("fixtures", season, league) { @SeasonLeagueFixtures(season, league, fixtures, scheduleMap, resultMap) } } templ SeasonLeagueFixtures(season *db.Season, league *db.League, fixtures []*db.Fixture, scheduleMap map[int]*db.FixtureSchedule, resultMap map[int]*db.FixtureResult) { {{ permCache := contexts.Permissions(ctx) canManage := permCache.HasPermission(permissions.FixturesManage) // Group fixtures by game week (only allocated ones) type gameWeekGroup struct { Week int Fixtures []*db.Fixture } groups := []gameWeekGroup{} groupMap := map[int]int{} // week -> index in groups for _, f := range fixtures { if f.GameWeek == nil { continue } idx, exists := groupMap[*f.GameWeek] if !exists { idx = len(groups) groupMap[*f.GameWeek] = idx groups = append(groups, gameWeekGroup{Week: *f.GameWeek, Fixtures: []*db.Fixture{}}) } groups[idx].Fixtures = append(groups[idx].Fixtures, f) } // Sort fixtures within each group by scheduled time // Scheduled fixtures first (by time), then TBD last farFuture := time.Date(9999, 1, 1, 0, 0, 0, 0, time.UTC) for i := range groups { sort.Slice(groups[i].Fixtures, func(a, b int) bool { ta := farFuture tb := farFuture if sa, ok := scheduleMap[groups[i].Fixtures[a].ID]; ok && sa.ScheduledTime != nil { ta = *sa.ScheduledTime } if sb, ok := scheduleMap[groups[i].Fixtures[b].ID]; ok && sb.ScheduledTime != nil { tb = *sb.ScheduledTime } return ta.Before(tb) }) } }}
No fixtures scheduled yet.