@droppii-org/chat-sdk
Version:
Droppii React Chat SDK
70 lines (69 loc) • 3.76 kB
JavaScript
import { SessionType } from "@openim/wasm-client-sdk";
import { useCallback, useEffect, useMemo, useState } from "react";
import { DChatSDK } from "../../constants/sdk";
import useUsersInfoStore from "../../store/usersInfo";
import { extractUserIdsFromConversations } from "../user/useUsersInfo";
import { useChatContext } from "../../context/ChatContext";
export const markConversationMessageAsRead = (conversationId) => {
if (!conversationId)
return;
DChatSDK.markConversationMessageAsRead(conversationId)
.then()
.catch(({ errCode, errMsg }) => {
console.error("markConversationMessageAsRead", errCode, errMsg);
});
};
export const useConversationDetail = ({ sourceID, sessionType, }) => {
const [conversationDetail, setConversationDetail] = useState(null);
const getConversationDetail = useCallback(async () => {
DChatSDK.getOneConversation({
sourceID,
sessionType,
})
.then(({ data }) => {
setConversationDetail(data);
})
.catch((err) => {
console.error("getOneConversation", err);
});
}, [sourceID, sessionType]);
useEffect(() => {
getConversationDetail();
}, [getConversationDetail]);
return {
conversationDetail,
};
};
export const useConversationDisplayData = (conversation) => {
const { user } = useChatContext();
const usersInfo = useUsersInfoStore((state) => state.usersInfo);
const userInfo = useMemo(() => {
var _a;
if (!conversation)
return null;
const userId = (_a = extractUserIdsFromConversations([conversation])) === null || _a === void 0 ? void 0 : _a[0];
return usersInfo === null || usersInfo === void 0 ? void 0 : usersInfo[userId];
}, [conversation, usersInfo]);
const conversationDisplayData = useMemo(() => {
var _a, _b, _c, _d, _e;
if (!conversation)
return null;
const exConversationInfo = JSON.parse(conversation.ex || "{}");
const sessionInfo = exConversationInfo === null || exConversationInfo === void 0 ? void 0 : exConversationInfo.sessionInfo;
const isSupportGroup = conversation.conversationType === SessionType.Group &&
!!(sessionInfo === null || sessionInfo === void 0 ? void 0 : sessionInfo.data);
const isOwnerGroup = isSupportGroup && ((_a = sessionInfo === null || sessionInfo === void 0 ? void 0 : sessionInfo.data) === null || _a === void 0 ? void 0 : _a.ownerId) === (user === null || user === void 0 ? void 0 : user.userID);
const exUserInfo = JSON.parse((userInfo === null || userInfo === void 0 ? void 0 : userInfo.ex) || "{}");
return {
avatar: isSupportGroup && !isOwnerGroup
? userInfo === null || userInfo === void 0 ? void 0 : userInfo.faceURL
: conversation === null || conversation === void 0 ? void 0 : conversation.faceURL,
displayName: isSupportGroup && !isOwnerGroup
? `${userInfo === null || userInfo === void 0 ? void 0 : userInfo.nickname}${((_c = (_b = exUserInfo === null || exUserInfo === void 0 ? void 0 : exUserInfo.userInfo) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.username)
? ` (${(_e = (_d = exUserInfo === null || exUserInfo === void 0 ? void 0 : exUserInfo.userInfo) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.username})`
: ""}`
: (conversation === null || conversation === void 0 ? void 0 : conversation.showName) || "",
};
}, [conversation, userInfo]);
return Object.assign({}, conversationDisplayData);
};