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 Control

Current Heat: { strconv.Itoa(currentHeatNum) } of { strconv.Itoa(len(heats)) }
Timer Control

0.000

Ready
Gate Status: Unknown

Heat Results

for _, result := range results { }
Heat Lane 1 Lane 2 Lane 3 Lane 4
{ strconv.Itoa(result.HeatNumber) } { fmt.Sprintf("%.4f", result.Lane1Time) } ({ strconv.Itoa(result.Lane1Position) }) { fmt.Sprintf("%.4f", result.Lane2Time) } ({ strconv.Itoa(result.Lane2Position) }) { fmt.Sprintf("%.4f", result.Lane3Time) } ({ strconv.Itoa(result.Lane3Position) }) { fmt.Sprintf("%.4f", result.Lane4Time) } ({ strconv.Itoa(result.Lane4Position) })
@currentHeatDisplay(heats, racers, currentHeatNum, results) if currentHeatNum < len(heats) {

Next Heat: { strconv.Itoa(currentHeatNum + 1) }

for _, heat := range heats { if heat.HeatNum == currentHeatNum + 1 { if heat.Lane1ID != nil { @nextHeatRacer(1, *heat.Lane1ID, racers) } if heat.Lane2ID != nil { @nextHeatRacer(2, *heat.Lane2ID, racers) } if heat.Lane3ID != nil { @nextHeatRacer(3, *heat.Lane3ID, racers) } if heat.Lane4ID != nil { @nextHeatRacer(4, *heat.Lane4ID, racers) } } }
Lane Racer Car #
}
} } // Find the current heat templ currentHeatDisplay(heats []models.Heat, racers []models.Racer, currentHeatNum int, results []models.HeatResult) { {{ // Find the current heat var currentHeat models.Heat for _, heat := range heats { if heat.HeatNum == currentHeatNum { currentHeat = heat break } } // Find the current result var currentResult *models.HeatResult for _, result := range results { if result.HeatNumber == currentHeatNum { currentResult = &result break } } }}

Current Heat: { strconv.Itoa(currentHeatNum) }

if currentHeat.Lane1ID != nil { @raceLaneInfo(1, *currentHeat.Lane1ID, racers, currentResult) } if currentHeat.Lane2ID != nil { @raceLaneInfo(2, *currentHeat.Lane2ID, racers, currentResult) } if currentHeat.Lane3ID != nil { @raceLaneInfo(3, *currentHeat.Lane3ID, racers, currentResult) } if currentHeat.Lane4ID != nil { @raceLaneInfo(4, *currentHeat.Lane4ID, racers, currentResult) }
} // Helper template for displaying a lane in the race manager templ raceLaneInfo(lane int, racerID int64, racers []models.Racer, result *models.HeatResult) { {{ // Find the 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 timeStr string = "--.-" var positionStr string = "-" if result != nil { if lane == 1 && result.Lane1Time > 0 { timeStr = fmt.Sprintf("%.4f", result.Lane1Time) positionStr = strconv.Itoa(result.Lane1Position) } else if lane == 2 && result.Lane2Time > 0 { timeStr = fmt.Sprintf("%.4f", result.Lane2Time) positionStr = strconv.Itoa(result.Lane2Position) } else if lane == 3 && result.Lane3Time > 0 { timeStr = fmt.Sprintf("%.4f", result.Lane3Time) positionStr = strconv.Itoa(result.Lane3Position) } else if lane == 4 && result.Lane4Time > 0 { timeStr = fmt.Sprintf("%.4f", result.Lane4Time) positionStr = strconv.Itoa(result.Lane4Position) } } }}
Lane { strconv.Itoa(lane) }
{ racer.FirstName } { racer.LastName }

Car #: { racer.CarNumber }

Time: { timeStr }
Position: { positionStr }
} // Helper template for displaying a racer in the next heat templ nextHeatRacer(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 } }