74 lines
2.5 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
} |