@using System.ComponentModel.DataAnnotations @using RackPeek.Domain.Resources.SubResources @if (IsOpen) {
@(IsEdit ? "Modify GPU" : "Add GPU")
@if (IsEdit) { } else { }
} @code { [Parameter] public bool IsOpen { get; set; } [Parameter] public EventCallback IsOpenChanged { get; set; } [Parameter] public Gpu? Value { get; set; } [Parameter] public EventCallback OnSubmit { get; set; } [Parameter] public EventCallback OnDelete { get; set; } // Same prefix pattern as ConfirmModal [Parameter] public string? TestIdPrefix { get; set; } private string BaseTestId => string.IsNullOrWhiteSpace(TestIdPrefix) ? "gpu-modal" : $"{TestIdPrefix}-gpu-modal"; private GpuFormModel _model = new(); private bool IsEdit => Value is not null; protected override void OnParametersSet() { if (IsOpen) { _model = Value is null ? new GpuFormModel() : new GpuFormModel { Model = Value.Model, Vram = Value.Vram }; } } private async Task HandleValidSubmit() { var gpu = new Gpu { Model = _model.Model, Vram = _model.Vram }; await OnSubmit.InvokeAsync(gpu); await Close(); } private async Task HandleDelete() { if (Value is not null) { await OnDelete.InvokeAsync(Value); await Close(); } } private async Task Cancel() { await Close(); } private async Task Close() { _model = new GpuFormModel(); await IsOpenChanged.InvokeAsync(false); } private class GpuFormModel { [Required] public string? Model { get; set; } [Range(1, 256)] public int? Vram { get; set; } } }