package templates import ( "track-gopher/models" "fmt" "strconv" ) // RaceManage renders the race management view templ RaceManage(groups []models.Group, currentGroup models.Group, heats []models.Heat, racers []models.Racer, currentHeatNum int, results []models.HeatResult) { @Layout("Race Management") {

Race Controls

Heat { strconv.Itoa(currentHeatNum) } of { strconv.Itoa(len(heats)) }

Timer

0.000
Ready
Gate Status: Unknown

Current Heat

@raceManageCurrentHeat(heats, racers, currentHeatNum, results)

Next Heat

if currentHeatNum < len(heats) { @raceManageNextHeat(heats, racers, currentHeatNum+1) } else {
No more heats in this group
}

Heat Results

for _, result := range results { }
Heat Lane 1 Lane 2 Lane 3 Lane 4
{ strconv.Itoa(result.HeatNumber) } { fmt.Sprintf("%.3f (#%d)", result.Lane1Time, result.Lane1Position) } { fmt.Sprintf("%.3f (#%d)", result.Lane2Time, result.Lane2Position) } { fmt.Sprintf("%.3f (#%d)", result.Lane3Time, result.Lane3Position) } { fmt.Sprintf("%.3f (#%d)", result.Lane4Time, result.Lane4Position) }
} } // Helper template for displaying current heat in the management view templ raceManageCurrentHeat(heats []models.Heat, racers []models.Racer, currentHeatNum int, results []models.HeatResult) { {{ // Find current heat var currentHeat models.Heat for _, heat := range heats { if heat.HeatNum == currentHeatNum { currentHeat = heat break } } // Find heat result if available var currentResult *models.HeatResult for _, result := range results { if result.HeatNumber == currentHeatNum { currentResult = &result break } } }}
if currentHeat.Lane1ID != nil { @raceManageLaneRow(1, *currentHeat.Lane1ID, racers, currentResult) } if currentHeat.Lane2ID != nil { @raceManageLaneRow(2, *currentHeat.Lane2ID, racers, currentResult) } if currentHeat.Lane3ID != nil { @raceManageLaneRow(3, *currentHeat.Lane3ID, racers, currentResult) } if currentHeat.Lane4ID != nil { @raceManageLaneRow(4, *currentHeat.Lane4ID, racers, currentResult) }
Lane Racer Car # Time Position
} // Helper template for displaying a lane row in the management view templ raceManageLaneRow(lane int, racerID int64, racers []models.Racer, result *models.HeatResult) { {{ // Find racer var racer models.Racer for _, r := range racers { if r.ID == racerID { racer = r break } } // Get time and position from result if available var time float64 var position int var hasResult bool if result != nil { hasResult = true switch lane { case 1: time = result.Lane1Time position = result.Lane1Position case 2: time = result.Lane2Time position = result.Lane2Position case 3: time = result.Lane3Time position = result.Lane3Position case 4: time = result.Lane4Time position = result.Lane4Position } } }} { strconv.Itoa(lane) } { racer.FirstName } { racer.LastName } { racer.CarNumber } if hasResult { { fmt.Sprintf("%.3f", time) } } else { --.- } if hasResult { { strconv.Itoa(position) } } else { - } } // Helper template for displaying next heat in the management view templ raceManageNextHeat(heats []models.Heat, racers []models.Racer, heatNum int) { {{ // Find the heat var nextHeat models.Heat for _, heat := range heats { if heat.HeatNum == heatNum { nextHeat = heat break } } }}
if nextHeat.Lane1ID != nil { @raceManageNextHeatRow(1, *nextHeat.Lane1ID, racers) } if nextHeat.Lane2ID != nil { @raceManageNextHeatRow(2, *nextHeat.Lane2ID, racers) } if nextHeat.Lane3ID != nil { @raceManageNextHeatRow(3, *nextHeat.Lane3ID, racers) } if nextHeat.Lane4ID != nil { @raceManageNextHeatRow(4, *nextHeat.Lane4ID, racers) }
Lane Racer Car #
} // Helper template for displaying a row in the next heat preview templ raceManageNextHeatRow(lane int, racerID int64, racers []models.Racer) { {{ // Find racer var racer models.Racer for _, r := range racers { if r.ID == racerID { racer = r break } } }} { strconv.Itoa(lane) } { racer.FirstName } { racer.LastName } { racer.CarNumber } }