12345678910111213141516171819202122232425262728293031323334353637383940 |
- // Utilities
- import { onBeforeUnmount, onMounted, ref, watch } from 'vue';
- import { refElement } from "../util/index.mjs"; // Types
- export function useMutationObserver(handler, options) {
- const mutationRef = ref();
- const {
- once,
- immediate,
- ...optionKeys
- } = options || {};
- const defaultValue = !Object.keys(optionKeys).length;
- const observer = new MutationObserver((mutations, observer) => {
- handler?.(mutations, observer);
- if (options?.once) observer.disconnect();
- });
- onMounted(() => {
- if (!options?.immediate) return;
- handler?.([], observer);
- });
- onBeforeUnmount(() => {
- observer.disconnect();
- });
- watch(mutationRef, (newValue, oldValue) => {
- if (oldValue) observer.disconnect();
- const el = refElement(newValue);
- if (!el) return;
- observer.observe(el, {
- attributes: options?.attr ?? defaultValue,
- characterData: options?.char ?? defaultValue,
- childList: options?.child ?? defaultValue,
- subtree: options?.sub ?? defaultValue
- });
- }, {
- flush: 'post'
- });
- return {
- mutationRef
- };
- }
- //# sourceMappingURL=mutationObserver.mjs.map
|