69 lines
2.0 KiB
C#
69 lines
2.0 KiB
C#
using System.Collections.ObjectModel;
|
|
using System.ComponentModel;
|
|
using System.Linq;
|
|
using System.Runtime.CompilerServices;
|
|
using Lagerprogramm.Models;
|
|
|
|
namespace Lagerprogramm.ViewModels;
|
|
|
|
public class AdditionSearchDialogViewModel : INotifyPropertyChanged
|
|
{
|
|
private readonly ObservableCollection<Addition> _allAdditions;
|
|
private readonly ObservableCollection<Addition> _filteredAdditions;
|
|
private string _searchText = string.Empty;
|
|
private Addition? _selectedAddition;
|
|
|
|
public ObservableCollection<Addition> FilteredAdditions => _filteredAdditions;
|
|
public Addition? SelectedAddition
|
|
{
|
|
get => _selectedAddition;
|
|
set
|
|
{
|
|
_selectedAddition = value;
|
|
OnPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public string SearchText
|
|
{
|
|
get => _searchText;
|
|
set
|
|
{
|
|
_searchText = value;
|
|
FilterAdditions();
|
|
OnPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public AdditionSearchDialogViewModel(ObservableCollection<Addition> additions)
|
|
{
|
|
_allAdditions = additions;
|
|
_filteredAdditions = new ObservableCollection<Addition>(additions);
|
|
}
|
|
|
|
private void FilterAdditions()
|
|
{
|
|
_filteredAdditions.Clear();
|
|
if (string.IsNullOrWhiteSpace(SearchText))
|
|
{
|
|
foreach (var a in _allAdditions)
|
|
_filteredAdditions.Add(a);
|
|
return;
|
|
}
|
|
|
|
var query = SearchText.ToLower();
|
|
var matches = _allAdditions.Where(a =>
|
|
a.Comment.ToLower().Contains(query) ||
|
|
a.Date.ToString("yyyy-MM-dd").Contains(query) ||
|
|
a.Lines.Any(l => l.PartInternalNumber.ToLower().Contains(query))
|
|
).ToList();
|
|
|
|
foreach (var a in matches)
|
|
_filteredAdditions.Add(a);
|
|
}
|
|
|
|
public event PropertyChangedEventHandler? PropertyChanged;
|
|
protected void OnPropertyChanged([CallerMemberName] string? name = null) =>
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
|
|
}
|