phase 1
This commit is contained in:
74
ModVersionChecker/ui/forms/AppDetailsForm.cs
Normal file
74
ModVersionChecker/ui/forms/AppDetailsForm.cs
Normal file
@@ -0,0 +1,74 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user