import { useEffect, useRef, useState } from 'react'; import { useIsomorphicLayoutEffect } from '../utils/use-isomorphic-layout-effect'; import { createFnsWire } from './create-fns-wire'; import { FnsWire } from './fns-wire'; const create = (upLink: FnsWire | null | undefined) => { return createFnsWire(upLink || {}); }; export function useFnsWire( upLink: FnsWire | null | undefined, ): FnsWire { const [[wire, connect], set] = useState(() => create(upLink)); const lastUpLinkRef = useRef(upLink); useIsomorphicLayoutEffect(() => { if (lastUpLinkRef.current !== upLink) { lastUpLinkRef.current = upLink; set(create(upLink)); } }, [upLink]); useEffect(() => { return connect(); }, [connect]); return wire; }