Files
rssotto-csharp-client/ModVersionChecker/ui/forms/AppDetailsForm.cs
Jose Conde 4c76f04d0e refactors
2025-09-30 15:57:56 +02:00

78 lines
2.6 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 IAppService _appService;
public App? SelectedApp { get; private set; }
public event EventHandler<string> OnAppAdded;
public AppDetailsForm(
IApiService apiService,
IAppService appService
)
{
_apiService = apiService ?? throw new ArgumentNullException(nameof(apiService));
_appService = appService ?? throw new ArgumentNullException(nameof(appService));
InitializeComponent();
}
private void InitializeComponent()
{
Text = "Search and Add App";
Width = 400;
Height = 500;
Padding = new Padding(20);
StartPosition = FormStartPosition.CenterParent;
_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 apiResults = await _apiService.SearchApps(query);
_resultsList.DataSource = _appService.PurgeExisitingApps(apiResults);
_resultsList.DisplayMember = "Name";
}
private void AddSelected()
{
if (_resultsList.SelectedItem is App app)
{
SelectedApp = app;
_appService.CreateApp(app);
DialogResult = DialogResult.OK;
OnAppAdded?.Invoke(this, "App saved");
Close();
}
}
}
}