@droppii-org/chat-sdk 0.1.61 → 0.1.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/conversation-detail/ConversationMessageList.d.ts.map +1 -1
- package/dist/components/conversation-detail/ConversationMessageList.js +7 -9
- package/dist/components/conversation-detail/PinLimitModal.d.ts +2 -1
- package/dist/components/conversation-detail/PinLimitModal.d.ts.map +1 -1
- package/dist/components/conversation-detail/PinLimitModal.js +2 -5
- package/dist/components/conversation-detail/PinnedMessageItem.d.ts +11 -0
- package/dist/components/conversation-detail/PinnedMessageItem.d.ts.map +1 -0
- package/dist/components/conversation-detail/PinnedMessageItem.js +44 -0
- package/dist/components/conversation-detail/PinnedMessagesPanel.d.ts +7 -0
- package/dist/components/conversation-detail/PinnedMessagesPanel.d.ts.map +1 -0
- package/dist/components/conversation-detail/PinnedMessagesPanel.js +51 -0
- package/dist/components/message/item/renderMessageContent.d.ts +4 -0
- package/dist/components/message/item/renderMessageContent.d.ts.map +1 -0
- package/dist/components/message/item/renderMessageContent.js +43 -0
- package/dist/constants/index.d.ts +0 -1
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +0 -1
- package/dist/hooks/global/useGlobalEvent.d.ts.map +1 -1
- package/dist/hooks/global/useGlobalEvent.js +16 -0
- package/dist/hooks/message/useMessage.d.ts +1 -1
- package/dist/hooks/message/useMessage.d.ts.map +1 -1
- package/dist/hooks/message/useMessage.js +19 -8
- package/dist/hooks/message/usePinnedMessages.d.ts +1 -0
- package/dist/hooks/message/usePinnedMessages.d.ts.map +1 -1
- package/dist/hooks/message/usePinnedMessages.js +4 -2
- package/dist/store/conversation.d.ts.map +1 -1
- package/dist/store/conversation.js +15 -8
- package/dist/store/type.d.ts +2 -1
- package/dist/store/type.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationMessageList.d.ts","sourceRoot":"","sources":["../../../src/components/conversation-detail/ConversationMessageList.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ConversationMessageList.d.ts","sourceRoot":"","sources":["../../../src/components/conversation-detail/ConversationMessageList.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAiBzE,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED,QAAA,MAAM,uBAAuB,GAAI,gBAAgB,4BAA4B,4CAwK5E,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
|
|
@@ -15,7 +15,6 @@ import { isGroupChat as resolveIsGroupChat } from "../../utils/conversation";
|
|
|
15
15
|
import emitter from "../../utils/events";
|
|
16
16
|
import MessageItem from "../../components/message/item";
|
|
17
17
|
import PinLimitModal from "./PinLimitModal";
|
|
18
|
-
import { MAX_PINNED_MESSAGES_PER_CONVERSATION } from "../../constants";
|
|
19
18
|
const ConversationMessageList = ({ bottomSlot }) => {
|
|
20
19
|
const { t } = useTranslation("conversation-inbox");
|
|
21
20
|
const { t: tCommon } = useTranslation();
|
|
@@ -28,7 +27,7 @@ const ConversationMessageList = ({ bottomSlot }) => {
|
|
|
28
27
|
const setSearchClientMsgID = useConversationStore((state) => state.setSearchClientMsgID);
|
|
29
28
|
const conversationId = selectedConversationId || (conversation === null || conversation === void 0 ? void 0 : conversation.conversationID) || "";
|
|
30
29
|
const isGroupChat = conversation ? resolveIsGroupChat(conversation) : false;
|
|
31
|
-
const messageController = useMessage(conversationId, searchClientMsgID);
|
|
30
|
+
const messageController = useMessage(conversationId, searchClientMsgID, true, true);
|
|
32
31
|
const { scrollRef, loadMoreOldMessage, handleInfiniteScroll, scrollToBottomIfAtBottom, scrollToMessage, } = useMessageListScroll(Object.assign({ conversationId, userId: (user === null || user === void 0 ? void 0 : user.userID) || authUserID }, messageController));
|
|
33
32
|
const { loadState, moreOldLoading } = messageController;
|
|
34
33
|
const isMessageLoading = !conversationId || loadState.initLoading;
|
|
@@ -36,9 +35,10 @@ const ConversationMessageList = ({ bottomSlot }) => {
|
|
|
36
35
|
const closeToolbox = useCallback(() => setOpenToolboxMessageId(null), []);
|
|
37
36
|
const { pinMessage, unpinMessage } = usePinMessage();
|
|
38
37
|
const pinnedTotalCount = useConversationStore((state) => state.pinnedTotalCount);
|
|
38
|
+
const pinnedRemainingCount = useConversationStore((state) => state.pinnedRemainingCount);
|
|
39
39
|
const [pinLimitModalOpen, setPinLimitModalOpen] = useState(false);
|
|
40
40
|
const handlePinMessage = useCallback(async (message) => {
|
|
41
|
-
if (pinnedTotalCount
|
|
41
|
+
if (pinnedRemainingCount <= 0 && pinnedTotalCount > 0) {
|
|
42
42
|
setPinLimitModalOpen(true);
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
@@ -46,18 +46,16 @@ const ConversationMessageList = ({ bottomSlot }) => {
|
|
|
46
46
|
await pinMessage(conversationId, message.clientMsgID);
|
|
47
47
|
toastMessage.success(tCommon("pin_message_success"));
|
|
48
48
|
}
|
|
49
|
-
catch (
|
|
50
|
-
console.error("pinMessage failed", error);
|
|
49
|
+
catch (_a) {
|
|
51
50
|
toastMessage.error(tCommon("pin_message_failed"));
|
|
52
51
|
}
|
|
53
|
-
}, [conversationId, pinMessage, pinnedTotalCount, tCommon]);
|
|
52
|
+
}, [conversationId, pinMessage, pinnedRemainingCount, pinnedTotalCount, tCommon]);
|
|
54
53
|
const handleUnpinMessage = useCallback(async (message) => {
|
|
55
54
|
try {
|
|
56
55
|
await unpinMessage(conversationId, message.clientMsgID);
|
|
57
56
|
toastMessage.success(tCommon("unpin_message_success"));
|
|
58
57
|
}
|
|
59
|
-
catch (
|
|
60
|
-
console.error("unpinMessage failed", error);
|
|
58
|
+
catch (_a) {
|
|
61
59
|
toastMessage.error(tCommon("unpin_message_failed"));
|
|
62
60
|
}
|
|
63
61
|
}, [conversationId, unpinMessage, tCommon]);
|
|
@@ -82,6 +80,6 @@ const ConversationMessageList = ({ bottomSlot }) => {
|
|
|
82
80
|
target: scrollRef,
|
|
83
81
|
enable: !!openToolboxMessageId,
|
|
84
82
|
});
|
|
85
|
-
return (_jsxs("div", { "data-testid": "conversation-message-list", className: "relative flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden bg-white", children: [isMessageLoading ? (_jsx("div", { className: "flex flex-1 items-center justify-center py-12", children: _jsx(Spin, {}) })) : (_jsxs(MessageInfiniteScroll, { scrollRef: scrollRef, scrollableTargetId: "scrollableConversationMessagesDiv", loadState: loadState, moreOldLoading: moreOldLoading, onLoadMoreOld: loadMoreOldMessage, onScroll: handleInfiniteScroll, containerClassName: "h-full", empty: _jsx("div", { className: "flex flex-1 items-center justify-center py-12", children: _jsx(Empty, { description: t("empty.no_messages") }) }), children: [bottomSlot, loadState.messageList.map((message, index, array) => (_jsx(MessageItem, { message: message, allMessages: array, isGroupChat: isGroupChat, forceHideTip: index === 0 && !!bottomSlot, contextMenuOpen: openToolboxMessageId === message.clientMsgID, onContextMenuOpenChange: (open) => setOpenToolboxMessageId(open ? message.clientMsgID : null), onQuoteMessage: setQuotedMessage, onRevokeMessage: closeToolbox, onPressQuoteMessage: onPressQuoteMessage, onPinMessage: handlePinMessage, onUnpinMessage: handleUnpinMessage, enableLongPress: true }, message.clientMsgID)))] })), _jsx(PinLimitModal, { open: pinLimitModalOpen, onClose: () => setPinLimitModalOpen(false) })] }));
|
|
83
|
+
return (_jsxs("div", { "data-testid": "conversation-message-list", className: "relative flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden bg-white", children: [isMessageLoading ? (_jsx("div", { className: "flex flex-1 items-center justify-center py-12", children: _jsx(Spin, {}) })) : (_jsxs(MessageInfiniteScroll, { scrollRef: scrollRef, scrollableTargetId: "scrollableConversationMessagesDiv", loadState: loadState, moreOldLoading: moreOldLoading, onLoadMoreOld: loadMoreOldMessage, onScroll: handleInfiniteScroll, containerClassName: "h-full", empty: _jsx("div", { className: "flex flex-1 items-center justify-center py-12", children: _jsx(Empty, { description: t("empty.no_messages") }) }), children: [bottomSlot, loadState.messageList.map((message, index, array) => (_jsx(MessageItem, { message: message, allMessages: array, isGroupChat: isGroupChat, forceHideTip: index === 0 && !!bottomSlot, contextMenuOpen: openToolboxMessageId === message.clientMsgID, onContextMenuOpenChange: (open) => setOpenToolboxMessageId(open ? message.clientMsgID : null), onQuoteMessage: setQuotedMessage, onRevokeMessage: closeToolbox, onPressQuoteMessage: onPressQuoteMessage, onPinMessage: handlePinMessage, onUnpinMessage: handleUnpinMessage, enableLongPress: true }, message.clientMsgID)))] })), _jsx(PinLimitModal, { open: pinLimitModalOpen, max: pinnedTotalCount, onClose: () => setPinLimitModalOpen(false) })] }));
|
|
86
84
|
};
|
|
87
85
|
export default ConversationMessageList;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
interface PinLimitModalProps {
|
|
2
2
|
open: boolean;
|
|
3
|
+
max: number;
|
|
3
4
|
onClose: () => void;
|
|
4
5
|
}
|
|
5
|
-
declare const PinLimitModal: ({ open, onClose }: PinLimitModalProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
declare const PinLimitModal: ({ open, max, onClose }: PinLimitModalProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
7
|
export default PinLimitModal;
|
|
7
8
|
//# sourceMappingURL=PinLimitModal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PinLimitModal.d.ts","sourceRoot":"","sources":["../../../src/components/conversation-detail/PinLimitModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PinLimitModal.d.ts","sourceRoot":"","sources":["../../../src/components/conversation-detail/PinLimitModal.tsx"],"names":[],"mappings":"AAGA,UAAU,kBAAkB;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,aAAa,GAAI,wBAAwB,kBAAkB,4CAkChE,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Modal, Button } from "antd";
|
|
3
3
|
import { useTranslation } from "react-i18next";
|
|
4
|
-
|
|
5
|
-
const PinLimitModal = ({ open, onClose }) => {
|
|
4
|
+
const PinLimitModal = ({ open, max, onClose }) => {
|
|
6
5
|
const { t } = useTranslation();
|
|
7
|
-
return (_jsx(Modal, { open: open, onCancel: onClose, footer: null, centered: true, width: 400, children: _jsxs("div", { className: "flex flex-col gap-2 pt-2", role: "alertdialog", "aria-label": t("pin_limit_modal_title"), children: [_jsx("p", { className: "text-lg font-semibold text-gray-900", children: t("pin_limit_modal_title") }), _jsx("p", { className: "text-base text-gray-600", children: t("pin_limit_modal_description", {
|
|
8
|
-
max: MAX_PINNED_MESSAGES_PER_CONVERSATION,
|
|
9
|
-
}) }), _jsx(Button, { type: "primary", size: "large", block: true, className: "mt-2 !border-primary-400 !bg-primary-400 !text-white hover:!border-primary-300 hover:!bg-primary-300", onClick: onClose, children: t("pin_limit_modal_confirm") })] }) }));
|
|
6
|
+
return (_jsx(Modal, { open: open, onCancel: onClose, footer: null, centered: true, width: 400, children: _jsxs("div", { className: "flex flex-col gap-2 pt-2", role: "alertdialog", "aria-label": t("pin_limit_modal_title"), children: [_jsx("p", { className: "text-lg font-semibold text-gray-900", children: t("pin_limit_modal_title") }), _jsx("p", { className: "text-base text-gray-600", children: t("pin_limit_modal_description", { max }) }), _jsx(Button, { type: "primary", size: "large", block: true, className: "mt-2 !border-primary-400 !bg-primary-400 !text-white hover:!border-primary-300 hover:!bg-primary-300", onClick: onClose, children: t("pin_limit_modal_confirm") })] }) }));
|
|
10
7
|
};
|
|
11
8
|
export default PinLimitModal;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MessageItem as MessageItemType } from "@openim/wasm-client-sdk";
|
|
2
|
+
interface PinnedMessageItemProps {
|
|
3
|
+
message: MessageItemType;
|
|
4
|
+
contextMenuOpen: boolean;
|
|
5
|
+
onContextMenuOpenChange: (open: boolean) => void;
|
|
6
|
+
onUnpin: (message: MessageItemType) => void;
|
|
7
|
+
onJump: (message: MessageItemType) => void;
|
|
8
|
+
}
|
|
9
|
+
declare const PinnedMessageItem: ({ message, contextMenuOpen, onContextMenuOpenChange, onUnpin, onJump, }: PinnedMessageItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export default PinnedMessageItem;
|
|
11
|
+
//# sourceMappingURL=PinnedMessageItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PinnedMessageItem.d.ts","sourceRoot":"","sources":["../../../src/components/conversation-detail/PinnedMessageItem.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAczE,UAAU,sBAAsB;IAC9B,OAAO,EAAE,eAAe,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,OAAO,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;CAC5C;AAED,QAAA,MAAM,iBAAiB,GAAI,yEAMxB,sBAAsB,4CA2FxB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useRef } from "react";
|
|
4
|
+
import clsx from "clsx";
|
|
5
|
+
import { Dropdown } from "antd";
|
|
6
|
+
import { useLongPress } from "ahooks";
|
|
7
|
+
import { useTranslation } from "react-i18next";
|
|
8
|
+
import { Icon } from "../../components/icon";
|
|
9
|
+
import MessageBubble from "../../components/message/item/MessageBubble";
|
|
10
|
+
import { renderBubbleContent } from "../../components/message/item/renderMessageContent";
|
|
11
|
+
import { buildMessageToolboxMenuItems, MessageToolboxActionKey, MESSAGE_TOOLBOX_OVERLAY_CLASSNAME, } from "../../components/message/toolbox";
|
|
12
|
+
import useAuthStore from "../../store/auth";
|
|
13
|
+
const LONG_PRESS_DELAY = 500;
|
|
14
|
+
const PinnedMessageItem = ({ message, contextMenuOpen, onContextMenuOpenChange, onUnpin, onJump, }) => {
|
|
15
|
+
const { t } = useTranslation();
|
|
16
|
+
const userID = useAuthStore((state) => state.userID);
|
|
17
|
+
const isMine = (message === null || message === void 0 ? void 0 : message.sendID) === userID;
|
|
18
|
+
const bubbleWrapperRef = useRef(null);
|
|
19
|
+
useLongPress(() => onContextMenuOpenChange(true), bubbleWrapperRef, {
|
|
20
|
+
delay: LONG_PRESS_DELAY,
|
|
21
|
+
});
|
|
22
|
+
const contextMenuItems = buildMessageToolboxMenuItems([
|
|
23
|
+
{
|
|
24
|
+
key: MessageToolboxActionKey.UNPIN,
|
|
25
|
+
label: t("context_menu_unpin"),
|
|
26
|
+
icon: "thumbtack-off-o",
|
|
27
|
+
onClick: () => onUnpin(message),
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
key: MessageToolboxActionKey.VIEW_ORIGINAL,
|
|
31
|
+
label: t("context_menu_view_original"),
|
|
32
|
+
icon: "chat-square-o",
|
|
33
|
+
onClick: () => onJump(message),
|
|
34
|
+
},
|
|
35
|
+
]);
|
|
36
|
+
const bubbleNode = (_jsx(MessageBubble, { isMine: isMine, senderName: message === null || message === void 0 ? void 0 : message.senderNickname, content: renderBubbleContent(message) }));
|
|
37
|
+
const pinnedBadgeNode = (_jsx("span", { "data-testid": "pinned-item-badge", className: clsx("absolute -top-2.5 z-[1] flex h-[22px] w-[26px] items-center justify-center rounded-full border border-white bg-gray-25", isMine ? "left-0" : "right-0"), children: _jsx(Icon, { icon: "thumbtack-b", size: 12, className: "text-primary-400" }) }));
|
|
38
|
+
const unpinButton = (_jsx("button", { type: "button", "data-testid": "pinned-item-unpin", "aria-label": t("context_menu_unpin"), onClick: (event) => {
|
|
39
|
+
event.stopPropagation();
|
|
40
|
+
onUnpin(message);
|
|
41
|
+
}, className: "flex h-7 w-7 shrink-0 items-center justify-center self-center rounded-full bg-gray-25 text-gray-600", children: _jsx(Icon, { icon: "thumbtack-off-o", size: 16 }) }));
|
|
42
|
+
return (_jsxs("div", { className: clsx("flex items-end gap-2 px-3 pb-4", isMine ? "justify-end" : "justify-start"), children: [isMine && unpinButton, _jsx(Dropdown, { menu: { items: contextMenuItems }, trigger: ["contextMenu"], open: contextMenuOpen, onOpenChange: onContextMenuOpenChange, overlayClassName: MESSAGE_TOOLBOX_OVERLAY_CLASSNAME, children: _jsxs("div", { ref: bubbleWrapperRef, className: "relative min-w-0 cursor-pointer", onClick: () => onJump(message), children: [bubbleNode, pinnedBadgeNode] }) }), !isMine && unpinButton] }));
|
|
43
|
+
};
|
|
44
|
+
export default PinnedMessageItem;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface PinnedMessagesPanelProps {
|
|
2
|
+
open: boolean;
|
|
3
|
+
onClose: () => void;
|
|
4
|
+
}
|
|
5
|
+
declare const PinnedMessagesPanel: ({ open, onClose }: PinnedMessagesPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export default PinnedMessagesPanel;
|
|
7
|
+
//# sourceMappingURL=PinnedMessagesPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PinnedMessagesPanel.d.ts","sourceRoot":"","sources":["../../../src/components/conversation-detail/PinnedMessagesPanel.tsx"],"names":[],"mappings":"AAYA,UAAU,wBAAwB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,mBAAmB,GAAI,mBAAmB,wBAAwB,4CAkGvE,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { Drawer, Button, message as toastMessage } from "antd";
|
|
5
|
+
import { useTranslation } from "react-i18next";
|
|
6
|
+
import { Icon } from "../../components/icon";
|
|
7
|
+
import useConversationStore from "../../store/conversation";
|
|
8
|
+
import { usePinMessage } from "../../hooks/message/usePinMessage";
|
|
9
|
+
import { emit } from "../../utils/events";
|
|
10
|
+
import PinnedMessageItem from "./PinnedMessageItem";
|
|
11
|
+
const PinnedMessagesPanel = ({ open, onClose }) => {
|
|
12
|
+
const { t } = useTranslation();
|
|
13
|
+
const conversation = useConversationStore((state) => state.conversationData);
|
|
14
|
+
const selectedConversationId = useConversationStore((state) => state.selectedConversationId);
|
|
15
|
+
const pinnedMessageList = useConversationStore((state) => state.pinnedMessageList);
|
|
16
|
+
const setSearchClientMsgID = useConversationStore((state) => state.setSearchClientMsgID);
|
|
17
|
+
const conversationId = selectedConversationId || (conversation === null || conversation === void 0 ? void 0 : conversation.conversationID) || "";
|
|
18
|
+
const { unpinMessage } = usePinMessage();
|
|
19
|
+
const [openContextMenuId, setOpenContextMenuId] = useState(null);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (open && pinnedMessageList.length === 0) {
|
|
22
|
+
onClose();
|
|
23
|
+
}
|
|
24
|
+
}, [open, pinnedMessageList.length, onClose]);
|
|
25
|
+
const handleUnpin = async (message) => {
|
|
26
|
+
setOpenContextMenuId(null);
|
|
27
|
+
try {
|
|
28
|
+
await unpinMessage(conversationId, message.clientMsgID);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.error("unpinMessage failed", error);
|
|
32
|
+
toastMessage.error(t("unpin_message_failed"));
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const handleJump = (message) => {
|
|
36
|
+
setOpenContextMenuId(null);
|
|
37
|
+
onClose();
|
|
38
|
+
setSearchClientMsgID(message.clientMsgID);
|
|
39
|
+
emit("CHAT_LIST_SCROLL_TO_MESSAGE", message.clientMsgID);
|
|
40
|
+
};
|
|
41
|
+
return (_jsx(Drawer, { open: open, onClose: onClose, placement: "bottom", closeIcon: false, height: "90%", styles: {
|
|
42
|
+
body: { padding: 0 },
|
|
43
|
+
mask: { backgroundColor: "rgba(0, 0, 0, 0.8)" },
|
|
44
|
+
content: {
|
|
45
|
+
borderTopLeftRadius: 16,
|
|
46
|
+
borderTopRightRadius: 16,
|
|
47
|
+
overflow: "hidden",
|
|
48
|
+
},
|
|
49
|
+
}, getContainer: false, children: _jsxs("div", { className: "flex h-full flex-col bg-white", children: [_jsxs("div", { className: "flex items-center gap-4 border-b border-gray-25 px-3 py-4", children: [_jsx("span", { className: "flex-1 text-lg font-bold text-gray-900", children: t("pinned_panel_title") }), _jsx(Button, { type: "text", shape: "default", className: "h-6 w-6 p-0 text-gray-900", onClick: onClose, "aria-label": t("pinned_panel_title"), children: _jsx(Icon, { icon: "close-b", size: 24 }) })] }), _jsxs("div", { className: "flex flex-1 flex-col gap-3 overflow-y-auto py-3", children: [_jsx("p", { className: "px-3 text-sm leading-[160%] text-gray-600", children: t("pinned_panel_hint") }), pinnedMessageList.map((message) => (_jsx(PinnedMessageItem, { message: message, contextMenuOpen: openContextMenuId === message.clientMsgID, onContextMenuOpenChange: (isOpen) => setOpenContextMenuId(isOpen ? message.clientMsgID : null), onUnpin: handleUnpin, onJump: handleJump }, message.clientMsgID)))] })] }) }));
|
|
50
|
+
};
|
|
51
|
+
export default PinnedMessagesPanel;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { MessageItem as MessageItemType } from "@openim/wasm-client-sdk";
|
|
2
|
+
export declare const renderMessageByType: (message: MessageItemType) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export declare const renderBubbleContent: (message: MessageItemType, onPressQuoteMessage?: (clientMsgID: string) => void) => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=renderMessageContent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderMessageContent.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/renderMessageContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,eAAe,EAAe,MAAM,yBAAyB,CAAC;AAWtF,eAAO,MAAM,mBAAmB,GAAI,SAAS,eAAe,4CAuB3D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,SAAS,eAAe,EACxB,sBAAsB,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,4CAwBpD,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { MessageType } from "@openim/wasm-client-sdk";
|
|
3
|
+
import TextMessageItem from "./TextMessage";
|
|
4
|
+
import ImageMessageItem from "./ImageMessage";
|
|
5
|
+
import FileMessageItem from "./FileMessage";
|
|
6
|
+
import VideoMessageItem from "./VideoMessage";
|
|
7
|
+
import MergeImageMessageItem from "./MergeImageMessage";
|
|
8
|
+
import UrlTextMessageItem from "./UrlTextMessage";
|
|
9
|
+
import RevokeMessageItem from "./RevokeMessage";
|
|
10
|
+
import QuoteMessageItem from "./QuoteMessage";
|
|
11
|
+
import SystemLogMessageItem from "./SystemLogMessage";
|
|
12
|
+
export const renderMessageByType = (message) => {
|
|
13
|
+
switch (message === null || message === void 0 ? void 0 : message.contentType) {
|
|
14
|
+
case MessageType.TextMessage:
|
|
15
|
+
case MessageType.QuoteMessage:
|
|
16
|
+
return _jsx(TextMessageItem, { message: message });
|
|
17
|
+
case MessageType.PictureMessage:
|
|
18
|
+
return _jsx(ImageMessageItem, { message: message });
|
|
19
|
+
case MessageType.FileMessage:
|
|
20
|
+
return _jsx(FileMessageItem, { message: message });
|
|
21
|
+
case MessageType.VideoMessage:
|
|
22
|
+
return _jsx(VideoMessageItem, { message: message });
|
|
23
|
+
case MessageType.MergeMessage:
|
|
24
|
+
return _jsx(MergeImageMessageItem, { message: message });
|
|
25
|
+
case MessageType.UrlTextMessage:
|
|
26
|
+
return _jsx(UrlTextMessageItem, { message: message });
|
|
27
|
+
case MessageType.LogTextMessage:
|
|
28
|
+
return _jsx(SystemLogMessageItem, { message: message });
|
|
29
|
+
case MessageType.RevokeMessage:
|
|
30
|
+
return _jsx(RevokeMessageItem, {});
|
|
31
|
+
default:
|
|
32
|
+
return _jsx(TextMessageItem, { message: message });
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
export const renderBubbleContent = (message, onPressQuoteMessage) => {
|
|
36
|
+
if (message === null || message === void 0 ? void 0 : message.quoteElem) {
|
|
37
|
+
return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(QuoteMessageItem, { message: message, onPressQuoteMessage: onPressQuoteMessage }), renderMessageByType(message)] }));
|
|
38
|
+
}
|
|
39
|
+
if ((message === null || message === void 0 ? void 0 : message.contentType) === MessageType.MergeMessage) {
|
|
40
|
+
return (_jsxs(_Fragment, { children: [_jsx(MergeImageMessageItem, { message: message }), (message === null || message === void 0 ? void 0 : message.textElem) && _jsx(TextMessageItem, { message: message })] }));
|
|
41
|
+
}
|
|
42
|
+
return renderMessageByType(message);
|
|
43
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,qFAC2D,CAAC;AAErF,eAAO,MAAM,SAAS;;;;;CAKZ,CAAC;AAEX,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,uBAAuB,sBAAsB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,qFAC2D,CAAC;AAErF,eAAO,MAAM,SAAS;;;;;CAKZ,CAAC;AAEX,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,uBAAuB,sBAAsB,CAAC"}
|
package/dist/constants/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGlobalEvent.d.ts","sourceRoot":"","sources":["../../../src/hooks/global/useGlobalEvent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useGlobalEvent.d.ts","sourceRoot":"","sources":["../../../src/hooks/global/useGlobalEvent.ts"],"names":[],"mappings":"AAmCA,eAAO,MAAM,cAAc,YAkV1B,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { DChatSDK } from "../../constants/sdk";
|
|
|
3
3
|
import { CbEvents, MessageType, SessionType, } from "@openim/wasm-client-sdk";
|
|
4
4
|
import { BusinessNotificationType, ConnectStatus, CustomType, SyncStatus, } from "../../types/chat";
|
|
5
5
|
import { pushNewMessage, updateOneMessage } from "../../hooks/message/useMessage";
|
|
6
|
+
import { fetchPinnedMessages } from "../../hooks/message/usePinnedMessages";
|
|
6
7
|
import { useChatContext } from "../../context/ChatContext";
|
|
7
8
|
import useConversationStore from "../../store/conversation";
|
|
8
9
|
import useAuthStore from "../../store/auth";
|
|
@@ -49,6 +50,19 @@ export const useGlobalEvent = () => {
|
|
|
49
50
|
},
|
|
50
51
|
});
|
|
51
52
|
};
|
|
53
|
+
const messagePinnedHandler = ({ data }) => {
|
|
54
|
+
updateOneMessage({
|
|
55
|
+
clientMsgID: data.clientMsgID,
|
|
56
|
+
isPinned: data.isPinned,
|
|
57
|
+
pinnedByUserID: data.operatorUserID,
|
|
58
|
+
pinnedTime: data.pinnedTime,
|
|
59
|
+
});
|
|
60
|
+
const { selectedConversationId, conversationData } = useConversationStore.getState();
|
|
61
|
+
const currentConversationId = selectedConversationId || (conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID);
|
|
62
|
+
if (currentConversationId === data.conversationID) {
|
|
63
|
+
void fetchPinnedMessages(data.conversationID);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
52
66
|
const inCurrentConversation = (newServerMsg) => {
|
|
53
67
|
const selectedSourceId = useConversationStore.getState().selectedSourceId;
|
|
54
68
|
switch (newServerMsg.sessionType) {
|
|
@@ -203,6 +217,7 @@ export const useGlobalEvent = () => {
|
|
|
203
217
|
// message
|
|
204
218
|
DChatSDK.on(CbEvents.OnRecvNewMessages, newMessageHandler);
|
|
205
219
|
DChatSDK.on(CbEvents.OnNewRecvMessageRevoked, revokedMessageHandler);
|
|
220
|
+
DChatSDK.on(CbEvents.OnRecvMessagePinned, messagePinnedHandler);
|
|
206
221
|
// conversation
|
|
207
222
|
DChatSDK.on(CbEvents.OnConversationChanged, conversationChangeHandler);
|
|
208
223
|
DChatSDK.on(CbEvents.OnNewConversation, newConversationHandler);
|
|
@@ -226,6 +241,7 @@ export const useGlobalEvent = () => {
|
|
|
226
241
|
DChatSDK.off(CbEvents.OnSyncServerFailed, syncFailedHandler);
|
|
227
242
|
// message
|
|
228
243
|
DChatSDK.off(CbEvents.OnRecvNewMessages, newMessageHandler);
|
|
244
|
+
DChatSDK.off(CbEvents.OnRecvMessagePinned, messagePinnedHandler);
|
|
229
245
|
// conversation
|
|
230
246
|
DChatSDK.off(CbEvents.OnConversationChanged, conversationChangeHandler);
|
|
231
247
|
DChatSDK.off(CbEvents.OnNewConversation, newConversationHandler);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MessageItem, MessageType } from "@openim/wasm-client-sdk";
|
|
2
2
|
export declare const visibleTypeMessage: MessageType[];
|
|
3
|
-
export declare const useMessage: (conversationId?: string, searchClientMsgID?: string, enabled?: boolean) => {
|
|
3
|
+
export declare const useMessage: (conversationId?: string, searchClientMsgID?: string, enabled?: boolean, useAppHistory?: boolean) => {
|
|
4
4
|
loadState: {
|
|
5
5
|
initLoading: boolean;
|
|
6
6
|
hasMoreOld: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,WAAW,EACX,WAAW,EAEZ,MAAM,yBAAyB,CAAC;AAUjC,eAAO,MAAM,kBAAkB,eAgB9B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,iBAAiB,MAAM,EACvB,oBAAoB,MAAM,EAC1B,iBAAc;;;;;
|
|
1
|
+
{"version":3,"file":"useMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,WAAW,EACX,WAAW,EAEZ,MAAM,yBAAyB,CAAC;AAUjC,eAAO,MAAM,kBAAkB,eAgB9B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,iBAAiB,MAAM,EACvB,oBAAoB,MAAM,EAC1B,iBAAc,EACd,uBAAqB;;;;;qBAeA,WAAW,EAAE;;;;;;qBAAb,WAAW,EAAE;;;;;;CA4RnC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,WAAW,SACpB,CAAC;AAChC,eAAO,MAAM,gBAAgB,GAAI,SAAS,WAAW,SACpB,CAAC;AAClC,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,SACf,CAAC;AAEtC,eAAO,MAAM,kBAAkB,GAC7B,aAAa,WAAW,EAAE,EAC1B,SAAS,WAAW,EACpB,WAAW,MAAM,GAAG,MAAM,KACzB,WAAW,GAAG,SAkBhB,CAAC"}
|
|
@@ -25,7 +25,7 @@ export const visibleTypeMessage = [
|
|
|
25
25
|
MessageType.RevokeMessage,
|
|
26
26
|
MessageType.LogTextMessage,
|
|
27
27
|
];
|
|
28
|
-
export const useMessage = (conversationId, searchClientMsgID, enabled = true) => {
|
|
28
|
+
export const useMessage = (conversationId, searchClientMsgID, enabled = true, useAppHistory = false) => {
|
|
29
29
|
const { connectStatus, syncStatus } = useChatContext();
|
|
30
30
|
const userID = useAuthStore((state) => state.userID);
|
|
31
31
|
const canLoad = enabled &&
|
|
@@ -54,7 +54,9 @@ export const useMessage = (conversationId, searchClientMsgID, enabled = true) =>
|
|
|
54
54
|
viewType: ViewType.History,
|
|
55
55
|
};
|
|
56
56
|
try {
|
|
57
|
-
const { data } =
|
|
57
|
+
const { data } = useAppHistory
|
|
58
|
+
? await DChatSDK.getAdvancedHistoryMessageListApp(params)
|
|
59
|
+
: await DChatSDK.getAdvancedHistoryMessageList(params);
|
|
58
60
|
if (conversationIdRef.current !== reqConversationID)
|
|
59
61
|
return;
|
|
60
62
|
setTimeout(() => {
|
|
@@ -82,14 +84,17 @@ export const useMessage = (conversationId, searchClientMsgID, enabled = true) =>
|
|
|
82
84
|
var _a, _b;
|
|
83
85
|
const reqConversationID = conversationId;
|
|
84
86
|
try {
|
|
85
|
-
const
|
|
87
|
+
const reverseParams = {
|
|
86
88
|
count: PAGE_SIZE.large,
|
|
87
89
|
startClientMsgID: loadMore
|
|
88
90
|
? ((_b = (_a = latestLoadState.current) === null || _a === void 0 ? void 0 : _a.messageList[0]) === null || _b === void 0 ? void 0 : _b.clientMsgID) || ""
|
|
89
91
|
: "",
|
|
90
92
|
conversationID: conversationId !== null && conversationId !== void 0 ? conversationId : "",
|
|
91
93
|
viewType: ViewType.Search,
|
|
92
|
-
}
|
|
94
|
+
};
|
|
95
|
+
const { data } = useAppHistory
|
|
96
|
+
? await DChatSDK.getAdvancedHistoryMessageListReverseApp(reverseParams)
|
|
97
|
+
: await DChatSDK.getAdvancedHistoryMessageListReverse(reverseParams);
|
|
93
98
|
if (conversationIdRef.current !== reqConversationID)
|
|
94
99
|
return;
|
|
95
100
|
setTimeout(() => {
|
|
@@ -118,18 +123,24 @@ export const useMessage = (conversationId, searchClientMsgID, enabled = true) =>
|
|
|
118
123
|
if (!searchClientMsgID || !conversationId)
|
|
119
124
|
return;
|
|
120
125
|
const reqConversationID = conversationId;
|
|
121
|
-
const
|
|
126
|
+
const searchPrevParams = {
|
|
122
127
|
count: PAGE_SIZE.small,
|
|
123
128
|
startClientMsgID: searchClientMsgID,
|
|
124
129
|
conversationID: conversationId !== null && conversationId !== void 0 ? conversationId : "",
|
|
125
130
|
viewType: ViewType.History,
|
|
126
|
-
}
|
|
127
|
-
const
|
|
131
|
+
};
|
|
132
|
+
const searchNextParams = {
|
|
128
133
|
count: PAGE_SIZE.small,
|
|
129
134
|
startClientMsgID: searchClientMsgID,
|
|
130
135
|
conversationID: conversationId !== null && conversationId !== void 0 ? conversationId : "",
|
|
131
136
|
viewType: ViewType.Search,
|
|
132
|
-
}
|
|
137
|
+
};
|
|
138
|
+
const { data: dataPrev } = useAppHistory
|
|
139
|
+
? await DChatSDK.getAdvancedHistoryMessageListApp(searchPrevParams)
|
|
140
|
+
: await DChatSDK.getAdvancedHistoryMessageList(searchPrevParams);
|
|
141
|
+
const { data: dataNext } = useAppHistory
|
|
142
|
+
? await DChatSDK.getAdvancedHistoryMessageListReverseApp(searchNextParams)
|
|
143
|
+
: await DChatSDK.getAdvancedHistoryMessageListReverse(searchNextParams);
|
|
133
144
|
const { data: dataCurrent } = await DChatSDK.findMessageList([
|
|
134
145
|
{
|
|
135
146
|
conversationID: conversationId !== null && conversationId !== void 0 ? conversationId : "",
|
|
@@ -2,5 +2,6 @@ export declare const fetchPinnedMessages: (conversationID: string) => Promise<vo
|
|
|
2
2
|
export declare const usePinnedMessages: (conversationID: string) => {
|
|
3
3
|
pinnedMessageList: import("@openim/wasm-client-sdk").MessageItem[];
|
|
4
4
|
pinnedTotalCount: number;
|
|
5
|
+
pinnedRemainingCount: number;
|
|
5
6
|
};
|
|
6
7
|
//# sourceMappingURL=usePinnedMessages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePinnedMessages.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/usePinnedMessages.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mBAAmB,GAAU,gBAAgB,MAAM,
|
|
1
|
+
{"version":3,"file":"usePinnedMessages.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/usePinnedMessages.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,mBAAmB,GAAU,gBAAgB,MAAM,kBAoB/D,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,gBAAgB,MAAM;;;;CAqBvD,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { DChatSDK } from "../../constants/sdk";
|
|
|
3
3
|
import { PAGE_SIZE } from "../../constants";
|
|
4
4
|
import useConversationStore from "../../store/conversation";
|
|
5
5
|
export const fetchPinnedMessages = async (conversationID) => {
|
|
6
|
-
var _a;
|
|
6
|
+
var _a, _b;
|
|
7
7
|
const { setPinnedMessageData } = useConversationStore.getState();
|
|
8
8
|
try {
|
|
9
9
|
const { data } = await DChatSDK.getPinnedMessageList({
|
|
@@ -12,7 +12,7 @@ export const fetchPinnedMessages = async (conversationID) => {
|
|
|
12
12
|
pageSize: PAGE_SIZE.small,
|
|
13
13
|
});
|
|
14
14
|
const sortedMessageList = [...(data.messageList || [])].sort((first, second) => (second.pinnedTime || 0) - (first.pinnedTime || 0));
|
|
15
|
-
setPinnedMessageData(sortedMessageList, data.totalCount || 0, (_a = data.
|
|
15
|
+
setPinnedMessageData(sortedMessageList, data.totalCount || 0, (_a = data.remainingPinCount) !== null && _a !== void 0 ? _a : 0, (_b = data.isEnd) !== null && _b !== void 0 ? _b : true);
|
|
16
16
|
}
|
|
17
17
|
catch (error) {
|
|
18
18
|
console.error("fetchPinnedMessages failed", error);
|
|
@@ -21,6 +21,7 @@ export const fetchPinnedMessages = async (conversationID) => {
|
|
|
21
21
|
export const usePinnedMessages = (conversationID) => {
|
|
22
22
|
const pinnedMessageList = useConversationStore((state) => state.pinnedMessageList);
|
|
23
23
|
const pinnedTotalCount = useConversationStore((state) => state.pinnedTotalCount);
|
|
24
|
+
const pinnedRemainingCount = useConversationStore((state) => state.pinnedRemainingCount);
|
|
24
25
|
useEffect(() => {
|
|
25
26
|
if (!conversationID)
|
|
26
27
|
return;
|
|
@@ -29,5 +30,6 @@ export const usePinnedMessages = (conversationID) => {
|
|
|
29
30
|
return {
|
|
30
31
|
pinnedMessageList,
|
|
31
32
|
pinnedTotalCount,
|
|
33
|
+
pinnedRemainingCount,
|
|
32
34
|
};
|
|
33
35
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/store/conversation.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAM3C,QAAA,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/store/conversation.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAM3C,QAAA,MAAM,oBAAoB,gFAoOvB,CAAC;AAEJ,eAAe,oBAAoB,CAAC"}
|
|
@@ -17,13 +17,17 @@ const useConversationStore = create((set, get) => ({
|
|
|
17
17
|
});
|
|
18
18
|
},
|
|
19
19
|
selectedConversationId: "",
|
|
20
|
-
setSelectedConversationId: (threadId) =>
|
|
21
|
-
selectedConversationId
|
|
22
|
-
quotedMessage: null,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
setSelectedConversationId: (threadId) => {
|
|
21
|
+
const isSameConversation = get().selectedConversationId === threadId;
|
|
22
|
+
set(Object.assign({ selectedConversationId: threadId, quotedMessage: null }, (isSameConversation
|
|
23
|
+
? {}
|
|
24
|
+
: {
|
|
25
|
+
pinnedMessageList: [],
|
|
26
|
+
pinnedTotalCount: 0,
|
|
27
|
+
pinnedRemainingCount: 0,
|
|
28
|
+
pinnedListIsEnd: false,
|
|
29
|
+
})));
|
|
30
|
+
},
|
|
27
31
|
selectedSourceId: "",
|
|
28
32
|
// conversation
|
|
29
33
|
conversationList: [],
|
|
@@ -163,6 +167,7 @@ const useConversationStore = create((set, get) => ({
|
|
|
163
167
|
quotedMessage: null,
|
|
164
168
|
pinnedMessageList: [],
|
|
165
169
|
pinnedTotalCount: 0,
|
|
170
|
+
pinnedRemainingCount: 0,
|
|
166
171
|
pinnedListIsEnd: false,
|
|
167
172
|
});
|
|
168
173
|
},
|
|
@@ -183,11 +188,13 @@ const useConversationStore = create((set, get) => ({
|
|
|
183
188
|
//pinned message
|
|
184
189
|
pinnedMessageList: [],
|
|
185
190
|
pinnedTotalCount: 0,
|
|
191
|
+
pinnedRemainingCount: 0,
|
|
186
192
|
pinnedListIsEnd: false,
|
|
187
|
-
setPinnedMessageData: (messageList, totalCount, isEnd) => {
|
|
193
|
+
setPinnedMessageData: (messageList, totalCount, remainingCount, isEnd) => {
|
|
188
194
|
set({
|
|
189
195
|
pinnedMessageList: messageList,
|
|
190
196
|
pinnedTotalCount: totalCount,
|
|
197
|
+
pinnedRemainingCount: remainingCount,
|
|
191
198
|
pinnedListIsEnd: isEnd,
|
|
192
199
|
});
|
|
193
200
|
},
|
package/dist/store/type.d.ts
CHANGED
|
@@ -66,8 +66,9 @@ export interface ConversationStore {
|
|
|
66
66
|
setQuotedMessage: (message: MessageItem | null) => void;
|
|
67
67
|
pinnedMessageList: MessageItem[];
|
|
68
68
|
pinnedTotalCount: number;
|
|
69
|
+
pinnedRemainingCount: number;
|
|
69
70
|
pinnedListIsEnd: boolean;
|
|
70
|
-
setPinnedMessageData: (messageList: MessageItem[], totalCount: number, isEnd: boolean) => void;
|
|
71
|
+
setPinnedMessageData: (messageList: MessageItem[], totalCount: number, remainingCount: number, isEnd: boolean) => void;
|
|
71
72
|
}
|
|
72
73
|
export interface IPersonalInfo {
|
|
73
74
|
fullName: string;
|
package/dist/store/type.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/store/type.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/store/type.ts"],"names":[],"mappings":"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"}
|