@page "/services" @using NimbusFlow.Frontend.Services @using NimbusFlow.Frontend.Models @inject IApiService ApiService Services

Services

Create Service
@if (loading) {
Loading...
} else if (services.Any()) {
@foreach (var service in filteredServices.OrderBy(s => s.ServiceDate)) { }
Date Service Type Scheduled Members Status Actions
@service.ServiceDate.ToString("MMM dd, yyyy (dddd)") @service.ServiceTypeName @{ var serviceSchedules = schedules.Where(s => s.ServiceId == service.ServiceId).ToList(); var acceptedCount = serviceSchedules.Count(s => s.Status == "accepted"); var pendingCount = serviceSchedules.Count(s => s.Status == "pending"); var declinedCount = serviceSchedules.Count(s => s.Status == "declined"); }
@if (acceptedCount > 0) { @acceptedCount accepted } @if (pendingCount > 0) { @pendingCount pending } @if (declinedCount > 0) { @declinedCount declined } @if (serviceSchedules.Count == 0) { No schedules }
@if (service.ServiceDate < DateTime.Today) { Past } else if (service.ServiceDate == DateTime.Today) { Today } else { Upcoming }
View @if (service.ServiceDate >= DateTime.Today) { Schedule Edit }
Showing @filteredServices.Count() of @services.Count services
} else {

No Services Found

There are currently no services in the system.

Create Your First Service
} @code { private List services = new(); private List serviceTypes = new(); private List schedules = new(); private bool loading = true; private string selectedServiceType = ""; private DateTime? filterDate; private bool showPastServices = false; private IEnumerable filteredServices { get { var filtered = services.AsEnumerable(); if (!showPastServices) { filtered = filtered.Where(s => s.ServiceDate >= DateTime.Today); } if (!string.IsNullOrEmpty(selectedServiceType) && int.TryParse(selectedServiceType, out int typeId)) { filtered = filtered.Where(s => s.ServiceTypeId == typeId); } if (filterDate.HasValue) { filtered = filtered.Where(s => s.ServiceDate.Date == filterDate.Value.Date); } return filtered; } } protected override async Task OnInitializedAsync() { await LoadData(); } private async Task LoadData() { try { loading = true; // Load all data in parallel var servicesTask = ApiService.GetServicesAsync(); var serviceTypesTask = ApiService.GetServiceTypesAsync(); var schedulesTask = ApiService.GetSchedulesAsync(); await Task.WhenAll(servicesTask, serviceTypesTask, schedulesTask); services = servicesTask.Result; serviceTypes = serviceTypesTask.Result; schedules = schedulesTask.Result; // Map service type names to services foreach (var service in services) { var serviceType = serviceTypes.FirstOrDefault(st => st.ServiceTypeId == service.ServiceTypeId); service.ServiceTypeName = serviceType?.TypeName ?? "Unknown"; } } catch (Exception ex) { Console.WriteLine($"Error loading services data: {ex.Message}"); } finally { loading = false; } } }