Add Search in MemberListWindow and restructure Window

This commit is contained in:
2023-02-23 13:01:23 +01:00
parent 1c3e6d8783
commit 53fd2c10df
2 changed files with 124 additions and 42 deletions

View File

@ -25,6 +25,7 @@ namespace WGneu.Windows
{
private bool isEditing = false;
private bool isCreating = false;
private List<string> textFilter = new();
private readonly WgContext context = new();
public MemberListWindow()
@ -45,10 +46,39 @@ namespace WGneu.Windows
base.OnClosing(e);
}
private int CountMatchesInMember(Member m)
{
if (textFilter.Count == 0) return 0;
string[] check = new string[] { m.MgNr.ToString(), m.FamilyName.ToLower(), m.GivenName.ToLower(), m.DefaultKg.Name.ToLower() };
int i = 0;
foreach (string c in check)
{
if (textFilter.Any(f => c == f))
i += 10;
else if (textFilter.Any(f => c.Contains(f)))
i += 1;
}
return i;
}
private void RefreshMemberList()
{
context.Members.Load();
MemberList.ItemsSource = context.Members.ToList();
List<Member> members = context.Members.OrderBy(m => m.FamilyName + " " + m.GivenName).ToList();
if (textFilter.Count > 0)
{
members = members
.ToDictionary(m => m, m => CountMatchesInMember(m))
.OrderByDescending(a => a.Value)
.Where(a => a.Value > 0)
.Select(a => a.Key)
.ToList();
}
MemberList.ItemsSource = members;
if (members.Count == 1)
MemberList.SelectedIndex = 0;
RefreshInputs();
}
@ -196,6 +226,13 @@ namespace WGneu.Windows
LockInputs();
}
private void SearchInput_TextChanged(object sender, RoutedEventArgs e)
{
// TODO implement STRG+F
textFilter = SearchInput.Text.ToLower().Split(" ").ToList().FindAll(s => s != "");
RefreshMemberList();
}
private int NextMgNr()
{
int c = context.Members.Select(m => m.MgNr).Min();