Hide visibility popover on click outside of element

This commit is contained in:
Ramon Wenger 2018-10-17 09:36:12 +02:00
parent c81c7675b6
commit 1faa75fdba
3 changed files with 24 additions and 5 deletions

View File

@ -6,6 +6,7 @@
<eye-icon class="content-block__action-icon"></eye-icon> <eye-icon class="content-block__action-icon"></eye-icon>
</a> </a>
<visibility-popover <visibility-popover
@hide-me="showVisibility = false"
:show="showVisibility" :show="showVisibility"
:content-block="contentBlock" :content-block="contentBlock"
class="content-block__visibility-menu" class="content-block__visibility-menu"

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="visibility-menu" v-if="show"> <div class="visibility-menu" v-if="show" v-click-outside="hideVisibility">
<h3 class="visibility-menu__title">Sichtbarkeit</h3> <h3 class="visibility-menu__title">Sichtbarkeit</h3>
<div v-for="schoolClass in schoolClassVisibility" :key="schoolClass.id" class="visibility-menu__item"> <div v-for="schoolClass in schoolClassVisibility" :key="schoolClass.id" class="visibility-menu__item">
<checkbox :checked="!schoolClass.hidden" <checkbox :checked="!schoolClass.hidden"
@ -58,7 +58,11 @@
} }
} }
}); });
},
hideVisibility() {
this.$emit('hide-me');
} }
}, },
computed: { computed: {

View File

@ -40,10 +40,24 @@ Vue.use(VueAxios, axios);
Vue.use(VueVimeoPlayer); Vue.use(VueVimeoPlayer);
Vue.use(VueScrollTo, { Vue.use(VueScrollTo, {
duration: 500, duration: 500,
easing: 'ease-out', easing: 'ease-out',
offset: -50 offset: -50
}); });
Vue.directive('click-outside', {
bind(el, binding, vnode) {
el.clickOutsideEvent = event => {
if (!(el === event.target || el.contains(event.target))) {
vnode.context[binding.expression](event);
}
};
document.body.addEventListener('click', el.clickOutsideEvent);
},
unbind(el) {
document.body.removeEventListener('click', el.clickOutsideEvent)
}
});
const apolloProvider = new VueApollo({ const apolloProvider = new VueApollo({
defaultClient: apolloClient defaultClient: apolloClient