From c2d27bf3709c667458e07827faba6cad9b585bdd Mon Sep 17 00:00:00 2001 From: Adrian Marin Date: Sun, 15 Dec 2024 19:48:21 +0200 Subject: [PATCH 1/4] feature: cmd+return to submit form --- app/components/avo/views/resource_edit_component.html.erb | 6 +++++- app/javascript/js/controllers.js | 2 ++ app/javascript/js/controllers/form_controller.js | 8 ++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 app/javascript/js/controllers/form_controller.js diff --git a/app/components/avo/views/resource_edit_component.html.erb b/app/components/avo/views/resource_edit_component.html.erb index 950e2b331f..2836f1d241 100644 --- a/app/components/avo/views/resource_edit_component.html.erb +++ b/app/components/avo/views/resource_edit_component.html.erb @@ -15,7 +15,11 @@ method: form_method, local: true, html: { - novalidate: true + novalidate: true, + data: { + controller: "form", + action: "keydown.ctrl+enter->form#submit keydown.meta+enter->form#submit" + } }, multipart: true do |form| %> <%= render Avo::ReferrerParamsComponent.new back_path: back_path %> diff --git a/app/javascript/js/controllers.js b/app/javascript/js/controllers.js index de91a986b0..f9113b0c1b 100644 --- a/app/javascript/js/controllers.js +++ b/app/javascript/js/controllers.js @@ -15,6 +15,7 @@ import DateFieldController from './controllers/fields/date_field_controller' import DateTimeFilterController from './controllers/date_time_filter_controller' import EasyMdeController from './controllers/fields/easy_mde_controller' import FilterController from './controllers/filter_controller' +import FormController from './controllers/form_controller' import HiddenInputController from './controllers/hidden_input_controller' import InputAutofocusController from './controllers/input_autofocus_controller' import ItemSelectAllController from './controllers/item_select_all_controller' @@ -59,6 +60,7 @@ application.register('copy-to-clipboard', CopyToClipboardController) application.register('dashboard-card', DashboardCardController) application.register('date-time-filter', DateTimeFilterController) application.register('filter', FilterController) +application.register('form', FormController) application.register('panel-refresh', PanelRefreshController) application.register('hidden-input', HiddenInputController) application.register('input-autofocus', InputAutofocusController) diff --git a/app/javascript/js/controllers/form_controller.js b/app/javascript/js/controllers/form_controller.js new file mode 100644 index 0000000000..c1024dc615 --- /dev/null +++ b/app/javascript/js/controllers/form_controller.js @@ -0,0 +1,8 @@ +import { Controller } from '@hotwired/stimulus' + +// Connects to data-controller="form" +export default class extends Controller { + submit() { + this.element.requestSubmit() + } +} From 3c56f0ce79ebeca52adf25b8e3e048f99efd6e64 Mon Sep 17 00:00:00 2001 From: Adrian Marin Date: Sun, 15 Dec 2024 21:15:18 +0200 Subject: [PATCH 2/4] add spec --- .../system/avo/avo_cmd_return_to_submits_spec.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 spec/system/avo/avo_cmd_return_to_submits_spec.rb diff --git a/spec/system/avo/avo_cmd_return_to_submits_spec.rb b/spec/system/avo/avo_cmd_return_to_submits_spec.rb new file mode 100644 index 0000000000..0f01b2f5bc --- /dev/null +++ b/spec/system/avo/avo_cmd_return_to_submits_spec.rb @@ -0,0 +1,16 @@ +require 'rails_helper' + +RSpec.describe "CmdReturnToSubmits", type: :system do + let(:admin) { create :user, roles: {admin: true} } + let(:project) { create :project } + before do + login_as admin + end # include TestHelpers::DisableAuthentication + + it "submits form when cmd+enter is pressed" do + visit "/admin/resources/projects/#{project.id}/edit" + element = find("input[name='project[name]']") + element.send_keys [:control, :enter] + expect(page).to have_text "Project updated" + end +end From 6e2efe4caf4b1fda13dae895ac3866980bbe4644 Mon Sep 17 00:00:00 2001 From: Adrian Marin Date: Sun, 15 Dec 2024 21:25:34 +0200 Subject: [PATCH 3/4] lint --- spec/system/avo/avo_cmd_return_to_submits_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/system/avo/avo_cmd_return_to_submits_spec.rb b/spec/system/avo/avo_cmd_return_to_submits_spec.rb index 0f01b2f5bc..104245a6fb 100644 --- a/spec/system/avo/avo_cmd_return_to_submits_spec.rb +++ b/spec/system/avo/avo_cmd_return_to_submits_spec.rb @@ -1,4 +1,4 @@ -require 'rails_helper' +require "rails_helper" RSpec.describe "CmdReturnToSubmits", type: :system do let(:admin) { create :user, roles: {admin: true} } From f289f899d49aaa3369ef002e09d596c46736a00c Mon Sep 17 00:00:00 2001 From: Paul Bob Date: Mon, 16 Dec 2024 03:51:38 +0200 Subject: [PATCH 4/4] fix test --- spec/system/avo/avo_cmd_return_to_submits_spec.rb | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/spec/system/avo/avo_cmd_return_to_submits_spec.rb b/spec/system/avo/avo_cmd_return_to_submits_spec.rb index 104245a6fb..c4e5e5cb04 100644 --- a/spec/system/avo/avo_cmd_return_to_submits_spec.rb +++ b/spec/system/avo/avo_cmd_return_to_submits_spec.rb @@ -1,16 +1,11 @@ require "rails_helper" RSpec.describe "CmdReturnToSubmits", type: :system do - let(:admin) { create :user, roles: {admin: true} } let(:project) { create :project } - before do - login_as admin - end # include TestHelpers::DisableAuthentication it "submits form when cmd+enter is pressed" do visit "/admin/resources/projects/#{project.id}/edit" - element = find("input[name='project[name]']") - element.send_keys [:control, :enter] - expect(page).to have_text "Project updated" + find("input[name='project[name]']").send_keys [:control, :enter] + expect(page).to have_text "Project was successfully updated" end end