@droppii-org/chat-sdk
Version:
Droppii React Chat SDK
72 lines (71 loc) • 2.71 kB
JavaScript
"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 }));
};