-
Notifications
You must be signed in to change notification settings - Fork 159
/
Copy pathnested_form_controller.js
40 lines (31 loc) · 1.06 KB
/
nested_form_controller.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import { Controller } from "stimulus"
export default class extends Controller {
static targets = [ "links", "template", "grouped" ]
connect() {
this.wrapperClass = this.data.get("wrapperClass") || "nested-fields"
}
add_association(event) {
event.preventDefault()
var content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, new Date().getTime())
this.linksTarget.insertAdjacentHTML('beforebegin', content)
}
remove_association(event) {
event.preventDefault()
let wrapper = event.target.closest("." + this.wrapperClass)
// New records are simply removed from the page
if (wrapper.dataset.newRecord == "true") {
wrapper.remove()
// Existing records are hidden and flagged for deletion
} else {
wrapper.querySelector("input[name*='_destroy']").value = 1
wrapper.style.display = 'none'
}
}
radio_chosen(event) {
var els = this.element.getElementsByClassName(event.target.classList[0])
Array.from(els).forEach( (e) => {
e.checked = false;
});
event.target.checked = true;
}
}