PersonEditPage finished

This commit is contained in:
2024-10-05 12:24:38 +02:00
Unverified
parent 065c27642e
commit a3c6ab04eb
8 changed files with 109 additions and 4 deletions

View File

@@ -23,6 +23,9 @@ public class GenderResponse : Gender, IQueryOrderable<GenderResponse>
#region CONSTRUCTORS #region CONSTRUCTORS
[JsonConstructor]
public GenderResponse() { }
[SetsRequiredMembers] [SetsRequiredMembers]
public GenderResponse(Database.Model.Common.Gender gender) public GenderResponse(Database.Model.Common.Gender gender)

View File

@@ -40,6 +40,9 @@ public class PersonResponse : Person, IQueryOrderable<PersonResponse>
#region CONSTRUCTORS #region CONSTRUCTORS
[JsonConstructor]
public PersonResponse() { }
[SetsRequiredMembers] [SetsRequiredMembers]
public PersonResponse(Database.Model.Person.Person person) public PersonResponse(Database.Model.Person.Person person)
{ {

View File

@@ -45,6 +45,27 @@
</InputSelect> </InputSelect>
</div> </div>
</div> </div>
<div class="row">
<div class="col align-self-center">
@if (!string.IsNullOrWhiteSpace(_error))
{
<span class="text-danger">@(_error)</span>
}
</div>
<div class="col-auto">
<button type="submit" class="btn btn-secondary" disabled="@(_saving)" @onclick="@(Save)">
@if (!_saving)
{
<span>Save</span>
}
else
{
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
<span>Saving...</span>
}
</button>
</div>
</div>
</div> </div>
</EditForm> </EditForm>
} }

View File

@@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using WatchIt.Common.Model.Genders; using WatchIt.Common.Model.Genders;
using WatchIt.Common.Model.Persons; using WatchIt.Common.Model.Persons;
using WatchIt.Website.Services.WebAPI.Genders;
using WatchIt.Website.Services.WebAPI.Persons; using WatchIt.Website.Services.WebAPI.Persons;
namespace WatchIt.Website.Components.PersonEditPage; namespace WatchIt.Website.Components.PersonEditPage;
@@ -9,7 +10,9 @@ public partial class PersonEditFormComponent : ComponentBase
{ {
#region SERVICES #region SERVICES
[Inject] private NavigationManager NavigationManager { get; set; } = default!;
[Inject] private IPersonsWebAPIService PersonsWebAPIService { get; set; } = default!; [Inject] private IPersonsWebAPIService PersonsWebAPIService { get; set; } = default!;
[Inject] private IGendersWebAPIService GendersWebAPIService { get; set; } = default!;
#endregion #endregion
@@ -27,6 +30,8 @@ public partial class PersonEditFormComponent : ComponentBase
#region FIELDS #region FIELDS
private bool _loaded; private bool _loaded;
private bool _saving;
private string? _error;
private IEnumerable<GenderResponse> _genders = []; private IEnumerable<GenderResponse> _genders = [];
@@ -47,7 +52,7 @@ public partial class PersonEditFormComponent : ComponentBase
// STEP 0 // STEP 0
endTasks.AddRange( endTasks.AddRange(
[ [
// TODO: Add gender fetch GendersWebAPIService.GetAllGenders(successAction: data => _genders = data)
]); ]);
if (Id.HasValue) if (Id.HasValue)
{ {
@@ -65,5 +70,41 @@ public partial class PersonEditFormComponent : ComponentBase
} }
} }
private async Task Save()
{
void PutSuccess()
{
_error = null;
_saving = false;
}
void PostSuccess(PersonResponse data)
{
NavigationManager.NavigateTo($"person/{data.Id}/edit");
}
void BadRequest(IDictionary<string, string[]> errors)
{
_error = errors.SelectMany(x => x.Value).FirstOrDefault() ?? "Unknown error";
_saving = false;
}
void AuthError()
{
_error = "Authentication error";
_saving = false;
}
_saving = true;
if (Id.HasValue)
{
await PersonsWebAPIService.PutPerson(Id.Value, _person, PutSuccess, BadRequest, AuthError, AuthError);
}
else
{
await PersonsWebAPIService.PostPerson(_person, PostSuccess, BadRequest, AuthError, AuthError);
}
}
#endregion #endregion
} }

View File

@@ -7,12 +7,17 @@
<PageTitle> <PageTitle>
@("WatchIt - ")
@switch (Type) @switch (Type)
{ {
case "movies": @("Movies"); break; case "movies":
case "series": @("Series"); break; @("Movies");
break;
case "series":
@("Series");
break;
} }
@(" database - WatchIt") @(" database")
</PageTitle> </PageTitle>

View File

@@ -4,6 +4,35 @@
@page "/person/new" @page "/person/new"
<PageTitle>
WatchIt -
@if (_loaded)
{
if (string.IsNullOrWhiteSpace(_error) && _user?.IsAdmin == true)
{
if (_person is not null)
{
@("Edit \"")@(_person.Name)@("\"")
}
else
{
@("Create new person")
}
}
else
{
@("Error")
}
}
else
{
@("Loading")
}
</PageTitle>
@if (_loaded) @if (_loaded)
{ {
if (_user?.IsAdmin == true) if (_user?.IsAdmin == true)

View File

@@ -9,6 +9,7 @@ using WatchIt.Website.Services.Utility.Authentication;
using WatchIt.Website.Services.Utility.Configuration; using WatchIt.Website.Services.Utility.Configuration;
using WatchIt.Website.Services.Utility.Tokens; using WatchIt.Website.Services.Utility.Tokens;
using WatchIt.Website.Services.WebAPI.Accounts; using WatchIt.Website.Services.WebAPI.Accounts;
using WatchIt.Website.Services.WebAPI.Genders;
using WatchIt.Website.Services.WebAPI.Media; using WatchIt.Website.Services.WebAPI.Media;
using WatchIt.Website.Services.WebAPI.Movies; using WatchIt.Website.Services.WebAPI.Movies;
using WatchIt.Website.Services.WebAPI.Persons; using WatchIt.Website.Services.WebAPI.Persons;
@@ -72,6 +73,7 @@ public static class Program
// WebAPI // WebAPI
builder.Services.AddScoped<IAccountsWebAPIService, AccountsWebAPIService>(); builder.Services.AddScoped<IAccountsWebAPIService, AccountsWebAPIService>();
builder.Services.AddSingleton<IGendersWebAPIService, GendersWebAPIService>();
builder.Services.AddSingleton<IMediaWebAPIService, MediaWebAPIService>(); builder.Services.AddSingleton<IMediaWebAPIService, MediaWebAPIService>();
builder.Services.AddSingleton<IMoviesWebAPIService, MoviesWebAPIService>(); builder.Services.AddSingleton<IMoviesWebAPIService, MoviesWebAPIService>();
builder.Services.AddSingleton<ISeriesWebAPIService, SeriesWebAPIService>(); builder.Services.AddSingleton<ISeriesWebAPIService, SeriesWebAPIService>();

View File

@@ -20,6 +20,7 @@
<ProjectReference Include="..\WatchIt.Website.Services\WatchIt.Website.Services.Utility\WatchIt.Website.Services.Utility.Configuration\WatchIt.Website.Services.Utility.Configuration.csproj" /> <ProjectReference Include="..\WatchIt.Website.Services\WatchIt.Website.Services.Utility\WatchIt.Website.Services.Utility.Configuration\WatchIt.Website.Services.Utility.Configuration.csproj" />
<ProjectReference Include="..\WatchIt.Website.Services\WatchIt.Website.Services.Utility\WatchIt.Website.Services.Utility.Tokens\WatchIt.Website.Services.Utility.Tokens.csproj" /> <ProjectReference Include="..\WatchIt.Website.Services\WatchIt.Website.Services.Utility\WatchIt.Website.Services.Utility.Tokens\WatchIt.Website.Services.Utility.Tokens.csproj" />
<ProjectReference Include="..\WatchIt.Website.Services\WatchIt.Website.Services.WebAPI\WatchIt.Website.Services.WebAPI.Accounts\WatchIt.Website.Services.WebAPI.Accounts.csproj" /> <ProjectReference Include="..\WatchIt.Website.Services\WatchIt.Website.Services.WebAPI\WatchIt.Website.Services.WebAPI.Accounts\WatchIt.Website.Services.WebAPI.Accounts.csproj" />
<ProjectReference Include="..\WatchIt.Website.Services\WatchIt.Website.Services.WebAPI\WatchIt.Website.Services.WebAPI.Genders\WatchIt.Website.Services.WebAPI.Genders.csproj" />
<ProjectReference Include="..\WatchIt.Website.Services\WatchIt.Website.Services.WebAPI\WatchIt.Website.Services.WebAPI.Media\WatchIt.Website.Services.WebAPI.Media.csproj" /> <ProjectReference Include="..\WatchIt.Website.Services\WatchIt.Website.Services.WebAPI\WatchIt.Website.Services.WebAPI.Media\WatchIt.Website.Services.WebAPI.Media.csproj" />
<ProjectReference Include="..\WatchIt.Website.Services\WatchIt.Website.Services.WebAPI\WatchIt.Website.Services.WebAPI.Movies\WatchIt.Website.Services.WebAPI.Movies.csproj" /> <ProjectReference Include="..\WatchIt.Website.Services\WatchIt.Website.Services.WebAPI\WatchIt.Website.Services.WebAPI.Movies\WatchIt.Website.Services.WebAPI.Movies.csproj" />
<ProjectReference Include="..\WatchIt.Website.Services\WatchIt.Website.Services.WebAPI\WatchIt.Website.Services.WebAPI.Persons\WatchIt.Website.Services.WebAPI.Persons.csproj" /> <ProjectReference Include="..\WatchIt.Website.Services\WatchIt.Website.Services.WebAPI\WatchIt.Website.Services.WebAPI.Persons\WatchIt.Website.Services.WebAPI.Persons.csproj" />