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;
};