@droppii-org/chat-sdk 0.1.72 → 0.1.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/conversation-detail/ConversationDetailInput.d.ts.map +1 -1
- package/dist/components/conversation-detail/ConversationDetailInput.js +6 -2
- package/dist/components/conversation-detail/PinnedMessageBar.d.ts.map +1 -1
- package/dist/components/conversation-detail/PinnedMessageBar.js +23 -20
- package/dist/components/conversation-detail/PinnedMessageItem.d.ts.map +1 -1
- package/dist/components/conversation-detail/PinnedMessageItem.js +1 -5
- package/dist/hooks/conversation/useBotMainMenu.d.ts +0 -1
- package/dist/hooks/conversation/useBotMainMenu.d.ts.map +1 -1
- package/dist/hooks/conversation/useBotMainMenu.js +0 -10
- package/dist/hooks/conversation/useSwitchToCsTeam.d.ts +6 -1
- package/dist/hooks/conversation/useSwitchToCsTeam.d.ts.map +1 -1
- package/dist/hooks/conversation/useSwitchToCsTeam.js +9 -4
- package/dist/hooks/message/useMessage.d.ts.map +1 -1
- package/dist/hooks/message/useMessage.js +21 -5
- package/dist/index.d.ts +5 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/services/query.d.ts +0 -1
- package/dist/services/query.d.ts.map +1 -1
- package/dist/services/query.js +0 -1
- package/dist/styles/global.css +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +127 -126
- package/dist/assets/svg/cannedResponse.d.ts +0 -7
- package/dist/assets/svg/cannedResponse.d.ts.map +0 -1
- package/dist/assets/svg/cannedResponse.js +0 -3
- package/dist/assets/svg/cannedResponse.tsx +0 -48
- package/dist/assets/svg/expand.d.ts +0 -7
- package/dist/assets/svg/expand.d.ts.map +0 -1
- package/dist/assets/svg/expand.js +0 -2
- package/dist/assets/svg/expand.tsx +0 -44
- package/dist/components/biz-inbox/BizInboxHeader.d.ts +0 -3
- package/dist/components/biz-inbox/BizInboxHeader.d.ts.map +0 -1
- package/dist/components/biz-inbox/BizInboxHeader.js +0 -8
- package/dist/components/biz-inbox/BizThreadAvatar.d.ts +0 -11
- package/dist/components/biz-inbox/BizThreadAvatar.d.ts.map +0 -1
- package/dist/components/biz-inbox/BizThreadAvatar.js +0 -12
- package/dist/components/biz-inbox/BizThreadCard.d.ts +0 -8
- package/dist/components/biz-inbox/BizThreadCard.d.ts.map +0 -1
- package/dist/components/biz-inbox/BizThreadCard.js +0 -30
- package/dist/components/biz-inbox/BizThreadList.d.ts +0 -12
- package/dist/components/biz-inbox/BizThreadList.d.ts.map +0 -1
- package/dist/components/biz-inbox/BizThreadList.js +0 -36
- package/dist/components/biz-inbox/BizThreadTitle.d.ts +0 -10
- package/dist/components/biz-inbox/BizThreadTitle.d.ts.map +0 -1
- package/dist/components/biz-inbox/BizThreadTitle.js +0 -10
- package/dist/components/biz-inbox/index.d.ts +0 -10
- package/dist/components/biz-inbox/index.d.ts.map +0 -1
- package/dist/components/biz-inbox/index.js +0 -5
- package/dist/components/biz-thread-detail/BizAttachmentPreview.d.ts +0 -9
- package/dist/components/biz-thread-detail/BizAttachmentPreview.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizAttachmentPreview.js +0 -70
- package/dist/components/biz-thread-detail/BizImagePreview.d.ts +0 -9
- package/dist/components/biz-thread-detail/BizImagePreview.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizImagePreview.js +0 -39
- package/dist/components/biz-thread-detail/BizImageViewer.d.ts +0 -8
- package/dist/components/biz-thread-detail/BizImageViewer.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizImageViewer.js +0 -35
- package/dist/components/biz-thread-detail/BizLinkInputPreview.d.ts +0 -7
- package/dist/components/biz-thread-detail/BizLinkInputPreview.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizLinkInputPreview.js +0 -16
- package/dist/components/biz-thread-detail/BizLinkMessageCard.d.ts +0 -7
- package/dist/components/biz-thread-detail/BizLinkMessageCard.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizLinkMessageCard.js +0 -17
- package/dist/components/biz-thread-detail/BizLinkTextContent.d.ts +0 -6
- package/dist/components/biz-thread-detail/BizLinkTextContent.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizLinkTextContent.js +0 -11
- package/dist/components/biz-thread-detail/BizMessageBubble.d.ts +0 -11
- package/dist/components/biz-thread-detail/BizMessageBubble.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizMessageBubble.js +0 -15
- package/dist/components/biz-thread-detail/BizMessageContent.d.ts +0 -7
- package/dist/components/biz-thread-detail/BizMessageContent.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizMessageContent.js +0 -125
- package/dist/components/biz-thread-detail/BizMessageList.d.ts +0 -7
- package/dist/components/biz-thread-detail/BizMessageList.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizMessageList.js +0 -35
- package/dist/components/biz-thread-detail/BizMoreOptionItem.d.ts +0 -8
- package/dist/components/biz-thread-detail/BizMoreOptionItem.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizMoreOptionItem.js +0 -19
- package/dist/components/biz-thread-detail/BizMoreOptionPanel.d.ts +0 -10
- package/dist/components/biz-thread-detail/BizMoreOptionPanel.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizMoreOptionPanel.js +0 -20
- package/dist/components/biz-thread-detail/BizThreadDetailHeader.d.ts +0 -8
- package/dist/components/biz-thread-detail/BizThreadDetailHeader.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizThreadDetailHeader.js +0 -19
- package/dist/components/biz-thread-detail/BizThreadDetailInput.d.ts +0 -8
- package/dist/components/biz-thread-detail/BizThreadDetailInput.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizThreadDetailInput.js +0 -251
- package/dist/components/biz-thread-detail/BizVideoViewer.d.ts +0 -8
- package/dist/components/biz-thread-detail/BizVideoViewer.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/BizVideoViewer.js +0 -103
- package/dist/components/biz-thread-detail/bot/BotButtonMessage.d.ts +0 -10
- package/dist/components/biz-thread-detail/bot/BotButtonMessage.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/bot/BotButtonMessage.js +0 -30
- package/dist/components/biz-thread-detail/bot/BotFlowContext.d.ts +0 -10
- package/dist/components/biz-thread-detail/bot/BotFlowContext.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/bot/BotFlowContext.js +0 -11
- package/dist/components/biz-thread-detail/bot/BotStartButton.d.ts +0 -8
- package/dist/components/biz-thread-detail/bot/BotStartButton.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/bot/BotStartButton.js +0 -11
- package/dist/components/biz-thread-detail/bot/index.d.ts +0 -5
- package/dist/components/biz-thread-detail/bot/index.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/bot/index.js +0 -2
- package/dist/components/biz-thread-detail/index.d.ts +0 -10
- package/dist/components/biz-thread-detail/index.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/index.js +0 -5
- package/dist/components/biz-thread-detail/item/BizMessageItem.d.ts +0 -9
- package/dist/components/biz-thread-detail/item/BizMessageItem.d.ts.map +0 -1
- package/dist/components/biz-thread-detail/item/BizMessageItem.js +0 -27
- package/dist/components/bizInbox/BizCommunityTabPlaceholder.d.ts +0 -3
- package/dist/components/bizInbox/BizCommunityTabPlaceholder.d.ts.map +0 -1
- package/dist/components/bizInbox/BizCommunityTabPlaceholder.js +0 -10
- package/dist/components/bizInbox/BizContactListSkeleton.d.ts +0 -6
- package/dist/components/bizInbox/BizContactListSkeleton.d.ts.map +0 -1
- package/dist/components/bizInbox/BizContactListSkeleton.js +0 -8
- package/dist/components/bizInbox/BizCreateGroupButton.d.ts +0 -7
- package/dist/components/bizInbox/BizCreateGroupButton.d.ts.map +0 -1
- package/dist/components/bizInbox/BizCreateGroupButton.js +0 -11
- package/dist/components/bizInbox/BizInboxHeader.d.ts +0 -3
- package/dist/components/bizInbox/BizInboxHeader.d.ts.map +0 -1
- package/dist/components/bizInbox/BizInboxHeader.js +0 -8
- package/dist/components/bizInbox/BizInboxTabs.d.ts +0 -8
- package/dist/components/bizInbox/BizInboxTabs.d.ts.map +0 -1
- package/dist/components/bizInbox/BizInboxTabs.js +0 -27
- package/dist/components/bizInbox/BizSearchInput.d.ts +0 -9
- package/dist/components/bizInbox/BizSearchInput.d.ts.map +0 -1
- package/dist/components/bizInbox/BizSearchInput.js +0 -24
- package/dist/components/bizInbox/BizThreadAvatar.d.ts +0 -10
- package/dist/components/bizInbox/BizThreadAvatar.d.ts.map +0 -1
- package/dist/components/bizInbox/BizThreadAvatar.js +0 -8
- package/dist/components/bizInbox/BizThreadCard.d.ts +0 -8
- package/dist/components/bizInbox/BizThreadCard.d.ts.map +0 -1
- package/dist/components/bizInbox/BizThreadCard.js +0 -25
- package/dist/components/bizInbox/BizThreadList.d.ts +0 -11
- package/dist/components/bizInbox/BizThreadList.d.ts.map +0 -1
- package/dist/components/bizInbox/BizThreadList.js +0 -35
- package/dist/components/bizInbox/BizThreadTitle.d.ts +0 -8
- package/dist/components/bizInbox/BizThreadTitle.d.ts.map +0 -1
- package/dist/components/bizInbox/BizThreadTitle.js +0 -6
- package/dist/components/bizInbox/index.d.ts +0 -10
- package/dist/components/bizInbox/index.d.ts.map +0 -1
- package/dist/components/bizInbox/index.js +0 -5
- package/dist/components/bizInbox/states/BizThreadListEmpty.d.ts +0 -7
- package/dist/components/bizInbox/states/BizThreadListEmpty.d.ts.map +0 -1
- package/dist/components/bizInbox/states/BizThreadListEmpty.js +0 -15
- package/dist/components/bizInbox/states/BizThreadListError.d.ts +0 -6
- package/dist/components/bizInbox/states/BizThreadListError.d.ts.map +0 -1
- package/dist/components/bizInbox/states/BizThreadListError.js +0 -11
- package/dist/components/bizInbox/states/BizThreadListLoading.d.ts +0 -6
- package/dist/components/bizInbox/states/BizThreadListLoading.d.ts.map +0 -1
- package/dist/components/bizInbox/states/BizThreadListLoading.js +0 -8
- package/dist/components/bizThreadDetail/BizMessageBubble.d.ts +0 -10
- package/dist/components/bizThreadDetail/BizMessageBubble.d.ts.map +0 -1
- package/dist/components/bizThreadDetail/BizMessageBubble.js +0 -15
- package/dist/components/bizThreadDetail/BizMessageList.d.ts +0 -3
- package/dist/components/bizThreadDetail/BizMessageList.d.ts.map +0 -1
- package/dist/components/bizThreadDetail/BizMessageList.js +0 -28
- package/dist/components/bizThreadDetail/BizThreadDetailHeader.d.ts +0 -8
- package/dist/components/bizThreadDetail/BizThreadDetailHeader.d.ts.map +0 -1
- package/dist/components/bizThreadDetail/BizThreadDetailHeader.js +0 -18
- package/dist/components/bizThreadDetail/BizThreadDetailInput.d.ts +0 -8
- package/dist/components/bizThreadDetail/BizThreadDetailInput.d.ts.map +0 -1
- package/dist/components/bizThreadDetail/BizThreadDetailInput.js +0 -147
- package/dist/components/bizThreadDetail/index.d.ts +0 -8
- package/dist/components/bizThreadDetail/index.d.ts.map +0 -1
- package/dist/components/bizThreadDetail/index.js +0 -4
- package/dist/components/bizThreadDetail/item/BizMessageItem.d.ts +0 -8
- package/dist/components/bizThreadDetail/item/BizMessageItem.d.ts.map +0 -1
- package/dist/components/bizThreadDetail/item/BizMessageItem.js +0 -20
- package/dist/components/cannedResponse/CannedResponseBody.d.ts +0 -8
- package/dist/components/cannedResponse/CannedResponseBody.d.ts.map +0 -1
- package/dist/components/cannedResponse/CannedResponseBody.js +0 -109
- package/dist/components/cannedResponse/CannedResponseFooter.d.ts +0 -6
- package/dist/components/cannedResponse/CannedResponseFooter.d.ts.map +0 -1
- package/dist/components/cannedResponse/CannedResponseFooter.js +0 -8
- package/dist/components/cannedResponse/CannedResponseHeader.d.ts +0 -8
- package/dist/components/cannedResponse/CannedResponseHeader.d.ts.map +0 -1
- package/dist/components/cannedResponse/CannedResponseHeader.js +0 -11
- package/dist/components/cannedResponse/index.d.ts +0 -8
- package/dist/components/cannedResponse/index.d.ts.map +0 -1
- package/dist/components/cannedResponse/index.js +0 -34
- package/dist/components/cannedResponse/team/TeamItem.d.ts +0 -11
- package/dist/components/cannedResponse/team/TeamItem.d.ts.map +0 -1
- package/dist/components/cannedResponse/team/TeamItem.js +0 -31
- package/dist/components/chatBubble/ChatBubble.d.ts +0 -6
- package/dist/components/chatBubble/ChatBubble.d.ts.map +0 -1
- package/dist/components/chatBubble/ChatBubble.js +0 -35
- package/dist/components/mediaCollection/FileCollection.d.ts +0 -3
- package/dist/components/mediaCollection/FileCollection.d.ts.map +0 -1
- package/dist/components/mediaCollection/FileCollection.js +0 -53
- package/dist/components/mediaCollection/ImageCollection.d.ts +0 -3
- package/dist/components/mediaCollection/ImageCollection.d.ts.map +0 -1
- package/dist/components/mediaCollection/ImageCollection.js +0 -52
- package/dist/components/mediaCollection/LinkCollection.d.ts +0 -5
- package/dist/components/mediaCollection/LinkCollection.d.ts.map +0 -1
- package/dist/components/mediaCollection/LinkCollection.js +0 -92
- package/dist/components/mediaCollection/VideoCollection.d.ts +0 -3
- package/dist/components/mediaCollection/VideoCollection.d.ts.map +0 -1
- package/dist/components/mediaCollection/VideoCollection.js +0 -51
- package/dist/components/mediaCollection/index.d.ts +0 -9
- package/dist/components/mediaCollection/index.d.ts.map +0 -1
- package/dist/components/mediaCollection/index.js +0 -57
- package/dist/components/message/footer/QuotedMessage.d.ts +0 -2
- package/dist/components/message/footer/QuotedMessage.d.ts.map +0 -1
- package/dist/components/message/footer/QuotedMessage.js +0 -24
- package/dist/components/richTextEditor/RichTextEditor.d.ts +0 -12
- package/dist/components/richTextEditor/RichTextEditor.d.ts.map +0 -1
- package/dist/components/richTextEditor/RichTextEditor.js +0 -62
- package/dist/components/searchConversation/SearchAll.d.ts +0 -8
- package/dist/components/searchConversation/SearchAll.d.ts.map +0 -1
- package/dist/components/searchConversation/SearchAll.js +0 -37
- package/dist/components/searchConversation/SearchConversationAsMessages.d.ts +0 -6
- package/dist/components/searchConversation/SearchConversationAsMessages.d.ts.map +0 -1
- package/dist/components/searchConversation/SearchConversationAsMessages.js +0 -23
- package/dist/components/searchConversation/SearchConversationAsUsers.d.ts +0 -6
- package/dist/components/searchConversation/SearchConversationAsUsers.d.ts.map +0 -1
- package/dist/components/searchConversation/SearchConversationAsUsers.js +0 -21
- package/dist/components/searchConversation/SearchConversationMyInbox.d.ts +0 -6
- package/dist/components/searchConversation/SearchConversationMyInbox.d.ts.map +0 -1
- package/dist/components/searchConversation/SearchConversationMyInbox.js +0 -24
- package/dist/components/searchConversation/SearchDrawer.d.ts +0 -3
- package/dist/components/searchConversation/SearchDrawer.d.ts.map +0 -1
- package/dist/components/searchConversation/SearchDrawer.js +0 -33
- package/dist/components/searchConversation/SearchMessageOnCurrentConversation.d.ts +0 -7
- package/dist/components/searchConversation/SearchMessageOnCurrentConversation.d.ts.map +0 -1
- package/dist/components/searchConversation/SearchMessageOnCurrentConversation.js +0 -28
- package/dist/components/searchConversation/index.d.ts +0 -12
- package/dist/components/searchConversation/index.d.ts.map +0 -1
- package/dist/components/searchConversation/index.js +0 -46
- package/dist/components/searchConversation/item/SearchItemAsMessage.d.ts +0 -12
- package/dist/components/searchConversation/item/SearchItemAsMessage.d.ts.map +0 -1
- package/dist/components/searchConversation/item/SearchItemAsMessage.js +0 -72
- package/dist/components/searchConversation/item/SearchItemAsUser.d.ts +0 -8
- package/dist/components/searchConversation/item/SearchItemAsUser.d.ts.map +0 -1
- package/dist/components/searchConversation/item/SearchItemAsUser.js +0 -25
- package/dist/constants/bizInbox.d.ts +0 -37
- package/dist/constants/bizInbox.d.ts.map +0 -1
- package/dist/constants/bizInbox.js +0 -35
- package/dist/constants/bizMoreOption.d.ts +0 -9
- package/dist/constants/bizMoreOption.d.ts.map +0 -1
- package/dist/constants/bizMoreOption.js +0 -37
- package/dist/hooks/biz/index.d.ts +0 -8
- package/dist/hooks/biz/index.d.ts.map +0 -1
- package/dist/hooks/biz/index.js +0 -5
- package/dist/hooks/biz/useBizActiveConversation.d.ts +0 -3
- package/dist/hooks/biz/useBizActiveConversation.d.ts.map +0 -1
- package/dist/hooks/biz/useBizActiveConversation.js +0 -38
- package/dist/hooks/biz/useBizConversationList.d.ts +0 -15
- package/dist/hooks/biz/useBizConversationList.d.ts.map +0 -1
- package/dist/hooks/biz/useBizConversationList.js +0 -48
- package/dist/hooks/biz/useBizConversationListItems.d.ts +0 -8
- package/dist/hooks/biz/useBizConversationListItems.d.ts.map +0 -1
- package/dist/hooks/biz/useBizConversationListItems.js +0 -14
- package/dist/hooks/biz/useBizGlobalEvent.d.ts +0 -2
- package/dist/hooks/biz/useBizGlobalEvent.d.ts.map +0 -1
- package/dist/hooks/biz/useBizGlobalEvent.js +0 -72
- package/dist/hooks/biz/useBizSendMessage.d.ts +0 -4
- package/dist/hooks/biz/useBizSendMessage.d.ts.map +0 -1
- package/dist/hooks/biz/useBizSendMessage.js +0 -70
- package/dist/hooks/biz/useBotFlow.d.ts +0 -17
- package/dist/hooks/biz/useBotFlow.d.ts.map +0 -1
- package/dist/hooks/biz/useBotFlow.js +0 -127
- package/dist/hooks/biz/useConversationDetail.d.ts +0 -3
- package/dist/hooks/biz/useConversationDetail.d.ts.map +0 -1
- package/dist/hooks/biz/useConversationDetail.js +0 -18
- package/dist/hooks/biz/useCreateBizConversation.d.ts +0 -8
- package/dist/hooks/biz/useCreateBizConversation.d.ts.map +0 -1
- package/dist/hooks/biz/useCreateBizConversation.js +0 -15
- package/dist/hooks/biz/useResetBotFlow.d.ts +0 -3
- package/dist/hooks/biz/useResetBotFlow.d.ts.map +0 -1
- package/dist/hooks/biz/useResetBotFlow.js +0 -14
- package/dist/hooks/biz/useRunBotFlow.d.ts +0 -7
- package/dist/hooks/biz/useRunBotFlow.d.ts.map +0 -1
- package/dist/hooks/biz/useRunBotFlow.js +0 -14
- package/dist/hooks/cannedResponse/useFetchCannedCategories.d.ts +0 -3
- package/dist/hooks/cannedResponse/useFetchCannedCategories.d.ts.map +0 -1
- package/dist/hooks/cannedResponse/useFetchCannedCategories.js +0 -13
- package/dist/hooks/cannedResponse/useFetchCannedResponse.d.ts +0 -219
- package/dist/hooks/cannedResponse/useFetchCannedResponse.d.ts.map +0 -1
- package/dist/hooks/cannedResponse/useFetchCannedResponse.js +0 -55
- package/dist/hooks/common/useFetchExternalLink.d.ts +0 -2
- package/dist/hooks/common/useFetchExternalLink.d.ts.map +0 -1
- package/dist/hooks/common/useFetchExternalLink.js +0 -18
- package/dist/hooks/common/useIsSdkMessageReady.d.ts +0 -2
- package/dist/hooks/common/useIsSdkMessageReady.d.ts.map +0 -1
- package/dist/hooks/common/useIsSdkMessageReady.js +0 -7
- package/dist/hooks/conversation/useConversationPreview.d.ts +0 -12
- package/dist/hooks/conversation/useConversationPreview.d.ts.map +0 -1
- package/dist/hooks/conversation/useConversationPreview.js +0 -22
- package/dist/hooks/message/useSendCustomMessage.d.ts +0 -7
- package/dist/hooks/message/useSendCustomMessage.d.ts.map +0 -1
- package/dist/hooks/message/useSendCustomMessage.js +0 -5
- package/dist/locales/en/bizInbox.json +0 -41
- package/dist/locales/vi/biz-inbox.json +0 -39
- package/dist/locales/vi/bizInbox.json +0 -19
- package/dist/screens/biz-message/index.d.ts +0 -8
- package/dist/screens/biz-message/index.d.ts.map +0 -1
- package/dist/screens/biz-message/index.js +0 -30
- package/dist/screens/biz-thread-detail/index.d.ts +0 -9
- package/dist/screens/biz-thread-detail/index.d.ts.map +0 -1
- package/dist/screens/biz-thread-detail/index.js +0 -50
- package/dist/screens/bizMessage/index.d.ts +0 -9
- package/dist/screens/bizMessage/index.d.ts.map +0 -1
- package/dist/screens/bizMessage/index.js +0 -55
- package/dist/screens/bizThreadDetail/index.d.ts +0 -9
- package/dist/screens/bizThreadDetail/index.d.ts.map +0 -1
- package/dist/screens/bizThreadDetail/index.js +0 -36
- package/dist/screens/chatBubble/index.d.ts +0 -7
- package/dist/screens/chatBubble/index.d.ts.map +0 -1
- package/dist/screens/chatBubble/index.js +0 -41
- package/dist/screens/deskMessage/index.d.ts +0 -6
- package/dist/screens/deskMessage/index.d.ts.map +0 -1
- package/dist/screens/deskMessage/index.js +0 -17
- package/dist/services/biz/conversationService.d.ts +0 -3
- package/dist/services/biz/conversationService.d.ts.map +0 -1
- package/dist/services/biz/conversationService.js +0 -10
- package/dist/store/bizConversation.d.ts +0 -18
- package/dist/store/bizConversation.d.ts.map +0 -1
- package/dist/store/bizConversation.js +0 -35
- package/dist/store/bizMessageDraft.d.ts +0 -9
- package/dist/store/bizMessageDraft.d.ts.map +0 -1
- package/dist/store/bizMessageDraft.js +0 -35
- package/dist/store/pinnedMessage.d.ts +0 -4
- package/dist/store/pinnedMessage.d.ts.map +0 -1
- package/dist/store/pinnedMessage.js +0 -17
- package/dist/types/biz.d.ts +0 -128
- package/dist/types/biz.d.ts.map +0 -1
- package/dist/types/biz.js +0 -34
- package/dist/utils/bizConversation.d.ts +0 -15
- package/dist/utils/bizConversation.d.ts.map +0 -1
- package/dist/utils/bizConversation.js +0 -96
- package/dist/utils/bizLink.d.ts +0 -13
- package/dist/utils/bizLink.d.ts.map +0 -1
- package/dist/utils/bizLink.js +0 -77
- package/dist/utils/bizMessage.d.ts +0 -15
- package/dist/utils/bizMessage.d.ts.map +0 -1
- package/dist/utils/bizMessage.js +0 -93
- package/dist/utils/messageEx.d.ts +0 -5
- package/dist/utils/messageEx.d.ts.map +0 -1
- package/dist/utils/messageEx.js +0 -11
- package/dist/utils/openBizLink.d.ts +0 -3
- package/dist/utils/openBizLink.d.ts.map +0 -1
- package/dist/utils/openBizLink.js +0 -19
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useCallback, useEffect, useRef, useState } from "react";
|
|
4
|
-
import { useTranslation } from "react-i18next";
|
|
5
|
-
import clsx from "clsx";
|
|
6
|
-
import { Icon } from "../../components/icon";
|
|
7
|
-
import { useBizSendMessage } from "../../hooks/biz/useBizSendMessage";
|
|
8
|
-
import useBizConversationStore from "../../store/bizConversation";
|
|
9
|
-
import useBizMessageDraftStore from "../../store/bizMessageDraft";
|
|
10
|
-
import { emit } from "../../utils/events";
|
|
11
|
-
const MAX_LINES = 5;
|
|
12
|
-
const CONTAINER_MIN_HEIGHT = 48;
|
|
13
|
-
const BizThreadDetailInput = ({ placeholder, onSendMessage, onInputChange, }) => {
|
|
14
|
-
const { t } = useTranslation("biz-inbox");
|
|
15
|
-
const { sendTextMessage } = useBizSendMessage();
|
|
16
|
-
const conversationId = useBizConversationStore((state) => { var _a; return (_a = state.conversationData) === null || _a === void 0 ? void 0 : _a.conversationId; });
|
|
17
|
-
const setDraft = useBizMessageDraftStore((state) => state.setDraft);
|
|
18
|
-
const clearDraft = useBizMessageDraftStore((state) => state.clearDraft);
|
|
19
|
-
const containerRef = useRef(null);
|
|
20
|
-
const textareaRef = useRef(null);
|
|
21
|
-
const [value, setValue] = useState("");
|
|
22
|
-
const [isFocused, setIsFocused] = useState(false);
|
|
23
|
-
const [isSending, setIsSending] = useState(false);
|
|
24
|
-
const canSend = value.trim().length > 0 && !isSending;
|
|
25
|
-
const getTextareaHeights = useCallback(() => {
|
|
26
|
-
const textarea = textareaRef.current;
|
|
27
|
-
if (!textarea)
|
|
28
|
-
return null;
|
|
29
|
-
const lineHeight = parseFloat(window.getComputedStyle(textarea).lineHeight);
|
|
30
|
-
return {
|
|
31
|
-
lineHeight,
|
|
32
|
-
maxHeight: lineHeight * MAX_LINES,
|
|
33
|
-
};
|
|
34
|
-
}, []);
|
|
35
|
-
const adjustTextareaHeight = useCallback(() => {
|
|
36
|
-
const textarea = textareaRef.current;
|
|
37
|
-
const heights = getTextareaHeights();
|
|
38
|
-
if (!textarea || !heights)
|
|
39
|
-
return;
|
|
40
|
-
textarea.style.height = `${heights.lineHeight}px`;
|
|
41
|
-
const scrollHeight = textarea.scrollHeight;
|
|
42
|
-
const nextHeight = Math.min(Math.max(scrollHeight, heights.lineHeight), heights.maxHeight);
|
|
43
|
-
textarea.style.height = `${nextHeight}px`;
|
|
44
|
-
textarea.style.overflowY =
|
|
45
|
-
scrollHeight > heights.maxHeight ? "auto" : "hidden";
|
|
46
|
-
}, [getTextareaHeights]);
|
|
47
|
-
useEffect(() => {
|
|
48
|
-
var _a;
|
|
49
|
-
if (!conversationId) {
|
|
50
|
-
setValue("");
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
const draft = (_a = useBizMessageDraftStore.getState().drafts[conversationId]) !== null && _a !== void 0 ? _a : "";
|
|
54
|
-
setValue(draft);
|
|
55
|
-
requestAnimationFrame(adjustTextareaHeight);
|
|
56
|
-
}, [conversationId, adjustTextareaHeight]);
|
|
57
|
-
useEffect(() => {
|
|
58
|
-
adjustTextareaHeight();
|
|
59
|
-
}, [value, adjustTextareaHeight]);
|
|
60
|
-
useEffect(() => {
|
|
61
|
-
if (!isFocused)
|
|
62
|
-
return;
|
|
63
|
-
const handlePointerDown = (event) => {
|
|
64
|
-
var _a, _b;
|
|
65
|
-
if ((_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target))
|
|
66
|
-
return;
|
|
67
|
-
(_b = textareaRef.current) === null || _b === void 0 ? void 0 : _b.blur();
|
|
68
|
-
};
|
|
69
|
-
document.addEventListener("pointerdown", handlePointerDown);
|
|
70
|
-
return () => document.removeEventListener("pointerdown", handlePointerDown);
|
|
71
|
-
}, [isFocused]);
|
|
72
|
-
useEffect(() => {
|
|
73
|
-
const viewport = window.visualViewport;
|
|
74
|
-
if (!viewport)
|
|
75
|
-
return;
|
|
76
|
-
const handleViewportChange = () => {
|
|
77
|
-
if (document.activeElement === textareaRef.current) {
|
|
78
|
-
emit("BIZ_CHAT_SCROLL_TO_BOTTOM_IF_AT_BOTTOM");
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
viewport.addEventListener("resize", handleViewportChange);
|
|
82
|
-
return () => viewport.removeEventListener("resize", handleViewportChange);
|
|
83
|
-
}, []);
|
|
84
|
-
const handleChange = (nextValue) => {
|
|
85
|
-
setValue(nextValue);
|
|
86
|
-
if (conversationId) {
|
|
87
|
-
setDraft(conversationId, nextValue);
|
|
88
|
-
}
|
|
89
|
-
onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(nextValue);
|
|
90
|
-
};
|
|
91
|
-
const handleSend = async () => {
|
|
92
|
-
const text = value.trim();
|
|
93
|
-
if (!text || isSending)
|
|
94
|
-
return;
|
|
95
|
-
setIsSending(true);
|
|
96
|
-
try {
|
|
97
|
-
if (onSendMessage) {
|
|
98
|
-
onSendMessage(text);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
const sent = await sendTextMessage(text);
|
|
102
|
-
if (!sent)
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
setValue("");
|
|
106
|
-
if (conversationId) {
|
|
107
|
-
clearDraft(conversationId);
|
|
108
|
-
}
|
|
109
|
-
requestAnimationFrame(adjustTextareaHeight);
|
|
110
|
-
}
|
|
111
|
-
finally {
|
|
112
|
-
setIsSending(false);
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
const handleFocus = () => {
|
|
116
|
-
setIsFocused(true);
|
|
117
|
-
emit("BIZ_CHAT_SCROLL_TO_BOTTOM_IF_AT_BOTTOM");
|
|
118
|
-
};
|
|
119
|
-
const handleBlur = () => {
|
|
120
|
-
setIsFocused(false);
|
|
121
|
-
};
|
|
122
|
-
const insertNewline = (textarea) => {
|
|
123
|
-
const { selectionStart, selectionEnd } = textarea;
|
|
124
|
-
const nextValue = value.slice(0, selectionStart) + "\n" + value.slice(selectionEnd);
|
|
125
|
-
handleChange(nextValue);
|
|
126
|
-
requestAnimationFrame(() => {
|
|
127
|
-
textarea.selectionStart = selectionStart + 1;
|
|
128
|
-
textarea.selectionEnd = selectionStart + 1;
|
|
129
|
-
adjustTextareaHeight();
|
|
130
|
-
});
|
|
131
|
-
};
|
|
132
|
-
const handleKeyDown = (event) => {
|
|
133
|
-
if (event.key !== "Enter")
|
|
134
|
-
return;
|
|
135
|
-
if (event.shiftKey) {
|
|
136
|
-
event.preventDefault();
|
|
137
|
-
insertNewline(event.currentTarget);
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
event.preventDefault();
|
|
141
|
-
void handleSend();
|
|
142
|
-
};
|
|
143
|
-
return (_jsx("div", { ref: containerRef, "data-testid": "biz-thread-detail-input", className: "flex w-full shrink-0 flex-col bg-[rgba(131,137,157,0.05)]", children: _jsxs("div", { className: "flex items-end gap-3 px-3 py-2", children: [_jsx("div", { className: clsx("flex min-w-0 flex-1 overflow-hidden rounded-xl border bg-white transition-shadow", isFocused
|
|
144
|
-
? "border-[#607CFB] shadow-[0px_0px_2px_rgba(27,63,228,0.5)]"
|
|
145
|
-
: "border-[#DDDEDF]"), style: { minHeight: CONTAINER_MIN_HEIGHT }, children: _jsx("div", { className: "flex min-w-0 flex-[1_0_0] items-center gap-2 self-stretch px-3 py-1", children: _jsx("textarea", { ref: textareaRef, value: value, rows: 1, onChange: (event) => handleChange(event.target.value), onFocus: handleFocus, onBlur: handleBlur, onKeyDown: handleKeyDown, placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : t("thread_detail.input_placeholder"), "data-testid": "biz-thread-detail-message-input", className: "biz-message-input-scrollbar min-h-0 min-w-0 flex-1 resize-none bg-transparent text-[16px] leading-[1.6] tracking-[0.16px] text-black outline-none placeholder:text-[#747B7E]" }) }) }), _jsx("div", { className: "flex shrink-0 items-center pb-1", children: _jsx("button", { type: "button", onClick: () => void handleSend(), disabled: !canSend, "data-testid": "biz-thread-detail-send", className: clsx("flex h-10 w-10 items-center justify-center rounded-full", canSend ? "bg-[#002BEB]" : "bg-[#002BEB] opacity-25"), children: _jsx(Icon, { icon: "send-b", size: 20, className: "text-white" }) }) })] }) }));
|
|
146
|
-
};
|
|
147
|
-
export default BizThreadDetailInput;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { default as BizThreadDetailHeader } from "./BizThreadDetailHeader";
|
|
2
|
-
export type { BizThreadDetailHeaderProps } from "./BizThreadDetailHeader";
|
|
3
|
-
export { default as BizThreadDetailInput } from "./BizThreadDetailInput";
|
|
4
|
-
export type { BizThreadDetailInputProps } from "./BizThreadDetailInput";
|
|
5
|
-
export { default as BizMessageList } from "./BizMessageList";
|
|
6
|
-
export { default as BizMessageItem } from "./item/BizMessageItem";
|
|
7
|
-
export type { BizMessageItemProps } from "./item/BizMessageItem";
|
|
8
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/bizThreadDetail/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,YAAY,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { default as BizThreadDetailHeader } from "./BizThreadDetailHeader";
|
|
2
|
-
export { default as BizThreadDetailInput } from "./BizThreadDetailInput";
|
|
3
|
-
export { default as BizMessageList } from "./BizMessageList";
|
|
4
|
-
export { default as BizMessageItem } from "./item/BizMessageItem";
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { MessageItem } from "@openim/wasm-client-sdk";
|
|
2
|
-
export interface BizMessageItemProps {
|
|
3
|
-
message: MessageItem;
|
|
4
|
-
allMessages: MessageItem[];
|
|
5
|
-
}
|
|
6
|
-
declare const BizMessageItem: ({ message, allMessages }: BizMessageItemProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
7
|
-
export default BizMessageItem;
|
|
8
|
-
//# sourceMappingURL=BizMessageItem.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BizMessageItem.d.ts","sourceRoot":"","sources":["../../../../src/components/bizThreadDetail/item/BizMessageItem.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAQtD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,EAAE,WAAW,EAAE,CAAC;CAC5B;AA4BD,QAAA,MAAM,cAAc,GAAI,0BAA0B,mBAAmB,mDA6CpE,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { Icon } from "../../../components/icon";
|
|
4
|
-
import useAuthStore from "../../../store/auth";
|
|
5
|
-
import { formatTimestamp } from "../../../utils/common";
|
|
6
|
-
import { getBizMessageDisplay } from "../../../utils/bizMessage";
|
|
7
|
-
import BizMessageBubble from "../BizMessageBubble";
|
|
8
|
-
const BizMessageAvatar = ({ avatarUrl }) => (_jsx("div", { className: "flex shrink-0 items-center pb-4", children: avatarUrl ? (_jsx("img", { src: avatarUrl, alt: "", className: "h-6 w-6 rounded-full object-cover" })) : (_jsx("div", { className: "flex h-6 w-6 items-center justify-center rounded-full bg-[#0C5CFF]", children: _jsx(Icon, { icon: "droppii-o-1", size: 14, className: "text-white" }) })) }));
|
|
9
|
-
const BizMessageTime = ({ sendTime }) => (_jsx("div", { className: "flex w-full items-center px-4 py-1", children: _jsx("div", { className: "flex min-w-0 flex-1 flex-col items-start", children: _jsx("p", { className: "w-full break-words text-center text-[12px] font-normal leading-[160%] tracking-normal text-[#747B7E]", children: formatTimestamp(sendTime, { hasTime: true }) }) }) }));
|
|
10
|
-
const BizMessageItem = ({ message, allMessages }) => {
|
|
11
|
-
const userID = useAuthStore((state) => state.userID);
|
|
12
|
-
if (!userID)
|
|
13
|
-
return null;
|
|
14
|
-
const display = getBizMessageDisplay(message, allMessages, userID);
|
|
15
|
-
if (!display.isMine) {
|
|
16
|
-
return (_jsxs("div", { className: "flex w-full flex-col pb-1", "data-testid": "biz-message-item", children: [display.showTimeBreak && _jsx(BizMessageTime, { sendTime: display.sendTime }), _jsxs("div", { className: "flex w-full items-end pl-3 pr-12", children: [display.showAvatar ? (_jsx(BizMessageAvatar, { avatarUrl: display.senderFaceUrl })) : (_jsx("div", { className: "w-6 shrink-0" })), _jsx("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: _jsx(BizMessageBubble, { isMine: display.isMine, content: display.content, senderName: display.senderName, showSenderName: display.showSenderName, showTip: display.showTip }) })] })] }));
|
|
17
|
-
}
|
|
18
|
-
return (_jsxs("div", { className: "flex w-full flex-col pb-1", "data-testid": "biz-message-item", children: [display.showTimeBreak && _jsx(BizMessageTime, { sendTime: display.sendTime }), _jsx("div", { className: "flex w-full justify-end pl-12 pr-3", children: _jsx("div", { className: "flex min-w-0 max-w-[calc(100%-48px)] flex-col items-end gap-1", children: _jsx(BizMessageBubble, { isMine: display.isMine, content: display.content, showTip: display.showTip }) }) })] }));
|
|
19
|
-
};
|
|
20
|
-
export default BizMessageItem;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
interface ICannedResponseBodyProps {
|
|
2
|
-
search?: string;
|
|
3
|
-
onSelectCannedResponse?: (content: string) => void;
|
|
4
|
-
cannedQuery?: string;
|
|
5
|
-
}
|
|
6
|
-
declare const CannedResponseBody: (props: ICannedResponseBodyProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
-
export default CannedResponseBody;
|
|
8
|
-
//# sourceMappingURL=CannedResponseBody.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CannedResponseBody.d.ts","sourceRoot":"","sources":["../../../src/components/cannedResponse/CannedResponseBody.tsx"],"names":[],"mappings":"AAiBA,UAAU,wBAAwB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AASD,QAAA,MAAM,kBAAkB,GAAI,OAAO,wBAAwB,4CA8M1D,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Empty, Segmented, Spin } from "antd";
|
|
3
|
-
import { useFetchMyTeams } from "../../hooks/team/useFetchMyTeam";
|
|
4
|
-
import { useTranslation } from "react-i18next";
|
|
5
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
6
|
-
import { CannedResponseVisibleScope } from "../../types/chat";
|
|
7
|
-
import TeamItem from "./team/TeamItem";
|
|
8
|
-
import { useFetchCannedResponse } from "../../hooks/cannedResponse/useFetchCannedResponse";
|
|
9
|
-
import InfiniteScroll from "react-infinite-scroll-component";
|
|
10
|
-
import { Icon } from "../../components/icon";
|
|
11
|
-
import { sanitizeHtml } from "../../utils/common";
|
|
12
|
-
import { useDebounce } from "ahooks";
|
|
13
|
-
import clsx from "clsx";
|
|
14
|
-
import emitter from "../../utils/events";
|
|
15
|
-
import { isArray } from "lodash";
|
|
16
|
-
import { useMessageFooterContext } from "../../components/message/footer";
|
|
17
|
-
const parseIndex = (index, length) => {
|
|
18
|
-
if (index === null)
|
|
19
|
-
return null;
|
|
20
|
-
if (index < 0)
|
|
21
|
-
return 0;
|
|
22
|
-
if (index >= length)
|
|
23
|
-
return length - 1;
|
|
24
|
-
return index;
|
|
25
|
-
};
|
|
26
|
-
const CannedResponseBody = (props) => {
|
|
27
|
-
var _a, _b;
|
|
28
|
-
const { search, onSelectCannedResponse, cannedQuery } = props;
|
|
29
|
-
const { activeCannedIndex, setActiveCannedIndex, setMaxActiveCannedIndex } = useMessageFooterContext();
|
|
30
|
-
const itemRefs = useRef([]);
|
|
31
|
-
const { t } = useTranslation();
|
|
32
|
-
const { data: myTeams, isLoading: isLoadingTeams } = useFetchMyTeams();
|
|
33
|
-
const [scope, setScope] = useState(CannedResponseVisibleScope.TEAM);
|
|
34
|
-
const [selectedTeamId, setSelectedTeamId] = useState(undefined);
|
|
35
|
-
const [selectedCategoryId, setSelectedCategoryId] = useState(undefined);
|
|
36
|
-
const cannedQueryDebounced = useDebounce(cannedQuery, { wait: 300 });
|
|
37
|
-
const { dataFlatten: cannedResponses, fetchNextPage, hasNextPage, } = useFetchCannedResponse({
|
|
38
|
-
visibilityScope: scope,
|
|
39
|
-
teamId: selectedTeamId,
|
|
40
|
-
categoryId: selectedCategoryId,
|
|
41
|
-
shortcut: search || cannedQueryDebounced || "",
|
|
42
|
-
});
|
|
43
|
-
const validActiveCannedIndex = useMemo(() => {
|
|
44
|
-
return parseIndex(activeCannedIndex, (cannedResponses === null || cannedResponses === void 0 ? void 0 : cannedResponses.length) || 0);
|
|
45
|
-
}, [activeCannedIndex, cannedResponses === null || cannedResponses === void 0 ? void 0 : cannedResponses.length]);
|
|
46
|
-
const options = useMemo(() => {
|
|
47
|
-
return [
|
|
48
|
-
{ label: t("team"), value: CannedResponseVisibleScope.TEAM },
|
|
49
|
-
{ label: t("personal"), value: CannedResponseVisibleScope.PRIVATE },
|
|
50
|
-
];
|
|
51
|
-
}, [t]);
|
|
52
|
-
const onSelectCategory = useCallback((teamId, categoryId) => {
|
|
53
|
-
setSelectedTeamId(teamId);
|
|
54
|
-
setSelectedCategoryId(categoryId);
|
|
55
|
-
}, []);
|
|
56
|
-
const renderTeamItem = useCallback((team, index) => {
|
|
57
|
-
return (_jsx(TeamItem, { team: team, onSelectCategory: onSelectCategory, selectedTeamId: selectedTeamId, selectedCategoryId: selectedCategoryId, defaultOpen: index === 0 }, team === null || team === void 0 ? void 0 : team.teamId));
|
|
58
|
-
}, [onSelectCategory, selectedTeamId, selectedCategoryId]);
|
|
59
|
-
useEffect(() => {
|
|
60
|
-
if (!isLoadingTeams && myTeams && myTeams.length > 0) {
|
|
61
|
-
setSelectedTeamId(myTeams[0].teamId);
|
|
62
|
-
}
|
|
63
|
-
}, [isLoadingTeams, myTeams]);
|
|
64
|
-
useEffect(() => {
|
|
65
|
-
const handler = (index) => {
|
|
66
|
-
var _a;
|
|
67
|
-
const validIndex = parseIndex(index, cannedResponses === null || cannedResponses === void 0 ? void 0 : cannedResponses.length);
|
|
68
|
-
if (validIndex !== null && !!(cannedResponses === null || cannedResponses === void 0 ? void 0 : cannedResponses[validIndex])) {
|
|
69
|
-
const htmlContent = ((_a = cannedResponses === null || cannedResponses === void 0 ? void 0 : cannedResponses[validIndex]) === null || _a === void 0 ? void 0 : _a.content) || "";
|
|
70
|
-
// 🔒 Sanitize HTML to prevent XSS attacks
|
|
71
|
-
const sanitizedContent = sanitizeHtml(htmlContent);
|
|
72
|
-
onSelectCannedResponse === null || onSelectCannedResponse === void 0 ? void 0 : onSelectCannedResponse(sanitizedContent);
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
emitter.on("CANNED_RESPONSE_SELECT", handler);
|
|
76
|
-
return () => {
|
|
77
|
-
emitter.off("CANNED_RESPONSE_SELECT", handler);
|
|
78
|
-
};
|
|
79
|
-
}, [cannedResponses, onSelectCannedResponse]);
|
|
80
|
-
useEffect(() => {
|
|
81
|
-
setActiveCannedIndex(0);
|
|
82
|
-
}, [search, cannedQueryDebounced, setActiveCannedIndex]);
|
|
83
|
-
useEffect(() => {
|
|
84
|
-
var _a, _b;
|
|
85
|
-
if (activeCannedIndex !== null) {
|
|
86
|
-
(_b = (_a = itemRefs.current) === null || _a === void 0 ? void 0 : _a[activeCannedIndex]) === null || _b === void 0 ? void 0 : _b.scrollIntoView({
|
|
87
|
-
block: "nearest",
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
}, [activeCannedIndex]);
|
|
91
|
-
useEffect(() => {
|
|
92
|
-
setMaxActiveCannedIndex((cannedResponses === null || cannedResponses === void 0 ? void 0 : cannedResponses.length) - 1 > 0 ? (cannedResponses === null || cannedResponses === void 0 ? void 0 : cannedResponses.length) - 1 : 0);
|
|
93
|
-
}, [cannedResponses, setMaxActiveCannedIndex]);
|
|
94
|
-
return (_jsxs("div", { className: "flex flex-1 flex-row h-[400px]", children: [_jsxs("div", { className: "w-[170px] p-2 border-r border-gray-200", children: [_jsx(Segmented, { options: options, block: true, size: "small", value: scope, onChange: setScope }), _jsx("div", { className: "overflow-y-auto h-full", children: scope === CannedResponseVisibleScope.TEAM && (_jsx("div", { className: "mt-1 flex flex-col", children: (_a = myTeams === null || myTeams === void 0 ? void 0 : myTeams.map) === null || _a === void 0 ? void 0 : _a.call(myTeams, (team, index) => renderTeamItem(team, index)) })) })] }), _jsxs("div", { id: "scrollableCannedDiv", className: "flex flex-col flex-1 h-full overflow-y-auto", children: [!!cannedQuery && !search && (_jsx("div", { className: "px-3 py-2 border-b border-gray-200", children: _jsxs("span", { className: "text-sm text-gray-500", children: [t("canned_response_quick_search_placeholder"), _jsx("span", { className: "text-blue-600", children: ` #${cannedQuery}` })] }) })), _jsx(InfiniteScroll, { dataLength: (cannedResponses === null || cannedResponses === void 0 ? void 0 : cannedResponses.length) || 0, next: fetchNextPage, hasMore: hasNextPage, loader: _jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) }), scrollableTarget: "scrollableCannedDiv", children: !isArray(cannedResponses) || (cannedResponses === null || cannedResponses === void 0 ? void 0 : cannedResponses.length) === 0 ? (_jsx("div", { className: "flex items-center justify-center py-12", children: _jsx(Empty, { image: _jsx(Icon, { icon: "chat-square-b", size: 80, className: "text-gray-300" }), description: t("no_canned_response") }) })) : ((_b = cannedResponses === null || cannedResponses === void 0 ? void 0 : cannedResponses.map) === null || _b === void 0 ? void 0 : _b.call(cannedResponses, (canned, index) => {
|
|
95
|
-
var _a, _b;
|
|
96
|
-
const isActive = index === validActiveCannedIndex;
|
|
97
|
-
const htmlContent = (canned === null || canned === void 0 ? void 0 : canned.content) || "";
|
|
98
|
-
// 🔒 Sanitize HTML to prevent XSS attacks
|
|
99
|
-
const sanitizedContent = sanitizeHtml(htmlContent);
|
|
100
|
-
return (_jsxs("div", { ref: (el) => {
|
|
101
|
-
itemRefs.current[index] = el;
|
|
102
|
-
}, className: clsx("flex flex-col flex-1 px-3 py-2 cursor-pointer hover:bg-blue-100 w-full border-b border-gray-200", isActive && "bg-blue-100"), onClick: () => onSelectCannedResponse === null || onSelectCannedResponse === void 0 ? void 0 : onSelectCannedResponse(sanitizedContent), children: [_jsxs("span", { className: "text-xs truncate text-gray-500", children: [`${((_a = canned === null || canned === void 0 ? void 0 : canned.category) === null || _a === void 0 ? void 0 : _a.name)
|
|
103
|
-
? `${(_b = canned === null || canned === void 0 ? void 0 : canned.category) === null || _b === void 0 ? void 0 : _b.name} / `
|
|
104
|
-
: ""}`, _jsx("span", { className: "text-black", children: `${(canned === null || canned === void 0 ? void 0 : canned.name) || ""} ` }), _jsx("span", { children: "/" }), _jsx("span", { className: "text-blue-500", children: ` #${(canned === null || canned === void 0 ? void 0 : canned.shortcut) || ""}` })] }), _jsx("div", { dangerouslySetInnerHTML: {
|
|
105
|
-
__html: sanitizedContent,
|
|
106
|
-
}, className: "text-sm mt-1" })] }, canned === null || canned === void 0 ? void 0 : canned.id));
|
|
107
|
-
})) })] })] }));
|
|
108
|
-
};
|
|
109
|
-
export default CannedResponseBody;
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
interface ICannedResponseFooterProps {
|
|
2
|
-
openCreateCannedModal?: () => void;
|
|
3
|
-
}
|
|
4
|
-
declare const CannedResponseFooter: ({ openCreateCannedModal, }: ICannedResponseFooterProps) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
-
export default CannedResponseFooter;
|
|
6
|
-
//# sourceMappingURL=CannedResponseFooter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CannedResponseFooter.d.ts","sourceRoot":"","sources":["../../../src/components/cannedResponse/CannedResponseFooter.tsx"],"names":[],"mappings":"AAGA,UAAU,0BAA0B;IAClC,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,QAAA,MAAM,oBAAoB,GAAI,4BAE3B,0BAA0B,4CAgB5B,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useTranslation } from "react-i18next";
|
|
3
|
-
import { Icon } from "../../components/icon";
|
|
4
|
-
const CannedResponseFooter = ({ openCreateCannedModal, }) => {
|
|
5
|
-
const { t } = useTranslation();
|
|
6
|
-
return (_jsx("div", { className: "flex items-center justify-end border-t border-gray-200 p-2", children: _jsxs("div", { className: "flex cursor-pointer items-center gap-1", onClick: openCreateCannedModal, children: [_jsx(Icon, { icon: "plus-circle-o", size: 16, className: "text-blue-500" }), _jsx("span", { className: "text-sm text-blue-500", children: t("add_canned_response") })] }) }));
|
|
7
|
-
};
|
|
8
|
-
export default CannedResponseFooter;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
interface ICannedResponseHeaderProps {
|
|
2
|
-
onClose?: () => void;
|
|
3
|
-
search?: string;
|
|
4
|
-
setSearch?: (search: string) => void;
|
|
5
|
-
}
|
|
6
|
-
declare const CannedResponseHeader: (props: ICannedResponseHeaderProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
-
export default CannedResponseHeader;
|
|
8
|
-
//# sourceMappingURL=CannedResponseHeader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CannedResponseHeader.d.ts","sourceRoot":"","sources":["../../../src/components/cannedResponse/CannedResponseHeader.tsx"],"names":[],"mappings":"AAKA,UAAU,0BAA0B;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED,QAAA,MAAM,oBAAoB,GAAI,OAAO,0BAA0B,4CA+B9D,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useTranslation } from "react-i18next";
|
|
3
|
-
import CannedResponseIcon from "../../assets/svg/cannedResponse";
|
|
4
|
-
import { Button, Input } from "antd";
|
|
5
|
-
import { Icon } from "../../components/icon";
|
|
6
|
-
const CannedResponseHeader = (props) => {
|
|
7
|
-
const { onClose, search, setSearch } = props;
|
|
8
|
-
const { t } = useTranslation();
|
|
9
|
-
return (_jsxs("div", { className: "px-3 py-2 flex flex-row items-center gap-2 border-b border-gray-200", children: [_jsxs("div", { className: "flex flex-row items-center gap-2", children: [_jsx(CannedResponseIcon, { size: 20, className: "text-blue-500" }), _jsx("span", { className: "text-base font-medium", children: t("canned_responses") })] }), _jsxs("div", { className: "flex flex-1 flex-row items-center justify-end gap-2", children: [_jsx(Input, { size: "large", placeholder: t("search"), prefix: _jsx(Icon, { icon: "search-o", size: 20, className: "text-gray-500" }), style: { width: 260 }, className: "text-sm", value: search, onChange: (e) => setSearch === null || setSearch === void 0 ? void 0 : setSearch(e.target.value) }), _jsx(Button, { type: "text", shape: "default", className: "text-gray-500 w-8 h-8 p-0", onClick: onClose, children: _jsx(Icon, { icon: "close-o", size: 16 }) })] })] }));
|
|
10
|
-
};
|
|
11
|
-
export default CannedResponseHeader;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
interface ICannedResponseProps {
|
|
2
|
-
onClose?: () => void;
|
|
3
|
-
openCreateCannedModal?: () => void;
|
|
4
|
-
cannedQuery?: string;
|
|
5
|
-
}
|
|
6
|
-
declare const CannedResponse: ({ onClose, openCreateCannedModal, cannedQuery, }: ICannedResponseProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
-
export default CannedResponse;
|
|
8
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/cannedResponse/index.tsx"],"names":[],"mappings":"AASA,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,QAAA,MAAM,cAAc,GAAI,kDAIrB,oBAAoB,4CAgDtB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useDebounce } from "ahooks";
|
|
3
|
-
import CannedResponseBody from "./CannedResponseBody";
|
|
4
|
-
import CannedResponseHeader from "./CannedResponseHeader";
|
|
5
|
-
import { useCallback, useState } from "react";
|
|
6
|
-
import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
|
|
7
|
-
import { $getRoot } from "lexical";
|
|
8
|
-
import { $generateNodesFromDOM } from "@lexical/html";
|
|
9
|
-
import CannedResponseFooter from "./CannedResponseFooter";
|
|
10
|
-
const CannedResponse = ({ onClose, openCreateCannedModal, cannedQuery = "", }) => {
|
|
11
|
-
const [editor] = useLexicalComposerContext();
|
|
12
|
-
const [search, setSearch] = useState("");
|
|
13
|
-
const debouncedSearch = useDebounce(search, {
|
|
14
|
-
wait: 300,
|
|
15
|
-
});
|
|
16
|
-
const onSelectCannedResponse = useCallback((content) => {
|
|
17
|
-
editor.update(() => {
|
|
18
|
-
const root = $getRoot();
|
|
19
|
-
// 1. Clear content cũ
|
|
20
|
-
root.clear();
|
|
21
|
-
// 2. Parse HTML -> DOM
|
|
22
|
-
const parser = new DOMParser();
|
|
23
|
-
const dom = parser.parseFromString(content, "text/html");
|
|
24
|
-
// 3. Convert DOM -> Lexical nodes
|
|
25
|
-
const nodes = $generateNodesFromDOM(editor, dom);
|
|
26
|
-
// 4. Append vào editor
|
|
27
|
-
root.append(...nodes);
|
|
28
|
-
// 5. Move cursor về cuối (optional nhưng nên có)
|
|
29
|
-
root.selectEnd();
|
|
30
|
-
});
|
|
31
|
-
}, [editor]);
|
|
32
|
-
return (_jsxs("div", { className: "w-[600px]", children: [_jsx(CannedResponseHeader, { onClose: onClose, search: search, setSearch: setSearch }), _jsx(CannedResponseBody, { search: debouncedSearch, onSelectCannedResponse: onSelectCannedResponse, cannedQuery: cannedQuery }), _jsx(CannedResponseFooter, { openCreateCannedModal: openCreateCannedModal })] }));
|
|
33
|
-
};
|
|
34
|
-
export default CannedResponse;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { IMyTeamResponse } from "../../../types/dto";
|
|
2
|
-
interface TeamItemProps {
|
|
3
|
-
team: IMyTeamResponse;
|
|
4
|
-
onSelectCategory?: (teamId: string, categoryId?: string) => void;
|
|
5
|
-
selectedTeamId?: string;
|
|
6
|
-
selectedCategoryId?: string;
|
|
7
|
-
defaultOpen?: boolean;
|
|
8
|
-
}
|
|
9
|
-
declare const TeamItem: ({ team, onSelectCategory, selectedTeamId, selectedCategoryId, defaultOpen, }: TeamItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
-
export default TeamItem;
|
|
11
|
-
//# sourceMappingURL=TeamItem.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TeamItem.d.ts","sourceRoot":"","sources":["../../../../src/components/cannedResponse/team/TeamItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQ9C,UAAU,aAAa;IACrB,IAAI,EAAE,eAAe,CAAC;IACtB,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,QAAA,MAAM,QAAQ,GAAI,8EAMf,aAAa,4CAiFf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useFetchCannedCategories } from "../../../hooks/cannedResponse/useFetchCannedCategories";
|
|
3
|
-
import { useBoolean } from "ahooks";
|
|
4
|
-
import { Icon } from "../../../components/icon";
|
|
5
|
-
import clsx from "clsx";
|
|
6
|
-
import { useTranslation } from "react-i18next";
|
|
7
|
-
import { useCallback } from "react";
|
|
8
|
-
const TeamItem = ({ team, onSelectCategory, selectedTeamId, selectedCategoryId, defaultOpen = false, }) => {
|
|
9
|
-
const { t } = useTranslation();
|
|
10
|
-
const [isOpen, { toggle }] = useBoolean(defaultOpen);
|
|
11
|
-
const { data: categories } = useFetchCannedCategories(team.teamId, isOpen);
|
|
12
|
-
const onToggle = useCallback(() => {
|
|
13
|
-
if (!isOpen && !selectedTeamId && !!(team === null || team === void 0 ? void 0 : team.teamId)) {
|
|
14
|
-
onSelectCategory === null || onSelectCategory === void 0 ? void 0 : onSelectCategory(team === null || team === void 0 ? void 0 : team.teamId, undefined);
|
|
15
|
-
}
|
|
16
|
-
toggle();
|
|
17
|
-
}, [toggle, isOpen, onSelectCategory, team === null || team === void 0 ? void 0 : team.teamId, selectedTeamId]);
|
|
18
|
-
return (_jsxs("div", { className: "border-b border-gray-200", children: [_jsxs("div", { className: "flex items-center justify-between py-2 cursor-pointer", onClick: onToggle, children: [_jsx("span", { className: "text-sm font-medium truncate flex-1", children: (team === null || team === void 0 ? void 0 : team.name) || "" }), _jsx(Icon, { icon: isOpen ? "angle-up-b" : "angle-down-b", size: 16, className: clsx(!isOpen && "text-gray-500") })] }), isOpen && (_jsxs("div", { className: "mb-2", children: [_jsx("div", { className: clsx("px-3 py-1 cursor-pointer hover:bg-gray-100 rounded-md", selectedTeamId &&
|
|
19
|
-
selectedTeamId === (team === null || team === void 0 ? void 0 : team.teamId) &&
|
|
20
|
-
!selectedCategoryId &&
|
|
21
|
-
"bg-gray-100"), onClick: () => onSelectCategory === null || onSelectCategory === void 0 ? void 0 : onSelectCategory(team === null || team === void 0 ? void 0 : team.teamId, undefined), children: _jsx("span", { className: clsx("text-sm truncate", selectedTeamId === (team === null || team === void 0 ? void 0 : team.teamId) && !selectedCategoryId
|
|
22
|
-
? "font-medium text-blue-500"
|
|
23
|
-
: "text-gray-500"), children: t("all") }) }, `${team.teamId}-all`), categories === null || categories === void 0 ? void 0 : categories.map((category) => {
|
|
24
|
-
const isSelected = selectedTeamId &&
|
|
25
|
-
selectedCategoryId &&
|
|
26
|
-
selectedTeamId === (category === null || category === void 0 ? void 0 : category.teamId) &&
|
|
27
|
-
selectedCategoryId === (category === null || category === void 0 ? void 0 : category.id);
|
|
28
|
-
return (_jsx("div", { className: clsx("px-3 py-1 cursor-pointer hover:bg-gray-100 rounded-md", isSelected && "bg-gray-100"), onClick: () => onSelectCategory === null || onSelectCategory === void 0 ? void 0 : onSelectCategory(team === null || team === void 0 ? void 0 : team.teamId, category === null || category === void 0 ? void 0 : category.id), children: _jsx("span", { className: clsx("text-sm truncate", isSelected ? "font-medium text-blue-500" : "text-gray-500"), children: category === null || category === void 0 ? void 0 : category.name }) }, `${team.teamId}-${category.id}`));
|
|
29
|
-
})] }))] }));
|
|
30
|
-
};
|
|
31
|
-
export default TeamItem;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ChatBubble.d.ts","sourceRoot":"","sources":["../../../src/components/chatBubble/ChatBubble.tsx"],"names":[],"mappings":"AAQA,UAAU,eAAe;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,UAAU,GAAI,eAAe,eAAe,4CA4FjD,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { FloatButton, Drawer, Popover } from "antd";
|
|
4
|
-
import { MessageOutlined, CloseOutlined } from "@ant-design/icons";
|
|
5
|
-
import MessageList from "../../components/message/MessageList";
|
|
6
|
-
import useConversationStore from "../../store/conversation";
|
|
7
|
-
import { useIsMobile } from "../../hooks/common/useIsMobile";
|
|
8
|
-
import { useBoolean } from "ahooks";
|
|
9
|
-
const ChatBubble = ({ className }) => {
|
|
10
|
-
const isMobile = useIsMobile();
|
|
11
|
-
const selectedConversationId = useConversationStore((state) => state.selectedConversationId);
|
|
12
|
-
const searchClientMsgID = useConversationStore((state) => state.searchClientMsgID);
|
|
13
|
-
const unreadCount = useConversationStore((state) => { var _a; return ((_a = state.conversationData) === null || _a === void 0 ? void 0 : _a.unreadCount) || 0; });
|
|
14
|
-
const displayUnread = unreadCount > 99 ? "99+" : unreadCount;
|
|
15
|
-
const [isOpen, { setFalse: setOpenFalse, toggle: toggleChat }] = useBoolean(false);
|
|
16
|
-
if (isMobile) {
|
|
17
|
-
return (_jsxs(_Fragment, { children: [_jsx(FloatButton, { icon: isOpen ? _jsx(CloseOutlined, {}) : _jsx(MessageOutlined, {}), type: "primary", style: {
|
|
18
|
-
right: 24,
|
|
19
|
-
bottom: 24,
|
|
20
|
-
width: 60,
|
|
21
|
-
height: 60,
|
|
22
|
-
}, onClick: toggleChat, className: className, badge: { count: displayUnread, color: "red" } }), _jsx(Drawer, { placement: "right", onClose: setOpenFalse, open: isOpen, mask: true, closable: false, styles: {
|
|
23
|
-
body: { padding: 0 },
|
|
24
|
-
}, classNames: {
|
|
25
|
-
wrapper: "!z-[9999]",
|
|
26
|
-
}, width: "100%", push: false, children: _jsx(MessageList, { conversationId: selectedConversationId, className: "flex-1", onClose: setOpenFalse, searchClientMsgID: searchClientMsgID }) })] }));
|
|
27
|
-
}
|
|
28
|
-
return (_jsx(Popover, { placement: "topLeft", trigger: "click", open: isOpen, destroyOnHidden: true, content: () => (_jsx("div", { className: "w-[400px] h-[600px]", children: _jsx(MessageList, { conversationId: selectedConversationId, className: "flex-1", onClose: setOpenFalse, searchClientMsgID: searchClientMsgID }) })), styles: { body: { padding: 0 } }, children: _jsx(FloatButton, { icon: isOpen ? _jsx(CloseOutlined, {}) : _jsx(MessageOutlined, {}), type: "primary", style: {
|
|
29
|
-
right: 24,
|
|
30
|
-
bottom: 24,
|
|
31
|
-
width: 60,
|
|
32
|
-
height: 60,
|
|
33
|
-
}, className: className, badge: { count: displayUnread, color: "red" }, onClick: toggleChat }) }));
|
|
34
|
-
};
|
|
35
|
-
export default ChatBubble;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FileCollection.d.ts","sourceRoot":"","sources":["../../../src/components/mediaCollection/FileCollection.tsx"],"names":[],"mappings":"AAaA,QAAA,MAAM,cAAc,+CAqGnB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { MessageType } from "@openim/wasm-client-sdk";
|
|
3
|
-
import { useSearchMessage } from "../../hooks/search/useSearchMessage";
|
|
4
|
-
import InfiniteScroll from "react-infinite-scroll-component";
|
|
5
|
-
import { Empty, Spin } from "antd";
|
|
6
|
-
import { useCallback } from "react";
|
|
7
|
-
import dayjs from "dayjs";
|
|
8
|
-
import useConversationStore from "../../store/conversation";
|
|
9
|
-
import { useTranslation } from "react-i18next";
|
|
10
|
-
import { documentIcon } from "../../assets/svg";
|
|
11
|
-
import { shortenFileName } from "../../components/message/footer/FilePreview";
|
|
12
|
-
import { renderFileSize } from "../../utils/common";
|
|
13
|
-
const FileCollection = () => {
|
|
14
|
-
const { t } = useTranslation();
|
|
15
|
-
const selectedSourceId = useConversationStore((state) => state.selectedSourceId);
|
|
16
|
-
const { groupedData, fetchNextPage, hasNextPage, dataFlatten, isLoading } = useSearchMessage({
|
|
17
|
-
payload: {
|
|
18
|
-
recvID: selectedSourceId,
|
|
19
|
-
contentType: MessageType.FileMessage,
|
|
20
|
-
},
|
|
21
|
-
});
|
|
22
|
-
const handleDownload = (url, fileName) => {
|
|
23
|
-
if (!url) {
|
|
24
|
-
console.warn("Không có link file để tải");
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
const link = document.createElement("a");
|
|
28
|
-
link.href = url;
|
|
29
|
-
if (fileName) {
|
|
30
|
-
link.setAttribute("download", fileName);
|
|
31
|
-
}
|
|
32
|
-
link.setAttribute("target", "_blank");
|
|
33
|
-
link.setAttribute("rel", "noopener noreferrer");
|
|
34
|
-
document.body.appendChild(link);
|
|
35
|
-
link.click();
|
|
36
|
-
link.remove();
|
|
37
|
-
};
|
|
38
|
-
const renderItem = useCallback((date, items) => {
|
|
39
|
-
return (_jsxs("div", { className: "px-3", children: [_jsx("span", { className: "text-sm font-medium text-gray-500", children: dayjs(date).format("DD MMMM, YYYY") }), _jsx("div", { className: "flex flex-col gap-1 mt-2", children: items.map((item) => {
|
|
40
|
-
var _a, _b, _c;
|
|
41
|
-
const fileContent = JSON.parse(((_a = item === null || item === void 0 ? void 0 : item.chatLog) === null || _a === void 0 ? void 0 : _a.content) || "{}");
|
|
42
|
-
return (_jsxs("div", { className: "relative flex flex-row items-center gap-2 align-center bg-gray-100 rounded-md p-2 cursor-pointer", onClick: () => handleDownload((fileContent === null || fileContent === void 0 ? void 0 : fileContent.sourceUrl) || "", (fileContent === null || fileContent === void 0 ? void 0 : fileContent.fileName) || ""), children: [documentIcon, _jsxs("div", { className: "flex flex-col flex-1", children: [_jsx("span", { className: "text-sm font-medium", children: shortenFileName((fileContent === null || fileContent === void 0 ? void 0 : fileContent.fileName) || "", {
|
|
43
|
-
maxLength: 32,
|
|
44
|
-
}) }), _jsx("span", { className: "text-xs text-gray-500", children: `${renderFileSize(fileContent.fileSize || 0)} - ${dayjs(((_b = item === null || item === void 0 ? void 0 : item.chatLog) === null || _b === void 0 ? void 0 : _b.sendTime) || 0).format("HH:mm")}` })] })] }, (_c = item.chatLog) === null || _c === void 0 ? void 0 : _c.clientMsgID));
|
|
45
|
-
}) })] }, date));
|
|
46
|
-
}, []);
|
|
47
|
-
if (dataFlatten.length === 0 && !isLoading)
|
|
48
|
-
return _jsx(Empty, { description: t("no_media_files") });
|
|
49
|
-
if (isLoading)
|
|
50
|
-
return (_jsx("div", { className: "flex items-center justify-center", children: _jsx(Spin, {}) }));
|
|
51
|
-
return (_jsx("div", { id: "scrollableFileDiv", className: "h-full overflow-auto", children: _jsx(InfiniteScroll, { dataLength: Object.keys(groupedData).length, next: fetchNextPage, hasMore: hasNextPage, loader: _jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) }), scrollableTarget: "scrollableFileDiv", children: Object.entries(groupedData).map(([date, items]) => renderItem(date, items)) }) }));
|
|
52
|
-
};
|
|
53
|
-
export default FileCollection;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ImageCollection.d.ts","sourceRoot":"","sources":["../../../src/components/mediaCollection/ImageCollection.tsx"],"names":[],"mappings":"AAYA,QAAA,MAAM,eAAe,+CA+GpB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|