import { Controller } from "@hotwired/stimulus"
|
|
|
|
export default class extends Controller {
|
|
|
|
connect() {
|
|
this.url = document.getElementById('drawer').getAttribute('data-url')
|
|
this.token = document.querySelector('meta[name="csrf-token"]').getAttribute('content')
|
|
}
|
|
|
|
// Toggle node children in drawer
|
|
toggle_children(event) {
|
|
const node = this.element.closest('.node-row');
|
|
node.classList.toggle('closed');
|
|
|
|
// Already loaded
|
|
if (node.parentNode.classList.contains('loaded')) {
|
|
|
|
fetch(this.url, {
|
|
method: 'PATCH',
|
|
headers: {
|
|
'X-CSRF-Token': this.token,
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify({
|
|
id: node.parentNode.dataset.id,
|
|
expanded: !node.classList.contains('closed')
|
|
})
|
|
}).then((response) => {
|
|
// console.info('resolved', response)
|
|
}).catch((err) => {
|
|
console.info('rejected', err)
|
|
})
|
|
|
|
event.preventDefault();
|
|
|
|
} else {
|
|
node.parentNode.classList.add('loaded')
|
|
}
|
|
|
|
|
|
}
|
|
|
|
// Mark current node in drawer
|
|
set_current(event) {
|
|
|
|
// Remove old current
|
|
var node = document.querySelector("#drawer .current")
|
|
if (node) {
|
|
node.classList.remove('current');
|
|
}
|
|
|
|
// Add new current
|
|
node = document.getElementById(`node_${event.params['id']}`)
|
|
if (node) {
|
|
node.classList.add('current')
|
|
}
|
|
}
|
|
|
|
}
|