Skip to content

Commit 93d1188

Browse files
committed
fix/Listen for global modal close event on modal target
1 parent 525f1bf commit 93d1188

File tree

6 files changed

+16
-40
lines changed

6 files changed

+16
-40
lines changed

app/javascript/controllers/modal_controller.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ export default class extends Controller {
2424
}
2525

2626
close() {
27-
const modal = document.getElementById('modal')
28-
29-
if (modal) { modal.remove(); };
27+
if (this.hasModalTarget) { this.modalTarget.remove() }
3028
}
3129
}

app/javascript/controllers/registrations_controller.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,7 @@ export default class extends Controller {
1919
this.toast.display(data.message)
2020
}
2121

22-
presentModal(event) {
23-
this.modal.present(event.target.dataset.modalUrl)
24-
}
25-
2622
get toast() {
2723
return document.getElementById('toast').toast
2824
}
29-
30-
get modal() {
31-
return document.getElementById('modal').modal
32-
}
3325
}

app/javascript/controllers/sessions_controller.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,7 @@ export default class extends Controller {
1919
this.toast.display(data.message)
2020
}
2121

22-
presentModal(event) {
23-
this.modal.present(event.target.dataset.modalUrl)
24-
}
25-
2622
get toast() {
2723
return document.getElementById('toast').toast
2824
}
29-
30-
get modal() {
31-
return document.getElementById('modal').modal
32-
}
3325
}

app/javascript/controllers/snippets_controller.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export default class extends Controller {
2828
window.dispatchEvent(createEvent)
2929

3030
this.toast.display('Your snippet was created!')
31-
this.modal.close()
31+
this.emitModalClose();
3232
}
3333

3434
onCreateError(event) {
@@ -42,19 +42,14 @@ export default class extends Controller {
4242
window.dispatchEvent(updateEvent)
4343

4444
this.toast.display('Your snippet was updated!')
45-
this.modal.close()
45+
this.emitModalClose();
4646
}
4747

4848
onUpdateError(event) {
4949
const [data, status, xhr] = event.detail;
5050
this.errorsTarget.innerHTML = data.element;
5151
}
5252

53-
presentModal(event) {
54-
event.preventDefault()
55-
this.modal.present(event.currentTarget.dataset.modalUrl)
56-
}
57-
5853
view_snippet(event) {
5954
event.stopPropagation()
6055
const snippetUrl = event.currentTarget.dataset.snippetUrl
@@ -117,14 +112,19 @@ export default class extends Controller {
117112
axios.post(this.confirmPath, { folder_id: this.selectedFolderId }, { headers: { 'accept': 'application/json' } })
118113
.then(res => {
119114
this.toast.display(res.data.message)
120-
this.modal.close()
115+
this.emitModalClose();
121116
})
122117
.catch(error => {
123118
console.error(error)
124119
this.toast.display('Unable to file snippet')
125120
})
126121
}
127122

123+
emitModalClose() {
124+
const event = new CustomEvent('close-modal')
125+
window.dispatchEvent(event)
126+
}
127+
128128
get url() {
129129
return this.data.get('url')
130130
}
Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,3 @@
11
import { Controller } from 'stimulus';
22

3-
export default class extends Controller {
4-
5-
presentModal(event) {
6-
event.stopPropagation()
7-
const target = event.currentTarget || event.target
8-
this.modal.present(target.dataset.modalUrl)
9-
}
10-
11-
get modal() {
12-
return document.getElementById('modal').modal
13-
}
14-
}
3+
export default class extends Controller {}

app/views/layouts/modal.html.erb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
<div id="modal" data-controller="modal" data-modal-target="modal" class="modal-mask">
1+
<div id="modal"
2+
data-controller="modal"
3+
data-modal-target="modal"
4+
data-action="close-modal@window->modal#close"
5+
class="modal-mask"
6+
>
27
<div class="modal-wrapper">
38
<div class="card--container card--container-padding modal-container">
49
<div class="modal-header">

0 commit comments

Comments
 (0)