package pages import ( "fmt" "tankstopp/internal/models" "tankstopp/internal/views/components" ) templ VehiclesPage(user *models.User, username string, vehicles []models.Vehicle) { @components.BaseLayout("Vehicles", user, username) { @components.PageHeader("Manage your vehicles", "Vehicles")

Your Vehicles

Manage and track your vehicles

if len(vehicles) > 0 { for _, vehicle := range vehicles {
@VehicleCard(vehicle)
} } else {
@components.EmptyState("car", "No vehicles found", "Add your first vehicle to start tracking fuel expenses.", "Add Vehicle", "/vehicles/add")
}
if len(vehicles) > 0 {

Vehicle Statistics

@components.Card("Total Vehicles", "car") {
{ fmt.Sprintf("%d", len(vehicles)) }
Registered vehicles
}
@components.Card("Active Vehicles", "status") {
{ fmt.Sprintf("%d", countActiveVehicles(vehicles)) }
Currently active
}
@components.Card("Brands", "brand") {
{ fmt.Sprintf("%d", countUniqueBrands(vehicles)) }
Different brands
}
@components.Card("Fuel Types", "fuel") {
{ fmt.Sprintf("%d", countUniqueFuelTypes(vehicles)) }
Different fuel types
}
}
} } templ VehicleCard(vehicle models.Vehicle) {

{ vehicle.Name }

{ vehicle.Make } { vehicle.Model }
@components.Icon("license-plate", 24) if vehicle.LicensePlate != "" { { vehicle.LicensePlate } } else { No plate }
@components.Icon("fuel", 24) { vehicle.FuelType }
@components.Icon("calendar", 24) { fmt.Sprintf("%d", vehicle.Year) }
if vehicle.IsActive { Active } else { Inactive }
if vehicle.Notes != "" {
{ vehicle.Notes }
}
} templ AddVehiclePage(user *models.User, username string) { @components.BaseLayout("Add Vehicle", user, username) { @components.PageHeader("Add a new vehicle", "Add Vehicle")
@components.Card("Vehicle Information", "car") { @components.Form("post", "/vehicles/add") {
@components.FormGroup("Vehicle Name", "A friendly name for your vehicle") { @components.Input("name", "text", "e.g., My Car, Work Van", "", true) }
@components.FormGroup("License Plate", "Vehicle registration number") { @components.Input("license_plate", "text", "e.g., ABC-123", "", false) }
@components.FormGroup("Make", "Vehicle manufacturer") { @VehicleBrandSelect("make", "") }
@components.FormGroup("Model", "Vehicle model") { @components.Input("model", "text", "e.g., Corolla, Golf", "", true) }
@components.FormGroup("Year", "Manufacturing year") { @components.NumberInput("year", "2024", 0, "1", 1900, true) }
@components.FormGroup("Fuel Type", "Primary fuel type") { @components.FuelTypeSelect("fuel_type", "", true) }
@components.FormGroup("Active", "Vehicle status") { @components.Switch("is_active", "Vehicle is active", true) }
@components.FormGroup("Notes", "Additional information (optional)") { @components.TextArea("notes", "Add any additional notes about this vehicle...", "", 3) }
@components.FormButtons("/vehicles", "Add Vehicle", "save") } }
} } templ EditVehiclePage(user *models.User, username string, vehicle *models.Vehicle) { @components.BaseLayout("Edit Vehicle", user, username) { @components.PageHeader("Update vehicle information", "Edit Vehicle")
@components.Card("Vehicle Information", "car") { @components.Form("post", fmt.Sprintf("/vehicles/edit/%d", vehicle.ID)) {
@components.FormGroup("Vehicle Name", "A friendly name for your vehicle") { @components.Input("name", "text", "e.g., My Car, Work Van", vehicle.Name, true) }
@components.FormGroup("License Plate", "Vehicle registration number") { @components.Input("license_plate", "text", "e.g., ABC-123", vehicle.LicensePlate, false) }
@components.FormGroup("Make", "Vehicle manufacturer") { @VehicleBrandSelect("make", vehicle.Make) }
@components.FormGroup("Model", "Vehicle model") { @components.Input("model", "text", "e.g., Corolla, Golf", vehicle.Model, true) }
@components.FormGroup("Year", "Manufacturing year") { @components.NumberInput("year", "2024", float64(vehicle.Year), "1", 1900, true) }
@components.FormGroup("Fuel Type", "Primary fuel type") { @components.FuelTypeSelect("fuel_type", vehicle.FuelType, true) }
@components.FormGroup("Active", "Vehicle status") { @components.Switch("is_active", "Vehicle is active", vehicle.IsActive) }
@components.FormGroup("Notes", "Additional information (optional)") { @components.TextArea("notes", "Add any additional notes about this vehicle...", vehicle.Notes, 3) }
@components.FormButtons("/vehicles", "Update Vehicle", "save") } }
} } templ VehicleBrandSelect(name, selectedMake string) { @components.Select(name, true) { @components.Option("", "Select make...", selectedMake == "") @components.Option("Audi", "Audi", selectedMake == "Audi") @components.Option("BMW", "BMW", selectedMake == "BMW") @components.Option("Mercedes-Benz", "Mercedes-Benz", selectedMake == "Mercedes-Benz") @components.Option("Volkswagen", "Volkswagen", selectedMake == "Volkswagen") @components.Option("Ford", "Ford", selectedMake == "Ford") @components.Option("Toyota", "Toyota", selectedMake == "Toyota") @components.Option("Honda", "Honda", selectedMake == "Honda") @components.Option("Nissan", "Nissan", selectedMake == "Nissan") @components.Option("Hyundai", "Hyundai", selectedMake == "Hyundai") @components.Option("Kia", "Kia", selectedMake == "Kia") @components.Option("Mazda", "Mazda", selectedMake == "Mazda") @components.Option("Subaru", "Subaru", selectedMake == "Subaru") @components.Option("Volvo", "Volvo", selectedMake == "Volvo") @components.Option("Peugeot", "Peugeot", selectedMake == "Peugeot") @components.Option("Renault", "Renault", selectedMake == "Renault") @components.Option("Citroen", "Citroen", selectedMake == "Citroen") @components.Option("Fiat", "Fiat", selectedMake == "Fiat") @components.Option("Opel", "Opel", selectedMake == "Opel") @components.Option("Skoda", "Skoda", selectedMake == "Skoda") @components.Option("SEAT", "SEAT", selectedMake == "SEAT") @components.Option("Chevrolet", "Chevrolet", selectedMake == "Chevrolet") @components.Option("Jeep", "Jeep", selectedMake == "Jeep") @components.Option("Land Rover", "Land Rover", selectedMake == "Land Rover") @components.Option("Jaguar", "Jaguar", selectedMake == "Jaguar") @components.Option("Porsche", "Porsche", selectedMake == "Porsche") @components.Option("Tesla", "Tesla", selectedMake == "Tesla") @components.Option("Other", "Other", selectedMake == "Other") } } // Helper functions for statistics func countActiveVehicles(vehicles []models.Vehicle) int { count := 0 for _, vehicle := range vehicles { if vehicle.IsActive { count++ } } return count } func countUniqueBrands(vehicles []models.Vehicle) int { brands := make(map[string]bool) for _, vehicle := range vehicles { if vehicle.Make != "" { brands[vehicle.Make] = true } } return len(brands) } func countUniqueFuelTypes(vehicles []models.Vehicle) int { fuelTypes := make(map[string]bool) for _, vehicle := range vehicles { if vehicle.FuelType != "" { fuelTypes[vehicle.FuelType] = true } } return len(fuelTypes) } script VehicleScript() { function confirmDelete(form) { const vehicleName = form.dataset.item; return confirm(`Are you sure you want to delete the vehicle "${vehicleName}"? This action cannot be undone and will also delete all associated fuel stops.`); } // Initialize tooltips and dropdowns document.addEventListener('DOMContentLoaded', function() { // Initialize Bootstrap tooltips var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { return new bootstrap.Tooltip(tooltipTriggerEl); }); // Set current year as default const yearInput = document.querySelector('input[name="year"]'); if (yearInput && !yearInput.value) { yearInput.value = new Date().getFullYear(); } }); }