@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.
Files changed (253) hide show
  1. package/dist/components/canned-response/CannedResponseBody.js +1 -1
  2. package/dist/components/canned-response/CannedResponseFooter.js +1 -1
  3. package/dist/components/canned-response/CannedResponseHeader.js +1 -1
  4. package/dist/components/canned-response/index.js +1 -1
  5. package/dist/components/canned-response/team/TeamItem.js +1 -1
  6. package/dist/components/common/ConfirmModal.d.ts.map +1 -1
  7. package/dist/components/common/ConfirmModal.js +1 -1
  8. package/dist/components/common/InfoModal.d.ts.map +1 -1
  9. package/dist/components/common/InfoModal.js +1 -1
  10. package/dist/components/compose/ComposeNewMessageModal.d.ts.map +1 -1
  11. package/dist/components/compose/ComposeNewMessageModal.js +1 -1
  12. package/dist/components/conversation/ConversationByGroupItem.d.ts.map +1 -1
  13. package/dist/components/conversation/ConversationByGroupItem.js +2 -1
  14. package/dist/components/conversation/ConversationBySessionItem.d.ts.map +1 -1
  15. package/dist/components/conversation/ConversationBySessionItem.js +2 -1
  16. package/dist/components/conversation/DeskConversationList.d.ts.map +1 -1
  17. package/dist/components/conversation/DeskConversationList.js +1 -1
  18. package/dist/components/conversation/MentionIndicatorIcon.d.ts +7 -0
  19. package/dist/components/conversation/MentionIndicatorIcon.d.ts.map +1 -0
  20. package/dist/components/conversation/MentionIndicatorIcon.js +17 -0
  21. package/dist/components/conversation/SwipeActionButton.d.ts.map +1 -1
  22. package/dist/components/conversation/SwipeActionButton.js +1 -1
  23. package/dist/components/conversation/SwipeableRow.d.ts.map +1 -1
  24. package/dist/components/conversation/SwipeableRow.js +1 -1
  25. package/dist/components/conversation/ThreadCard.d.ts +2 -1
  26. package/dist/components/conversation/ThreadCard.d.ts.map +1 -1
  27. package/dist/components/conversation/ThreadCard.js +4 -4
  28. package/dist/components/conversation-detail/ConversationDetailHeader.d.ts.map +1 -1
  29. package/dist/components/conversation-detail/ConversationDetailHeader.js +2 -2
  30. package/dist/components/conversation-detail/ConversationDetailInput.d.ts.map +1 -1
  31. package/dist/components/conversation-detail/ConversationDetailInput.js +5 -1
  32. package/dist/components/conversation-detail/ConversationMessageList.d.ts.map +1 -1
  33. package/dist/components/conversation-detail/ConversationMessageList.js +1 -1
  34. package/dist/components/conversation-detail/ConversationMoreOptionItem.d.ts.map +1 -1
  35. package/dist/components/conversation-detail/ConversationMoreOptionItem.js +1 -1
  36. package/dist/components/conversation-detail/ConversationMoreOptionPanel.d.ts.map +1 -1
  37. package/dist/components/conversation-detail/ConversationMoreOptionPanel.js +1 -1
  38. package/dist/components/conversation-detail/PinLimitModal.d.ts.map +1 -1
  39. package/dist/components/conversation-detail/PinLimitModal.js +1 -1
  40. package/dist/components/conversation-detail/PinnedMessageBar.d.ts.map +1 -1
  41. package/dist/components/conversation-detail/PinnedMessageBar.js +8 -4
  42. package/dist/components/conversation-detail/PinnedMessageItem.d.ts.map +1 -1
  43. package/dist/components/conversation-detail/PinnedMessageItem.js +1 -1
  44. package/dist/components/conversation-detail/PinnedMessagesPanel.d.ts.map +1 -1
  45. package/dist/components/conversation-detail/PinnedMessagesPanel.js +1 -1
  46. package/dist/components/conversation-detail/ThreadProfilePanel.d.ts.map +1 -1
  47. package/dist/components/conversation-detail/ThreadProfilePanel.js +1 -1
  48. package/dist/components/conversation-detail/bot/BotButtonMessage.d.ts.map +1 -1
  49. package/dist/components/conversation-detail/bot/BotButtonMessage.js +1 -1
  50. package/dist/components/conversation-detail/bot/BotInactiveNotice.d.ts.map +1 -1
  51. package/dist/components/conversation-detail/bot/BotInactiveNotice.js +1 -1
  52. package/dist/components/conversation-detail/bot/BotMenuSheet.d.ts.map +1 -1
  53. package/dist/components/conversation-detail/bot/BotMenuSheet.js +1 -1
  54. package/dist/components/conversation-detail/bot/BotStartButton.d.ts.map +1 -1
  55. package/dist/components/conversation-detail/bot/BotStartButton.js +1 -1
  56. package/dist/components/conversation-detail/bot/BotSuggest.d.ts.map +1 -1
  57. package/dist/components/conversation-detail/bot/BotSuggest.js +2 -2
  58. package/dist/components/conversation-detail/bot/CsSessionConfirmModal.d.ts.map +1 -1
  59. package/dist/components/conversation-detail/bot/CsSessionConfirmModal.js +1 -1
  60. package/dist/components/conversation-inbox/ConversationInboxHeader.d.ts.map +1 -1
  61. package/dist/components/conversation-inbox/ConversationInboxHeader.js +1 -1
  62. package/dist/components/conversation-inbox/ConversationInboxItem.d.ts.map +1 -1
  63. package/dist/components/conversation-inbox/ConversationInboxItem.js +2 -1
  64. package/dist/components/conversation-inbox/ConversationInboxList.d.ts.map +1 -1
  65. package/dist/components/conversation-inbox/ConversationInboxList.js +1 -1
  66. package/dist/components/conversation-inbox/ConversationInboxTitle.d.ts.map +1 -1
  67. package/dist/components/conversation-inbox/ConversationInboxTitle.js +1 -1
  68. package/dist/components/conversation-inbox/ConversationPeerAvatar.d.ts.map +1 -1
  69. package/dist/components/conversation-inbox/ConversationPeerAvatar.js +1 -1
  70. package/dist/components/conversation-inbox/MuteConversationConfirmModal.d.ts.map +1 -1
  71. package/dist/components/conversation-inbox/MuteConversationConfirmModal.js +1 -1
  72. package/dist/components/group/AddMemberModal.d.ts.map +1 -1
  73. package/dist/components/group/AddMemberModal.js +1 -1
  74. package/dist/components/group/CreateGroupForm.d.ts.map +1 -1
  75. package/dist/components/group/CreateGroupForm.js +1 -3
  76. package/dist/components/group/GroupMemberPicker.js +1 -1
  77. package/dist/components/group/MemberPermissionPanel.js +1 -1
  78. package/dist/components/icon/index.d.ts.map +1 -1
  79. package/dist/components/icon/index.js +1 -1
  80. package/dist/components/media-collection/FileCollection.d.ts.map +1 -1
  81. package/dist/components/media-collection/FileCollection.js +1 -1
  82. package/dist/components/media-collection/ImageCollection.d.ts.map +1 -1
  83. package/dist/components/media-collection/ImageCollection.js +1 -1
  84. package/dist/components/media-collection/LinkCollection.d.ts.map +1 -1
  85. package/dist/components/media-collection/LinkCollection.js +2 -2
  86. package/dist/components/media-collection/VideoCollection.d.ts.map +1 -1
  87. package/dist/components/media-collection/VideoCollection.js +1 -1
  88. package/dist/components/media-collection/index.js +1 -1
  89. package/dist/components/media-resources/FileResourceList.d.ts.map +1 -1
  90. package/dist/components/media-resources/FileResourceList.js +1 -1
  91. package/dist/components/media-resources/ImageResourceGrid.d.ts.map +1 -1
  92. package/dist/components/media-resources/ImageResourceGrid.js +1 -1
  93. package/dist/components/media-resources/LinkResourceItem.d.ts.map +1 -1
  94. package/dist/components/media-resources/LinkResourceItem.js +1 -1
  95. package/dist/components/media-resources/LinkResourceList.d.ts.map +1 -1
  96. package/dist/components/media-resources/LinkResourceList.js +1 -1
  97. package/dist/components/media-resources/MediaEntryCard.d.ts.map +1 -1
  98. package/dist/components/media-resources/MediaEntryCard.js +1 -1
  99. package/dist/components/media-resources/MediaResourcePanel.d.ts.map +1 -1
  100. package/dist/components/media-resources/MediaResourcePanel.js +1 -1
  101. package/dist/components/media-resources/MediaResourceTabBar.d.ts.map +1 -1
  102. package/dist/components/media-resources/MediaResourceTabBar.js +1 -1
  103. package/dist/components/media-resources/MediaResourceTabs.js +1 -1
  104. package/dist/components/media-resources/ResourceEmptyState.d.ts.map +1 -1
  105. package/dist/components/media-resources/ResourceEmptyState.js +1 -1
  106. package/dist/components/media-resources/ResourceScrollContainer.d.ts.map +1 -1
  107. package/dist/components/media-resources/ResourceScrollContainer.js +1 -1
  108. package/dist/components/media-resources/VideoResourceGrid.d.ts.map +1 -1
  109. package/dist/components/media-resources/VideoResourceGrid.js +1 -1
  110. package/dist/components/message/GroupMembersDrawer.js +1 -1
  111. package/dist/components/message/MessageHeader.d.ts.map +1 -1
  112. package/dist/components/message/MessageHeader.js +3 -2
  113. package/dist/components/message/MessageInfiniteScroll.d.ts.map +1 -1
  114. package/dist/components/message/MessageInfiniteScroll.js +1 -1
  115. package/dist/components/message/MessageList.d.ts.map +1 -1
  116. package/dist/components/message/MessageList.js +22 -12
  117. package/dist/components/message/SelectSession.js +1 -1
  118. package/dist/components/message/UnassignedSessionFooter.d.ts.map +1 -1
  119. package/dist/components/message/UnassignedSessionFooter.js +1 -1
  120. package/dist/components/message/footer/ActionBar.d.ts.map +1 -1
  121. package/dist/components/message/footer/ActionBar.js +4 -1
  122. package/dist/components/message/footer/ComposerEditor.js +1 -1
  123. package/dist/components/message/footer/ComposerTabs.d.ts.map +1 -1
  124. package/dist/components/message/footer/ComposerTabs.js +1 -1
  125. package/dist/components/message/footer/EmojiPicker.js +1 -1
  126. package/dist/components/message/footer/EnterHandler.d.ts.map +1 -1
  127. package/dist/components/message/footer/EnterHandler.js +10 -1
  128. package/dist/components/message/footer/FilePreview.d.ts.map +1 -1
  129. package/dist/components/message/footer/FilePreview.js +4 -4
  130. package/dist/components/message/footer/LinkInputPreview.d.ts.map +1 -1
  131. package/dist/components/message/footer/LinkInputPreview.js +1 -1
  132. package/dist/components/message/footer/MediaActions.js +1 -1
  133. package/dist/components/message/footer/SessionClosedModal.d.ts.map +1 -1
  134. package/dist/components/message/footer/SessionClosedModal.js +1 -1
  135. package/dist/components/message/footer/ToolbarPlugin.js +1 -1
  136. package/dist/components/message/footer/editorConfig.d.ts +2 -1
  137. package/dist/components/message/footer/editorConfig.d.ts.map +1 -1
  138. package/dist/components/message/footer/editorConfig.js +2 -0
  139. package/dist/components/message/footer/index.d.ts.map +1 -1
  140. package/dist/components/message/footer/index.js +16 -2
  141. package/dist/components/message/footer/mention/MentionMenu.d.ts +6 -0
  142. package/dist/components/message/footer/mention/MentionMenu.d.ts.map +1 -0
  143. package/dist/components/message/footer/mention/MentionMenu.js +51 -0
  144. package/dist/components/message/footer/mention/MentionNode.d.ts +20 -0
  145. package/dist/components/message/footer/mention/MentionNode.d.ts.map +1 -0
  146. package/dist/components/message/footer/mention/MentionNode.js +39 -0
  147. package/dist/components/message/footer/mention/extractMentions.d.ts +6 -0
  148. package/dist/components/message/footer/mention/extractMentions.d.ts.map +1 -0
  149. package/dist/components/message/footer/mention/extractMentions.js +66 -0
  150. package/dist/components/message/footer/mention/useMentionOptions.d.ts +8 -0
  151. package/dist/components/message/footer/mention/useMentionOptions.d.ts.map +1 -0
  152. package/dist/components/message/footer/mention/useMentionOptions.js +45 -0
  153. package/dist/components/message/item/AtTextMessage.d.ts +16 -0
  154. package/dist/components/message/item/AtTextMessage.d.ts.map +1 -0
  155. package/dist/components/message/item/AtTextMessage.js +112 -0
  156. package/dist/components/message/item/FileMessage.js +1 -1
  157. package/dist/components/message/item/GroupNotificationMessage.d.ts.map +1 -1
  158. package/dist/components/message/item/GroupNotificationMessage.js +2 -2
  159. package/dist/components/message/item/ImageMessage.js +1 -1
  160. package/dist/components/message/item/LinkCard.d.ts.map +1 -1
  161. package/dist/components/message/item/LinkCard.js +1 -1
  162. package/dist/components/message/item/LinkText.d.ts.map +1 -1
  163. package/dist/components/message/item/LinkText.js +1 -1
  164. package/dist/components/message/item/MergeImageMessage.js +1 -1
  165. package/dist/components/message/item/MessageBubble.d.ts.map +1 -1
  166. package/dist/components/message/item/MessageBubble.js +2 -2
  167. package/dist/components/message/item/QuoteMessage.d.ts.map +1 -1
  168. package/dist/components/message/item/QuoteMessage.js +1 -1
  169. package/dist/components/message/item/RevokeMessage.d.ts.map +1 -1
  170. package/dist/components/message/item/RevokeMessage.js +1 -1
  171. package/dist/components/message/item/VideoMessage.js +1 -1
  172. package/dist/components/message/item/index.d.ts.map +1 -1
  173. package/dist/components/message/item/index.js +3 -3
  174. package/dist/components/message/item/renderMessageContent.d.ts.map +1 -1
  175. package/dist/components/message/item/renderMessageContent.js +3 -0
  176. package/dist/components/message/reply/ReplyPreviewBar.d.ts.map +1 -1
  177. package/dist/components/message/reply/ReplyPreviewBar.js +1 -1
  178. package/dist/components/message/reply/ReplyQuoteContent.d.ts.map +1 -1
  179. package/dist/components/message/reply/ReplyQuoteContent.js +7 -5
  180. package/dist/components/message/toolbox/MessageToolboxMenu.js +1 -1
  181. package/dist/components/message/toolbox/getCopyableMessageText.d.ts.map +1 -1
  182. package/dist/components/message/toolbox/getCopyableMessageText.js +5 -3
  183. package/dist/components/message/toolbox/isPinnableMessageType.d.ts.map +1 -1
  184. package/dist/components/message/toolbox/isPinnableMessageType.js +1 -0
  185. package/dist/components/search-conversation/SearchAll.d.ts.map +1 -1
  186. package/dist/components/search-conversation/SearchAll.js +1 -1
  187. package/dist/components/search-conversation/SearchConversationAsMessages.d.ts.map +1 -1
  188. package/dist/components/search-conversation/SearchConversationAsMessages.js +1 -1
  189. package/dist/components/search-conversation/SearchConversationAsUsers.d.ts.map +1 -1
  190. package/dist/components/search-conversation/SearchConversationAsUsers.js +1 -1
  191. package/dist/components/search-conversation/SearchConversationMyInbox.js +1 -1
  192. package/dist/components/search-conversation/SearchDrawer.js +1 -1
  193. package/dist/components/search-conversation/SearchMessageOnCurrentConversation.d.ts.map +1 -1
  194. package/dist/components/search-conversation/SearchMessageOnCurrentConversation.js +1 -1
  195. package/dist/components/search-conversation/index.js +1 -1
  196. package/dist/components/search-conversation/item/SearchItemAsMessage.d.ts.map +1 -1
  197. package/dist/components/search-conversation/item/SearchItemAsMessage.js +1 -1
  198. package/dist/components/search-conversation/item/SearchItemAsUser.d.ts.map +1 -1
  199. package/dist/components/search-conversation/item/SearchItemAsUser.js +1 -1
  200. package/dist/components/session/DeskTeamInbox.d.ts.map +1 -1
  201. package/dist/components/session/DeskTeamInbox.js +3 -2
  202. package/dist/components/session/SessionFilterMenu.d.ts.map +1 -1
  203. package/dist/components/session/SessionFilterMenu.js +1 -1
  204. package/dist/components/thread/AssignConfirmModal.d.ts.map +1 -1
  205. package/dist/components/thread/AssignConfirmModal.js +1 -1
  206. package/dist/components/thread/GroupThreadInfo.d.ts.map +1 -1
  207. package/dist/components/thread/GroupThreadInfo.js +7 -4
  208. package/dist/components/thread/ManualAssignPopover.d.ts.map +1 -1
  209. package/dist/components/thread/ManualAssignPopover.js +1 -1
  210. package/dist/components/thread/SessionSection.d.ts.map +1 -1
  211. package/dist/components/thread/SessionSection.js +2 -2
  212. package/dist/components/thread/SingleThreadInfo.d.ts.map +1 -1
  213. package/dist/components/thread/SingleThreadInfo.js +1 -1
  214. package/dist/components/thread/ThreadInfo.js +1 -1
  215. package/dist/components/thread/UserSection.d.ts.map +1 -1
  216. package/dist/components/thread/UserSection.js +1 -1
  217. package/dist/components/video-player/VideoPlayerModal.d.ts.map +1 -1
  218. package/dist/components/video-player/VideoPlayerModal.js +1 -1
  219. package/dist/context/ChatContext.d.ts +1 -1
  220. package/dist/context/ChatContext.d.ts.map +1 -1
  221. package/dist/context/ChatContext.js +2 -1
  222. package/dist/hooks/global/useGlobalEvent.d.ts.map +1 -1
  223. package/dist/hooks/global/useGlobalEvent.js +115 -25
  224. package/dist/hooks/group/useGroupPermission.d.ts +1 -1
  225. package/dist/hooks/group/useGroupPermission.d.ts.map +1 -1
  226. package/dist/hooks/group/useGroupPermission.js +2 -2
  227. package/dist/hooks/message/useMessage.d.ts +4 -1
  228. package/dist/hooks/message/useMessage.d.ts.map +1 -1
  229. package/dist/hooks/message/useMessage.js +9 -2
  230. package/dist/hooks/message/useSendMessage.d.ts +8 -4
  231. package/dist/hooks/message/useSendMessage.d.ts.map +1 -1
  232. package/dist/hooks/message/useSendMessage.js +46 -12
  233. package/dist/hooks/session/useConversationSessionState.d.ts +2 -1
  234. package/dist/hooks/session/useConversationSessionState.d.ts.map +1 -1
  235. package/dist/hooks/session/useConversationSessionState.js +5 -5
  236. package/dist/layout/index.d.ts.map +1 -1
  237. package/dist/layout/index.js +10 -1
  238. package/dist/locales/vi/common.json +9 -0
  239. package/dist/locales/vi/conversation-inbox.json +4 -0
  240. package/dist/store/auth.js +1 -1
  241. package/dist/store/conversation.d.ts.map +1 -1
  242. package/dist/store/conversation.js +93 -51
  243. package/dist/store/type.d.ts +6 -2
  244. package/dist/store/type.d.ts.map +1 -1
  245. package/dist/styles/global.css +1 -1
  246. package/dist/types/chat.d.ts +28 -2
  247. package/dist/types/chat.d.ts.map +1 -1
  248. package/dist/utils/common.d.ts.map +1 -1
  249. package/dist/utils/common.js +19 -9
  250. package/dist/utils/messageLog.d.ts +2 -2
  251. package/dist/utils/messageLog.d.ts.map +1 -1
  252. package/dist/utils/messageLog.js +33 -3
  253. 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,wDAK1B,iBAAiB,4CAuGnB,CAAC"}
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":"AAuCA,eAAO,MAAM,cAAc,YA2a1B,CAAC"}
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 { isGroupSession } from "../../utils/imCommon";
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
- const groupMemberChangedHandler = () => {
205
- void refreshCurrentGroupState();
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
- const groupInfoChangedHandler = () => {
209
- void refreshCurrentGroupState();
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
- const groupMemberInfoChangedHandler = () => {
215
- void refreshCurrentGroupState();
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
- // Shared by OnGroupDismissed and OnJoinedGroupDeleted (kicked) both
218
- // leave the user out of a group they may have open, same cleanup either way.
219
- const leftGroupHandler = ({ data }) => {
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
- if ((currentConversation === null || currentConversation === void 0 ? void 0 : currentConversation.groupID) === data.groupID) {
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
- useConversationStore.setState((state) => ({
242
- conversationList: state.conversationList.filter((conversation) => conversation.groupID !== data.groupID),
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 = (_event) => {
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, groupMemberChangedHandler);
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, leftGroupHandler);
285
- DChatSDK.on(CbEvents.OnJoinedGroupDeleted, leftGroupHandler);
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, groupMemberChangedHandler);
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, leftGroupHandler);
319
- DChatSDK.off(CbEvents.OnJoinedGroupDeleted, leftGroupHandler);
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: (_groupID?: string) => GroupPermissions;
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,WAAW,MAAM,KAAG,gBAYtD,CAAC"}
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 = (_groupID) => {
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) => 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;AAYtC,eAAO,MAAM,kBAAkB,eAkB9B,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,SAAS,WAAW,EACpB,OAAO,OAAO,KACb,OAWF,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"}
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;sHAsSvD;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;KACtC,KAAG,OAAO,CAAC,OAAO,CAAC;iCA3CT,oBAAoB,gBACf;QAAE,cAAc,CAAC,EAAE,gBAAgB,CAAA;KAAE,KAClD,OAAO,CAAC,OAAO,CAAC;mCAnHG,WAAW;CAyVpC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,kDAKvC;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAClC,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB,sBA8BA,CAAC"}
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
- let textMessage = await DChatSDK.createTextMessage(text, new Date().getTime().toString())
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
- let imageMessage = await DChatSDK.createImageMessageByFile(file, new Date().getTime().toString())
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
- let mergerMessage = await DChatSDK.createMergerMessage(mergerMsgParams, new Date().getTime().toString())
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
- let videoMessage = await DChatSDK.createVideoMessageByFile(file, new Date().getTime().toString())
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
- let fileMessage = await DChatSDK.createFileMessageByFile(file, new Date().getTime().toString())
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
- let textMessage = await DChatSDK.createUrlTextMessage(text, JSON.stringify(urls), new Date().getTime().toString())
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
- let customMessage = await DChatSDK.createCustomMessage(params, new Date().getTime().toString())
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
- let textMessage = await DChatSDK.createQuoteMessage({
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 (quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.clientMsgID) {
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,gDAIzC,iCAAiC;;;;;CAoBnC,CAAC"}
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 { isGroupSession } from "../../utils/imCommon";
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 isGroupConversation = isGroupSession(conversationType);
7
- const currentGroupId = isGroupConversation ? groupId : undefined;
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: !isGroupConversation,
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;AAYzB,UAAU,eAAe;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AACD,QAAA,MAAM,UAAU,GAAI,cAAc,eAAe,4CAyBhD,CAAC;AAEF,eAAe,UAAU,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"}
@@ -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
- return (_jsxs(_Fragment, { children: [children, _jsx(InfoModal, { open: removedFromGroupModalOpen, onOk: hideRemovedFromGroupModal, title: t("removed_from_group_modal_title"), okText: t("removed_from_group_modal_ok"), children: _jsx("p", { children: t("removed_from_group_modal_message") }) })] }));
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;