File size: 1,067 Bytes
db14b86 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import { useEffect, useState } from 'react';
export const useExternalTextareaObserver = (textareaSelector: string) => {
const [value, setValue] = useState('');
useEffect(() => {
const observerCallback: MutationCallback = (mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'attributes') {
const externalTextarea = document.querySelector(textareaSelector) as HTMLTextAreaElement;
setValue(externalTextarea.value);
}
}
};
const observerOptions: MutationObserverInit = {
attributes: true,
characterData: true,
childList: true,
subtree: true,
};
const observer = new MutationObserver(observerCallback);
const externalTextarea = document.querySelector(textareaSelector) as HTMLTextAreaElement | null;
if (externalTextarea) {
observer.observe(externalTextarea, observerOptions);
setValue(externalTextarea.value);
}
return () => {
observer.disconnect();
};
}, [textareaSelector]);
return value;
};
|