yungpunks
/
stable-diffusion-webui
/extensions
/sd-webui-lobe-theme
/src
/hooks
/useExternalTextareaObserver.ts
| 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; | |
| }; | |