Skip to content

Commit 803bdb3

Browse files
committed
Bug fixing and proper handling of debounce
1 parent c4d487b commit 803bdb3

File tree

6 files changed

+137
-75
lines changed

6 files changed

+137
-75
lines changed

.github/workflows/nuget.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
echo "HTTP Status Code: $HTTP_CODE"
3333
cat curl_output.txt
3434
if [ "$HTTP_CODE" -eq 200 ]; then
35-
LATEST_VERSION=$(cat curl_output.txt | jq -r '.versions[0]')
35+
LATEST_VERSION=$(cat curl_output.txt | jq -r '.versions[-1]')
3636
else
3737
echo "Curl failed or returned non-200 status. Assuming no previous version."
3838
LATEST_VERSION=""

SimpleDataGrid.Example/AdvancedExamplesWindow.xaml.cs

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ private void NextButton_Click(object sender, RoutedEventArgs e)
1919
viewModel.People.NextPage();
2020
}
2121

22-
private void SearchTextBox_TextChanged(object sender, TextChangedEventArgs e) => ApplyMultiColumnSearch();
22+
private async void SearchTextBox_TextChanged(object sender, TextChangedEventArgs e) => await ApplyMultiColumnSearch();
2323

24-
private void SearchOption_Changed(object sender, RoutedEventArgs e) => ApplyMultiColumnSearch();
24+
private async void SearchOption_Changed(object sender, RoutedEventArgs e) => await ApplyMultiColumnSearch();
2525

26-
private void ApplyMultiColumnSearch()
26+
private async Task ApplyMultiColumnSearch()
2727
{
2828
var viewModel = (AdvancedExamplesViewModel)DataContext;
2929
var selectors = new List<Func<Person, string>>();
@@ -32,7 +32,19 @@ private void ApplyMultiColumnSearch()
3232
if (viewModel.SearchByEmail) selectors.Add(p => p.Email);
3333
if (viewModel.SearchByDepartment) selectors.Add(p => p.Department);
3434

35-
viewModel.People.SetSearch(selectors, SearchTextBox.Text, WildcardCheckBox.IsChecked == true, 300);
35+
if (selectors.Count != 0)
36+
{
37+
await viewModel.People.SetSearchAsync(
38+
selectors,
39+
SearchTextBox.Text,
40+
WildcardCheckBox.IsChecked == true,
41+
300
42+
);
43+
}
44+
else
45+
{
46+
await viewModel.People.ClearSearchAsync();
47+
}
3648
}
3749

3850
private void FilterButton_Click(object sender, RoutedEventArgs e)
@@ -51,16 +63,10 @@ private void ClearFilterButton_Click(object sender, RoutedEventArgs e)
5163
}
5264

5365
private void FirstButton_Click(object sender, RoutedEventArgs e)
54-
{
55-
var viewModel = (AdvancedExamplesViewModel)DataContext;
56-
viewModel.People.GoToFirstPage();
57-
}
66+
=> ((AdvancedExamplesViewModel)DataContext).People.GoToFirstPage();
5867

5968
private void LastButton_Click(object sender, RoutedEventArgs e)
60-
{
61-
var viewModel = (AdvancedExamplesViewModel)DataContext;
62-
viewModel.People.GoToLastPage();
63-
}
69+
=> ((AdvancedExamplesViewModel)DataContext).People.GoToLastPage();
6470

6571
private void GoToPageButton_Click(object sender, RoutedEventArgs e)
6672
{
@@ -81,10 +87,7 @@ private void MaxAgeFilterButton_Click(object sender, RoutedEventArgs e)
8187
}
8288

8389
private void NamePrefixFilterButton_Click(object sender, RoutedEventArgs e)
84-
{
85-
var viewModel = (AdvancedExamplesViewModel)DataContext;
86-
viewModel.ApplyNameFilter(NamePrefixTextBox.Text);
87-
}
90+
=> ((AdvancedExamplesViewModel)DataContext).ApplyNameFilter(NamePrefixTextBox.Text);
8891

8992
private void RemoveFilterButton_Click(object sender, RoutedEventArgs e)
9093
{
@@ -96,14 +99,8 @@ private void RemoveFilterButton_Click(object sender, RoutedEventArgs e)
9699
}
97100

98101
private void ApplyCustomFilterButton_Click(object sender, RoutedEventArgs e)
99-
{
100-
var viewModel = (AdvancedExamplesViewModel)DataContext;
101-
viewModel.ApplyCustomFilter();
102-
}
102+
=> ((AdvancedExamplesViewModel)DataContext).ApplyCustomFilter();
103103

104104
private void ExportToCsvButton_Click(object sender, RoutedEventArgs e)
105-
{
106-
var viewModel = (AdvancedExamplesViewModel)DataContext;
107-
viewModel.ExportCurrentPageToCsv();
108-
}
105+
=> ((AdvancedExamplesViewModel)DataContext).ExportCurrentPageToCsv();
109106
}

SimpleDataGrid.Example/MainWindow.xaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ private void NextButton_Click(object sender, RoutedEventArgs e)
2222
private void SearchTextBox_TextChanged(object sender, TextChangedEventArgs e)
2323
{
2424
var viewModel = (MainViewModel)DataContext;
25-
viewModel.People.SetSearch(p => p.Name, SearchTextBox.Text, WildcardCheckBox.IsChecked == true, 300);
25+
viewModel.People.SetSearchAsync(p => p.Name, SearchTextBox.Text, WildcardCheckBox.IsChecked == true, 300);
2626
}
2727

2828
private void SearchButton_Click(object sender, RoutedEventArgs e)
2929
{
3030
var viewModel = (MainViewModel)DataContext;
31-
viewModel.People.SetSearch(p => p.Name, SearchTextBox.Text, WildcardCheckBox.IsChecked == true);
31+
viewModel.People.SetSearchAsync(p => p.Name, SearchTextBox.Text, WildcardCheckBox.IsChecked == true);
3232
}
3333

3434
private void AdvancedExamplesButton_Click(object sender, RoutedEventArgs e)

SimpleDataGrid.Tests/PagedCollectionTests.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ public void SetSearch_WithEmptySearchTerm_ReturnsAllItems()
245245
pagedCollection.SetSource(source);
246246

247247
// Act
248-
pagedCollection.SetSearch(x => x, "");
248+
pagedCollection.SetSearchAsync(x => x, "");
249249

250250
// Assert
251251
Assert.HasCount(3, pagedCollection.CurrentPageItems);
@@ -261,7 +261,7 @@ public void SetSearch_WithNoMatches_ReturnsEmptyCollection()
261261
pagedCollection.SetSource(source);
262262

263263
// Act
264-
pagedCollection.SetSearch(x => x, "xyz");
264+
pagedCollection.SetSearchAsync(x => x, "xyz");
265265

266266
// Assert
267267
Assert.HasCount(0, pagedCollection.CurrentPageItems);
@@ -276,7 +276,7 @@ public void SetSearch_WithPartialMatch_ReturnsMatchingItems()
276276
pagedCollection.SetSource(source);
277277

278278
// Act
279-
pagedCollection.SetSearch(x => x, "an");
279+
pagedCollection.SetSearchAsync(x => x, "an");
280280

281281
// Assert
282282
Assert.HasCount(1, pagedCollection.CurrentPageItems);
@@ -292,11 +292,11 @@ public void SetSearch_WithWildcardAsterisk_ReturnsMatchingItems()
292292
pagedCollection.SetSource(source);
293293

294294
// Act
295-
pagedCollection.SetSearch(x => x, "*a*", true);
295+
pagedCollection.SetSearchAsync(x => x, "*a*", true);
296296

297297
// Assert
298-
Assert.HasCount(2, pagedCollection.CurrentPageItems);
299-
CollectionAssert.AreEqual(new List<string> { "apple", "banana" }, pagedCollection.CurrentPageItems.ToList());
298+
Assert.HasCount(3, pagedCollection.CurrentPageItems);
299+
CollectionAssert.AreEqual(new List<string> { "apple", "banana", "date" }, pagedCollection.CurrentPageItems.ToList());
300300
}
301301

302302
[TestMethod]
@@ -308,7 +308,7 @@ public void SetSearch_WithWildcardQuestionMark_ReturnsMatchingItems()
308308
pagedCollection.SetSource(source);
309309

310310
// Act
311-
pagedCollection.SetSearch(x => x, "appl?", true);
311+
pagedCollection.SetSearchAsync(x => x, "appl?", true);
312312

313313
// Assert
314314
Assert.HasCount(2, pagedCollection.CurrentPageItems);
@@ -324,15 +324,15 @@ public void SetSearch_CaseInsensitive_ReturnsMatchingItems()
324324
pagedCollection.SetSource(source);
325325

326326
// Act
327-
pagedCollection.SetSearch(x => x, "apple");
327+
pagedCollection.SetSearchAsync(x => x, "apple");
328328

329329
// Assert
330330
Assert.HasCount(1, pagedCollection.CurrentPageItems);
331331
Assert.AreEqual("Apple", pagedCollection.CurrentPageItems[0]);
332332
}
333333

334334
[TestMethod]
335-
public void SetSearch_MultiColumn_ORLogic_ReturnsMatchingItems()
335+
public async Task SetSearch_MultiColumn_ORLogic_ReturnsMatchingItems()
336336
{
337337
// Arrange
338338
var source = new List<Person>
@@ -345,7 +345,7 @@ public void SetSearch_MultiColumn_ORLogic_ReturnsMatchingItems()
345345
pagedCollection.SetSource(source);
346346

347347
// Act: Search for "HR" in Name or Department
348-
pagedCollection.SetSearch([p => p.Name, p => p.Department], "HR");
348+
await pagedCollection.SetSearchAsync([p => p.Name, p => p.Department], "HR");
349349

350350
// Assert
351351
Assert.HasCount(2, pagedCollection.CurrentPageItems);
@@ -403,13 +403,13 @@ public void RemoveFilter_WithNullKey_ThrowsArgumentNullException()
403403
}
404404

405405
[TestMethod]
406-
public void SetSearchAll_WithNullSelectors_ThrowsArgumentNullException()
406+
public async Task SetSearchAll_WithNullSelectors_ThrowsArgumentNullException()
407407
{
408408
// Arrange
409409
var pagedCollection = new PagedCollection<string>(10);
410410

411411
// Act
412-
Assert.ThrowsExactly<ArgumentNullException>(() => pagedCollection.SetSearchAll(null!, "term"));
412+
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => pagedCollection.SetSearchAllAsync(null!, "term"));
413413
}
414414

415415
[TestMethod]
@@ -646,7 +646,7 @@ public void PropertyChanged_IsFiredForIsSearching()
646646
};
647647

648648
// Act
649-
pagedCollection.SetSearch(x => x, "a", false, 10);
649+
pagedCollection.SetSearchAsync(x => x, "a", false, 10);
650650
System.Threading.Thread.Sleep(20); // Allow debounce timer to start
651651

652652
// Assert

SimpleDataGrid/Pagination/IPagedCollection.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System.Collections;
21
using System.ComponentModel;
32

43
namespace SimpleDataGrid.Pagination;

0 commit comments

Comments
 (0)