using Microsoft.AspNetCore.Components; using WatchIt.Database.Model.Media; using WatchIt.Database.Model.People; using WatchIt.DTO.Models.Controllers.Media.Medium.Response; using WatchIt.DTO.Models.Controllers.People.Person; using WatchIt.DTO.Models.Controllers.Roles; using WatchIt.DTO.Models.Controllers.Roles.Role.Query; using WatchIt.DTO.Models.Controllers.Roles.Role.Response; using WatchIt.DTO.Models.Generics.Image; using WatchIt.DTO.Models.Generics.Rating; using WatchIt.Website.Clients; using WatchIt.Website.Components.Layout; using WatchIt.Website.Services.Authentication; namespace WatchIt.Website.Components.Panels.Common; public partial class RolesPanel : Component where TRole : RoleResponse { #region SERVICES [Inject] protected IRolesClient RolesClient { get; set; } = null!; [Inject] protected IAuthenticationService AuthenticationService { get; set; } = null!; #endregion #region PARAMETERS [Parameter] public required string Title { get; set; } [Parameter] public IEnumerable? RoleParents { get; set; } [Parameter] public required string ParentName { get; set; } [Parameter] public required Func NameFunc { get; set; } [Parameter] public required Func? AdditionalInfoFunc { get; set; } [Parameter] public required string PicturePlaceholder { get; set; } [Parameter] public required Func> PictureFunc { get; set; } [Parameter] public required Func UrlFunc { get; set; } [Parameter] public required Func GlobalRatingFunc { get; set; } [Parameter] public required Func?>> GetRoleTypesMethod { get; set; } [Parameter] public required Func?>> GetRolesMethod { get; set; } [Parameter] public required Func, TRoleParent> ParentFunc { get; set; } [Parameter] public Action? OnRatingChanged { get; set; } [Parameter] public string Class { get; set; } = string.Empty; #endregion #region FIELDS private bool _loaded; private IEnumerable? _roleTypes; private IEnumerable? _roles; private short _checkedType; private IEnumerable _rolesVisible = []; #endregion #region PRIVATE METHODS protected override async Task OnFirstRenderAsync() { await base.OnFirstRenderAsync(); await LoadRoles(); if (_roles is not null && _roles.Any()) { await LoadRoleTypes(); } if (_roleTypes is not null && _roleTypes.Any()) { _checkedType = _roleTypes.First().Id; //_rolesVisible = _roles.Where(x => x.TypeId == _checkedType); } _loaded = true; StateHasChanged(); } private async Task LoadRoles() { _roles = await GetRolesMethod(); } private async Task LoadRoleTypes() { IEnumerable? roleTypesOriginal = await GetRoleTypesMethod(); IEnumerable? roleTypesId = _roles!.Select(x => x.TypeId).Distinct(); _roleTypes = roleTypesOriginal?.Where(x => roleTypesId.Contains(x.Id)); } private void CheckedTypeChanged(short value) { _checkedType = value; _rolesVisible = _roles.Where(x => x.TypeId == value); } #endregion }