mono/packages/kbot/ref/hooks/useMailboxBridge.ts
2026-04-01 01:05:48 +02:00

22 lines
716 B
TypeScript

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])
}