using Microsoft.AspNetCore.Components; using Microsoft.EntityFrameworkCore.Metadata.Internal; using Microsoft.JSInterop; using Portfolio.Domain.Features.Pokemon; namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components { public partial class PokemonTable { [Parameter] public List AllPokemon { get; set; } private List pokemons = new List(); private Dictionary isShiny = new Dictionary(); protected override void OnParametersSet() { if (AllPokemon != null) { pokemons = AllPokemon.ToList(); foreach (var pokemon in pokemons) { isShiny[pokemon.Id] = false; } } } private string SearchTerm { get; set; } = string.Empty; private List FilteredPokemon => string.IsNullOrWhiteSpace(SearchTerm) ? AllPokemon : AllPokemon.Where(p => p.PokemonName.Contains(SearchTerm, StringComparison.OrdinalIgnoreCase)).ToList(); private async Task HandleSearch(ChangeEventArgs e) { SearchTerm = e?.Value?.ToString() ?? ""; } private void ToggleImage(int Id) { if (isShiny.ContainsKey(Id)) { isShiny[Id] = !isShiny[Id]; } } private bool ToggleVariationName(int Id, int PokemonId) { foreach (var pokemon in pokemons) { if (pokemon.PokemonId == PokemonId && pokemon.Id != Id) { return true; } } return false; } private async Task ConfirmDelete(int Id) { bool confirm = await JS.InvokeAsync("confirm", "Are you sure you want to delete this Pokémon?"); if (confirm) { await DeletePokemon(Id); } } private async Task DeletePokemon(int Id) { await PokemonService.DeletePokemonAsync(Id); pokemons.RemoveAll(p => p.Id == Id); // Remove from the list locally StateHasChanged(); // Refresh the UI } private void EditPokemon(int id) { Navigation.NavigateTo($"/pokemonsleep/edit/{id}"); } private void ViewPokemon(int id) { Navigation.NavigateTo($"/pokemon/{id}"); } private string GetTypeImageUrl(string pokemonType) { if (string.IsNullOrEmpty(pokemonType)) { return "https://www.serebii.net/pokemonsleep/pokemon/type/normal.png"; // Fallback image } return $"https://www.serebii.net/pokemonsleep/pokemon/type/{pokemonType.ToLower()}.png"; } } }