diff --git a/assets/controllers/dropdown_controller.js b/assets/controllers/dropdown_controller.js new file mode 100644 index 0000000..1bfe62b --- /dev/null +++ b/assets/controllers/dropdown_controller.js @@ -0,0 +1,24 @@ +import { Controller } from '@hotwired/stimulus'; + +export default class extends Controller { + static targets = ['menu', 'trigger']; + + connect() { + this._closeOnClickOutside = this._closeOnClickOutside.bind(this); + document.addEventListener('click', this._closeOnClickOutside); + } + + disconnect() { + document.removeEventListener('click', this._closeOnClickOutside); + } + + toggle() { + this.menuTarget.hidden = !this.menuTarget.hidden; + } + + _closeOnClickOutside(event) { + if (!this.element.contains(event.target)) { + this.menuTarget.hidden = true; + } + } +}