mirror of
				https://github.com/discourse/discourse-ai.git
				synced 2025-10-30 22:18:38 +00:00 
			
		
		
		
	DEV: Add keybindings (#157)
- Ability to Esc to close context menu - Ability to Ctrl/Cmd + Z to undo results
This commit is contained in:
		
							parent
							
								
									78558b9cf5
								
							
						
					
					
						commit
						65c6b5e16c
					
				| @ -60,6 +60,7 @@ export default class AiHelperContextMenu extends Component { | ||||
|   willDestroy() { | ||||
|     super.willDestroy(...arguments); | ||||
|     document.removeEventListener("selectionchange", this.selectionChanged); | ||||
|     document.removeEventListener("keydown", this.onKeyDown); | ||||
|     this._popper?.destroy(); | ||||
|   } | ||||
| 
 | ||||
| @ -124,6 +125,19 @@ export default class AiHelperContextMenu extends Component { | ||||
|     this.positionContextMenu(); | ||||
|   } | ||||
| 
 | ||||
|   @bind | ||||
|   onKeyDown(event) { | ||||
|     const cmdOrCtrl = event.ctrlKey || event.metaKey; | ||||
| 
 | ||||
|     if (cmdOrCtrl && event.key === "z" && this.oldEditorValue) { | ||||
|       return this.undoAIAction(); | ||||
|     } | ||||
| 
 | ||||
|     if (event.key === "Escape") { | ||||
|       return this.closeContextMenu(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   @debounce(INPUT_DELAY) | ||||
|   _onSelectionChanged() { | ||||
|     this.positionContextMenu(); | ||||
| @ -189,6 +203,7 @@ export default class AiHelperContextMenu extends Component { | ||||
|   @action | ||||
|   setupContextMenu() { | ||||
|     document.addEventListener("selectionchange", this.selectionChanged); | ||||
|     document.addEventListener("keydown", this.onKeyDown); | ||||
| 
 | ||||
|     this._dEditorInput = document.querySelector(".d-editor-input"); | ||||
| 
 | ||||
|  | ||||
| @ -157,6 +157,28 @@ RSpec.describe "AI Composer helper", type: :system, js: true do | ||||
|         ai_helper_context_menu.click_undo_button | ||||
|         expect(composer.composer_input.value).to eq(OpenAiCompletionsInferenceStubs.spanish_text) | ||||
|       end | ||||
| 
 | ||||
|       it "reverts results when Ctrl/Cmd + Z is pressed on the keyboard" do | ||||
|         trigger_context_menu(OpenAiCompletionsInferenceStubs.spanish_text) | ||||
|         ai_helper_context_menu.click_ai_button | ||||
|         ai_helper_context_menu.select_helper_model( | ||||
|           OpenAiCompletionsInferenceStubs.text_mode_to_id(mode), | ||||
|         ) | ||||
| 
 | ||||
|         wait_for do | ||||
|           composer.composer_input.value == OpenAiCompletionsInferenceStubs.translated_response.strip | ||||
|         end | ||||
| 
 | ||||
|         ai_helper_context_menu.press_undo_keys | ||||
|         expect(composer.composer_input.value).to eq(OpenAiCompletionsInferenceStubs.spanish_text) | ||||
|       end | ||||
| 
 | ||||
|       it "hides the context menu when pressing Escape on the keyboard" do | ||||
|         trigger_context_menu(OpenAiCompletionsInferenceStubs.spanish_text) | ||||
|         ai_helper_context_menu.click_ai_button | ||||
|         ai_helper_context_menu.press_escape_key | ||||
|         expect(ai_helper_context_menu).to have_no_context_menu | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context "when using the proofreading mode" do | ||||
|  | ||||
| @ -3,6 +3,7 @@ | ||||
| module PageObjects | ||||
|   module Components | ||||
|     class AIHelperContextMenu < PageObjects::Components::Base | ||||
|       COMPOSER_EDITOR_SELECTOR = ".d-editor-input" | ||||
|       CONTEXT_MENU_SELECTOR = ".ai-helper-context-menu" | ||||
|       TRIGGER_STATE_SELECTOR = "#{CONTEXT_MENU_SELECTOR}__trigger" | ||||
|       OPTIONS_STATE_SELECTOR = "#{CONTEXT_MENU_SELECTOR}__options" | ||||
| @ -26,10 +27,22 @@ module PageObjects | ||||
|         find("#{RESETS_STATE_SELECTOR} .undo").click | ||||
|       end | ||||
| 
 | ||||
|       def press_undo_keys | ||||
|         find(COMPOSER_EDITOR_SELECTOR).send_keys([:control, "z"]) | ||||
|       end | ||||
| 
 | ||||
|       def press_escape_key | ||||
|         find("body").send_keys(:escape) | ||||
|       end | ||||
| 
 | ||||
|       def has_context_menu? | ||||
|         page.has_css?(CONTEXT_MENU_SELECTOR) | ||||
|       end | ||||
| 
 | ||||
|       def has_no_context_menu? | ||||
|         page.has_no_css?(CONTEXT_MENU_SELECTOR) | ||||
|       end | ||||
| 
 | ||||
|       def showing_triggers? | ||||
|         page.has_css?(TRIGGER_STATE_SELECTOR) | ||||
|       end | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user