import { useCallback, useState } from 'react'; import useMutationObserver from './useMutationObserver.js'; import type { RefCallback } from 'react'; /** * Observes a node using MutationObserver and returns its latest records. * * @template T * @param {MutationObserverInit} options MutationObserver options. WARNING! If you define the * object in component body, make sure to memoize it. * @returns {[React.RefCallback, MutationRecord[] | null]} Ref callback and the latest * MutationObserver records */ export default function useMutationObserverRef( options: MutationObserverInit, ): [RefCallback, MutationRecord[] | null] { const [element, setElement] = useState(null); const [records, setRecords] = useState(null); const ref = useCallback>((nextElement) => { setElement(nextElement); setRecords(null); }, []); const observerCallback = useCallback((nextRecords) => { setRecords(nextRecords); }, []); useMutationObserver(element, options, observerCallback); return [ref, records]; }