n8n/packages/editor-ui/src/components/IntersectionObserver.vue
Iván Ovejero 5ca2148c7e
refactor(editor): Apply Prettier (no-changelog) (#4920)
*  Adjust `format` script

* 🔥 Remove exemption for `editor-ui`

* 🎨 Prettify

* 👕 Fix lint
2022-12-14 10:04:10 +01:00

55 lines
961 B
Vue

<template>
<div ref="root">
<slot></slot>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
export default Vue.extend({
name: 'IntersectionObserver',
props: ['threshold', 'enabled'],
data() {
return {
observer: null,
};
},
mounted() {
if (!this.$props.enabled) {
return;
}
const options = {
root: this.$refs.root as Element,
rootMargin: '0px',
threshold: this.$props.threshold,
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(({ target, isIntersecting }) => {
this.$emit('observed', {
el: target,
isIntersecting,
});
});
}, options);
this.$data.observer = observer;
this.$on('observe', (observed: Element) => {
observer.observe(observed);
});
this.$on('unobserve', (observed: Element) => {
observer.unobserve(observed);
});
},
beforeDestroy() {
if (this.$props.enabled) {
this.$data.observer.disconnect();
}
},
});
</script>