From 20aee0ba11ed0e3745aaeb32a881da867384c733 Mon Sep 17 00:00:00 2001 From: Ishan Taldekar Date: Wed, 5 Feb 2025 15:34:28 -0500 Subject: [PATCH] Disable arrow keys if text area is empty --- .../amazonq/views/AmazonQChatWebview.java | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/plugin/src/software/aws/toolkits/eclipse/amazonq/views/AmazonQChatWebview.java b/plugin/src/software/aws/toolkits/eclipse/amazonq/views/AmazonQChatWebview.java index ebe4b33d..4c0467c3 100644 --- a/plugin/src/software/aws/toolkits/eclipse/amazonq/views/AmazonQChatWebview.java +++ b/plugin/src/software/aws/toolkits/eclipse/amazonq/views/AmazonQChatWebview.java @@ -21,6 +21,7 @@ import software.aws.toolkits.eclipse.amazonq.configuration.PluginStoreKeys; import software.aws.toolkits.eclipse.amazonq.lsp.AwsServerCapabiltiesProvider; import software.aws.toolkits.eclipse.amazonq.lsp.auth.model.AuthState; +import software.aws.toolkits.eclipse.amazonq.lsp.manager.LspStatusManager; import software.aws.toolkits.eclipse.amazonq.lsp.model.ChatOptions; import software.aws.toolkits.eclipse.amazonq.lsp.model.QuickActions; import software.aws.toolkits.eclipse.amazonq.lsp.model.QuickActionsCommandGroup; @@ -141,7 +142,7 @@ public final void onEvent(final AuthState authState) { // chat view if (browser != null && !browser.isDisposed() && !chatStateManager.hasPreservedState()) { Optional content = getContent(); - if (!content.isPresent()) { + if (!content.isPresent() && !LspStatusManager.lspFailed()) { canDisposeState = true; ViewVisibilityManager.showChatAssetMissingView("update"); } else { @@ -245,6 +246,38 @@ private String generateJS(final String jsEntrypoint) { } window.addEventListener('load', init); + + window.addEventListener('load', () => { + const textarea = document.querySelector('textarea.mynah-chat-prompt-input'); + if (textarea) { + textarea.addEventListener('keydown', (event) => { + const cursorPosition = textarea.selectionStart; + const hasText = textarea.value.length > 0; + + // block arrow keys on empty text area + switch (event.key) { + case 'ArrowLeft': + if (!hasText || cursorPosition === 0) { + event.preventDefault(); + event.stopPropagation(); + return false; + } + break; + + case 'ArrowRight': + if (!hasText || cursorPosition === textarea.value.length) { + event.preventDefault(); + event.stopPropagation(); + return false; + } + break; + + default: + return true; + } + }); + } + }); """, jsEntrypoint, getWaitFunction(), chatQuickActionConfig, "true".equals(disclaimerAcknowledged));