@@ -758,7 +758,7 @@ protected internal async void HandleKeyDown(KeyboardEventArgs obj)
758758 var key = obj . Key . ToLowerInvariant ( ) ;
759759 if ( Editable == false && key . Length == 1 && key != " " && ! ( obj . CtrlKey || obj . ShiftKey || obj . AltKey || obj . MetaKey ) )
760760 {
761- await ActiveFirstItem ( key ) ;
761+ await ActivateFirstItem ( key ) ;
762762 return ;
763763 }
764764
@@ -782,10 +782,10 @@ protected internal async void HandleKeyDown(KeyboardEventArgs obj)
782782 }
783783 break ;
784784 case "Home" :
785- await ActiveFirstItem ( ) ;
785+ await ActivateFirstItem ( ) ;
786786 break ;
787787 case "End" :
788- await ActiveLastItem ( ) ;
788+ await ActivateLastItem ( ) ;
789789 break ;
790790 case "ArrowUp" :
791791 if ( obj . AltKey )
@@ -798,7 +798,7 @@ protected internal async void HandleKeyDown(KeyboardEventArgs obj)
798798 }
799799 else
800800 {
801- await ActiveAdjacentItem ( - 1 ) ;
801+ await ActivateAdjacentItem ( - 1 ) ;
802802 }
803803 break ;
804804 case "ArrowDown" :
@@ -812,7 +812,7 @@ protected internal async void HandleKeyDown(KeyboardEventArgs obj)
812812 }
813813 else
814814 {
815- await ActiveAdjacentItem ( 1 ) ;
815+ await ActivateAdjacentItem ( 1 ) ;
816816 }
817817 break ;
818818 case " " :
@@ -875,7 +875,7 @@ protected internal async Task SearchBoxHandleKeyDown(KeyboardEventArgs obj)
875875 HandleKeyDown ( obj ) ;
876876 break ;
877877 case "Tab" :
878- await ActiveFirstItem ( ) ;
878+ await ActivateFirstItem ( ) ;
879879 await FocusAsync ( ) ;
880880 StateHasChanged ( ) ;
881881 break ;
@@ -1263,7 +1263,7 @@ protected internal async Task ForceUpdateItems()
12631263
12641264 protected int GetActiveProperItemIndex ( )
12651265 {
1266- var properItems = GetEligibleAndNonDisabledItems ( ) ;
1266+ var properItems = GetEnabledAndEligibleItems ( ) ;
12671267 if ( properItems . Any ( ) )
12681268 {
12691269 if ( _lastActivatedItem == null )
@@ -1306,72 +1306,77 @@ protected void DeactiveAllItems()
13061306 }
13071307 }
13081308
1309- public async Task ActiveFirstItem ( string startChar = null )
1309+ [ Obsolete ( "Please use ActivateFirstItem() method" ) ]
1310+ public Task ActiveFirstItem ( string startChar = null ) => ActivateFirstItem ( startChar ) ;
1311+ public async Task ActivateFirstItem ( string startsWith = null )
13101312 {
1311- if ( Items == null || Items . Count == 0 || Items [ 0 ] . Disabled )
1312- {
1313+ var item = Items . FirstOrDefault ( ) ;
1314+ if ( item is null || item . Disabled )
13131315 return ;
1314- }
1316+
13151317 DeactiveAllItems ( ) ;
1316- var properItems = GetEligibleAndNonDisabledItems ( ) ;
1317- if ( string . IsNullOrWhiteSpace ( startChar ) )
1318+ if ( string . IsNullOrWhiteSpace ( startsWith ) )
13181319 {
1319- properItems [ 0 ] . SetActive ( true ) ;
1320- _lastActivatedItem = properItems [ 0 ] ;
1321- await ScrollToMiddleAsync ( Items [ 0 ] ) ;
1320+ item = GetEnabledAndEligibleItems ( ) . FirstOrDefault ( ) ;
1321+ if ( item is not null )
1322+ {
1323+ item . SetActive ( true ) ;
1324+ await ScrollToMiddleAsync ( item ) ;
1325+ }
1326+ _lastActivatedItem = item ;
13221327 return ;
13231328 }
13241329
1325- if ( Editable == true )
1326- {
1330+ if ( Editable )
13271331 return ;
1328- }
13291332
1330- // find first item that starts with the letter
1331- var possibleItems = Items . Where ( x => ( x . Text ?? Converter . Set ( x . Value ) ?? string . Empty ) . StartsWith ( startChar , StringComparison . OrdinalIgnoreCase ) ) . ToList ( ) ;
1332- if ( possibleItems == null || ! possibleItems . Any ( ) )
1333+ var foundItems = Items . Where ( x => ( x . Text ?? Converter . Set ( x . Value ) ?? string . Empty ) . StartsWith ( startsWith , StringComparison . OrdinalIgnoreCase ) ) . ToList ( ) ;
1334+ if ( ! foundItems . Any ( ) )
13331335 {
1334- if ( _lastActivatedItem == null )
1336+ if ( _lastActivatedItem is not null )
13351337 {
1336- return ;
1338+ _lastActivatedItem . SetActive ( true ) ;
1339+ await ScrollToMiddleAsync ( _lastActivatedItem ) ;
13371340 }
1338- _lastActivatedItem . SetActive ( true ) ;
1339- await ScrollToMiddleAsync ( _lastActivatedItem ) ;
13401341 return ;
13411342 }
13421343
1343- var theItem = possibleItems . FirstOrDefault ( x => x == _lastActivatedItem ) ;
1344- if ( theItem == null )
1344+ item = foundItems . FirstOrDefault ( x => x == _lastActivatedItem ) ;
1345+ if ( item is null )
13451346 {
1346- possibleItems [ 0 ] . SetActive ( true ) ;
1347- _lastActivatedItem = possibleItems [ 0 ] ;
1348- await ScrollToMiddleAsync ( possibleItems [ 0 ] ) ;
1347+ item = foundItems [ 0 ] ;
1348+ item . SetActive ( true ) ;
1349+ await ScrollToMiddleAsync ( item ) ;
1350+ _lastActivatedItem = item ;
13491351 return ;
13501352 }
13511353
1352- if ( theItem == possibleItems . LastOrDefault ( ) )
1354+ if ( item == foundItems . LastOrDefault ( ) )
13531355 {
1354- possibleItems [ 0 ] . SetActive ( true ) ;
1355- _lastActivatedItem = possibleItems [ 0 ] ;
1356- await ScrollToMiddleAsync ( possibleItems [ 0 ] ) ;
1356+ item = foundItems [ 0 ] ;
1357+ item . SetActive ( true ) ;
1358+ await ScrollToMiddleAsync ( item ) ;
1359+ _lastActivatedItem = item ;
13571360 }
13581361 else
13591362 {
1360- var item = possibleItems [ possibleItems . IndexOf ( theItem ) + 1 ] ;
1363+ item = foundItems [ foundItems . IndexOf ( item ) + 1 ] ;
13611364 item . SetActive ( true ) ;
1362- _lastActivatedItem = item ;
13631365 await ScrollToMiddleAsync ( item ) ;
1366+ _lastActivatedItem = item ;
13641367 }
13651368 }
13661369
1367- public async Task ActiveAdjacentItem ( int changeCount )
1370+ [ Obsolete ( "Please use ActivateAdjacentItem() method" ) ]
1371+ public Task ActiveAdjacentItem ( int changeCount ) => ActivateAdjacentItem ( changeCount ) ;
1372+ public async Task ActivateAdjacentItem ( int changeCount )
13681373 {
13691374 if ( Items == null || Items . Count == 0 )
13701375 {
13711376 return ;
13721377 }
13731378
1374- var properItems = GetEligibleAndNonDisabledItems ( ) ;
1379+ var properItems = GetEnabledAndEligibleItems ( ) ;
13751380 int index = GetActiveProperItemIndex ( ) ;
13761381 if ( index + changeCount >= properItems . Count || 0 > index + changeCount )
13771382 {
@@ -1385,31 +1390,27 @@ public async Task ActiveAdjacentItem(int changeCount)
13851390 await ScrollToMiddleAsync ( Items [ index + changeCount ] ) ;
13861391 }
13871392
1388- public async Task ActiveLastItem ( )
1393+ [ Obsolete ( "Please use ActivateLastItem() method" ) ]
1394+ public Task ActiveLastItem ( ) => ActivateLastItem ( ) ;
1395+ public async Task ActivateLastItem ( )
13891396 {
13901397 if ( ! ( Items . Count > 0 ) )
13911398 return ;
13921399
13931400 DeactiveAllItems ( ) ;
1394- var properItems = GetEligibleAndNonDisabledItems ( ) ;
1395- var lastItem = properItems . LastOrDefault ( ) ;
1396- lastItem ? . SetActive ( true ) ;
1397- _lastActivatedItem = lastItem ;
1398-
1399- if ( _lastActivatedItem is not null )
1400- await ScrollToMiddleAsync ( _lastActivatedItem ) ;
1401- }
1402-
1403- #endregion
1404-
1405- protected internal List < MudComboBoxItem < T > > GetEligibleAndNonDisabledItems ( )
1406- {
1407- if ( Items == null )
1401+ var item = GetEnabledAndEligibleItems ( ) . LastOrDefault ( ) ;
1402+ if ( item is not null )
14081403 {
1409- return new ( ) ;
1404+ item . SetActive ( true ) ;
1405+ await ScrollToMiddleAsync ( item ) ;
14101406 }
1411- return Items . Where ( x => x . Eligible == true && x . Disabled == false ) . ToList ( ) ;
1407+ _lastActivatedItem = item ;
14121408 }
1409+
1410+ #endregion
1411+
1412+ protected internal List < MudComboBoxItem < T > > GetEnabledAndEligibleItems ( ) => Items . Where ( x => ! x . Disabled && x . Eligible ) . ToList ( ) ;
1413+
14131414
14141415 protected bool HasEligibleItems ( )
14151416 {
0 commit comments