@droppii-org/chat-sdk
Version:
Droppii React Chat SDK
63 lines (62 loc) • 2.44 kB
JavaScript
"use client";
import { jsx as _jsx } from "react/jsx-runtime";
import "../styles/global.css";
import { createContext, useContext, useEffect, useState } from "react";
import { ConnectStatus, SyncStatus, } from "../types/chat";
import { DChatSDK } from "../constants/sdk";
import MainLayout from "../layout";
import useAuthStore from "../store/auth";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { ConfigProvider } from "antd";
const queryClient = new QueryClient();
export const ChatContext = createContext({
user: null,
connectStatus: ConnectStatus.Disconnected,
syncStatus: SyncStatus.Success,
getSelfUserInfo: () => { },
updateConnectStatus: () => { },
updateSyncStatus: () => { },
});
export const useChatContext = () => useContext(ChatContext);
export const ChatProvider = ({ children, config }) => {
const [connectStatus, setConnectStatus] = useState(ConnectStatus.Disconnected);
const [syncStatus, setSyncStatus] = useState(SyncStatus.Success);
const [user, setUser] = useState(null);
const initAuthStore = useAuthStore((state) => state.initAuthStore);
const getSelfUserInfo = () => {
DChatSDK.getSelfUserInfo()
.then(({ data }) => {
setUser(data);
})
.catch(({ errCode, errMsg }) => {
console.error("getSelfUserInfo", errCode, errMsg);
});
};
const updateConnectStatus = (status) => {
setConnectStatus(status);
};
const updateSyncStatus = (status) => {
setSyncStatus(status);
};
useEffect(() => {
if (config) {
initAuthStore({
accessToken: config.accessToken,
apiAddress: config.apiAddr,
platformID: config.platformID,
userID: config.userID,
wsAddress: config.wsAddr,
applicationType: config.applicationType,
isCrm: config.isCrm,
});
}
}, [config]);
return (_jsx(ChatContext.Provider, { value: {
user,
connectStatus,
syncStatus,
getSelfUserInfo,
updateConnectStatus,
updateSyncStatus,
}, children: _jsx(ConfigProvider, { getPopupContainer: (triggerNode) => document.body, children: _jsx(QueryClientProvider, { client: queryClient, children: _jsx(MainLayout, { children: children }) }) }) }));
};