Files
NapCatQQ/.pnpm-store/v3/files/d3/a9c5fcf8f076f342e7c449993bd6b52f9e8d24599c7bcab3b7a1eaaab0fe17f8ce97468d2d19d97c2515dfe4937f94d892517c11039951614b2a13685bffee
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

48 lines
1.2 KiB
Plaintext

import { useEffect, useRef } from 'react'
import { useWebSocket } from './use-websocket'
import { DEFAULT_EVENT_SOURCE_OPTIONS, EMPTY_EVENT_HANDLERS } from './constants'
import { EventSourceOptions, Options, EventSourceHook, EventSourceEventHandlers } from './types';
export const useEventSource = (
url: string | (() => string | Promise<string>) | null,
{ withCredentials, events, ...options }: EventSourceOptions = DEFAULT_EVENT_SOURCE_OPTIONS,
connect: boolean = true,
): EventSourceHook => {
const optionsWithEventSource: Options = {
...options,
eventSourceOptions: {
withCredentials,
}
};
const eventsRef = useRef<EventSourceEventHandlers>(EMPTY_EVENT_HANDLERS);
if (events) {
eventsRef.current = events
}
const {
lastMessage,
readyState,
getWebSocket,
} = useWebSocket(
url,
optionsWithEventSource,
connect,
);
useEffect(() => {
if (lastMessage?.type) {
Object.entries(eventsRef.current).forEach(([type, handler]) => {
if (type === lastMessage.type) {
handler(lastMessage);
}
});
}
}, [lastMessage]);
return {
lastEvent: lastMessage,
readyState,
getEventSource: getWebSocket,
};
}