using System.Linq; using Robust.Client.UserInterface.Controls; namespace Content.Client.UserInterface.Controls; public sealed class SearchListContainer : ListContainer { private LineEdit? _searchBar; private List _unfilteredData = new(); /// /// The that is used to filter the list data. /// public LineEdit? SearchBar { get => _searchBar; set { if (_searchBar is not null) _searchBar.OnTextChanged -= FilterList; _searchBar = value; if (_searchBar is null) return; _searchBar.OnTextChanged += FilterList; } } /// /// Runs over the ListData to determine if it should pass the filter. /// public Func? DataFilterCondition = null; public override void PopulateList(IReadOnlyList data) { _unfilteredData = data.ToList(); FilterList(); } private void FilterList(LineEdit.LineEditEventArgs obj) { FilterList(); } private void FilterList() { var filterText = SearchBar?.Text; if (DataFilterCondition is null || string.IsNullOrEmpty(filterText)) { base.PopulateList(_unfilteredData); return; } var filteredData = new List(); foreach (var data in _unfilteredData) { if (!DataFilterCondition(filterText, data)) continue; filteredData.Add(data); } base.PopulateList(filteredData); } }