File tree 7 files changed +42
-4
lines changed
javascript/js/controllers
7 files changed +42
-4
lines changed Original file line number Diff line number Diff line change 1
1
< div class ="modal-container fixed inset-0 w-full min-h-screen z-[100] flex justify-center items-center "
2
2
data-controller ="modal "
3
3
data-modal-target ="modal "
4
+ data-modal-close-modal-on-backdrop-click-value ="<%= close_modal_on_backdrop_click %> "
4
5
>
5
- < div aria-expanded ="true " class ="modal-overlay absolute w-full h-full bg-opacity-25 bg-gray-800 flex justify-center items-center " data-action ="click->modal#close "> </ div >
6
+ < div aria-expanded ="true " class ="modal-overlay absolute w-full h-full bg-opacity-25 bg-gray-800 flex justify-center items-center " data-modal-target =" backdrop " data- action ="click->modal#close " > </ div >
6
7
< div aria-expanded ="true " role ="dialog " aria-modal ="true " class ="modal-body rounded-lg inset-auto bg-white flex z-50 relative shadow-modal <%= overflow_classes %> <%= width_classes %> <%= height_classes %> ">
7
8
< div class ="flex-1 flex flex-col justify-between ">
8
9
< div >
25
26
</ div >
26
27
</ div >
27
28
</ div >
28
-
Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ class Avo::ModalComponent < Avo::BaseComponent
7
7
prop :width , default : :md
8
8
prop :body_class
9
9
prop :overflow , default : :auto
10
+ prop :close_modal_on_backdrop_click , default : true , reader : :public
10
11
11
12
def width_classes
12
13
case @width . to_sym
Original file line number Diff line number Diff line change 1
1
import { Controller } from '@hotwired/stimulus'
2
2
3
3
export default class extends Controller {
4
- static targets = [ 'modal' ]
4
+ static targets = [ 'modal' , 'backdrop' ]
5
+
6
+ static values = {
7
+ closeModalOnBackdropClick : true ,
8
+ }
5
9
6
10
close ( ) {
11
+ if ( event . target === this . backdropTarget && ! this . closeModalOnBackdropClickValue ) return
12
+
7
13
this . modalTarget . remove ( )
8
14
9
15
document . dispatchEvent ( new Event ( 'actions-modal:close' ) )
Original file line number Diff line number Diff line change 21
21
**@action . class . form_data_attributes ,
22
22
} do |form |
23
23
%>
24
- <%= render Avo ::ModalComponent . new do |c | %>
24
+ <%= render Avo ::ModalComponent . new ( close_modal_on_backdrop_click : @action . close_modal_on_backdrop_click ) do |c | %>
25
25
<% c . with_heading do %>
26
26
<%= @action . action_name %>
27
27
<% end %>
Original file line number Diff line number Diff line change @@ -14,6 +14,7 @@ class BaseAction
14
14
class_attribute :may_download_file
15
15
class_attribute :turbo
16
16
class_attribute :authorize , default : true
17
+ class_attribute :close_modal_on_backdrop_click , default : true
17
18
18
19
attr_accessor :view
19
20
attr_accessor :response
Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ class Avo::Actions::ExportCsv < Avo::BaseAction
4
4
self . name = "Export CSV"
5
5
self . no_confirmation = false
6
6
self . standalone = true
7
+ self . close_modal_on_backdrop_click = false
7
8
8
9
def fields
9
10
# Add more fields here for custom user-selected columns
Original file line number Diff line number Diff line change 168
168
end
169
169
end
170
170
171
+ describe "action close_modal_on_backdrop_click" do
172
+ it "closes the modal on backdrop click" do
173
+ Avo ::Actions ::ExportCsv . close_modal_on_backdrop_click = true
174
+
175
+ visit "/admin/resources/projects"
176
+
177
+ click_on "Actions"
178
+ click_on "Export CSV"
179
+ find ( '[data-modal-target="backdrop"]' ) . trigger ( "click" )
180
+
181
+ expect ( page ) . not_to have_selector '[data-controller="modal"]'
182
+ end
183
+
184
+ it "does not close the modal on backdrop click" do
185
+ Avo ::Actions ::ExportCsv . close_modal_on_backdrop_click = false
186
+
187
+ visit "/admin/resources/projects"
188
+
189
+ click_on "Actions"
190
+ click_on "Export CSV"
191
+ find ( '[data-modal-target="backdrop"]' ) . trigger ( "click" )
192
+
193
+ expect ( page ) . to have_selector '[data-controller="modal"]'
194
+
195
+ click_on "Cancel"
196
+ expect ( page ) . not_to have_selector '[data-controller="modal"]'
197
+ end
198
+ end
199
+
171
200
describe "redirects when no confirmation" do
172
201
it "redirects to hey page" do
173
202
visit "/admin/resources/users"
You can’t perform that action at this time.
0 commit comments