UNPKG

@droppii-org/chat-sdk

Version:

Droppii React Chat SDK

45 lines (44 loc) 1.9 kB
import { useCallback, useEffect } from "react"; import useConversationStore from "../../store/conversation"; import { SessionType } from "@openim/wasm-client-sdk"; import useUsersInfoStore from "../../store/usersInfo"; import { DChatSDK } from "../../constants/sdk"; export const extractUserIdsFromConversations = (conversations) => { const ids = conversations.reduce((acc, c) => { var _a; if (c.conversationType === SessionType.Single) { acc.push(c.userID); } else if (c.conversationType === SessionType.Group) { const exConversationInfo = JSON.parse(c.ex || "{}"); const sessionInfo = exConversationInfo === null || exConversationInfo === void 0 ? void 0 : exConversationInfo.sessionInfo; if ((_a = sessionInfo === null || sessionInfo === void 0 ? void 0 : sessionInfo.data) === null || _a === void 0 ? void 0 : _a.ownerId) { acc.push(sessionInfo.data.ownerId); } } return acc; }, []); return Array.from(new Set(ids)); }; export const useSyncUsersInfo = () => { const conversationList = useConversationStore((state) => state.conversationList); const syncUsersInfo = useCallback(() => { const userIds = extractUserIdsFromConversations(conversationList); const { usersInfo, upsertUsers } = useUsersInfoStore.getState(); const needFetch = userIds.filter((id) => !usersInfo[id]); if (needFetch.length > 0) { DChatSDK.getUsersInfo(needFetch) .then(({ data }) => { upsertUsers(data); }) .catch((error) => { console.error("Error fetching users info:", error); }); } }, [conversationList]); useEffect(() => { if (!conversationList) return; syncUsersInfo(); }, [conversationList]); };