@using Blazored.Modal @using Blazored.Modal.Services @using Domain.Dtos.Stock @inject IStockScanService StockScanService @inherits LayoutComponentBase @code { [CascadingParameter] BlazoredModalInstance ModalInstance { get; set; } [Parameter] public int? LocationId { get; set; } private string SearchAddress { get; set; } = string.Empty; private string ScanInput { get; set; } = string.Empty; private string ErrorMessage { get; set; } = string.Empty; private List ScanResults { get; set; } = new(); private async Task HandleScan() { ErrorMessage = string.Empty; ScanResults.Clear(); if (string.IsNullOrWhiteSpace(ScanInput)) { ErrorMessage = "Ingrese un código válido."; return; } if (LocationId is null) { ErrorMessage = "Falta el depósito para escanear correctamente."; return; } try { var result = await StockScanService.ParseAndMatchAsync(ScanInput, LocationId.Value); if (result is not null) { ScanResults.Add(result); } else { ErrorMessage = "No se encontró stock coincidente."; } } catch (Exception ex) { ErrorMessage = $"Error: {ex.Message}"; } } private void Cancel() => ModalInstance.CancelAsync(); private void ConfirmSelection() { var selected = ScanResults.Where(r => r.Quantity > 0).ToList(); ModalInstance.CloseAsync(ModalResult.Ok(selected)); } }