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);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 |