mirror of https://github.com/msgbyte/tailchat
feat(livekit): add chat count in outside
parent
584f7f3469
commit
bd2c161f61
@ -0,0 +1,47 @@
|
|||||||
|
import { useRoomContext } from '@livekit/components-react';
|
||||||
|
import React, { useContext, useEffect, useState } from 'react';
|
||||||
|
import { ReceivedChatMessage, setupChat } from '@livekit/components-core';
|
||||||
|
import { useObservableState } from '../../utils/useObservableState';
|
||||||
|
|
||||||
|
const ChatContext = React.createContext({
|
||||||
|
send: async (message: string) => {},
|
||||||
|
chatMessages: [] as ReceivedChatMessage[],
|
||||||
|
isSending: false,
|
||||||
|
});
|
||||||
|
ChatContext.displayName = 'ChatContext';
|
||||||
|
|
||||||
|
export const ChatProvider: React.FC<React.PropsWithChildren> = React.memo(
|
||||||
|
(props) => {
|
||||||
|
const chatContext = useSetupChat();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ChatContext.Provider value={chatContext}>
|
||||||
|
{props.children}
|
||||||
|
</ChatContext.Provider>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
ChatProvider.displayName = 'ChatProvider';
|
||||||
|
|
||||||
|
function useSetupChat() {
|
||||||
|
const room = useRoomContext();
|
||||||
|
const [setup, setSetup] = useState<ReturnType<typeof setupChat>>();
|
||||||
|
const isSending = useObservableState(setup?.isSendingObservable, false);
|
||||||
|
const chatMessages = useObservableState<ReceivedChatMessage[]>(
|
||||||
|
setup?.messageObservable,
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const setupChatReturn = setupChat(room);
|
||||||
|
setSetup(setupChatReturn);
|
||||||
|
|
||||||
|
return setupChatReturn.destroy;
|
||||||
|
}, [room]);
|
||||||
|
|
||||||
|
return { send: setup?.send, chatMessages, isSending };
|
||||||
|
}
|
||||||
|
|
||||||
|
export function useChatContext() {
|
||||||
|
return useContext(ChatContext);
|
||||||
|
}
|
Loading…
Reference in New Issue