Skip to content

Commit 68c8d42

Browse files
authored
Merge pull request #103 from w-ahmad/FilterHandler
simplified ColumnFilterHandler
2 parents 42399dd + df20326 commit 68c8d42

File tree

5 files changed

+29
-44
lines changed

5 files changed

+29
-44
lines changed

src/WinUI.TableView/ColumnFilterHandler.cs

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public ColumnFilterHandler(TableView tableView)
2020
_tableView = tableView;
2121
}
2222

23-
public virtual void PrepareFilterItems(TableViewColumn column, string? searchText = default)
23+
public virtual IList<TableViewFilterItem> GetFilterItems(TableViewColumn column, string? searchText = default)
2424
{
2525
if (column is { TableView.ItemsSource: { } })
2626
{
@@ -37,11 +37,11 @@ public virtual void PrepareFilterItems(TableViewColumn column, string? searchTex
3737
filterValues.Add(value);
3838
}
3939

40-
FilterItems = filterValues.Select(value =>
40+
return filterValues.Select(value =>
4141
{
4242
value = string.IsNullOrWhiteSpace(value?.ToString()) ? "(Blank)" : value;
4343
var isSelected = !column.IsFiltered || !string.IsNullOrEmpty(searchText) ||
44-
(column.IsFiltered && SelectedValues.Contains(value));
44+
(column.IsFiltered && SelectedValues[column].Contains(value));
4545

4646
return string.IsNullOrEmpty(searchText)
4747
|| value?.ToString()?.Contains(searchText, StringComparison.OrdinalIgnoreCase) == true
@@ -51,11 +51,8 @@ public virtual void PrepareFilterItems(TableViewColumn column, string? searchTex
5151
}).OfType<TableViewFilterItem>()
5252
.ToList();
5353
}
54-
}
5554

56-
public virtual void SearchTextChanged(TableViewColumn column, string? searchText)
57-
{
58-
PrepareFilterItems(column, searchText);
55+
return [];
5956
}
6057

6158
public virtual void ApplyFilter(TableViewColumn column)
@@ -89,22 +86,30 @@ public virtual void ClearFilter(TableViewColumn? column)
8986
{
9087
column.IsFiltered = false;
9188
column.TableView.FilterDescriptions.RemoveWhere(x => x is ColumnFilterDescription columnFilter && columnFilter.Column == column);
89+
SelectedValues.RemoveWhere(x => x.Key == column);
9290
column.TableView.RefreshFilter();
9391
}
9492
else
9593
{
96-
_tableView.ClearAllFilters();
94+
SelectedValues.Clear();
95+
_tableView.FilterDescriptions.Clear();
96+
97+
foreach (var col in _tableView.Columns)
98+
{
99+
if (col is not null)
100+
{
101+
col.IsFiltered = false;
102+
}
103+
}
97104
}
98105
}
99106

100107
public virtual bool Filter(TableViewColumn column, object? item)
101108
{
102-
var value = column?.GetCellContent(item);
109+
var value = column.GetCellContent(item);
103110
value = string.IsNullOrWhiteSpace(value?.ToString()) ? "(Blank)" : value;
104-
return SelectedValues.Contains(value);
111+
return SelectedValues[column].Contains(value);
105112
}
106113

107-
public IList<TableViewFilterItem> FilterItems { get; set; } = [];
108-
109-
public IList<object> SelectedValues { get; set; } = [];
114+
public IDictionary<TableViewColumn, IList<object>> SelectedValues { get; } = new Dictionary<TableViewColumn, IList<object>>();
110115
}

src/WinUI.TableView/IColumnFilterHandler.cs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,16 @@ namespace WinUI.TableView;
88
public interface IColumnFilterHandler
99
{
1010
/// <summary>
11-
/// Gets or sets the filter items.
11+
/// Gets or sets the selected values for the filter per column.
1212
/// </summary>
13-
IList<TableViewFilterItem> FilterItems { get; set; }
13+
IDictionary<TableViewColumn, IList<object>> SelectedValues { get; }
1414

1515
/// <summary>
16-
/// Gets or sets the selected values for the filter.
17-
/// </summary>
18-
IList<object> SelectedValues { get; set; }
19-
20-
/// <summary>
21-
/// Prepares the filter items for the specified column.
16+
/// Get the filter items for the specified column.
2217
/// </summary>
2318
/// <param name="column">The column for which to prepare filter items.</param>
2419
/// <param name="searchText">The search text to filter the items.</param>
25-
void PrepareFilterItems(TableViewColumn column, string? searchText = default);
26-
27-
/// <summary>
28-
/// Handles the search text changed event for the specified column.
29-
/// </summary>
30-
/// <param name="column">The column for which the search text has changed.</param>
31-
/// <param name="searchText">The new search text.</param>
32-
void SearchTextChanged(TableViewColumn column, string? searchText);
20+
IList<TableViewFilterItem> GetFilterItems(TableViewColumn column, string? searchText);
3321

3422
/// <summary>
3523
/// Applies the filter to the specified column.

src/WinUI.TableView/TableView.cs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -742,16 +742,7 @@ internal void ClearAllSortingWithEvent()
742742
/// </summary>
743743
public void ClearAllFilters()
744744
{
745-
DeselectAll();
746-
FilterDescriptions.Clear();
747-
748-
foreach (var column in Columns)
749-
{
750-
if (column is not null)
751-
{
752-
column.IsFiltered = false;
753-
}
754-
}
745+
FilterHandler.ClearFilter(null);
755746
}
756747

757748
/// <summary>

src/WinUI.TableView/TableViewColumnHeader.OptionsFlyoutViewModel.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,7 @@ private void OnFilterItemsSearchTextChanged()
144144
{
145145
if (!_canFilter) return;
146146

147-
TableView.FilterHandler.SearchTextChanged(ColumnHeader.Column!,FilterText);
148-
FilterItems = TableView.FilterHandler.FilterItems;
147+
FilterItems = TableView.FilterHandler.GetFilterItems(ColumnHeader.Column!, FilterText);
149148
}
150149

151150
/// <summary>

src/WinUI.TableView/TableViewColumnHeader.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ private void ApplyFilter()
126126
{
127127
if (_tableView is not null)
128128
{
129-
_tableView.FilterHandler.SelectedValues = _optionsFlyoutViewModel.SelectedValues;
129+
_tableView.FilterHandler.SelectedValues[Column!] = _optionsFlyoutViewModel.SelectedValues;
130130
_tableView.FilterHandler?.ApplyFilter(Column!);
131131
}
132132
}
@@ -244,8 +244,10 @@ private void OnSelectAllCheckBoxUnchecked(object sender, RoutedEventArgs e)
244244
/// </summary>
245245
private void OnOptionsFlyoutOpening(object? sender, object e)
246246
{
247-
_tableView?.FilterHandler?.PrepareFilterItems(Column!);
248-
_optionsFlyoutViewModel.FilterItems = _tableView?.FilterHandler?.FilterItems!;
247+
if (_tableView?.FilterHandler is not null)
248+
{
249+
_optionsFlyoutViewModel.FilterItems = _tableView.FilterHandler.GetFilterItems(Column!, null);
250+
}
249251
}
250252

251253
/// <summary>

0 commit comments

Comments
 (0)