| import { useCallback, useEffect, useMemo, useSyncExternalStore } from 'react' | |
| import { useMailbox } from '../context/mailbox.js' | |
| type Props = { | |
| isLoading: boolean | |
| onSubmitMessage: (content: string) => boolean | |
| } | |
| export function useMailboxBridge({ isLoading, onSubmitMessage }: Props): void { | |
| const mailbox = useMailbox() | |
| const subscribe = useMemo(() => mailbox.subscribe.bind(mailbox), [mailbox]) | |
| const getSnapshot = useCallback(() => mailbox.revision, [mailbox]) | |
| const revision = useSyncExternalStore(subscribe, getSnapshot) | |
| useEffect(() => { | |
| if (isLoading) return | |
| const msg = mailbox.poll() | |
| if (msg) onSubmitMessage(msg.content) | |
| }, [isLoading, revision, mailbox, onSubmitMessage]) | |
| } | |