@page "/applications" @using System.Reflection @using BlazorWebAssemblyVisaApiClient.Infrastructure.Helpers @using BlazorWebAssemblyVisaApiClient.Infrastructure.Services.UserDataProvider @using BlazorWebAssemblyVisaApiClient.PagesExceptions.Applications @using VisaApiClient @inherits BlazorWebAssemblyVisaApiClient.Components.Base.VisaClientComponentBase Applications @switch (currentRole) { case "Applicant": @foreach (var application in applications.Cast()) { var rowClass = application.Status switch { ApplicationStatus.Pending => "", ApplicationStatus.Approved => "table-success", ApplicationStatus.Rejected => "table-danger", ApplicationStatus.Closed => "table-danger", _ => throw new ArgumentOutOfRangeException() }; } break; default: Nav.NavigateTo("/"); //todo feedback break; }
Destination Country Visa Category Request date Days requested Status
@application.DestinationCountry @application.VisaCategory.GetDisplayName() @application.RequestDate.ToString("d") @application.ValidDaysRequested @application.Status.GetDisplayName()
@code { private string currentRole = null!; private IEnumerable applications = []; [Inject] private IUserDataProvider UserDataProvider { get; set; } = null!; [Inject] private NavigationManager Nav { get; set; } = null!; protected override async Task OnInitializedAsync() { currentRole = UserDataProvider.GetCurrentRole()!; await Fetch(); } private async Task Fetch() { try { applications = currentRole switch { "Applicant" => (await Client.GetForApplicantAsync()).OrderByDescending(a => a.RequestDate), _ => throw new ArgumentOutOfRangeException() }; } catch (Exception e) { ErrorHandler.Handle(e); } } private async Task CloseApplication(object application) { try { PropertyInfo idProp; PropertyInfo statusProp; try { var type = applications.First().GetType(); idProp = type.GetProperty("Id")!; statusProp = type.GetProperty("Status")!; if (idProp.PropertyType != typeof(Guid) || statusProp.PropertyType != typeof(ApplicationStatus)) { throw new(); } } catch (Exception) { throw new UnknownApplicationTypeException(); } var id = (Guid)idProp.GetValue(application)!; await Client.CloseApplicationAsync(id); statusProp.SetValue(application, ApplicationStatus.Closed); StateHasChanged(); } catch (Exception e) { ErrorHandler.Handle(e); } } }