private async Task SelectAdjacentItem(int direction) { if (_items == null || _items.Count == 0) { return; } var index = _items.FindIndex(x => x.ItemId == (string)_activeItemId); if (direction < 0 && index < 0) { index = 0; } MudSelectItem <T> item = null; // the loop allows us to jump over disabled items until we reach the next non-disabled one for (int i = 0; i < _items.Count; i++) { index += direction; if (index < 0) { index = 0; } if (index >= _items.Count) { index = _items.Count - 1; } if (_items[index].Disabled) { continue; } item = _items[index]; if (!MultiSelection) { _selectedValues.Clear(); _selectedValues.Add(item.Value); await SetValueAsync(item.Value, updateText : true); HilightItem(item); break; } else { // in multiselect mode don't select anything, just hilight. // selecting is done by Enter HilightItem(item); break; } } await _elementReference.SetText(Text); if (item != null) { await ScrollManager.ScrollToListItemAsync(item.ItemId, direction, true); } }
private ValueTask ScrollToItemAsync(MudSelectItem <T> item) => item != null?ScrollManager.ScrollToListItemAsync(item.ItemId) : ValueTask.CompletedTask;