99 lines
3.2 KiB
Plaintext
99 lines
3.2 KiB
Plaintext
@page "/applications"
|
|
@using BlazorWebAssemblyVisaApiClient.Common.Exceptions
|
|
@using BlazorWebAssemblyVisaApiClient.Infrastructure.Helpers
|
|
@using BlazorWebAssemblyVisaApiClient.Infrastructure.Services.UserDataProvider
|
|
@using VisaApiClient
|
|
@inherits BlazorWebAssemblyVisaApiClient.Components.Base.VisaClientComponentBase
|
|
|
|
<PageTitle>Applications</PageTitle>
|
|
|
|
<table class="table table-bordered table-hover">
|
|
<thead>
|
|
<tr>
|
|
<th>Destination Country</th>
|
|
<th>Visa Category</th>
|
|
<th>Request date</th>
|
|
<th>Days requested</th>
|
|
<th>Status</th>
|
|
<th></th>
|
|
</tr>
|
|
</thead>
|
|
|
|
<tbody>
|
|
@foreach (var application in applications)
|
|
{
|
|
var rowClass = application.Status switch
|
|
{
|
|
ApplicationStatus.Pending => "",
|
|
ApplicationStatus.Approved => "table-success",
|
|
ApplicationStatus.Rejected => "table-danger",
|
|
ApplicationStatus.Closed => "table-danger",
|
|
_ => throw new ArgumentOutOfRangeException()
|
|
};
|
|
|
|
<tr class="@rowClass">
|
|
<td>@application.DestinationCountry</td>
|
|
<td>@application.VisaCategory.GetDisplayName()</td>
|
|
<td>@application.RequestDate.ToString("d")</td>
|
|
<td>@application.ValidDaysRequested</td>
|
|
<td>@application.Status.GetDisplayName()</td>
|
|
<td>
|
|
<NavLink href="@($"/applications/{application.Id}")">
|
|
<button class="btn-outline-primary">See</button>
|
|
</NavLink>
|
|
@if (currentRole == Constants.ApplicantRole && application.Status is ApplicationStatus.Pending)
|
|
{
|
|
<span> | </span>
|
|
<input type="button" class="border-danger" @onclick="() => CloseApplication(application)" value="Close"/>
|
|
}
|
|
</td>
|
|
</tr>
|
|
}
|
|
</tbody>
|
|
</table >
|
|
|
|
@code {
|
|
private string currentRole = null!;
|
|
private List<VisaApplicationPreview> applications = [];
|
|
|
|
[Inject] private IUserDataProvider UserDataProvider { get; set; } = null!;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
currentRole = UserDataProvider.GetCurrentRole()!;
|
|
await Fetch();
|
|
}
|
|
|
|
private async Task Fetch()
|
|
{
|
|
try
|
|
{
|
|
applications = currentRole switch
|
|
{
|
|
Constants.ApplicantRole => (await Client.GetApplicationsForApplicantAsync()).OrderByDescending(a => a.RequestDate).ToList(),
|
|
Constants.ApprovingAuthorityRole => (await Client.GetPendingAsync()).OrderByDescending(a => a.RequestDate).ToList(),
|
|
_ => throw new NotLoggedInException()
|
|
};
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
ErrorHandler.Handle(e);
|
|
}
|
|
}
|
|
|
|
private async Task CloseApplication(VisaApplicationPreview application)
|
|
{
|
|
try
|
|
{
|
|
await Client.CloseApplicationAsync(application.Id);
|
|
application.Status = ApplicationStatus.Closed;
|
|
StateHasChanged();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
ErrorHandler.Handle(e);
|
|
}
|
|
}
|
|
|
|
}
|