Files
rssotto-csharp-client/ModVersionChecker/ui/forms/AppDetailsForm.cs
Jose Conde 5e16f781b4 phase 1
2025-09-29 16:02:00 +02:00

74 lines
2.5 KiB
C#

using ModVersionChecker.managers.interfaces;
using ModVersionChecker.service.interfaces;
namespace ModVersionChecker.ui.forms
{
public class AppDetailsForm : Form
{
private TextBox _searchBox;
private ListBox _resultsList;
private Button _addButton;
private readonly IApiService _apiService;
private readonly IAppsManager _appsManager;
public App? SelectedApp { get; private set; }
public event EventHandler<string> OnAppAdded;
public AppDetailsForm(IApiService apiService, IAppsManager appsManager)
{
_apiService = apiService ?? throw new ArgumentNullException(nameof(apiService));
_appsManager = appsManager ?? throw new ArgumentNullException(nameof(appsManager));
InitializeComponent();
}
private void InitializeComponent()
{
Text = "Search and Add App";
Width = 400;
Height = 500;
Padding = new Padding(20);
_searchBox = new TextBox { Dock = DockStyle.Top, PlaceholderText = "Search..." };
_resultsList = new ListBox { Dock = DockStyle.Fill };
_addButton = new Button { Text = "Add Selected", Dock = DockStyle.Bottom, Enabled = false };
_searchBox.TextChanged += async (s, e) => await UpdateResultsAync();
_resultsList.SelectedIndexChanged += (s, e) => _addButton.Enabled = _resultsList.SelectedItem != null;
_resultsList.DoubleClick += (s, e) => AddSelected();
_addButton.Click += (s, e) => AddSelected();
Controls.Add(_resultsList);
Controls.Add(_addButton);
Controls.Add(_searchBox);
}
private async Task UpdateResultsAync()
{
var query = _searchBox.Text.Trim().ToLower();
if (query.Length < 3)
{
return;
}
if (string.IsNullOrEmpty(query))
{
_resultsList.DataSource = null;
return;
}
var results = await _apiService.SearchApps(query);
_resultsList.DataSource = results;
_resultsList.DisplayMember = "Name";
}
private void AddSelected()
{
if (_resultsList.SelectedItem is App app)
{
SelectedApp = app;
_appsManager.Insert(app);
DialogResult = DialogResult.OK;
OnAppAdded?.Invoke(this, "App saved");
Close();
}
}
}
}