Error handling and fixes
This commit is contained in:
		| @@ -1,5 +1,6 @@ | ||||
| @page "/applications/{ApplicationId}" | ||||
| @using BlazorWebAssemblyVisaApiClient.Common.Exceptions | ||||
| @using BlazorWebAssemblyVisaApiClient.Components | ||||
| @using BlazorWebAssemblyVisaApiClient.Infrastructure.Helpers | ||||
| @using BlazorWebAssemblyVisaApiClient.Infrastructure.Services.UserDataProvider | ||||
| @using VisaApiClient | ||||
| @@ -175,15 +176,24 @@ | ||||
|     </tr> | ||||
|     </tbody> | ||||
| </table> | ||||
| @if (currentRole == Constants.ApprovingAuthorityRole) | ||||
| { | ||||
|     <button class="btn-outline-primary" @onclick="Approve">Approve</button> | ||||
|     <button class="btn-outline-danger" @onclick="Reject">Reject</button> | ||||
|     <Status @ref="status"/> | ||||
| } | ||||
|  | ||||
| @code { | ||||
|     private VisaApplicationModel application = new(); | ||||
|     private string currentRole = null!; | ||||
|     private Status status = null!; | ||||
|  | ||||
|     [Parameter] public string ApplicationId { get; set; } = null!; | ||||
|  | ||||
|     [Inject] private IUserDataProvider UserDataProvider { get; set; } = null!; | ||||
|  | ||||
|     [Inject] private NavigationManager Nav { get; set; } = null!; | ||||
|  | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|         try | ||||
| @@ -191,12 +201,12 @@ | ||||
|             var applicationId = Guid.Parse(ApplicationId); | ||||
|             currentRole = UserDataProvider.GetCurrentRole() ?? throw new NotLoggedInException(); | ||||
|  | ||||
|             application = currentRole switch | ||||
|             { | ||||
|                 Constants.ApplicantRole => await Client.GetApplicationForApplicantAsync(applicationId), | ||||
|                 Constants.ApprovingAuthorityRole => await Client.GetApplicationForAuthorityAsync(applicationId), | ||||
|                 _ => throw new NotLoggedInException() | ||||
|             }; | ||||
|                 application = currentRole switch | ||||
|                 { | ||||
|                     Constants.ApplicantRole => await Client.GetApplicationForApplicantAsync(applicationId), | ||||
|                     Constants.ApprovingAuthorityRole => await Client.GetApplicationForAuthorityAsync(applicationId), | ||||
|                     _ => throw new NotLoggedInException() | ||||
|                 }; | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
| @@ -210,4 +220,34 @@ | ||||
|     private static string AddressToString(AddressModel address) | ||||
|         => $"{address.Country}, {address.City}, {address.Street} {address.Building}"; | ||||
|  | ||||
|     private async void Approve() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             status.SetMessage("Wait..."); | ||||
|             await Client.SetStatusFromAuthorityAsync(application.Id, AuthorityRequestStatuses.Approved); | ||||
|             Nav.NavigateTo("/applications"); | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
|             status.SetError("Error occured."); | ||||
|             ErrorHandler.Handle(e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private async void Reject() | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             status.SetMessage("Wait..."); | ||||
|             await Client.SetStatusFromAuthorityAsync(application.Id, AuthorityRequestStatuses.Rejected); | ||||
|             Nav.NavigateTo("/applications"); | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
|             status.SetError("Error occured."); | ||||
|             ErrorHandler.Handle(e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -41,7 +41,7 @@ | ||||
|                 <NavLink href="@($"/applications/{application.Id}")"> | ||||
|                     <button class="btn-outline-primary">See</button> | ||||
|                 </NavLink> | ||||
|                 @if (currentRole == Constants.ApplicantRole && application.Status is not ApplicationStatus.Closed) | ||||
|                 @if (currentRole == Constants.ApplicantRole && application.Status is ApplicationStatus.Pending) | ||||
|                 { | ||||
|                     <span> | </span> | ||||
|                     <input type="button" class="border-danger" @onclick="() => CloseApplication(application)" value="Close"/> | ||||
| @@ -70,7 +70,7 @@ | ||||
|         { | ||||
|             applications = currentRole switch | ||||
|             { | ||||
|                 Constants.ApplicantRole => (await Client.GetForApplicantAsync()).OrderByDescending(a => a.RequestDate).ToList(), | ||||
|                 Constants.ApplicantRole => (await Client.GetApplicationsForApplicantAsync()).OrderByDescending(a => a.RequestDate).ToList(), | ||||
|                 Constants.ApprovingAuthorityRole => (await Client.GetPendingAsync()).OrderByDescending(a => a.RequestDate).ToList(), | ||||
|                 _ => throw new NotLoggedInException() | ||||
|             }; | ||||
|   | ||||
| @@ -267,7 +267,7 @@ | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 ErrorHandler.Handle(e); | ||||
|                 throw; | ||||
|             } | ||||
|         } | ||||
|         catch (Exception e) | ||||
|   | ||||
| @@ -172,7 +172,6 @@ | ||||
|                 if (errorsList is null) | ||||
|                 { | ||||
|                     ErrorHandler.Handle(new JsonException("Can't convert validation errors to list")); | ||||
|  | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
| @@ -180,7 +179,7 @@ | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 ErrorHandler.Handle(e); | ||||
|                 throw; | ||||
|             } | ||||
|         } | ||||
|         catch (Exception e) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user