@page "/applications/new" @using System.Net @using AutoMapper @using BlazorWebAssemblyVisaApiClient.Validation.VisaApplications.Models @using BlazorWebAssemblyVisaApiClient.Components.FormComponents.Applicants @using VisaApiClient @using BlazorWebAssemblyVisaApiClient.Components @using BlazorWebAssemblyVisaApiClient.Components.FormComponents.VisaApplications @using BlazorWebAssemblyVisaApiClient.Infrastructure.Helpers @using BlazorWebAssemblyVisaApiClient.Infrastructure.Services.DateTimeProvider @using BlazorWebAssemblyVisaApiClient.Infrastructure.Services.UserDataProvider @using BlazorWebAssemblyVisaApiClient.Validation @using FluentValidation @using Newtonsoft.Json.Linq @inherits BlazorWebAssemblyVisaApiClient.Components.Base.VisaClientComponentBase New Application

New application

Visa









Past visas
@if (currentPastVisa > 0) { @for (var i = 0; i < currentPastVisa; i++) { var visa = requestModel.PastVisas[i]; }
NameIssue dateExpiration date
@visa.Name @visa.IssueDate.ToString("d.MM.yyyy") @visa.ExpirationDate.ToString("d.MM.yyyy")
}





@if (requestModel.VisaCategory is VisaCategory.Transit) {
Permission to destination Country
} else { requestModel.PermissionToDestCountry = null; } @if (isNonResident) {
Re-entry permission

}
@code { //todo past visas and visits private VisaApplicationCreateRequestModel requestModel = new(); private Status status = null!; private Status pastVisaStatus = null!; private bool isNonResident; private int currentPastVisa; private int currentPastVisit; private string formattedNow = null!; [Inject] IDateTimeProvider DateTimeProvider { get; set; } = null!; [Inject] IUserDataProvider UserDataProvider { get; set; } = null!; [Inject] IValidator VisaApplicationCreateRequestValidator { get; set; } = null!; [Inject] IValidator PastVisaModelValidator { get; set; } = null!; [Inject] IMapper Mapper { get; set; } = null!; protected override async Task OnInitializedAsync() { requestModel.PastVisas = new PastVisaModel[ConfigurationConstraints.MaxPastVisas]; for (var i = 0; i < requestModel.PastVisas.Length; i++) { requestModel.PastVisas[i] = new() { IssueDate = DateTimeProvider.Now(), ExpirationDate = DateTimeProvider.Now() }; } try { isNonResident = (await UserDataProvider.GetApplicant()).IsNonResident; } catch (Exception e) { ErrorHandler.Handle(e); } formattedNow = DateTimeProvider.FormattedNow(); requestModel.PermissionToDestCountry!.ExpirationDate = DateTimeProvider.Now(); } private async Task TryCreate() { requestModel.PastVisas = currentPastVisa == 0 ? [] : requestModel.PastVisas[..currentPastVisa]; requestModel.PastVisits = currentPastVisit == 0 ? [] : requestModel.PastVisits[..currentPastVisit]; var validationResult = await VisaApplicationCreateRequestValidator.ValidateAsync(requestModel); if (!validationResult.IsValid) { var errorsString = validationResult.ToErrorsString(); status.SetError(errorsString); } status.SetMessage("Wait..."); var request = Mapper.Map(requestModel); try { await Client.CreateApplicationAsync(request); status.SetSucces("Application created successfully."); } catch (ApiException e) { if (e.StatusCode == (int)HttpStatusCode.BadRequest && e.Result.AdditionalProperties.TryGetValue("errors", out var errors)) { try { var errorsList = ((JArray)errors).ToObject>(); status.SetError(string.Join("
", errorsList!)); } catch (Exception inner) { ErrorHandler.Handle(inner); status.SetError("Error occured"); } } else { ErrorHandler.Handle(e); } } catch (Exception e) { ErrorHandler.Handle(e); } } private void AddPastVisa() { var validationResult = PastVisaModelValidator.Validate(requestModel.PastVisas[currentPastVisa]); if (!validationResult.IsValid) { pastVisaStatus.SetError(validationResult.ToErrorsString()); return; } if (currentPastVisa < requestModel.PastVisas.Length - 1) { currentPastVisa++; pastVisaStatus.SetSucces("Added"); } else { pastVisaStatus.SetError($"{requestModel.PastVisas.Length} past visas is maximum"); } } private void RemovePastVisa(PastVisaModel visa) { currentPastVisa--; var found = false; if (requestModel.PastVisas[^1] == visa) { requestModel.PastVisas[^1] = new(); return; } for (var i = 0; i < requestModel.PastVisas.Length - 1; i++) { if (requestModel.PastVisas[i] == visa) { found = true; } if (found) { requestModel.PastVisas[i] = requestModel.PastVisas[i + 1]; } } } }