@droppii-org/chat-sdk
Version:
Droppii React Chat SDK
45 lines (44 loc) • 1.9 kB
JavaScript
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]);
};