From 53cadac4b8d7f48297ff7f857c65e61ec16b8f7b Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Mon, 20 Mar 2023 22:24:12 +0100 Subject: [PATCH] UX: disables composer auto focus on drawer (#20751) This behavior was interfering with topics shortcuts. --- .../discourse/components/chat-live-pane.js | 4 +++ .../chat/spec/system/shortcuts/drawer_spec.rb | 11 ++++++++ .../spec/system/shortcuts/full_page_spec.rb | 25 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 plugins/chat/spec/system/shortcuts/full_page_spec.rb diff --git a/plugins/chat/assets/javascripts/discourse/components/chat-live-pane.js b/plugins/chat/assets/javascripts/discourse/components/chat-live-pane.js index 731cb85f4d5..fa69ec1b956 100644 --- a/plugins/chat/assets/javascripts/discourse/components/chat-live-pane.js +++ b/plugins/chat/assets/javascripts/discourse/components/chat-live-pane.js @@ -1245,6 +1245,10 @@ export default class ChatLivePane extends Component { @bind _autoFocus(event) { + if (this.chatStateManager.isDrawerActive) { + return; + } + const { key, metaKey, ctrlKey, code, target } = event; if ( diff --git a/plugins/chat/spec/system/shortcuts/drawer_spec.rb b/plugins/chat/spec/system/shortcuts/drawer_spec.rb index 336e6988b45..d9c3640df2b 100644 --- a/plugins/chat/spec/system/shortcuts/drawer_spec.rb +++ b/plugins/chat/spec/system/shortcuts/drawer_spec.rb @@ -42,6 +42,17 @@ RSpec.describe "Shortcuts | drawer", type: :system, js: true do end end + context "when pressing a letter" do + it "doesn’t intercept the event" do + drawer.open_channel(channel_1) + find(".header-sidebar-toggle").click # simple way to ensure composer is not focused + + page.send_keys("e") + + expect(find(".chat-composer-input").value).to eq("") + end + end + context "when using Up/Down arrows" do it "navigates through the channels" do drawer.open_channel(channel_1) diff --git a/plugins/chat/spec/system/shortcuts/full_page_spec.rb b/plugins/chat/spec/system/shortcuts/full_page_spec.rb new file mode 100644 index 00000000000..84478929be6 --- /dev/null +++ b/plugins/chat/spec/system/shortcuts/full_page_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +RSpec.describe "Shortcuts | full page", type: :system, js: true do + fab!(:channel_1) { Fabricate(:chat_channel) } + fab!(:current_user) { Fabricate(:user) } + + let(:chat) { PageObjects::Pages::Chat.new } + + before do + chat_system_bootstrap + channel_1.add(current_user) + sign_in(current_user) + end + + context "when pressing a letter" do + it "intercepts the event and propagates it to the composer" do + chat.visit_channel(channel_1) + find(".header-sidebar-toggle").click # simple way to ensure composer is not focused + + page.send_keys("e") + + expect(find(".chat-composer-input").value).to eq("e") + end + end +end