From c7fb974175ae5534f351a346893250f26a2a954d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arley=20P=C3=A1dua?= Date: Tue, 15 Oct 2024 20:25:37 +0200 Subject: [PATCH] feat: allows to edit hidden abilities --- src/PKHeX.Facade/Pokemons/Pokemon.cs | 6 ++- .../Repositories/AbilityRepository.cs | 2 + .../Pokemons/PokemonDescription.razor | 11 ++++- .../Components/Selects/AbilitySelect.razor | 47 +++++++++++++++++++ 4 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 src/PKHeX.Web/Components/Selects/AbilitySelect.razor diff --git a/src/PKHeX.Facade/Pokemons/Pokemon.cs b/src/PKHeX.Facade/Pokemons/Pokemon.cs index b773895..0491d76 100644 --- a/src/PKHeX.Facade/Pokemons/Pokemon.cs +++ b/src/PKHeX.Facade/Pokemons/Pokemon.cs @@ -81,7 +81,11 @@ public ItemDefinition HeldItem set => pokemon.HeldItem = value.Id; } - public AbilityDefinition Ability => AbilityRepository.Instance.Get(pokemon.Ability); + public AbilityDefinition Ability + { + get => AbilityRepository.Instance.Get(pokemon.Ability); + set => pokemon.Ability = value.Id; + } public int Friendship { diff --git a/src/PKHeX.Facade/Repositories/AbilityRepository.cs b/src/PKHeX.Facade/Repositories/AbilityRepository.cs index 225f938..6036533 100644 --- a/src/PKHeX.Facade/Repositories/AbilityRepository.cs +++ b/src/PKHeX.Facade/Repositories/AbilityRepository.cs @@ -17,6 +17,8 @@ private AbilityRepository() public AbilityDefinition Get(int id) => _abilities.GetValueOrDefault(id) ?? AbilityDefinition.None; + + public List All => _abilities.Values.ToList(); } public record AbilityDefinition(int Id, string Name) diff --git a/src/PKHeX.Web/Components/Pokemons/PokemonDescription.razor b/src/PKHeX.Web/Components/Pokemons/PokemonDescription.razor index 59bee43..fcb8d64 100644 --- a/src/PKHeX.Web/Components/Pokemons/PokemonDescription.razor +++ b/src/PKHeX.Web/Components/Pokemons/PokemonDescription.razor @@ -71,7 +71,10 @@ SelectedItemChanged="HandleHeldItemChanged"/> - @Pokemon.Ability.Name + @@ -192,4 +195,10 @@ return OnPokemonChanged.InvokeAsync(Pokemon); } + private Task HandleAbilityChanged(AbilityDefinition ability) + { + Pokemon.Ability = ability; + return OnPokemonChanged.InvokeAsync(Pokemon); + } + } \ No newline at end of file diff --git a/src/PKHeX.Web/Components/Selects/AbilitySelect.razor b/src/PKHeX.Web/Components/Selects/AbilitySelect.razor new file mode 100644 index 0000000..73485c1 --- /dev/null +++ b/src/PKHeX.Web/Components/Selects/AbilitySelect.razor @@ -0,0 +1,47 @@ +@using PKHeX.Facade.Repositories + + + +@code { + [Parameter] public int? SelectedAbilityId { get; set; } + [Parameter] public EventCallback SelectedAbilityChanged { get; set; } + [Parameter] public bool IgnoreRenderingEvents { get; set; } + + private bool _dataSourceJustLoaded = true; + + private readonly IEnumerable _items = AbilityRepository.Instance.All; + + private Task SelectedAbilityChangedInternal(AbilityDefinition arg) + { + if (_dataSourceJustLoaded) + { + _dataSourceJustLoaded = false; + return Task.CompletedTask; + } + + return SelectedAbilityChanged.InvokeAsync(arg); + } + + protected override void OnInitialized() + { + _dataSourceJustLoaded = IgnoreRenderingEvents; + } + +} \ No newline at end of file