using Avalonia.Controls; using Avalonia.Markup.Xaml; using Lagerprogramm.ViewModels; using Avalonia; using System.Linq; using System.Threading.Tasks; namespace Lagerprogramm.Views; public partial class PartsView : UserControl { public PartsView() { InitializeComponent(); } private PartsViewModel? ViewModel => DataContext as PartsViewModel; private async void OnSearchPart(object? sender, Avalonia.Interactivity.RoutedEventArgs e) { if (ViewModel is null) return; var window = TopLevel.GetTopLevel(this) as Window; if (window is null) return; var dialog = new PartSearchDialog(); var selectedPart = await dialog.ShowPartSearch(ViewModel.Parts, window); if (selectedPart is not null) { var existingPart = ViewModel.Parts.FirstOrDefault(p => p.InternalPartNumber == selectedPart.InternalPartNumber); if (existingPart is not null) ViewModel.SelectedPart = existingPart; } } private async void OnSavePart(object? sender, Avalonia.Interactivity.RoutedEventArgs e) { if (ViewModel is null || !ViewModel.CanSave) return; var existing = ViewModel.Parts.FirstOrDefault(p => p.InternalPartNumber == ViewModel.InternalPartNumber); if (existing is not null) { var window = TopLevel.GetTopLevel(this) as Window; if (window is null) return; var confirmed = await ConfirmDialog.Show(window, $"Part '{ViewModel.InternalPartNumber}' already exists. Overwrite?"); if (!confirmed) return; } ViewModel.SaveCommand.Execute(null); } private void OnNewPart(object? sender, Avalonia.Interactivity.RoutedEventArgs e) { if (ViewModel is null) return; ViewModel.NewPartCommand.Execute(null); } private async void OnDeletePart(object? sender, Avalonia.Interactivity.RoutedEventArgs e) { if (ViewModel is null || ViewModel.SelectedPart is null) return; var window = TopLevel.GetTopLevel(this) as Window; if (window is null) return; var confirmed = await ConfirmDialog.Show(window, $"Delete part '{ViewModel.SelectedPart.InternalPartNumber}' permanently?"); if (confirmed) { ViewModel.DeletePartCommand.Execute(null); } } }