@page "/schedules" @using NimbusFlow.Frontend.Services @using NimbusFlow.Frontend.Models @inject IApiService ApiService @inject IJSRuntime JSRuntime Schedules

Schedules

Schedule Member
@if (loading) {
Loading...
} else if (schedules.Any()) {
@foreach (var schedule in filteredSchedules.OrderByDescending(s => s.ScheduledAt)) { }
Member Service Date Service Type Status Scheduled At Response Date Actions
@schedule.Member?.FullName @schedule.Service?.ServiceDate.ToString("MMM dd, yyyy") @schedule.Service?.ServiceTypeName @schedule.Status.ToUpper() @schedule.ScheduledAt.ToString("MMM dd, yyyy HH:mm") @if (schedule.AcceptedAt.HasValue) { @schedule.AcceptedAt.Value.ToString("MMM dd, yyyy HH:mm") } else if (schedule.DeclinedAt.HasValue) { @schedule.DeclinedAt.Value.ToString("MMM dd, yyyy HH:mm") } else { - }
View
Showing @filteredSchedules.Count() of @schedules.Count schedules
} else {

No Schedules Found

There are currently no schedules in the system.

Create Your First Schedule
} @if (showDeclineModal) { } @code { private List schedules = new(); private bool loading = true; private string selectedStatus = ""; private DateTime? filterDate; private bool showDeclineModal = false; private Schedule? scheduleToDecline; private string declineReason = ""; private IEnumerable filteredSchedules { get { var filtered = schedules.AsEnumerable(); if (!string.IsNullOrEmpty(selectedStatus)) { filtered = filtered.Where(s => s.Status == selectedStatus); } if (filterDate.HasValue) { filtered = filtered.Where(s => s.Service?.ServiceDate.Date == filterDate.Value.Date); } return filtered; } } protected override async Task OnInitializedAsync() { await LoadSchedules(); } private async Task LoadSchedules() { try { loading = true; schedules = await ApiService.GetSchedulesAsync(); } catch (Exception ex) { Console.WriteLine($"Error loading schedules: {ex.Message}"); } finally { loading = false; } } private string GetStatusBadgeClass(string status) { return status switch { "pending" => "badge-nimbus-pending", "accepted" => "badge-nimbus-accepted", "declined" => "badge-nimbus-declined", _ => "badge-nimbus-inactive" }; } private async Task AcceptSchedule(int scheduleId) { try { await ApiService.AcceptScheduleAsync(scheduleId); await LoadSchedules(); // Refresh the list } catch (Exception ex) { Console.WriteLine($"Error accepting schedule: {ex.Message}"); } } private void ShowDeclineModal(Schedule schedule) { scheduleToDecline = schedule; declineReason = ""; showDeclineModal = true; } private void HideDeclineModal() { showDeclineModal = false; scheduleToDecline = null; declineReason = ""; } private async Task ConfirmDecline() { if (scheduleToDecline != null) { try { await ApiService.DeclineScheduleAsync(scheduleToDecline.ScheduleId, declineReason); await LoadSchedules(); // Refresh the list HideDeclineModal(); } catch (Exception ex) { Console.WriteLine($"Error declining schedule: {ex.Message}"); } } } private async Task ConfirmRemove(Schedule schedule) { var confirmed = await JSRuntime.InvokeAsync("confirm", $"Are you sure you want to remove the schedule for {schedule.Member?.FullName}?"); if (confirmed) { try { var success = await ApiService.RemoveScheduleAsync(schedule.ScheduleId); if (success) { await LoadSchedules(); // Refresh the list } } catch (Exception ex) { Console.WriteLine($"Error removing schedule: {ex.Message}"); } } } private void ClearFilters() { selectedStatus = ""; filterDate = null; } }