diff --git a/src/CodeBeam.MudBlazor.Extensions/Components/CodeInput/MudCodeInput.razor.cs b/src/CodeBeam.MudBlazor.Extensions/Components/CodeInput/MudCodeInput.razor.cs index 26823814..78c4b013 100644 --- a/src/CodeBeam.MudBlazor.Extensions/Components/CodeInput/MudCodeInput.razor.cs +++ b/src/CodeBeam.MudBlazor.Extensions/Components/CodeInput/MudCodeInput.razor.cs @@ -162,7 +162,12 @@ private async Task OnInputHandler() _skipInputEvent = false; return; } - await FocusNext(); + + var current = _elementReferences[_lastFocusedIndex]; + var val = current.GetState(x => x.Value)?.ToString(); + + if (!string.IsNullOrEmpty(val)) + await FocusNext(); } /// @@ -173,36 +178,49 @@ private async Task OnInputHandler() protected async Task HandleKeyDown(KeyboardEventArgs arg) { if (Disabled || ReadOnly) - { return; - } - if (arg.Key == "Backspace" || arg.Key == "ArrowLeft" || arg.Key == "Delete") + if (arg.Key == "Backspace") { - _skipInputEvent = true; - _skipRefocus = true; - if (arg.Key == "Delete") + var current = _elementReferences[_lastFocusedIndex]; + var currentValue = current.GetState(x => x.Value)?.ToString(); + + if (!string.IsNullOrEmpty(currentValue)) { - await _elementReferences[_lastFocusedIndex].Clear(); + _skipInputEvent = true; + await current.Clear(); _skipInputEvent = false; + return; } + + _skipRefocus = true; + if (RuntimeLocation.IsClientSide) - { await Task.Delay(10); - } + + await FocusPrevious(); + return; + } + + if (arg.Key == "Delete") + { + _skipInputEvent = true; + await _elementReferences[_lastFocusedIndex].Clear(); + _skipInputEvent = false; + return; + } + + if (arg.Key == "ArrowLeft") + { await FocusPrevious(); return; } if (arg.Key == "ArrowRight") { - if (RuntimeLocation.IsClientSide) - { - await Task.Delay(10); - } await FocusNext(); + return; } - } private int _lastFocusedIndex = 0;