UNPKG

@droppii-org/chat-sdk

Version:

Droppii React Chat SDK

72 lines (71 loc) 2.71 kB
"use client"; import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useContext, useEffect, useState } from "react"; import { CbEvents } from "@openim/wasm-client-sdk"; import { ConnectStatus, } from "../types/chat"; import { DChatSDK } from "../constants/sdk"; export const ChatContext = createContext({ user: null, connectStatus: ConnectStatus.Disconnected, }); export const useChatContext = () => useContext(ChatContext); export const ChatProvider = ({ children, config, refetchToken, }) => { const [connectStatus, setConnectStatus] = useState(ConnectStatus.Disconnected); const [user, setUser] = useState(null); const getUserInfo = () => { DChatSDK.getSelfUserInfo() .then(({ data }) => { setUser(data); }) .catch(({ errCode, errMsg }) => { console.log("getSelfUserInfo", errCode, errMsg); }); }; const handleLogin = (newToken) => { DChatSDK.login(Object.assign(Object.assign({}, config), { token: newToken || config.token })) .then((res) => { getUserInfo(); }) .catch(({ errCode, errMsg }) => { console.log("handleLogin", errCode, errMsg); }); }; useEffect(() => { handleLogin(); }, [config]); useEffect(() => { DChatSDK.on(CbEvents.OnUserTokenExpired, () => { console.log("OnUserTokenExpired"); refetchToken().then((token) => { if (!!token) { handleLogin(token); } }); }); DChatSDK.on(CbEvents.OnUserTokenInvalid, () => { console.log("OnUserTokenInvalid"); refetchToken().then((token) => { if (!!token) { handleLogin(token); } }); }); DChatSDK.on(CbEvents.OnConnectSuccess, () => { setConnectStatus(ConnectStatus.Connected); }); DChatSDK.on(CbEvents.OnConnecting, () => { setConnectStatus(ConnectStatus.Connecting); }); DChatSDK.on(CbEvents.OnConnectFailed, () => { setConnectStatus(ConnectStatus.Disconnected); }); return () => { DChatSDK.off(CbEvents.OnUserTokenExpired, () => { }); DChatSDK.off(CbEvents.OnUserTokenInvalid, () => { }); DChatSDK.off(CbEvents.OnConnectSuccess, () => { }); DChatSDK.off(CbEvents.OnConnectFailed, () => { }); DChatSDK.off(CbEvents.OnConnecting, () => { }); }; }, [refetchToken]); return (_jsx(ChatContext.Provider, { value: { user, connectStatus }, children: children })); };