102 lines
3.8 KiB
C#
102 lines
3.8 KiB
C#
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.AspNetCore.Components.Web;
|
|
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
|
using Portfolio.Application.Services.PokemonService;
|
|
using Portfolio.Domain.Features.Pokemon;
|
|
|
|
namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components
|
|
{
|
|
public partial class PokemonAddForm
|
|
{
|
|
[Parameter]
|
|
public EventCallback<Pokemon> OnPokemonReady { get; set; }
|
|
[Parameter]
|
|
public EventCallback RemoveForm { get; set; }
|
|
[Parameter]
|
|
public bool mostRecentForm { get; set; }
|
|
|
|
protected static readonly string[] PokemonTypes = new[]
|
|
{
|
|
"Grass","Fire","Water","Normal","Flying","Bug","Poison","Electric","Ground","Rock","Ice",
|
|
"Steel","Fighting","Psychic","Dark","Fairy","Ghost","Dragon"
|
|
};
|
|
protected static readonly string[] SleepTypes = new[] { "Dozing", "Snoozing", "Slumbering" };
|
|
protected static readonly string[] Specialities = new[] { "Berries", "Ingredients", "Skills", "All" };
|
|
|
|
|
|
private bool HideLabel { get; set; } = true;
|
|
private bool showErrors { get; set; } = false;
|
|
|
|
private Pokemon NewPokemon = new Pokemon
|
|
{
|
|
PokemonId = 0, // Or any default ID logic
|
|
PokemonName = string.Empty, // Required fields cannot be null
|
|
SleepType = string.Empty,
|
|
Speciality = string.Empty,
|
|
IsVariation = false
|
|
};
|
|
|
|
private void Toggle() => HideLabel = !HideLabel;
|
|
|
|
|
|
private string GetRoundingClass()
|
|
{
|
|
if (!HideLabel) {
|
|
return "rounded-start";
|
|
}
|
|
return "rounded-start rounded-end";
|
|
}
|
|
|
|
// Minimal "complete" check (no data annotations needed)
|
|
private bool IsComplete =>
|
|
NewPokemon.PokemonId > 0 &&
|
|
!string.IsNullOrWhiteSpace(NewPokemon.PokemonName) &&
|
|
!string.IsNullOrWhiteSpace(NewPokemon.PokemonType) &&
|
|
!string.IsNullOrWhiteSpace(NewPokemon.SleepType) &&
|
|
!string.IsNullOrWhiteSpace(NewPokemon.Speciality) &&
|
|
(!NewPokemon.IsVariation || !string.IsNullOrWhiteSpace(NewPokemon.VariationName));
|
|
|
|
private IEnumerable<string> MissingFields()
|
|
{
|
|
if (NewPokemon.PokemonId <= 0) yield return "Pokédex #";
|
|
if (string.IsNullOrWhiteSpace(NewPokemon.PokemonName)) yield return "Name";
|
|
if (string.IsNullOrWhiteSpace(NewPokemon.PokemonType)) yield return "Type";
|
|
if (string.IsNullOrWhiteSpace(NewPokemon.SleepType)) yield return "Sleep Type";
|
|
if (string.IsNullOrWhiteSpace(NewPokemon.Speciality)) yield return "Specialty";
|
|
if (NewPokemon.IsVariation && string.IsNullOrWhiteSpace(NewPokemon.VariationName)) yield return "Variation Name";
|
|
}
|
|
|
|
private async Task HandleRemove()
|
|
{
|
|
await RemoveForm.InvokeAsync();
|
|
}
|
|
|
|
private async Task SendPokemon()
|
|
{
|
|
if (!IsComplete)
|
|
{
|
|
showErrors = true;
|
|
StateHasChanged();
|
|
return;
|
|
}
|
|
|
|
// Optionally send a copy to avoid later mutation by the child
|
|
var copy = new Pokemon
|
|
{
|
|
PokemonId = NewPokemon.PokemonId,
|
|
PokemonName = NewPokemon.PokemonName,
|
|
PokemonType = NewPokemon.PokemonType,
|
|
SleepType = NewPokemon.SleepType,
|
|
Speciality = NewPokemon.Speciality,
|
|
IsVariation = NewPokemon.IsVariation,
|
|
VariationName = NewPokemon.VariationName,
|
|
PokemonImageUrl = NewPokemon.PokemonImageUrl,
|
|
PokemonShinyImageUrl = NewPokemon.PokemonShinyImageUrl,
|
|
FlavorText = NewPokemon.FlavorText
|
|
};
|
|
|
|
await OnPokemonReady.InvokeAsync(copy);
|
|
}
|
|
}
|
|
}
|