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