@droppii-org/chat-sdk 0.3.8 → 0.4.0
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/canned-response/CannedResponseBody.js +1 -1
- package/dist/components/canned-response/CannedResponseFooter.js +1 -1
- package/dist/components/canned-response/CannedResponseHeader.js +1 -1
- package/dist/components/canned-response/index.js +1 -1
- package/dist/components/canned-response/team/TeamItem.js +1 -1
- package/dist/components/common/ConfirmModal.d.ts.map +1 -1
- package/dist/components/common/ConfirmModal.js +1 -1
- package/dist/components/common/InfoModal.d.ts.map +1 -1
- package/dist/components/common/InfoModal.js +1 -1
- package/dist/components/compose/ComposeNewMessageModal.d.ts.map +1 -1
- package/dist/components/compose/ComposeNewMessageModal.js +1 -1
- package/dist/components/conversation/ConversationByGroupItem.d.ts.map +1 -1
- package/dist/components/conversation/ConversationByGroupItem.js +2 -1
- package/dist/components/conversation/ConversationBySessionItem.d.ts.map +1 -1
- package/dist/components/conversation/ConversationBySessionItem.js +2 -1
- package/dist/components/conversation/DeskConversationList.d.ts.map +1 -1
- package/dist/components/conversation/DeskConversationList.js +1 -1
- package/dist/components/conversation/MentionIndicatorIcon.d.ts +7 -0
- package/dist/components/conversation/MentionIndicatorIcon.d.ts.map +1 -0
- package/dist/components/conversation/MentionIndicatorIcon.js +17 -0
- package/dist/components/conversation/SwipeActionButton.d.ts.map +1 -1
- package/dist/components/conversation/SwipeActionButton.js +1 -1
- package/dist/components/conversation/SwipeableRow.d.ts.map +1 -1
- package/dist/components/conversation/SwipeableRow.js +1 -1
- package/dist/components/conversation/ThreadCard.d.ts +2 -1
- package/dist/components/conversation/ThreadCard.d.ts.map +1 -1
- package/dist/components/conversation/ThreadCard.js +4 -4
- package/dist/components/conversation-detail/ConversationDetailHeader.d.ts.map +1 -1
- package/dist/components/conversation-detail/ConversationDetailHeader.js +2 -2
- package/dist/components/conversation-detail/ConversationDetailInput.d.ts.map +1 -1
- package/dist/components/conversation-detail/ConversationDetailInput.js +5 -1
- package/dist/components/conversation-detail/ConversationMessageList.d.ts.map +1 -1
- package/dist/components/conversation-detail/ConversationMessageList.js +1 -1
- package/dist/components/conversation-detail/ConversationMoreOptionItem.d.ts.map +1 -1
- package/dist/components/conversation-detail/ConversationMoreOptionItem.js +1 -1
- package/dist/components/conversation-detail/ConversationMoreOptionPanel.d.ts.map +1 -1
- package/dist/components/conversation-detail/ConversationMoreOptionPanel.js +1 -1
- package/dist/components/conversation-detail/PinLimitModal.d.ts.map +1 -1
- package/dist/components/conversation-detail/PinLimitModal.js +1 -1
- package/dist/components/conversation-detail/PinnedMessageBar.d.ts.map +1 -1
- package/dist/components/conversation-detail/PinnedMessageBar.js +8 -4
- package/dist/components/conversation-detail/PinnedMessageItem.d.ts.map +1 -1
- package/dist/components/conversation-detail/PinnedMessageItem.js +1 -1
- package/dist/components/conversation-detail/PinnedMessagesPanel.d.ts.map +1 -1
- package/dist/components/conversation-detail/PinnedMessagesPanel.js +1 -1
- package/dist/components/conversation-detail/ThreadProfilePanel.d.ts.map +1 -1
- package/dist/components/conversation-detail/ThreadProfilePanel.js +1 -1
- package/dist/components/conversation-detail/bot/BotButtonMessage.d.ts.map +1 -1
- package/dist/components/conversation-detail/bot/BotButtonMessage.js +1 -1
- package/dist/components/conversation-detail/bot/BotInactiveNotice.d.ts.map +1 -1
- package/dist/components/conversation-detail/bot/BotInactiveNotice.js +1 -1
- package/dist/components/conversation-detail/bot/BotMenuSheet.d.ts.map +1 -1
- package/dist/components/conversation-detail/bot/BotMenuSheet.js +1 -1
- package/dist/components/conversation-detail/bot/BotStartButton.d.ts.map +1 -1
- package/dist/components/conversation-detail/bot/BotStartButton.js +1 -1
- package/dist/components/conversation-detail/bot/BotSuggest.d.ts.map +1 -1
- package/dist/components/conversation-detail/bot/BotSuggest.js +2 -2
- package/dist/components/conversation-detail/bot/CsSessionConfirmModal.d.ts.map +1 -1
- package/dist/components/conversation-detail/bot/CsSessionConfirmModal.js +1 -1
- package/dist/components/conversation-inbox/ConversationInboxHeader.d.ts.map +1 -1
- package/dist/components/conversation-inbox/ConversationInboxHeader.js +1 -1
- package/dist/components/conversation-inbox/ConversationInboxItem.d.ts.map +1 -1
- package/dist/components/conversation-inbox/ConversationInboxItem.js +2 -1
- package/dist/components/conversation-inbox/ConversationInboxList.d.ts.map +1 -1
- package/dist/components/conversation-inbox/ConversationInboxList.js +1 -1
- package/dist/components/conversation-inbox/ConversationInboxTitle.d.ts.map +1 -1
- package/dist/components/conversation-inbox/ConversationInboxTitle.js +1 -1
- package/dist/components/conversation-inbox/ConversationPeerAvatar.d.ts.map +1 -1
- package/dist/components/conversation-inbox/ConversationPeerAvatar.js +1 -1
- package/dist/components/conversation-inbox/MuteConversationConfirmModal.d.ts.map +1 -1
- package/dist/components/conversation-inbox/MuteConversationConfirmModal.js +1 -1
- package/dist/components/group/AddMemberModal.d.ts.map +1 -1
- package/dist/components/group/AddMemberModal.js +1 -1
- package/dist/components/group/CreateGroupForm.d.ts.map +1 -1
- package/dist/components/group/CreateGroupForm.js +1 -3
- package/dist/components/group/GroupMemberPicker.js +1 -1
- package/dist/components/group/MemberPermissionPanel.js +1 -1
- package/dist/components/icon/index.d.ts.map +1 -1
- package/dist/components/icon/index.js +1 -1
- package/dist/components/media-collection/FileCollection.d.ts.map +1 -1
- package/dist/components/media-collection/FileCollection.js +1 -1
- package/dist/components/media-collection/ImageCollection.d.ts.map +1 -1
- package/dist/components/media-collection/ImageCollection.js +1 -1
- package/dist/components/media-collection/LinkCollection.d.ts.map +1 -1
- package/dist/components/media-collection/LinkCollection.js +2 -2
- package/dist/components/media-collection/VideoCollection.d.ts.map +1 -1
- package/dist/components/media-collection/VideoCollection.js +1 -1
- package/dist/components/media-collection/index.js +1 -1
- package/dist/components/media-resources/FileResourceList.d.ts.map +1 -1
- package/dist/components/media-resources/FileResourceList.js +1 -1
- package/dist/components/media-resources/ImageResourceGrid.d.ts.map +1 -1
- package/dist/components/media-resources/ImageResourceGrid.js +1 -1
- package/dist/components/media-resources/LinkResourceItem.d.ts.map +1 -1
- package/dist/components/media-resources/LinkResourceItem.js +1 -1
- package/dist/components/media-resources/LinkResourceList.d.ts.map +1 -1
- package/dist/components/media-resources/LinkResourceList.js +1 -1
- package/dist/components/media-resources/MediaEntryCard.d.ts.map +1 -1
- package/dist/components/media-resources/MediaEntryCard.js +1 -1
- package/dist/components/media-resources/MediaResourcePanel.d.ts.map +1 -1
- package/dist/components/media-resources/MediaResourcePanel.js +1 -1
- package/dist/components/media-resources/MediaResourceTabBar.d.ts.map +1 -1
- package/dist/components/media-resources/MediaResourceTabBar.js +1 -1
- package/dist/components/media-resources/MediaResourceTabs.js +1 -1
- package/dist/components/media-resources/ResourceEmptyState.d.ts.map +1 -1
- package/dist/components/media-resources/ResourceEmptyState.js +1 -1
- package/dist/components/media-resources/ResourceScrollContainer.d.ts.map +1 -1
- package/dist/components/media-resources/ResourceScrollContainer.js +1 -1
- package/dist/components/media-resources/VideoResourceGrid.d.ts.map +1 -1
- package/dist/components/media-resources/VideoResourceGrid.js +1 -1
- package/dist/components/message/GroupMembersDrawer.js +1 -1
- package/dist/components/message/MessageHeader.d.ts.map +1 -1
- package/dist/components/message/MessageHeader.js +3 -2
- package/dist/components/message/MessageInfiniteScroll.d.ts.map +1 -1
- package/dist/components/message/MessageInfiniteScroll.js +1 -1
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +22 -12
- package/dist/components/message/SelectSession.js +1 -1
- package/dist/components/message/UnassignedSessionFooter.d.ts.map +1 -1
- package/dist/components/message/UnassignedSessionFooter.js +1 -1
- package/dist/components/message/footer/ActionBar.d.ts.map +1 -1
- package/dist/components/message/footer/ActionBar.js +4 -1
- package/dist/components/message/footer/ComposerEditor.js +1 -1
- package/dist/components/message/footer/ComposerTabs.d.ts.map +1 -1
- package/dist/components/message/footer/ComposerTabs.js +1 -1
- package/dist/components/message/footer/EmojiPicker.js +1 -1
- package/dist/components/message/footer/EnterHandler.d.ts.map +1 -1
- package/dist/components/message/footer/EnterHandler.js +10 -1
- package/dist/components/message/footer/FilePreview.d.ts.map +1 -1
- package/dist/components/message/footer/FilePreview.js +4 -4
- package/dist/components/message/footer/LinkInputPreview.d.ts.map +1 -1
- package/dist/components/message/footer/LinkInputPreview.js +1 -1
- package/dist/components/message/footer/MediaActions.js +1 -1
- package/dist/components/message/footer/SessionClosedModal.d.ts.map +1 -1
- package/dist/components/message/footer/SessionClosedModal.js +1 -1
- package/dist/components/message/footer/ToolbarPlugin.js +1 -1
- package/dist/components/message/footer/editorConfig.d.ts +2 -1
- package/dist/components/message/footer/editorConfig.d.ts.map +1 -1
- package/dist/components/message/footer/editorConfig.js +2 -0
- package/dist/components/message/footer/index.d.ts.map +1 -1
- package/dist/components/message/footer/index.js +16 -2
- package/dist/components/message/footer/mention/MentionMenu.d.ts +6 -0
- package/dist/components/message/footer/mention/MentionMenu.d.ts.map +1 -0
- package/dist/components/message/footer/mention/MentionMenu.js +51 -0
- package/dist/components/message/footer/mention/MentionNode.d.ts +20 -0
- package/dist/components/message/footer/mention/MentionNode.d.ts.map +1 -0
- package/dist/components/message/footer/mention/MentionNode.js +39 -0
- package/dist/components/message/footer/mention/extractMentions.d.ts +6 -0
- package/dist/components/message/footer/mention/extractMentions.d.ts.map +1 -0
- package/dist/components/message/footer/mention/extractMentions.js +66 -0
- package/dist/components/message/footer/mention/useMentionOptions.d.ts +8 -0
- package/dist/components/message/footer/mention/useMentionOptions.d.ts.map +1 -0
- package/dist/components/message/footer/mention/useMentionOptions.js +45 -0
- package/dist/components/message/item/AtTextMessage.d.ts +16 -0
- package/dist/components/message/item/AtTextMessage.d.ts.map +1 -0
- package/dist/components/message/item/AtTextMessage.js +112 -0
- package/dist/components/message/item/FileMessage.js +1 -1
- package/dist/components/message/item/GroupNotificationMessage.d.ts.map +1 -1
- package/dist/components/message/item/GroupNotificationMessage.js +2 -2
- package/dist/components/message/item/ImageMessage.js +1 -1
- package/dist/components/message/item/LinkCard.d.ts.map +1 -1
- package/dist/components/message/item/LinkCard.js +1 -1
- package/dist/components/message/item/LinkText.d.ts.map +1 -1
- package/dist/components/message/item/LinkText.js +1 -1
- package/dist/components/message/item/MergeImageMessage.js +1 -1
- package/dist/components/message/item/MessageBubble.d.ts.map +1 -1
- package/dist/components/message/item/MessageBubble.js +2 -2
- package/dist/components/message/item/QuoteMessage.d.ts.map +1 -1
- package/dist/components/message/item/QuoteMessage.js +1 -1
- package/dist/components/message/item/RevokeMessage.d.ts.map +1 -1
- package/dist/components/message/item/RevokeMessage.js +1 -1
- package/dist/components/message/item/VideoMessage.js +1 -1
- package/dist/components/message/item/index.d.ts.map +1 -1
- package/dist/components/message/item/index.js +3 -3
- package/dist/components/message/item/renderMessageContent.d.ts.map +1 -1
- package/dist/components/message/item/renderMessageContent.js +3 -0
- package/dist/components/message/reply/ReplyPreviewBar.d.ts.map +1 -1
- package/dist/components/message/reply/ReplyPreviewBar.js +1 -1
- package/dist/components/message/reply/ReplyQuoteContent.d.ts.map +1 -1
- package/dist/components/message/reply/ReplyQuoteContent.js +7 -5
- package/dist/components/message/toolbox/MessageToolboxMenu.js +1 -1
- package/dist/components/message/toolbox/getCopyableMessageText.d.ts.map +1 -1
- package/dist/components/message/toolbox/getCopyableMessageText.js +5 -3
- package/dist/components/message/toolbox/isPinnableMessageType.d.ts.map +1 -1
- package/dist/components/message/toolbox/isPinnableMessageType.js +1 -0
- package/dist/components/search-conversation/SearchAll.d.ts.map +1 -1
- package/dist/components/search-conversation/SearchAll.js +1 -1
- package/dist/components/search-conversation/SearchConversationAsMessages.d.ts.map +1 -1
- package/dist/components/search-conversation/SearchConversationAsMessages.js +1 -1
- package/dist/components/search-conversation/SearchConversationAsUsers.d.ts.map +1 -1
- package/dist/components/search-conversation/SearchConversationAsUsers.js +1 -1
- package/dist/components/search-conversation/SearchConversationMyInbox.js +1 -1
- package/dist/components/search-conversation/SearchDrawer.js +1 -1
- package/dist/components/search-conversation/SearchMessageOnCurrentConversation.d.ts.map +1 -1
- package/dist/components/search-conversation/SearchMessageOnCurrentConversation.js +1 -1
- package/dist/components/search-conversation/index.js +1 -1
- package/dist/components/search-conversation/item/SearchItemAsMessage.d.ts.map +1 -1
- package/dist/components/search-conversation/item/SearchItemAsMessage.js +1 -1
- package/dist/components/search-conversation/item/SearchItemAsUser.d.ts.map +1 -1
- package/dist/components/search-conversation/item/SearchItemAsUser.js +1 -1
- package/dist/components/session/DeskTeamInbox.d.ts.map +1 -1
- package/dist/components/session/DeskTeamInbox.js +3 -2
- package/dist/components/session/SessionFilterMenu.d.ts.map +1 -1
- package/dist/components/session/SessionFilterMenu.js +1 -1
- package/dist/components/thread/AssignConfirmModal.d.ts.map +1 -1
- package/dist/components/thread/AssignConfirmModal.js +1 -1
- package/dist/components/thread/GroupThreadInfo.d.ts.map +1 -1
- package/dist/components/thread/GroupThreadInfo.js +7 -4
- package/dist/components/thread/ManualAssignPopover.d.ts.map +1 -1
- package/dist/components/thread/ManualAssignPopover.js +1 -1
- package/dist/components/thread/SessionSection.d.ts.map +1 -1
- package/dist/components/thread/SessionSection.js +2 -2
- package/dist/components/thread/SingleThreadInfo.d.ts.map +1 -1
- package/dist/components/thread/SingleThreadInfo.js +1 -1
- package/dist/components/thread/ThreadInfo.js +1 -1
- package/dist/components/thread/UserSection.d.ts.map +1 -1
- package/dist/components/thread/UserSection.js +1 -1
- package/dist/components/video-player/VideoPlayerModal.d.ts.map +1 -1
- package/dist/components/video-player/VideoPlayerModal.js +1 -1
- package/dist/context/ChatContext.d.ts +1 -1
- package/dist/context/ChatContext.d.ts.map +1 -1
- package/dist/context/ChatContext.js +2 -1
- package/dist/hooks/global/useGlobalEvent.d.ts.map +1 -1
- package/dist/hooks/global/useGlobalEvent.js +115 -25
- package/dist/hooks/group/useGroupPermission.d.ts +1 -1
- package/dist/hooks/group/useGroupPermission.d.ts.map +1 -1
- package/dist/hooks/group/useGroupPermission.js +2 -2
- package/dist/hooks/message/useMessage.d.ts +4 -1
- package/dist/hooks/message/useMessage.d.ts.map +1 -1
- package/dist/hooks/message/useMessage.js +9 -2
- package/dist/hooks/message/useSendMessage.d.ts +8 -4
- package/dist/hooks/message/useSendMessage.d.ts.map +1 -1
- package/dist/hooks/message/useSendMessage.js +46 -12
- package/dist/hooks/session/useConversationSessionState.d.ts +2 -1
- package/dist/hooks/session/useConversationSessionState.d.ts.map +1 -1
- package/dist/hooks/session/useConversationSessionState.js +5 -5
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +10 -1
- package/dist/locales/vi/common.json +9 -0
- package/dist/locales/vi/conversation-inbox.json +4 -0
- package/dist/store/auth.js +1 -1
- package/dist/store/conversation.d.ts.map +1 -1
- package/dist/store/conversation.js +93 -51
- package/dist/store/type.d.ts +6 -2
- package/dist/store/type.d.ts.map +1 -1
- package/dist/styles/global.css +1 -1
- package/dist/types/chat.d.ts +28 -2
- package/dist/types/chat.d.ts.map +1 -1
- package/dist/utils/common.d.ts.map +1 -1
- package/dist/utils/common.js +19 -9
- package/dist/utils/messageLog.d.ts +2 -2
- package/dist/utils/messageLog.d.ts.map +1 -1
- package/dist/utils/messageLog.js +33 -3
- package/package.json +17 -3
|
@@ -34,7 +34,7 @@ const VideoPlayerModal = ({ open, videos, initialIndex, onClose, }) => {
|
|
|
34
34
|
const currentVideo = videos[currentIndex];
|
|
35
35
|
const { snapshotWidth = 0, snapshotHeight = 0 } = currentVideo || {};
|
|
36
36
|
const hasSnapshotSize = snapshotWidth > 0 && snapshotHeight > 0;
|
|
37
|
-
return (_jsx(Modal, { open: open, onCancel: onClose, footer: null, centered: true, destroyOnHidden: true, getContainer: false, forceRender: true, closeIcon: _jsx("span", { className: CLOSE_BUTTON_CLASS, children: _jsx(Icon, { icon: "close-b", size: 18 }) }), styles: {
|
|
37
|
+
return (_jsx(Modal, { "data-cp-name": "VideoPlayerModal", open: open, onCancel: onClose, footer: null, centered: true, destroyOnHidden: true, getContainer: false, forceRender: true, closeIcon: _jsx("span", { className: CLOSE_BUTTON_CLASS, children: _jsx(Icon, { icon: "close-b", size: 18 }) }), styles: {
|
|
38
38
|
content: {
|
|
39
39
|
padding: 0,
|
|
40
40
|
},
|
|
@@ -2,5 +2,5 @@ import "../styles/global.css";
|
|
|
2
2
|
import { ChatContextType, ChatProviderProps } from "../types/chat";
|
|
3
3
|
export declare const ChatContext: import("react").Context<ChatContextType>;
|
|
4
4
|
export declare const useChatContext: () => ChatContextType;
|
|
5
|
-
export declare const ChatProvider: ({ children, config, renderCustomMessage, onNavigate, }: ChatProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export declare const ChatProvider: ({ children, config, renderCustomMessage, onNavigate, renderGroupAccessModal, }: ChatProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
6
|
//# sourceMappingURL=ChatContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatContext.d.ts","sourceRoot":"","sources":["../../src/context/ChatContext.tsx"],"names":[],"mappings":"AAEA,OAAO,sBAAsB,CAAC;AAG9B,OAAO,EACL,eAAe,EACf,iBAAiB,EAGlB,MAAM,cAAc,CAAC;AAStB,eAAO,MAAM,WAAW,0CAOtB,CAAC;AAEH,eAAO,MAAM,cAAc,uBAAgC,CAAC;AAE5D,eAAO,MAAM,YAAY,GAAI,
|
|
1
|
+
{"version":3,"file":"ChatContext.d.ts","sourceRoot":"","sources":["../../src/context/ChatContext.tsx"],"names":[],"mappings":"AAEA,OAAO,sBAAsB,CAAC;AAG9B,OAAO,EACL,eAAe,EACf,iBAAiB,EAGlB,MAAM,cAAc,CAAC;AAStB,eAAO,MAAM,WAAW,0CAOtB,CAAC;AAEH,eAAO,MAAM,cAAc,uBAAgC,CAAC;AAE5D,eAAO,MAAM,YAAY,GAAI,gFAM1B,iBAAiB,4CAwGnB,CAAC"}
|
|
@@ -18,7 +18,7 @@ export const ChatContext = createContext({
|
|
|
18
18
|
updateSyncStatus: () => { },
|
|
19
19
|
});
|
|
20
20
|
export const useChatContext = () => useContext(ChatContext);
|
|
21
|
-
export const ChatProvider = ({ children, config, renderCustomMessage, onNavigate, }) => {
|
|
21
|
+
export const ChatProvider = ({ children, config, renderCustomMessage, onNavigate, renderGroupAccessModal, }) => {
|
|
22
22
|
const [connectStatus, setConnectStatus] = useState(ConnectStatus.Disconnected);
|
|
23
23
|
const [syncStatus, setSyncStatus] = useState(SyncStatus.Success);
|
|
24
24
|
const [user, setUser] = useState(null);
|
|
@@ -93,5 +93,6 @@ export const ChatProvider = ({ children, config, renderCustomMessage, onNavigate
|
|
|
93
93
|
updateSyncStatus,
|
|
94
94
|
renderCustomMessage,
|
|
95
95
|
onNavigate,
|
|
96
|
+
renderGroupAccessModal,
|
|
96
97
|
}, children: _jsx(ConfigProvider, { getPopupContainer: (triggerNode) => document.body, children: _jsx(QueryClientProvider, { client: queryClient, children: _jsx(MainLayout, { children: children }) }) }) }));
|
|
97
98
|
};
|
|
@@ -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":"AAyCA,eAAO,MAAM,cAAc,YAmhB1B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useEffect } from "react";
|
|
2
2
|
import { useLatest } from "ahooks";
|
|
3
3
|
import { DChatSDK } from "../../constants/sdk";
|
|
4
|
-
import { CbEvents, MessageType, SessionType, } from "@droppii-org/wasm-client-sdk";
|
|
4
|
+
import { CbEvents, GroupVisibility, MessageType, SessionType, } from "@droppii-org/wasm-client-sdk";
|
|
5
5
|
import { BusinessNotificationType, ConnectStatus, CustomType, SyncStatus, } from "../../types/chat";
|
|
6
6
|
import { pushNewMessage, updateOneMessage } from "../../hooks/message/useMessage";
|
|
7
7
|
import { fetchPinnedMessages } from "../../hooks/message/usePinnedMessages";
|
|
@@ -13,7 +13,7 @@ import { useRefetchChatToken } from "../../hooks/init/useChatToken";
|
|
|
13
13
|
import { updateSession } from "../../hooks/session/useUpdateSession";
|
|
14
14
|
import { QUERY_KEYS } from "../../services/query";
|
|
15
15
|
import { useQueryClient } from "@tanstack/react-query";
|
|
16
|
-
import {
|
|
16
|
+
import { isGroupConversation } from "../../utils/imCommon";
|
|
17
17
|
import { ignoreInternalLatestMessage } from "../../utils/common";
|
|
18
18
|
import { invalidateSessionQueries } from "../../utils/queryHelpers";
|
|
19
19
|
import emitter from "../../utils/events";
|
|
@@ -37,8 +37,7 @@ export const useGlobalEvent = () => {
|
|
|
37
37
|
});
|
|
38
38
|
const refreshCurrentGroupState = async () => {
|
|
39
39
|
const currentConversation = useConversationStore.getState().currentConversation;
|
|
40
|
-
if (!(currentConversation === null || currentConversation === void 0 ? void 0 : currentConversation.groupID) ||
|
|
41
|
-
!isGroupSession(currentConversation.conversationType)) {
|
|
40
|
+
if (!(currentConversation === null || currentConversation === void 0 ? void 0 : currentConversation.groupID) || !isGroupConversation(currentConversation)) {
|
|
42
41
|
return;
|
|
43
42
|
}
|
|
44
43
|
await Promise.all([
|
|
@@ -49,6 +48,33 @@ export const useGlobalEvent = () => {
|
|
|
49
48
|
getCurrentMemberInGroupByReq(currentConversation.groupID),
|
|
50
49
|
]);
|
|
51
50
|
};
|
|
51
|
+
// For a groupID cache entry that isn't the currently-open conversation:
|
|
52
|
+
// evict rather than refetch (per the "no background refetch" decision) —
|
|
53
|
+
// the next time that group is reopened, updateCurrentConversation's
|
|
54
|
+
// cache-miss path fetches it fresh.
|
|
55
|
+
const evictGroupCache = (groupID) => {
|
|
56
|
+
useConversationStore.setState((state) => {
|
|
57
|
+
const groupInfo = new Map(state.currentGroupInfo);
|
|
58
|
+
groupInfo.delete(groupID);
|
|
59
|
+
const memberInGroup = new Map(state.currentMemberInGroup);
|
|
60
|
+
memberInGroup.delete(groupID);
|
|
61
|
+
return { currentGroupInfo: groupInfo, currentMemberInGroup: memberInGroup };
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
// Refetch when the change is for the group currently open (fresh data
|
|
65
|
+
// needed right now); evict when it's for a different cached group (no
|
|
66
|
+
// background refetch — just don't serve stale data on next reopen).
|
|
67
|
+
const refreshOrEvictGroupState = async (groupID) => {
|
|
68
|
+
const currentConversation = useConversationStore.getState().currentConversation;
|
|
69
|
+
const isCurrentGroupOpen = !!groupID && (currentConversation === null || currentConversation === void 0 ? void 0 : currentConversation.groupID) === groupID;
|
|
70
|
+
if (isCurrentGroupOpen) {
|
|
71
|
+
await refreshCurrentGroupState();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (groupID) {
|
|
75
|
+
evictGroupCache(groupID);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
52
78
|
const revokedMessageHandler = ({ data }) => {
|
|
53
79
|
applyRevokedMessage(data.clientMsgID);
|
|
54
80
|
};
|
|
@@ -201,24 +227,47 @@ export const useGlobalEvent = () => {
|
|
|
201
227
|
break;
|
|
202
228
|
}
|
|
203
229
|
};
|
|
204
|
-
|
|
205
|
-
|
|
230
|
+
// OnGroupMemberAdded's payload isn't in the SDK's typed EventDataMap —
|
|
231
|
+
// assumed to carry a GroupItem-shaped groupID, consistent with every
|
|
232
|
+
// other group event in this file that IS typed that way.
|
|
233
|
+
const groupMemberChangedHandler = ({ data }) => {
|
|
234
|
+
void refreshOrEvictGroupState(data === null || data === void 0 ? void 0 : data.groupID);
|
|
206
235
|
emitter.emit("GROUP_MEMBERS_CHANGED");
|
|
207
236
|
};
|
|
208
|
-
|
|
209
|
-
|
|
237
|
+
// OnGroupInfoChanged's payload isn't in the SDK's typed EventDataMap —
|
|
238
|
+
// same assumption as groupMemberChangedHandler above.
|
|
239
|
+
const groupInfoChangedHandler = ({ data }) => {
|
|
240
|
+
void refreshOrEvictGroupState(data === null || data === void 0 ? void 0 : data.groupID);
|
|
210
241
|
};
|
|
211
242
|
// BE pushes this when a member's role/permissions change (DROPPII-30248
|
|
212
243
|
// spec: actions must always check the LATEST permissions, not stale UI) —
|
|
213
|
-
// refetch so useGroupPermission picks up the new permissions[] right away
|
|
214
|
-
|
|
215
|
-
|
|
244
|
+
// refetch so useGroupPermission picks up the new permissions[] right away
|
|
245
|
+
// if it's the open group; evict the cache entry otherwise.
|
|
246
|
+
const groupMemberInfoChangedHandler = ({ data }) => {
|
|
247
|
+
void refreshOrEvictGroupState(data.groupID);
|
|
216
248
|
};
|
|
217
|
-
//
|
|
218
|
-
//
|
|
219
|
-
|
|
249
|
+
// OnGroupDismissed always blocks + navigates away (group is gone either
|
|
250
|
+
// way). OnJoinedGroupDeleted (kicked) branches by visibility: PRIVATE ->
|
|
251
|
+
// fully blocked, same as disbanded; PUBLIC -> stays open in view-only.
|
|
252
|
+
const leftGroupHandler = (data, reason) => {
|
|
220
253
|
const currentConversation = useConversationStore.getState().currentConversation;
|
|
221
|
-
|
|
254
|
+
const isCurrentGroupOpen = (currentConversation === null || currentConversation === void 0 ? void 0 : currentConversation.groupID) === data.groupID;
|
|
255
|
+
const staysViewOnly = reason === "kicked" && data.visibility === GroupVisibility.Public;
|
|
256
|
+
// The kicked/disbanded group's own cached membership is stale the
|
|
257
|
+
// instant this event fires, whether or not it's currently open —
|
|
258
|
+
// nonMemberGroupID guards against a still-in-flight fetch resurrecting
|
|
259
|
+
// it (see the kick-guard in getCurrentMemberInGroupByReq/
|
|
260
|
+
// getSelfGroupPermissionByReq).
|
|
261
|
+
useConversationStore.setState((state) => {
|
|
262
|
+
const memberInGroup = new Map(state.currentMemberInGroup);
|
|
263
|
+
memberInGroup.delete(data.groupID);
|
|
264
|
+
return { currentMemberInGroup: memberInGroup, nonMemberGroupID: data.groupID };
|
|
265
|
+
});
|
|
266
|
+
if (isCurrentGroupOpen && staysViewOnly) {
|
|
267
|
+
useConversationStore.setState({ isViewOnlyMember: true });
|
|
268
|
+
void getCurrentGroupInfoByReq(data.groupID);
|
|
269
|
+
}
|
|
270
|
+
else if (isCurrentGroupOpen) {
|
|
222
271
|
useConversationStore.getState().clearSelectedConversation();
|
|
223
272
|
// OnGroupDismissed also fires on the disbanding owner's own client —
|
|
224
273
|
// skip the modal for them, useDismissGroup already shows a toast.
|
|
@@ -238,9 +287,39 @@ export const useGlobalEvent = () => {
|
|
|
238
287
|
const pathname = window.location.pathname;
|
|
239
288
|
onNavigate === null || onNavigate === void 0 ? void 0 : onNavigate(query ? `${pathname}?${query}` : pathname);
|
|
240
289
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
290
|
+
// Public groups the user can still view-only stay in conversationList;
|
|
291
|
+
// private-blocked/disbanded groups get dropped.
|
|
292
|
+
if (!staysViewOnly) {
|
|
293
|
+
useConversationStore.setState((state) => ({
|
|
294
|
+
conversationList: state.conversationList.filter((conversation) => conversation.groupID !== data.groupID),
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
// Thin wrappers matching the SDK's fixed callback signature, forwarding
|
|
299
|
+
// to leftGroupHandler with the right reason.
|
|
300
|
+
const groupDismissedHandler = ({ data }) => {
|
|
301
|
+
leftGroupHandler(data, "disbanded");
|
|
302
|
+
};
|
|
303
|
+
const joinedGroupDeletedHandler = ({ data }) => {
|
|
304
|
+
leftGroupHandler(data, "kicked");
|
|
305
|
+
};
|
|
306
|
+
// Fires for every member add/remove in a group, including other people's
|
|
307
|
+
// — only treat it as "I lost access" when the removed member is myself.
|
|
308
|
+
// The event payload (GroupMemberItem) has no visibility field, so read it
|
|
309
|
+
// from currentGroupInfo — but only trust that if it's actually info for
|
|
310
|
+
// THIS group (currentGroupInfo tracks whatever conversation is open, not
|
|
311
|
+
// necessarily the group being removed from) — otherwise fail closed.
|
|
312
|
+
const groupMemberDeletedHandler = ({ data }) => {
|
|
313
|
+
var _a, _b;
|
|
314
|
+
if (data.userID !== ((_a = userRef.current) === null || _a === void 0 ? void 0 : _a.userID)) {
|
|
315
|
+
void refreshOrEvictGroupState(data.groupID);
|
|
316
|
+
emitter.emit("GROUP_MEMBERS_CHANGED");
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
const visibility = (_b = useConversationStore
|
|
320
|
+
.getState()
|
|
321
|
+
.currentGroupInfo.get(data.groupID)) === null || _b === void 0 ? void 0 : _b.visibility;
|
|
322
|
+
leftGroupHandler({ groupID: data.groupID, visibility }, "kicked");
|
|
244
323
|
};
|
|
245
324
|
const blackListChangedHandler = () => {
|
|
246
325
|
emitter.emit("BLACK_LIST_CHANGED");
|
|
@@ -252,8 +331,19 @@ export const useGlobalEvent = () => {
|
|
|
252
331
|
// query are separate stages"). OnJoinedGroupAdded fires as soon as the
|
|
253
332
|
// client is confirmed a member, so refetch here instead of waiting on the
|
|
254
333
|
// conversation-side events to eventually catch up.
|
|
255
|
-
const joinedGroupAddedHandler = (
|
|
334
|
+
const joinedGroupAddedHandler = ({ data }) => {
|
|
256
335
|
loadConversationList();
|
|
336
|
+
// Re-added as a member of the group currently open in view-only mode —
|
|
337
|
+
// clear the flag and refetch so membership-gated UI (send box, Leave
|
|
338
|
+
// group button) comes back instead of staying stuck read-only.
|
|
339
|
+
const currentConversation = useConversationStore.getState().currentConversation;
|
|
340
|
+
if ((currentConversation === null || currentConversation === void 0 ? void 0 : currentConversation.groupID) === data.groupID) {
|
|
341
|
+
useConversationStore.setState({
|
|
342
|
+
isViewOnlyMember: false,
|
|
343
|
+
nonMemberGroupID: null,
|
|
344
|
+
});
|
|
345
|
+
void refreshCurrentGroupState();
|
|
346
|
+
}
|
|
257
347
|
};
|
|
258
348
|
const setIMListener = () => {
|
|
259
349
|
//account
|
|
@@ -276,13 +366,13 @@ export const useGlobalEvent = () => {
|
|
|
276
366
|
DChatSDK.on(CbEvents.OnNewConversation, newConversationHandler);
|
|
277
367
|
// group members
|
|
278
368
|
DChatSDK.on(CbEvents.OnGroupMemberAdded, groupMemberChangedHandler);
|
|
279
|
-
DChatSDK.on(CbEvents.OnGroupMemberDeleted,
|
|
369
|
+
DChatSDK.on(CbEvents.OnGroupMemberDeleted, groupMemberDeletedHandler);
|
|
280
370
|
DChatSDK.on(CbEvents.OnJoinedGroupAdded, joinedGroupAddedHandler);
|
|
281
371
|
// group info
|
|
282
372
|
DChatSDK.on(CbEvents.OnGroupInfoChanged, groupInfoChangedHandler);
|
|
283
373
|
DChatSDK.on(CbEvents.OnGroupMemberInfoChanged, groupMemberInfoChangedHandler);
|
|
284
|
-
DChatSDK.on(CbEvents.OnGroupDismissed,
|
|
285
|
-
DChatSDK.on(CbEvents.OnJoinedGroupDeleted,
|
|
374
|
+
DChatSDK.on(CbEvents.OnGroupDismissed, groupDismissedHandler);
|
|
375
|
+
DChatSDK.on(CbEvents.OnJoinedGroupDeleted, joinedGroupDeletedHandler);
|
|
286
376
|
// black list
|
|
287
377
|
DChatSDK.on(CbEvents.OnBlackAdded, blackListChangedHandler);
|
|
288
378
|
DChatSDK.on(CbEvents.OnBlackDeleted, blackListChangedHandler);
|
|
@@ -310,13 +400,13 @@ export const useGlobalEvent = () => {
|
|
|
310
400
|
DChatSDK.off(CbEvents.OnNewConversation, newConversationHandler);
|
|
311
401
|
// group members
|
|
312
402
|
DChatSDK.off(CbEvents.OnGroupMemberAdded, groupMemberChangedHandler);
|
|
313
|
-
DChatSDK.off(CbEvents.OnGroupMemberDeleted,
|
|
403
|
+
DChatSDK.off(CbEvents.OnGroupMemberDeleted, groupMemberDeletedHandler);
|
|
314
404
|
DChatSDK.off(CbEvents.OnJoinedGroupAdded, joinedGroupAddedHandler);
|
|
315
405
|
// group info
|
|
316
406
|
DChatSDK.off(CbEvents.OnGroupInfoChanged, groupInfoChangedHandler);
|
|
317
407
|
DChatSDK.off(CbEvents.OnGroupMemberInfoChanged, groupMemberInfoChangedHandler);
|
|
318
|
-
DChatSDK.off(CbEvents.OnGroupDismissed,
|
|
319
|
-
DChatSDK.off(CbEvents.OnJoinedGroupDeleted,
|
|
408
|
+
DChatSDK.off(CbEvents.OnGroupDismissed, groupDismissedHandler);
|
|
409
|
+
DChatSDK.off(CbEvents.OnJoinedGroupDeleted, joinedGroupDeletedHandler);
|
|
320
410
|
// black list
|
|
321
411
|
DChatSDK.off(CbEvents.OnBlackAdded, blackListChangedHandler);
|
|
322
412
|
DChatSDK.off(CbEvents.OnBlackDeleted, blackListChangedHandler);
|
|
@@ -13,5 +13,5 @@ export interface GroupPermissions {
|
|
|
13
13
|
viewMemberInformation: boolean;
|
|
14
14
|
}
|
|
15
15
|
export declare const permissionListToGroupPermissions: (permissionList: string[] | undefined, roleLevel: GroupMemberRole) => GroupPermissions;
|
|
16
|
-
export declare const useGroupPermission: (
|
|
16
|
+
export declare const useGroupPermission: (groupID?: string) => GroupPermissions;
|
|
17
17
|
//# sourceMappingURL=useGroupPermission.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGroupPermission.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useGroupPermission.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAI/D,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sBAAsB,EAAE,OAAO,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,OAAO,CAAC;CAChC;AA+CD,eAAO,MAAM,gCAAgC,GAC3C,gBAAgB,MAAM,EAAE,GAAG,SAAS,EACpC,WAAW,eAAe,KACzB,gBAcF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,
|
|
1
|
+
{"version":3,"file":"useGroupPermission.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useGroupPermission.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAI/D,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sBAAsB,EAAE,OAAO,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,OAAO,CAAC;CAChC;AA+CD,eAAO,MAAM,gCAAgC,GAC3C,gBAAgB,MAAM,EAAE,GAAG,SAAS,EACpC,WAAW,eAAe,KACzB,gBAcF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,KAAG,gBAYrD,CAAC"}
|
|
@@ -56,8 +56,8 @@ export const permissionListToGroupPermissions = (permissionList, roleLevel) => {
|
|
|
56
56
|
permissionList.includes(permissionString),
|
|
57
57
|
]));
|
|
58
58
|
};
|
|
59
|
-
export const useGroupPermission = (
|
|
60
|
-
const currentMemberInGroup = useConversationStore((state) => state.currentMemberInGroup);
|
|
59
|
+
export const useGroupPermission = (groupID) => {
|
|
60
|
+
const currentMemberInGroup = useConversationStore((state) => groupID ? state.currentMemberInGroup.get(groupID) : undefined);
|
|
61
61
|
return useMemo(() => {
|
|
62
62
|
var _a;
|
|
63
63
|
const roleLevel = (_a = currentMemberInGroup === null || currentMemberInGroup === void 0 ? void 0 : currentMemberInGroup.roleLevel) !== null && _a !== void 0 ? _a : GroupMemberRole.Normal;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { MessageItem, MessageType } from "@droppii-org/wasm-client-sdk";
|
|
2
2
|
export declare const visibleTypeMessage: MessageType[];
|
|
3
|
-
export declare const isMessageHiddenForViewer: (message: MessageItem, isCrm: boolean
|
|
3
|
+
export declare const isMessageHiddenForViewer: (message: MessageItem, isCrm: boolean, conversation?: {
|
|
4
|
+
peerType?: string;
|
|
5
|
+
conversationType?: number;
|
|
6
|
+
}) => boolean;
|
|
4
7
|
export declare const useMessage: (conversationId?: string, searchClientMsgID?: string, enabled?: boolean, useAppHistory?: boolean) => {
|
|
5
8
|
loadState: {
|
|
6
9
|
initLoading: 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,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"useMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,WAAW,EACX,WAAW,EAEZ,MAAM,8BAA8B,CAAC;AAatC,eAAO,MAAM,kBAAkB,eAkB9B,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,SAAS,WAAW,EACpB,OAAO,OAAO,EACd,eAAe;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,KAC9D,OAqBF,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,iBAAiB,MAAM,EACvB,oBAAoB,MAAM,EAC1B,iBAAc,EACd,uBAAqB;;;;;qBAeA,WAAW,EAAE;;;;;;qBAAb,WAAW,EAAE;;;;;;CAsSnC,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"}
|
|
@@ -8,8 +8,9 @@ import isEmpty from "lodash/isEmpty";
|
|
|
8
8
|
import { useChatContext } from "../../context/ChatContext";
|
|
9
9
|
import useAuthStore from "../../store/auth";
|
|
10
10
|
import { ConnectStatus, SyncStatus } from "../../types/chat";
|
|
11
|
-
import { GROUP_NOTIFICATION_MESSAGE_TYPES, isSystemLogMessageType } from "../../utils/messageLog";
|
|
11
|
+
import { GROUP_NOTIFICATION_MESSAGE_TYPES, isGroupNotificationMessageType, isSystemLogMessageType } from "../../utils/messageLog";
|
|
12
12
|
import { isRenderableCustomMessage } from "../../utils/customMessage";
|
|
13
|
+
import { isGroupConversation } from "../../utils/imCommon";
|
|
13
14
|
export const visibleTypeMessage = [
|
|
14
15
|
MessageType.TextMessage,
|
|
15
16
|
MessageType.PictureMessage,
|
|
@@ -29,9 +30,15 @@ export const visibleTypeMessage = [
|
|
|
29
30
|
MessageType.LogTextMessage,
|
|
30
31
|
...GROUP_NOTIFICATION_MESSAGE_TYPES,
|
|
31
32
|
];
|
|
32
|
-
export const isMessageHiddenForViewer = (message, isCrm) => {
|
|
33
|
+
export const isMessageHiddenForViewer = (message, isCrm, conversation) => {
|
|
33
34
|
if (!visibleTypeMessage.includes(message === null || message === void 0 ? void 0 : message.contentType))
|
|
34
35
|
return true;
|
|
36
|
+
// Group notification messages stay hidden in a CX support session even
|
|
37
|
+
// for CRM — the isCrm early-return below only applies past this check.
|
|
38
|
+
if (isGroupNotificationMessageType(message === null || message === void 0 ? void 0 : message.contentType) &&
|
|
39
|
+
!isGroupConversation(conversation)) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
35
42
|
if (isCrm)
|
|
36
43
|
return false;
|
|
37
44
|
const isCustomMessage = MessageType.CustomMessage === (message === null || message === void 0 ? void 0 : message.contentType);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CustomMsgParams, MergerMsgParams, MessageItem } from "@droppii-org/wasm-client-sdk";
|
|
1
|
+
import { AtMsgParams, CustomMsgParams, MergerMsgParams, MessageItem } from "@droppii-org/wasm-client-sdk";
|
|
2
2
|
import { type CustomMessagePayload } from "../../types/customMessage";
|
|
3
|
-
import { BotFlowMeta, ExtendMessageInfo, FileMsgParamsByFile, ImageMsgParamsByFile, UrlMetadataInfo, VideoMsgParamsByFile } from "../../types/chat";
|
|
3
|
+
import { BotFlowMeta, ExtendMessageInfo, FileMsgParamsByFile, ImageMsgParamsByFile, MentionOffset, MentionSendPayload, UrlMetadataInfo, VideoMsgParamsByFile } from "../../types/chat";
|
|
4
4
|
import { UploadFile } from "antd";
|
|
5
5
|
import { ISessionResponse } from "../../types/dto";
|
|
6
6
|
export declare const isMediaResendable: (message: {
|
|
@@ -12,6 +12,8 @@ export declare const createImageMessageByFile: (file: ImageMsgParamsByFile) => P
|
|
|
12
12
|
export declare const createMergerMessage: (mergerMsgParams: MergerMsgParams) => Promise<MessageItem | null>;
|
|
13
13
|
export declare const createVideoMessageByFile: (file: VideoMsgParamsByFile) => Promise<MessageItem | null>;
|
|
14
14
|
export declare const createFileMessageByFile: (file: FileMsgParamsByFile) => Promise<MessageItem | null>;
|
|
15
|
+
export declare const AT_ALL_TAG = "AtAllTag";
|
|
16
|
+
export declare const createAtTextMessage: (params: AtMsgParams) => Promise<MessageItem | null>;
|
|
15
17
|
export declare const createUrlTextMessage: (text: string, urls: string[]) => Promise<MessageItem | null>;
|
|
16
18
|
export declare const createCustomMessageByParams: (params: CustomMsgParams) => Promise<MessageItem | null>;
|
|
17
19
|
export declare const createCustomMessage: (payload: CustomMessagePayload) => Promise<MessageItem | null>;
|
|
@@ -21,7 +23,7 @@ export interface UseSendMessageOptions {
|
|
|
21
23
|
scrollEvent?: SendMessageScrollEvent;
|
|
22
24
|
}
|
|
23
25
|
export declare const useSendMessage: (options?: UseSendMessageOptions) => {
|
|
24
|
-
sendMergeMessage: ({ richText, plainText, files, currentSession, isInternal, urlMetadata, flow, customMessage, }: {
|
|
26
|
+
sendMergeMessage: ({ richText, plainText, files, currentSession, isInternal, urlMetadata, flow, customMessage, mentions, }: {
|
|
25
27
|
richText: string;
|
|
26
28
|
plainText: string;
|
|
27
29
|
files?: UploadFile[];
|
|
@@ -30,16 +32,18 @@ export declare const useSendMessage: (options?: UseSendMessageOptions) => {
|
|
|
30
32
|
urlMetadata?: UrlMetadataInfo;
|
|
31
33
|
flow?: BotFlowMeta;
|
|
32
34
|
customMessage?: CustomMessagePayload;
|
|
35
|
+
mentions?: MentionSendPayload;
|
|
33
36
|
}) => Promise<boolean>;
|
|
34
37
|
sendCustomMessage: (payload: CustomMessagePayload, sendOptions?: {
|
|
35
38
|
currentSession?: ISessionResponse;
|
|
36
39
|
}) => Promise<boolean>;
|
|
37
40
|
resendMessage: (failedMessage: MessageItem) => Promise<void>;
|
|
38
41
|
};
|
|
39
|
-
export declare const generateExtendMessageInfo: ({ richText, urlMetadata, currentSession, flow, }: {
|
|
42
|
+
export declare const generateExtendMessageInfo: ({ richText, urlMetadata, currentSession, flow, mentionOffsets, }: {
|
|
40
43
|
richText?: string;
|
|
41
44
|
urlMetadata?: UrlMetadataInfo;
|
|
42
45
|
currentSession?: ISessionResponse;
|
|
43
46
|
flow?: BotFlowMeta;
|
|
47
|
+
mentionOffsets?: MentionOffset[];
|
|
44
48
|
}) => ExtendMessageInfo;
|
|
45
49
|
//# sourceMappingURL=useSendMessage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSendMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useSendMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,EACf,WAAW,EAIZ,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACrB,MAAM,cAAc,CAAC;AAWtB,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAQlC,OAAO,EAAgB,gBAAgB,EAAyB,MAAM,aAAa,CAAC;AAmBpF,eAAO,MAAM,iBAAiB,GAAI,SAAS;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,YAE0C,CAAC;AAE5C,eAAO,MAAM,iBAAiB,GAAU,MAAM,MAAM,gCAanD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,MAAM,oBAAoB,gCAaxE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,iBAAiB,eAAe,gCAazE,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,MAAM,oBAAoB,gCAaxE,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,MAAM,mBAAmB,gCAatE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,gCActE,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,QAAQ,eAAe,gCAcxB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,SAAS,oBAAoB,gCAOtE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,eAAe,WAAW,gCAc3B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAC9B,4BAA4B,GAC5B,iDAAiD,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC;AAED,eAAO,MAAM,cAAc,GAAI,UAAU,qBAAqB;
|
|
1
|
+
{"version":3,"file":"useSendMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useSendMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,eAAe,EACf,eAAe,EACf,WAAW,EAIZ,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACrB,MAAM,cAAc,CAAC;AAWtB,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAQlC,OAAO,EAAgB,gBAAgB,EAAyB,MAAM,aAAa,CAAC;AAmBpF,eAAO,MAAM,iBAAiB,GAAI,SAAS;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,YAE0C,CAAC;AAE5C,eAAO,MAAM,iBAAiB,GAAU,MAAM,MAAM,gCAanD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,MAAM,oBAAoB,gCAaxE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,iBAAiB,eAAe,gCAazE,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,MAAM,oBAAoB,gCAaxE,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,MAAM,mBAAmB,gCAatE,CAAC;AAGF,eAAO,MAAM,UAAU,aAAa,CAAC;AAErC,eAAO,MAAM,mBAAmB,GAAU,QAAQ,WAAW,gCAa5D,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,gCActE,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,QAAQ,eAAe,gCAcxB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,SAAS,oBAAoB,gCAOtE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,eAAe,WAAW,gCAc3B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAC9B,4BAA4B,GAC5B,iDAAiD,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC;AAED,eAAO,MAAM,cAAc,GAAI,UAAU,qBAAqB;gIAuSvD;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;QACrB,cAAc,CAAC,EAAE,gBAAgB,CAAC;QAClC,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,CAAC,EAAE,eAAe,CAAC;QAC9B,IAAI,CAAC,EAAE,WAAW,CAAC;QACnB,aAAa,CAAC,EAAE,oBAAoB,CAAC;QACrC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;KAC/B,KAAG,OAAO,CAAC,OAAO,CAAC;iCA7CT,oBAAoB,gBACf;QAAE,cAAc,CAAC,EAAE,gBAAgB,CAAA;KAAE,KAClD,OAAO,CAAC,OAAO,CAAC;mCAnHG,WAAW;CA+WpC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,kEAMvC;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC,sBAkCA,CAAC"}
|
|
@@ -26,7 +26,7 @@ const MEDIA_CONTENT_TYPES = new Set([
|
|
|
26
26
|
export const isMediaResendable = (message) => !MEDIA_CONTENT_TYPES.has(message.contentType) ||
|
|
27
27
|
messageFileStore.has(message.clientMsgID);
|
|
28
28
|
export const createTextMessage = async (text) => {
|
|
29
|
-
|
|
29
|
+
const textMessage = await DChatSDK.createTextMessage(text, new Date().getTime().toString())
|
|
30
30
|
.then(({ data }) => {
|
|
31
31
|
return data;
|
|
32
32
|
})
|
|
@@ -37,7 +37,7 @@ export const createTextMessage = async (text) => {
|
|
|
37
37
|
return textMessage;
|
|
38
38
|
};
|
|
39
39
|
export const createImageMessageByFile = async (file) => {
|
|
40
|
-
|
|
40
|
+
const imageMessage = await DChatSDK.createImageMessageByFile(file, new Date().getTime().toString())
|
|
41
41
|
.then(({ data }) => {
|
|
42
42
|
return data;
|
|
43
43
|
})
|
|
@@ -48,7 +48,7 @@ export const createImageMessageByFile = async (file) => {
|
|
|
48
48
|
return imageMessage;
|
|
49
49
|
};
|
|
50
50
|
export const createMergerMessage = async (mergerMsgParams) => {
|
|
51
|
-
|
|
51
|
+
const mergerMessage = await DChatSDK.createMergerMessage(mergerMsgParams, new Date().getTime().toString())
|
|
52
52
|
.then(({ data }) => {
|
|
53
53
|
return data;
|
|
54
54
|
})
|
|
@@ -59,7 +59,7 @@ export const createMergerMessage = async (mergerMsgParams) => {
|
|
|
59
59
|
return mergerMessage;
|
|
60
60
|
};
|
|
61
61
|
export const createVideoMessageByFile = async (file) => {
|
|
62
|
-
|
|
62
|
+
const videoMessage = await DChatSDK.createVideoMessageByFile(file, new Date().getTime().toString())
|
|
63
63
|
.then(({ data }) => {
|
|
64
64
|
return data;
|
|
65
65
|
})
|
|
@@ -70,7 +70,7 @@ export const createVideoMessageByFile = async (file) => {
|
|
|
70
70
|
return videoMessage;
|
|
71
71
|
};
|
|
72
72
|
export const createFileMessageByFile = async (file) => {
|
|
73
|
-
|
|
73
|
+
const fileMessage = await DChatSDK.createFileMessageByFile(file, new Date().getTime().toString())
|
|
74
74
|
.then(({ data }) => {
|
|
75
75
|
return data;
|
|
76
76
|
})
|
|
@@ -80,8 +80,21 @@ export const createFileMessageByFile = async (file) => {
|
|
|
80
80
|
});
|
|
81
81
|
return fileMessage;
|
|
82
82
|
};
|
|
83
|
+
// OpenIM SDK convention for "tag all members" in AtMsgParams.atUserIDList.
|
|
84
|
+
export const AT_ALL_TAG = "AtAllTag";
|
|
85
|
+
export const createAtTextMessage = async (params) => {
|
|
86
|
+
const atTextMessage = await DChatSDK.createTextAtMessage(params, new Date().getTime().toString())
|
|
87
|
+
.then(({ data }) => {
|
|
88
|
+
return data;
|
|
89
|
+
})
|
|
90
|
+
.catch(({ errCode, errMsg }) => {
|
|
91
|
+
console.error("createTextAtMessage", errCode, errMsg);
|
|
92
|
+
return null;
|
|
93
|
+
});
|
|
94
|
+
return atTextMessage;
|
|
95
|
+
};
|
|
83
96
|
export const createUrlTextMessage = async (text, urls) => {
|
|
84
|
-
|
|
97
|
+
const textMessage = await DChatSDK.createUrlTextMessage(text, JSON.stringify(urls), new Date().getTime().toString())
|
|
85
98
|
.then(({ data }) => {
|
|
86
99
|
return data;
|
|
87
100
|
})
|
|
@@ -92,7 +105,7 @@ export const createUrlTextMessage = async (text, urls) => {
|
|
|
92
105
|
return textMessage;
|
|
93
106
|
};
|
|
94
107
|
export const createCustomMessageByParams = async (params) => {
|
|
95
|
-
|
|
108
|
+
const customMessage = await DChatSDK.createCustomMessage(params, new Date().getTime().toString())
|
|
96
109
|
.then(({ data }) => {
|
|
97
110
|
return data;
|
|
98
111
|
})
|
|
@@ -110,7 +123,7 @@ export const createCustomMessage = async (payload) => {
|
|
|
110
123
|
});
|
|
111
124
|
};
|
|
112
125
|
export const createQuoteMessage = async (text, quotedMessage) => {
|
|
113
|
-
|
|
126
|
+
const textMessage = await DChatSDK.createQuoteMessage({
|
|
114
127
|
text,
|
|
115
128
|
message: JSON.stringify(quotedMessage),
|
|
116
129
|
})
|
|
@@ -326,7 +339,7 @@ export const useSendMessage = (options) => {
|
|
|
326
339
|
});
|
|
327
340
|
return sendMessage(Object.assign(Object.assign({}, customMessage), { ex: JSON.stringify(extendMessageInfo) || "{}", isInternal: false }), sendOptions === null || sendOptions === void 0 ? void 0 : sendOptions.currentSession);
|
|
328
341
|
}, [conversationData, recvID, groupID, sendMessage]);
|
|
329
|
-
const sendMergeMessage = useCallback(async ({ richText, plainText, files = [], currentSession, isInternal, urlMetadata, flow, customMessage, }) => {
|
|
342
|
+
const sendMergeMessage = useCallback(async ({ richText, plainText, files = [], currentSession, isInternal, urlMetadata, flow, customMessage, mentions, }) => {
|
|
330
343
|
if (!conversationData || (!recvID && !groupID))
|
|
331
344
|
return false;
|
|
332
345
|
const messageList = [];
|
|
@@ -449,10 +462,24 @@ export const useSendMessage = (options) => {
|
|
|
449
462
|
console.error("Lỗi xử lý tin nhắn:", err);
|
|
450
463
|
}
|
|
451
464
|
}
|
|
465
|
+
const hasMentions = !!mentions && (mentions.atUserIDList.length > 0 || mentions.isAtAll);
|
|
452
466
|
if (!!plainText && plainText.trim() !== "") {
|
|
453
467
|
const urls = extractLinkUrls(plainText);
|
|
454
468
|
let textMessage = null;
|
|
455
|
-
if (
|
|
469
|
+
if (hasMentions && mentions) {
|
|
470
|
+
// OpenIM SDK convention: "tag all" is signaled by the sentinel
|
|
471
|
+
// "AtAllTag" inside atUserIDList, not a separate flag/param.
|
|
472
|
+
textMessage = await createAtTextMessage({
|
|
473
|
+
text: plainText,
|
|
474
|
+
atUserIDList: mentions.isAtAll
|
|
475
|
+
? [AT_ALL_TAG, ...mentions.atUserIDList]
|
|
476
|
+
: mentions.atUserIDList,
|
|
477
|
+
atUsersInfo: mentions.atUsersInfo,
|
|
478
|
+
message: (quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.clientMsgID) ? quotedMessage : undefined,
|
|
479
|
+
});
|
|
480
|
+
setQuotedMessage(null);
|
|
481
|
+
}
|
|
482
|
+
else if (quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.clientMsgID) {
|
|
456
483
|
textMessage = await createQuoteMessage(plainText, quotedMessage);
|
|
457
484
|
setQuotedMessage(null);
|
|
458
485
|
}
|
|
@@ -475,7 +502,8 @@ export const useSendMessage = (options) => {
|
|
|
475
502
|
for (const message of messageList) {
|
|
476
503
|
const isTextLikeMessage = (message === null || message === void 0 ? void 0 : message.contentType) === MessageType.TextMessage ||
|
|
477
504
|
(message === null || message === void 0 ? void 0 : message.contentType) === MessageType.UrlTextMessage ||
|
|
478
|
-
(message === null || message === void 0 ? void 0 : message.contentType) === MessageType.QuoteMessage
|
|
505
|
+
(message === null || message === void 0 ? void 0 : message.contentType) === MessageType.QuoteMessage ||
|
|
506
|
+
(message === null || message === void 0 ? void 0 : message.contentType) === MessageType.AtTextMessage;
|
|
479
507
|
const extendMessageInfo = generateExtendMessageInfo({
|
|
480
508
|
richText: isTextLikeMessage ? richText : "",
|
|
481
509
|
urlMetadata: (message === null || message === void 0 ? void 0 : message.contentType) === MessageType.UrlTextMessage
|
|
@@ -483,6 +511,9 @@ export const useSendMessage = (options) => {
|
|
|
483
511
|
: undefined,
|
|
484
512
|
currentSession,
|
|
485
513
|
flow: isTextLikeMessage ? flow : undefined,
|
|
514
|
+
mentionOffsets: (message === null || message === void 0 ? void 0 : message.contentType) === MessageType.AtTextMessage
|
|
515
|
+
? mentions === null || mentions === void 0 ? void 0 : mentions.mentionOffsets
|
|
516
|
+
: undefined,
|
|
486
517
|
});
|
|
487
518
|
const mMessage = Object.assign(Object.assign({}, message), { ex: JSON.stringify(extendMessageInfo) || "{}", isInternal });
|
|
488
519
|
await sendMessage(mMessage, currentSession);
|
|
@@ -502,7 +533,7 @@ export const useSendMessage = (options) => {
|
|
|
502
533
|
resendMessage,
|
|
503
534
|
};
|
|
504
535
|
};
|
|
505
|
-
export const generateExtendMessageInfo = ({ richText, urlMetadata, currentSession, flow, }) => {
|
|
536
|
+
export const generateExtendMessageInfo = ({ richText, urlMetadata, currentSession, flow, mentionOffsets, }) => {
|
|
506
537
|
const extendMessageInfo = {
|
|
507
538
|
sessionId: (currentSession === null || currentSession === void 0 ? void 0 : currentSession.id) || "",
|
|
508
539
|
applicationType: useAuthStore.getState().applicationType,
|
|
@@ -510,6 +541,9 @@ export const generateExtendMessageInfo = ({ richText, urlMetadata, currentSessio
|
|
|
510
541
|
if (flow) {
|
|
511
542
|
extendMessageInfo.flow = flow;
|
|
512
543
|
}
|
|
544
|
+
if (mentionOffsets && mentionOffsets.length > 0) {
|
|
545
|
+
extendMessageInfo.mentions = { offsets: mentionOffsets };
|
|
546
|
+
}
|
|
513
547
|
const trimmedRichText = richText === null || richText === void 0 ? void 0 : richText.trim();
|
|
514
548
|
if (trimmedRichText) {
|
|
515
549
|
extendMessageInfo.messageInfo = {
|
|
@@ -2,9 +2,10 @@ import { SessionType } from "@droppii-org/wasm-client-sdk";
|
|
|
2
2
|
interface UseConversationSessionStateParams {
|
|
3
3
|
conversationId: string;
|
|
4
4
|
conversationType?: SessionType;
|
|
5
|
+
peerType?: string;
|
|
5
6
|
groupId?: string;
|
|
6
7
|
}
|
|
7
|
-
export declare const useConversationSessionState: ({ conversationId, conversationType, groupId, }: UseConversationSessionStateParams) => {
|
|
8
|
+
export declare const useConversationSessionState: ({ conversationId, conversationType, peerType, groupId, }: UseConversationSessionStateParams) => {
|
|
8
9
|
groupId: string | undefined;
|
|
9
10
|
latestConversationSession: import("../../types/dto").ISessionResponse | undefined;
|
|
10
11
|
customerUserID: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConversationSessionState.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useConversationSessionState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAI3D,UAAU,iCAAiC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,2BAA2B,GAAI,
|
|
1
|
+
{"version":3,"file":"useConversationSessionState.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useConversationSessionState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAI3D,UAAU,iCAAiC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,2BAA2B,GAAI,0DAKzC,iCAAiC;;;;;CAoBnC,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useGetListSessionByConversation } from "./useGetListSessionByConversation";
|
|
3
|
-
import {
|
|
4
|
-
export const useConversationSessionState = ({ conversationId, conversationType, groupId, }) => {
|
|
3
|
+
import { isGroupConversation } from "../../utils/imCommon";
|
|
4
|
+
export const useConversationSessionState = ({ conversationId, conversationType, peerType, groupId, }) => {
|
|
5
5
|
var _a;
|
|
6
|
-
const
|
|
7
|
-
const currentGroupId =
|
|
6
|
+
const isGroupChat = isGroupConversation({ peerType, conversationType });
|
|
7
|
+
const currentGroupId = isGroupChat ? groupId : undefined;
|
|
8
8
|
const { data: conversationSessions, refetch: refetchConversationSessions, } = useGetListSessionByConversation({
|
|
9
9
|
conversationId,
|
|
10
|
-
enabled: !
|
|
10
|
+
enabled: !isGroupChat,
|
|
11
11
|
});
|
|
12
12
|
const latestConversationSession = conversationSessions === null || conversationSessions === void 0 ? void 0 : conversationSessions[0];
|
|
13
13
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.tsx"],"names":[],"mappings":"AAKA,OAAO,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.tsx"],"names":[],"mappings":"AAKA,OAAO,iBAAiB,CAAC;AAazB,UAAU,eAAe;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AACD,QAAA,MAAM,UAAU,GAAI,cAAc,eAAe,4CAsChD,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
package/dist/layout/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import timezone from "dayjs/plugin/timezone";
|
|
|
9
9
|
import { useSyncUsersInfo } from "../hooks/user/useUsersInfo";
|
|
10
10
|
import useConversationStore from "../store/conversation";
|
|
11
11
|
import InfoModal from "../components/common/InfoModal";
|
|
12
|
+
import { useChatContext } from "../context/ChatContext";
|
|
12
13
|
dayjs.extend(utc);
|
|
13
14
|
dayjs.extend(timezone);
|
|
14
15
|
dayjs.tz.setDefault("Asia/Ho_Chi_Minh");
|
|
@@ -17,8 +18,16 @@ const MainLayout = ({ children }) => {
|
|
|
17
18
|
const { t } = useTranslation();
|
|
18
19
|
useGlobalEvent();
|
|
19
20
|
useSyncUsersInfo();
|
|
21
|
+
const { renderGroupAccessModal } = useChatContext();
|
|
20
22
|
const removedFromGroupModalOpen = useConversationStore((state) => state.removedFromGroupModalOpen);
|
|
21
23
|
const hideRemovedFromGroupModal = useConversationStore((state) => state.hideRemovedFromGroupModal);
|
|
22
|
-
|
|
24
|
+
const modalProps = {
|
|
25
|
+
open: removedFromGroupModalOpen,
|
|
26
|
+
onOk: hideRemovedFromGroupModal,
|
|
27
|
+
title: t("removed_from_group_modal_title"),
|
|
28
|
+
okText: t("removed_from_group_modal_ok"),
|
|
29
|
+
message: t("removed_from_group_modal_message"),
|
|
30
|
+
};
|
|
31
|
+
return (_jsxs(_Fragment, { children: [children, renderGroupAccessModal ? (renderGroupAccessModal(modalProps)) : (_jsx(InfoModal, { open: modalProps.open, onOk: modalProps.onOk, title: modalProps.title, okText: modalProps.okText, children: _jsx("p", { children: modalProps.message }) }))] }));
|
|
23
32
|
};
|
|
24
33
|
export default MainLayout;
|