diff --git a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdown.razor.cs b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdown.razor.cs index 7d5168bec0..3a3009de98 100644 --- a/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdown.razor.cs +++ b/src/BlazorUI/Bit.BlazorUI/Components/Inputs/Dropdown/BitDropdown.razor.cs @@ -14,7 +14,7 @@ namespace Bit.BlazorUI; private bool _isResponsiveMode; private bool _inputSearchHasFocus; private List _selectedItems = []; - private List _lastShowItems = []; + private List _lastShownItems = []; private Virtualize? _virtualizeElement; private string _scrollContainerId = string.Empty; private string _dropdownTextContainerId = string.Empty; @@ -953,7 +953,7 @@ private async Task AddOrRemoveSelectedItem(TItem? item, bool addDynamic = false) private void UpdateSelectedItemsFromValues() { - var items = ItemsProvider is not null ? _lastShowItems : Items; + var items = ItemsProvider is null ? Items : _lastShownItems; if (items is null) return; if (ItemsProvider is null) @@ -974,6 +974,11 @@ private void UpdateSelectedItemsFromValues() _selectedItems.Add(item); } + + if (ItemsProvider is not null) + { + _selectedItems.RemoveAll(si => Values.Contains(GetValue(si)) is false); + } } else { @@ -1089,15 +1094,15 @@ private async ValueTask FocusOnComboBoxInput() private ICollection GetSearchedItems() { - if (Items is null) return []; + var items = ItemsProvider is null ? Items : _lastShownItems; + if (items is null) return []; return _searchText.HasNoValue() - ? Items + ? items : SearchFunction is not null - ? SearchFunction.Invoke(Items, _searchText!) - : Items.Where(i => GetItemType(i) == BitDropdownItemType.Normal - && (GetText(i)?.Contains(_searchText!, StringComparison.OrdinalIgnoreCase) ?? false)) - .ToArray(); + ? SearchFunction.Invoke(items, _searchText!) + : [.. items.Where(i => GetItemType(i) == BitDropdownItemType.Normal && + GetText(i)?.Contains(_searchText!, StringComparison.OrdinalIgnoreCase) is true)]; } private string GetSearchBoxClasses() @@ -1208,7 +1213,7 @@ private async ValueTask> InternalItemsProvider(ItemsP if (request.CancellationToken.IsCancellationRequested) return default; - _lastShowItems = [.. providerResult.Items]; + _lastShownItems = [.. providerResult.Items]; UpdateSelectedItemsFromValues(); await InvokeAsync(StateHasChanged); @@ -1331,7 +1336,7 @@ private async Task AddDynamicItem() if (hasItem) return; } - var searchItems = ItemsProvider is not null ? _lastShowItems : Items; + var searchItems = ItemsProvider is not null ? _lastShownItems : Items; if (searchItems is not null && searchItems.Count > 0) { var item = FindItemFunction is not null ? @@ -1442,9 +1447,10 @@ private void SetIsSelected(TItem item, bool value) private void SetIsSelectedForSelectedItems() { - if (Items is null) return; + var items = ItemsProvider is null ? Items : _lastShownItems; + if (items is null) return; - foreach (var it in Items) + foreach (var it in items) { SetIsSelected(it, false); }