From 3bc17393b8d28c1270432fc3b853c015bade13cd Mon Sep 17 00:00:00 2001 From: Mateusz Skoczek Date: Wed, 9 Oct 2024 00:57:56 +0200 Subject: [PATCH] PersonRolesEditCreatorComponent added --- .../PersonRolesEditCreatorComponent.razor | 151 ++++++++++++++++++ .../PersonRolesEditCreatorComponent.razor.cs | 149 +++++++++++++++++ .../PersonRolesEditCreatorComponent.razor.css | 0 3 files changed, 300 insertions(+) create mode 100644 WatchIt.Website/WatchIt.Website/Components/PersonEditPage/PersonRolesEditCreatorComponent.razor create mode 100644 WatchIt.Website/WatchIt.Website/Components/PersonEditPage/PersonRolesEditCreatorComponent.razor.cs create mode 100644 WatchIt.Website/WatchIt.Website/Components/PersonEditPage/PersonRolesEditCreatorComponent.razor.css diff --git a/WatchIt.Website/WatchIt.Website/Components/PersonEditPage/PersonRolesEditCreatorComponent.razor b/WatchIt.Website/WatchIt.Website/Components/PersonEditPage/PersonRolesEditCreatorComponent.razor new file mode 100644 index 0000000..514ec3d --- /dev/null +++ b/WatchIt.Website/WatchIt.Website/Components/PersonEditPage/PersonRolesEditCreatorComponent.razor @@ -0,0 +1,151 @@ +@using Blazorise.Extensions +@using Blazorise.Components + + + +
+ @if (_loaded) + { +
+
+
+
+

Actor roles

+
+ @if (!_editingMode) + { +
+ +
+ } + else + { + if (!string.IsNullOrWhiteSpace(_error)) + { +
+ @(_error) +
+ } +
+ +
+
+ +
+ } +
+
+ @if (!_editingMode) + { + if (_roles.IsNullOrEmpty()) + { + No items + } + else + { + + + + + + + + + + + + @foreach (Guid roleId in _roles.Keys) + { + + + + + + + } + +
+ Media name + + Media type + + Role type + + Role name + + Actions +
+ @(Media[_roles[roleId].Data.MediaId].Title)@(Media[_roles[roleId].Data.MediaId].ReleaseDate.HasValue ? $" ({Media[_roles[roleId].Data.MediaId].ReleaseDate!.Value.Year})" : string.Empty) + + @(Media[_roles[roleId].Data.MediaId].Type == MediaType.Movie ? $"Movie" : "TV Series") + + @(_roleTypes[_roles[roleId].Data.TypeId]) + +
+ + +
+
+ } + } + else + { + + +
+
+ +
+ + Sorry... @not_found_context was not found + +
+
+
+ +
+ + @foreach (KeyValuePair type in _roleTypes) + { + + } + +
+
+
+
+ } +
+ } + else + { + + } +
\ No newline at end of file diff --git a/WatchIt.Website/WatchIt.Website/Components/PersonEditPage/PersonRolesEditCreatorComponent.razor.cs b/WatchIt.Website/WatchIt.Website/Components/PersonEditPage/PersonRolesEditCreatorComponent.razor.cs new file mode 100644 index 0000000..3e7701e --- /dev/null +++ b/WatchIt.Website/WatchIt.Website/Components/PersonEditPage/PersonRolesEditCreatorComponent.razor.cs @@ -0,0 +1,149 @@ +using Microsoft.AspNetCore.Components; +using WatchIt.Common.Model.Media; +using WatchIt.Common.Model.Roles; +using WatchIt.Website.Services.WebAPI.Media; +using WatchIt.Website.Services.WebAPI.Persons; +using WatchIt.Website.Services.WebAPI.Roles; + +namespace WatchIt.Website.Components.PersonEditPage; + +public partial class PersonRolesEditCreatorComponent : ComponentBase +{ + #region SERVICES + + [Inject] private IPersonsWebAPIService PersonsWebAPIService { get; set; } = default!; + [Inject] private IMediaWebAPIService MediaWebAPIService { get; set; } = default!; + [Inject] private IRolesWebAPIService RolesWebAPIService { get; set; } = default!; + + #endregion + + + + #region PARAMETERS + + [Parameter] public required long? Id { get; set; } + [Parameter] public required Dictionary Media { get; set; } + [Parameter] public string Class { get; set; } = string.Empty; + + #endregion + + + + #region FIELDS + + private bool _loaded; + private string? _error; + + private Dictionary _roles = []; + private Dictionary _roleTypes = []; + + + private Guid? _editedId; + private ICreatorRolePersonRequest? _editedModel; + + private bool _editingMode; + private bool _saving; + + #endregion + + + + #region PUBLIC METHODS + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + List endTasks = new List(); + + // STEP 0 + if (Id.HasValue) + { + endTasks.AddRange( + [ + PersonsWebAPIService.GetPersonAllCreatorRoles(Id.Value, successAction: data => _roles = data.ToDictionary(x => x.Id, x => (x, false))), + RolesWebAPIService.GetAllCreatorRoleTypes(successAction: data => _roleTypes = data.ToDictionary(x => x.Id, x => x.Name)), + ]); + } + + // END + await Task.WhenAll(endTasks); + _roles = _roles.OrderBy(x => Media.First(y => y.Key == x.Value.Data.MediaId).Value.ReleaseDate).ToDictionary(x => x.Key, x => x.Value); + + _loaded = true; + StateHasChanged(); + } + } + + private void CancelEdit() + { + _error = null; + _editingMode = false; + } + + private async Task SaveEdit() + { + void SuccessPost(CreatorRoleResponse data) + { + _roles[data.Id] = (data, false); + _roles = _roles.OrderBy(x => Media.First(y => y.Key == x.Value.Data.MediaId).Value.ReleaseDate).ToDictionary(x => x.Key, x => x.Value); + + _saving = false; + _editingMode = false; + } + + void SuccessPut() + { + CreatorRoleResponse temp = _roles[_editedId!.Value].Data; + temp.MediaId = _editedModel.MediaId; + temp.TypeId = _editedModel.TypeId; + + _roles[_editedId!.Value] = (temp, false); + _roles = _roles.OrderBy(x => Media.First(y => y.Key == x.Value.Data.MediaId).Value.ReleaseDate).ToDictionary(x => x.Key, x => x.Value); + + _saving = false; + _editingMode = false; + } + + void BadRequest(IDictionary errors) + { + _error = errors.SelectMany(x => x.Value).FirstOrDefault() ?? "Unknown error"; + _saving = false; + } + + void Unauthorized() + { + _error = "You do not have permission to do this"; + _saving = false; + } + + _error = null; + _saving = true; + if (_editedId.HasValue) + { + await RolesWebAPIService.PutCreatorRole(_editedId.Value, _editedModel as CreatorRoleUniversalRequest, SuccessPut, BadRequest, Unauthorized); + } + else + { + await PersonsWebAPIService.PostPersonCreatorRole(Id!.Value, _editedModel as CreatorRolePersonRequest, SuccessPost, BadRequest, Unauthorized); + } + } + + private void ActivateEdit(Guid? id = null) + { + _editedId = id; + _editedModel = id.HasValue ? new CreatorRoleUniversalRequest(_roles[id.Value].Data) : new CreatorRolePersonRequest() + { + TypeId = _roleTypes.Keys.First() + }; + _editingMode = true; + } + + private async Task Delete(Guid id) + { + _roles[id] = (_roles[id].Data, true); + await RolesWebAPIService.DeleteCreatorRole(id, () => _roles.Remove(id)); + } + + #endregion +} \ No newline at end of file diff --git a/WatchIt.Website/WatchIt.Website/Components/PersonEditPage/PersonRolesEditCreatorComponent.razor.css b/WatchIt.Website/WatchIt.Website/Components/PersonEditPage/PersonRolesEditCreatorComponent.razor.css new file mode 100644 index 0000000..e69de29