Skip to content

Commit

Permalink
feat(directives): add clickOutside directive
Browse files Browse the repository at this point in the history
  • Loading branch information
rudnovd committed Dec 30, 2020
1 parent 865ed51 commit 1b13fd2
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions src/directives/clickOutside.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { Directive } from 'vue'

let clickOutsideEvent: (event: Event) => void

const clickOutside: Directive = {
mounted(el) {
let initialMacrotaskEnded = false
setTimeout(() => {
initialMacrotaskEnded = true
}, 0)

clickOutsideEvent = (event) => {
const { target } = event

if (initialMacrotaskEnded && !(el === target || el.contains(target))) {
el.dispatchEvent(new Event('clickoutside'))
}
}

document.addEventListener('mousedown', clickOutsideEvent)
document.addEventListener('touchstart', clickOutsideEvent)
},
unmounted() {
document.removeEventListener('mousedown', clickOutsideEvent)
document.removeEventListener('touchstart', clickOutsideEvent)
},
}

export default clickOutside

0 comments on commit 1b13fd2

Please sign in to comment.