@droppii-org/chat-sdk 0.6.55 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/canned-response/CannedResponseBody.d.ts.map +1 -1
- package/dist/components/canned-response/CannedResponseBody.js +4 -3
- package/dist/components/canned-response/CannedResponsePanel.d.ts +9 -0
- package/dist/components/canned-response/CannedResponsePanel.d.ts.map +1 -0
- package/dist/components/canned-response/CannedResponsePanel.js +72 -0
- package/dist/components/canned-response/CannedResponseRow.d.ts +10 -0
- package/dist/components/canned-response/CannedResponseRow.d.ts.map +1 -0
- package/dist/components/canned-response/CannedResponseRow.js +6 -0
- package/dist/components/canned-response/CannedScopeChips.d.ts +10 -0
- package/dist/components/canned-response/CannedScopeChips.d.ts.map +1 -0
- package/dist/components/canned-response/CannedScopeChips.js +34 -0
- package/dist/components/canned-response/cannedScopes.d.ts +16 -0
- package/dist/components/canned-response/cannedScopes.d.ts.map +1 -0
- package/dist/components/canned-response/cannedScopes.js +39 -0
- package/dist/components/canned-response/index.d.ts.map +1 -1
- package/dist/components/canned-response/index.js +11 -10
- package/dist/components/canned-response/insertCannedContent.d.ts +7 -0
- package/dist/components/canned-response/insertCannedContent.d.ts.map +1 -0
- package/dist/components/canned-response/insertCannedContent.js +39 -0
- package/dist/components/canned-response/team/TeamItem.d.ts.map +1 -1
- package/dist/components/canned-response/team/TeamItem.js +5 -4
- package/dist/components/common/ConfirmModal.d.ts +13 -1
- package/dist/components/common/ConfirmModal.d.ts.map +1 -1
- package/dist/components/common/ConfirmModal.js +24 -6
- package/dist/components/common/DeskPanelDrawer.d.ts +17 -0
- package/dist/components/common/DeskPanelDrawer.d.ts.map +1 -0
- package/dist/components/common/DeskPanelDrawer.js +21 -0
- package/dist/components/common/DeskSidePanel.d.ts +17 -0
- package/dist/components/common/DeskSidePanel.d.ts.map +1 -0
- package/dist/components/common/DeskSidePanel.js +23 -0
- package/dist/components/common/TintedAvatar.d.ts +11 -0
- package/dist/components/common/TintedAvatar.d.ts.map +1 -0
- package/dist/components/common/TintedAvatar.js +17 -0
- package/dist/components/compose/ComposeNewMessageModal.d.ts.map +1 -1
- package/dist/components/compose/ComposeNewMessageModal.js +11 -1
- package/dist/components/conversation/ConversationByGroupItem.d.ts.map +1 -1
- package/dist/components/conversation/ConversationByGroupItem.js +10 -6
- package/dist/components/conversation/ConversationBySessionItem.d.ts +4 -1
- package/dist/components/conversation/ConversationBySessionItem.d.ts.map +1 -1
- package/dist/components/conversation/ConversationBySessionItem.js +36 -10
- package/dist/components/conversation/DeskConversationList.d.ts.map +1 -1
- package/dist/components/conversation/DeskConversationList.js +44 -29
- package/dist/components/conversation/DeskConversationRow.d.ts +19 -0
- package/dist/components/conversation/DeskConversationRow.d.ts.map +1 -0
- package/dist/components/conversation/DeskConversationRow.js +18 -0
- package/dist/components/conversation/DeskListEmptyState.d.ts +6 -0
- package/dist/components/conversation/DeskListEmptyState.d.ts.map +1 -0
- package/dist/components/conversation/DeskListEmptyState.js +11 -0
- package/dist/components/conversation/DeskListHeader.d.ts +14 -0
- package/dist/components/conversation/DeskListHeader.d.ts.map +1 -0
- package/dist/components/conversation/DeskListHeader.js +39 -0
- package/dist/components/conversation/DeskListSkeleton.d.ts +6 -0
- package/dist/components/conversation/DeskListSkeleton.d.ts.map +1 -0
- package/dist/components/conversation/DeskListSkeleton.js +9 -0
- package/dist/components/conversation/DeskRowAvatar.d.ts +8 -0
- package/dist/components/conversation/DeskRowAvatar.d.ts.map +1 -0
- package/dist/components/conversation/DeskRowAvatar.js +6 -0
- package/dist/components/conversation/RowChip.d.ts +14 -0
- package/dist/components/conversation/RowChip.d.ts.map +1 -0
- package/dist/components/conversation/RowChip.js +11 -0
- package/dist/components/conversation/avatarTint.d.ts +6 -0
- package/dist/components/conversation/avatarTint.d.ts.map +1 -0
- package/dist/components/conversation/avatarTint.js +27 -0
- package/dist/components/conversation/folderEmptyState.d.ts +2 -0
- package/dist/components/conversation/folderEmptyState.d.ts.map +1 -0
- package/dist/components/conversation/folderEmptyState.js +14 -0
- package/dist/components/conversation/internalNotePreview.d.ts +6 -0
- package/dist/components/conversation/internalNotePreview.d.ts.map +1 -0
- package/dist/components/conversation/internalNotePreview.js +11 -0
- package/dist/components/conversation/listHeading.d.ts +19 -0
- package/dist/components/conversation/listHeading.d.ts.map +1 -0
- package/dist/components/conversation/listHeading.js +24 -0
- package/dist/components/conversation/rowDisplayName.d.ts +7 -0
- package/dist/components/conversation/rowDisplayName.d.ts.map +1 -0
- package/dist/components/conversation/rowDisplayName.js +8 -0
- package/dist/components/conversation/rowTime.d.ts +4 -0
- package/dist/components/conversation/rowTime.d.ts.map +1 -0
- package/dist/components/conversation/rowTime.js +10 -0
- package/dist/components/conversation-detail/PinLimitModal.d.ts.map +1 -1
- package/dist/components/conversation-detail/PinLimitModal.js +3 -1
- package/dist/components/group/AddMemberModal.d.ts.map +1 -1
- package/dist/components/group/AddMemberModal.js +15 -4
- package/dist/components/group/AdminPermissionModal.d.ts +1 -0
- package/dist/components/group/AdminPermissionModal.d.ts.map +1 -1
- package/dist/components/group/AdminPermissionModal.js +38 -3
- package/dist/components/group/CreateGroupForm.d.ts +3 -1
- package/dist/components/group/CreateGroupForm.d.ts.map +1 -1
- package/dist/components/group/CreateGroupForm.js +7 -1
- package/dist/components/group/CreateGroupFormCrmView.d.ts +23 -0
- package/dist/components/group/CreateGroupFormCrmView.d.ts.map +1 -0
- package/dist/components/group/CreateGroupFormCrmView.js +25 -0
- package/dist/components/group/DisableSendPermissionConfirm.d.ts +11 -0
- package/dist/components/group/DisableSendPermissionConfirm.d.ts.map +1 -0
- package/dist/components/group/DisableSendPermissionConfirm.js +10 -0
- package/dist/components/group/GroupCompositeAvatar.d.ts.map +1 -1
- package/dist/components/group/GroupCompositeAvatar.js +39 -4
- package/dist/components/group/GroupMemberPicker.d.ts +5 -2
- package/dist/components/group/GroupMemberPicker.d.ts.map +1 -1
- package/dist/components/group/GroupMemberPicker.js +8 -42
- package/dist/components/group/GroupMemberPickerCrm.d.ts +4 -0
- package/dist/components/group/GroupMemberPickerCrm.d.ts.map +1 -0
- package/dist/components/group/GroupMemberPickerCrm.js +48 -0
- package/dist/components/group/GroupMemberPickerLegacy.d.ts +8 -0
- package/dist/components/group/GroupMemberPickerLegacy.d.ts.map +1 -0
- package/dist/components/group/GroupMemberPickerLegacy.js +46 -0
- package/dist/components/group/GroupPanelHeader.d.ts +10 -0
- package/dist/components/group/GroupPanelHeader.d.ts.map +1 -0
- package/dist/components/group/GroupPanelHeader.js +11 -0
- package/dist/components/group/MemberPermissionPanel.d.ts.map +1 -1
- package/dist/components/group/MemberPermissionPanel.js +31 -2
- package/dist/components/group/PermissionPanelCrm.d.ts +24 -0
- package/dist/components/group/PermissionPanelCrm.d.ts.map +1 -0
- package/dist/components/group/PermissionPanelCrm.js +16 -0
- package/dist/components/group/PersonAvatar.d.ts +11 -0
- package/dist/components/group/PersonAvatar.d.ts.map +1 -0
- package/dist/components/group/PersonAvatar.js +21 -0
- package/dist/components/group/crmIcon.d.ts +9 -0
- package/dist/components/group/crmIcon.d.ts.map +1 -0
- package/dist/components/group/crmIcon.js +38 -0
- package/dist/components/icon/AdaptiveIcon.d.ts +15 -0
- package/dist/components/icon/AdaptiveIcon.d.ts.map +1 -0
- package/dist/components/icon/AdaptiveIcon.js +10 -0
- package/dist/components/icon/StrokeIcon.d.ts +14 -0
- package/dist/components/icon/StrokeIcon.d.ts.map +1 -0
- package/dist/components/icon/StrokeIcon.js +5 -0
- package/dist/components/icon/strokeIconNodes.d.ts +431 -0
- package/dist/components/icon/strokeIconNodes.d.ts.map +1 -0
- package/dist/components/icon/strokeIconNodes.js +269 -0
- package/dist/components/media-collection/index.d.ts.map +1 -1
- package/dist/components/media-collection/index.js +21 -5
- package/dist/components/message/GroupMembersDrawer.d.ts.map +1 -1
- package/dist/components/message/GroupMembersDrawer.js +60 -13
- package/dist/components/message/GroupMembersPanelCrm.d.ts +23 -0
- package/dist/components/message/GroupMembersPanelCrm.d.ts.map +1 -0
- package/dist/components/message/GroupMembersPanelCrm.js +55 -0
- package/dist/components/message/MessageHeader.d.ts.map +1 -1
- package/dist/components/message/MessageHeader.js +76 -27
- package/dist/components/message/MessageInfiniteScroll.d.ts +4 -2
- package/dist/components/message/MessageInfiniteScroll.d.ts.map +1 -1
- package/dist/components/message/MessageInfiniteScroll.js +1 -1
- package/dist/components/message/MessageList.d.ts +2 -1
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +12 -1
- package/dist/components/message/SelectSession.d.ts +4 -1
- package/dist/components/message/SelectSession.d.ts.map +1 -1
- package/dist/components/message/SelectSession.js +13 -4
- package/dist/components/message/UnassignedSessionFooter.js +2 -2
- package/dist/components/message/footer/ActionBar.d.ts +5 -1
- package/dist/components/message/footer/ActionBar.d.ts.map +1 -1
- package/dist/components/message/footer/ActionBar.js +14 -1
- package/dist/components/message/footer/CannedResponsePlugin.d.ts.map +1 -1
- package/dist/components/message/footer/CannedResponsePlugin.js +18 -3
- package/dist/components/message/footer/ClosedSessionBanner.d.ts +9 -0
- package/dist/components/message/footer/ClosedSessionBanner.d.ts.map +1 -0
- package/dist/components/message/footer/ClosedSessionBanner.js +13 -0
- package/dist/components/message/footer/ComposerEditor.d.ts.map +1 -1
- package/dist/components/message/footer/ComposerEditor.js +9 -4
- package/dist/components/message/footer/ComposerTabs.d.ts +1 -2
- package/dist/components/message/footer/ComposerTabs.d.ts.map +1 -1
- package/dist/components/message/footer/ComposerTabs.js +14 -35
- package/dist/components/message/footer/CrmComposerCard.d.ts +11 -0
- package/dist/components/message/footer/CrmComposerCard.d.ts.map +1 -0
- package/dist/components/message/footer/CrmComposerCard.js +30 -0
- package/dist/components/message/footer/EnterHandler.d.ts.map +1 -1
- package/dist/components/message/footer/EnterHandler.js +3 -0
- package/dist/components/message/footer/FilePreview.js +2 -2
- package/dist/components/message/footer/LinkInputPreview.js +2 -2
- package/dist/components/message/footer/MediaActions.d.ts +2 -1
- package/dist/components/message/footer/MediaActions.d.ts.map +1 -1
- package/dist/components/message/footer/MediaActions.js +21 -4
- package/dist/components/message/footer/SessionClosedModal.d.ts +3 -1
- package/dist/components/message/footer/SessionClosedModal.d.ts.map +1 -1
- package/dist/components/message/footer/SessionClosedModal.js +6 -2
- package/dist/components/message/footer/ToolbarPlugin.d.ts +3 -1
- package/dist/components/message/footer/ToolbarPlugin.d.ts.map +1 -1
- package/dist/components/message/footer/ToolbarPlugin.js +2 -2
- package/dist/components/message/footer/clearComposerHistory.d.ts +3 -0
- package/dist/components/message/footer/clearComposerHistory.d.ts.map +1 -0
- package/dist/components/message/footer/clearComposerHistory.js +11 -0
- package/dist/components/message/footer/index.d.ts +2 -2
- package/dist/components/message/footer/index.d.ts.map +1 -1
- package/dist/components/message/footer/index.js +15 -5
- package/dist/components/message/footer/mention/MentionMenu.d.ts.map +1 -1
- package/dist/components/message/footer/mention/MentionMenu.js +4 -1
- package/dist/components/message/footer/useComposerFocusRequest.d.ts +10 -0
- package/dist/components/message/footer/useComposerFocusRequest.d.ts.map +1 -0
- package/dist/components/message/footer/useComposerFocusRequest.js +28 -0
- package/dist/components/message/groupMemberMenuCrm.d.ts +32 -0
- package/dist/components/message/groupMemberMenuCrm.d.ts.map +1 -0
- package/dist/components/message/groupMemberMenuCrm.js +83 -0
- package/dist/components/message/groupMemberTypes.d.ts +13 -0
- package/dist/components/message/groupMemberTypes.d.ts.map +1 -0
- package/dist/components/message/groupMemberTypes.js +1 -0
- package/dist/components/message/headerIconButton.d.ts +10 -0
- package/dist/components/message/headerIconButton.d.ts.map +1 -0
- package/dist/components/message/headerIconButton.js +9 -0
- package/dist/components/message/item/CrmSystemLine.d.ts +10 -0
- package/dist/components/message/item/CrmSystemLine.d.ts.map +1 -0
- package/dist/components/message/item/CrmSystemLine.js +6 -0
- package/dist/components/message/item/DateDivider.d.ts +5 -0
- package/dist/components/message/item/DateDivider.d.ts.map +1 -0
- package/dist/components/message/item/DateDivider.js +5 -0
- package/dist/components/message/item/GroupNotificationMessage.d.ts.map +1 -1
- package/dist/components/message/item/GroupNotificationMessage.js +9 -0
- package/dist/components/message/item/MemberEventSummary.d.ts +8 -0
- package/dist/components/message/item/MemberEventSummary.d.ts.map +1 -0
- package/dist/components/message/item/MemberEventSummary.js +18 -0
- package/dist/components/message/item/MessageBubble.d.ts +3 -1
- package/dist/components/message/item/MessageBubble.d.ts.map +1 -1
- package/dist/components/message/item/MessageBubble.js +27 -13
- package/dist/components/message/item/MessageMoreButton.d.ts +13 -0
- package/dist/components/message/item/MessageMoreButton.d.ts.map +1 -0
- package/dist/components/message/item/MessageMoreButton.js +42 -0
- package/dist/components/message/item/QuoteMessage.d.ts.map +1 -1
- package/dist/components/message/item/QuoteMessage.js +23 -2
- package/dist/components/message/item/RevokeMessage.js +1 -1
- package/dist/components/message/item/SessionEventMessage.d.ts.map +1 -1
- package/dist/components/message/item/SessionEventMessage.js +13 -1
- package/dist/components/message/item/SystemLogMessage.d.ts.map +1 -1
- package/dist/components/message/item/SystemLogMessage.js +7 -0
- package/dist/components/message/item/index.d.ts.map +1 -1
- package/dist/components/message/item/index.js +80 -18
- package/dist/components/message/item/otherSenders.d.ts +7 -0
- package/dist/components/message/item/otherSenders.d.ts.map +1 -0
- package/dist/components/message/item/otherSenders.js +29 -0
- package/dist/components/message/item/textStyle.d.ts +1 -1
- package/dist/components/message/item/textStyle.d.ts.map +1 -1
- package/dist/components/message/item/textStyle.js +2 -2
- package/dist/components/message/messageKeyboardNav.d.ts +8 -0
- package/dist/components/message/messageKeyboardNav.d.ts.map +1 -0
- package/dist/components/message/messageKeyboardNav.js +24 -0
- package/dist/components/message/reply/ReplyPreviewBar.d.ts.map +1 -1
- package/dist/components/message/reply/ReplyPreviewBar.js +11 -4
- package/dist/components/message/toolbox/MessageToolboxMenu.d.ts.map +1 -1
- package/dist/components/message/toolbox/MessageToolboxMenu.js +16 -1
- package/dist/components/search-conversation/SearchAll.d.ts.map +1 -1
- package/dist/components/search-conversation/SearchAll.js +12 -1
- package/dist/components/search-conversation/SearchDrawer.d.ts.map +1 -1
- package/dist/components/search-conversation/SearchDrawer.js +31 -15
- package/dist/components/search-conversation/SearchMessageOnCurrentConversation.d.ts.map +1 -1
- package/dist/components/search-conversation/SearchMessageOnCurrentConversation.js +5 -2
- package/dist/components/search-conversation/index.d.ts.map +1 -1
- package/dist/components/search-conversation/index.js +3 -1
- package/dist/components/search-conversation/item/SearchItemAsGroup.d.ts.map +1 -1
- package/dist/components/search-conversation/item/SearchItemAsGroup.js +14 -4
- package/dist/components/search-conversation/item/SearchItemAsMessage.d.ts.map +1 -1
- package/dist/components/search-conversation/item/SearchItemAsMessage.js +18 -7
- package/dist/components/search-conversation/item/SearchItemAsUser.d.ts.map +1 -1
- package/dist/components/search-conversation/item/SearchItemAsUser.js +23 -5
- package/dist/components/search-conversation/item/searchRowClass.d.ts +3 -0
- package/dist/components/search-conversation/item/searchRowClass.d.ts.map +1 -0
- package/dist/components/search-conversation/item/searchRowClass.js +5 -0
- package/dist/components/session/DeskAssignedSession.d.ts +5 -1
- package/dist/components/session/DeskAssignedSession.d.ts.map +1 -1
- package/dist/components/session/DeskAssignedSession.js +40 -12
- package/dist/components/session/DeskTeamInbox.d.ts.map +1 -1
- package/dist/components/session/DeskTeamInbox.js +15 -22
- package/dist/components/session/FolderRow.d.ts +21 -0
- package/dist/components/session/FolderRow.d.ts.map +1 -0
- package/dist/components/session/FolderRow.js +16 -0
- package/dist/components/session/SessionFolderList.d.ts +23 -0
- package/dist/components/session/SessionFolderList.d.ts.map +1 -0
- package/dist/components/session/SessionFolderList.js +27 -0
- package/dist/components/session/sessionFilters.d.ts +24 -0
- package/dist/components/session/sessionFilters.d.ts.map +1 -0
- package/dist/components/session/sessionFilters.js +80 -0
- package/dist/components/shortcut-help/ShortcutHelpModal.d.ts +8 -0
- package/dist/components/shortcut-help/ShortcutHelpModal.d.ts.map +1 -0
- package/dist/components/shortcut-help/ShortcutHelpModal.js +23 -0
- package/dist/components/thread/AssignConfirmModal.d.ts.map +1 -1
- package/dist/components/thread/AssignConfirmModal.js +4 -3
- package/dist/components/thread/EndSessionConfirm.d.ts +11 -0
- package/dist/components/thread/EndSessionConfirm.d.ts.map +1 -0
- package/dist/components/thread/EndSessionConfirm.js +31 -0
- package/dist/components/thread/EndSessionToast.d.ts +6 -0
- package/dist/components/thread/EndSessionToast.d.ts.map +1 -0
- package/dist/components/thread/EndSessionToast.js +18 -0
- package/dist/components/thread/GroupInfoBodyCrm.d.ts +46 -0
- package/dist/components/thread/GroupInfoBodyCrm.d.ts.map +1 -0
- package/dist/components/thread/GroupInfoBodyCrm.js +41 -0
- package/dist/components/thread/GroupInfoRows.d.ts +33 -0
- package/dist/components/thread/GroupInfoRows.d.ts.map +1 -0
- package/dist/components/thread/GroupInfoRows.js +18 -0
- package/dist/components/thread/GroupThreadInfo.d.ts.map +1 -1
- package/dist/components/thread/GroupThreadInfo.js +23 -6
- package/dist/components/thread/ManualAssignPopover.d.ts +3 -1
- package/dist/components/thread/ManualAssignPopover.d.ts.map +1 -1
- package/dist/components/thread/ManualAssignPopover.js +21 -9
- package/dist/components/thread/SessionDetailCard.d.ts +6 -0
- package/dist/components/thread/SessionDetailCard.d.ts.map +1 -0
- package/dist/components/thread/SessionDetailCard.js +103 -0
- package/dist/components/thread/SessionSection.d.ts +2 -4
- package/dist/components/thread/SessionSection.d.ts.map +1 -1
- package/dist/components/thread/SessionSection.js +19 -122
- package/dist/components/thread/SessionTagPicker.d.ts +11 -0
- package/dist/components/thread/SessionTagPicker.d.ts.map +1 -0
- package/dist/components/thread/SessionTagPicker.js +27 -0
- package/dist/components/thread/SingleThreadInfo.d.ts.map +1 -1
- package/dist/components/thread/SingleThreadInfo.js +16 -6
- package/dist/components/thread/SupportSessionPanel.d.ts +18 -0
- package/dist/components/thread/SupportSessionPanel.d.ts.map +1 -0
- package/dist/components/thread/SupportSessionPanel.js +46 -0
- package/dist/components/thread/ThreadInfo.d.ts +8 -1
- package/dist/components/thread/ThreadInfo.d.ts.map +1 -1
- package/dist/components/thread/ThreadInfo.js +27 -29
- package/dist/components/thread/ThreadInfoHeader.d.ts +13 -0
- package/dist/components/thread/ThreadInfoHeader.d.ts.map +1 -0
- package/dist/components/thread/ThreadInfoHeader.js +11 -0
- package/dist/components/thread/UserSection.d.ts.map +1 -1
- package/dist/components/thread/UserSection.js +35 -22
- package/dist/components/thread/sessionDateFormat.d.ts +3 -0
- package/dist/components/thread/sessionDateFormat.d.ts.map +1 -0
- package/dist/components/thread/sessionDateFormat.js +13 -0
- package/dist/components/thread/sessionDuration.d.ts +5 -0
- package/dist/components/thread/sessionDuration.d.ts.map +1 -0
- package/dist/components/thread/sessionDuration.js +24 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +2 -0
- package/dist/constants/layout.d.ts +24 -0
- package/dist/constants/layout.d.ts.map +1 -0
- package/dist/constants/layout.js +23 -0
- package/dist/context/ChatContext.d.ts.map +1 -1
- package/dist/context/ChatContext.js +27 -1
- package/dist/hooks/canned-response/useSearchCannedAcrossScopes.d.ts +7 -0
- package/dist/hooks/canned-response/useSearchCannedAcrossScopes.d.ts.map +1 -0
- package/dist/hooks/canned-response/useSearchCannedAcrossScopes.js +46 -0
- package/dist/hooks/common/useCloseOnSidePanelOpen.d.ts +3 -0
- package/dist/hooks/common/useCloseOnSidePanelOpen.d.ts.map +1 -0
- package/dist/hooks/common/useCloseOnSidePanelOpen.js +15 -0
- package/dist/hooks/common/useDeskShortcuts.d.ts +11 -0
- package/dist/hooks/common/useDeskShortcuts.d.ts.map +1 -0
- package/dist/hooks/common/useDeskShortcuts.js +94 -0
- package/dist/hooks/common/useEscapeLayer.d.ts +3 -0
- package/dist/hooks/common/useEscapeLayer.d.ts.map +1 -0
- package/dist/hooks/common/useEscapeLayer.js +18 -0
- package/dist/hooks/common/useMediaQuery.d.ts +3 -0
- package/dist/hooks/common/useMediaQuery.d.ts.map +1 -0
- package/dist/hooks/common/useMediaQuery.js +12 -0
- package/dist/hooks/common/useSidePanel.d.ts +12 -0
- package/dist/hooks/common/useSidePanel.d.ts.map +1 -0
- package/dist/hooks/common/useSidePanel.js +32 -0
- package/dist/hooks/group/useConversationGroups.d.ts.map +1 -1
- package/dist/hooks/group/useConversationGroups.js +3 -0
- package/dist/hooks/message/useNewMessageAnnouncement.d.ts +3 -0
- package/dist/hooks/message/useNewMessageAnnouncement.d.ts.map +1 -0
- package/dist/hooks/message/useNewMessageAnnouncement.js +30 -0
- package/dist/hooks/search/useSearchGroups.js +2 -1
- package/dist/hooks/search/useSearchMessage.d.ts +3 -1
- package/dist/hooks/search/useSearchMessage.d.ts.map +1 -1
- package/dist/hooks/search/useSearchMessage.js +2 -2
- package/dist/hooks/session/useBotSessionOwnerIdentity.d.ts +12 -0
- package/dist/hooks/session/useBotSessionOwnerIdentity.d.ts.map +1 -0
- package/dist/hooks/session/useBotSessionOwnerIdentity.js +22 -0
- package/dist/hooks/session/useCloseSession.d.ts +1 -0
- package/dist/hooks/session/useCloseSession.d.ts.map +1 -1
- package/dist/hooks/session/useCloseSession.js +9 -8
- package/dist/hooks/session/useEndSession.d.ts +11 -0
- package/dist/hooks/session/useEndSession.d.ts.map +1 -0
- package/dist/hooks/session/useEndSession.js +45 -0
- package/dist/hooks/session/useGetSession.d.ts.map +1 -1
- package/dist/hooks/session/useGetSession.js +27 -6
- package/dist/hooks/session/usePendingSessionClose.d.ts +5 -0
- package/dist/hooks/session/usePendingSessionClose.d.ts.map +1 -0
- package/dist/hooks/session/usePendingSessionClose.js +12 -0
- package/dist/hooks/session/useSessionCustomerName.d.ts +3 -0
- package/dist/hooks/session/useSessionCustomerName.d.ts.map +1 -0
- package/dist/hooks/session/useSessionCustomerName.js +19 -0
- package/dist/hooks/session/useSessionFieldAutosave.d.ts +19 -0
- package/dist/hooks/session/useSessionFieldAutosave.d.ts.map +1 -0
- package/dist/hooks/session/useSessionFieldAutosave.js +52 -0
- package/dist/hooks/user/useUserUsername.d.ts +3 -0
- package/dist/hooks/user/useUserUsername.d.ts.map +1 -0
- package/dist/hooks/user/useUserUsername.js +49 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/locales/vi/common.json +201 -21
- package/dist/locales/vi/conversation-inbox.json +21 -2
- package/dist/screens/desk-message/DeskWorkspace.d.ts +12 -0
- package/dist/screens/desk-message/DeskWorkspace.d.ts.map +1 -0
- package/dist/screens/desk-message/DeskWorkspace.js +57 -0
- package/dist/screens/desk-message/FolderOverlay.d.ts +4 -0
- package/dist/screens/desk-message/FolderOverlay.d.ts.map +1 -0
- package/dist/screens/desk-message/FolderOverlay.js +32 -0
- package/dist/screens/desk-message/SkipLinks.d.ts +4 -0
- package/dist/screens/desk-message/SkipLinks.d.ts.map +1 -0
- package/dist/screens/desk-message/SkipLinks.js +19 -0
- package/dist/screens/desk-message/ViewportNotice.d.ts +4 -0
- package/dist/screens/desk-message/ViewportNotice.d.ts.map +1 -0
- package/dist/screens/desk-message/ViewportNotice.js +9 -0
- package/dist/screens/desk-message/index.d.ts +3 -2
- package/dist/screens/desk-message/index.d.ts.map +1 -1
- package/dist/screens/desk-message/index.js +4 -12
- package/dist/store/deskPanelHost.d.ts +13 -0
- package/dist/store/deskPanelHost.d.ts.map +1 -0
- package/dist/store/deskPanelHost.js +9 -0
- package/dist/store/escapeLayers.d.ts +15 -0
- package/dist/store/escapeLayers.d.ts.map +1 -0
- package/dist/store/escapeLayers.js +15 -0
- package/dist/store/pendingSessionClose.d.ts +19 -0
- package/dist/store/pendingSessionClose.d.ts.map +1 -0
- package/dist/store/pendingSessionClose.js +74 -0
- package/dist/store/session.d.ts +2 -1
- package/dist/store/session.d.ts.map +1 -1
- package/dist/store/session.js +4 -1
- package/dist/store/sessionFolder.d.ts +15 -0
- package/dist/store/sessionFolder.d.ts.map +1 -0
- package/dist/store/sessionFolder.js +18 -0
- package/dist/store/shortcutPrefs.d.ts +9 -0
- package/dist/store/shortcutPrefs.d.ts.map +1 -0
- package/dist/store/shortcutPrefs.js +23 -0
- package/dist/store/sidePanel.d.ts +12 -0
- package/dist/store/sidePanel.d.ts.map +1 -0
- package/dist/store/sidePanel.js +9 -0
- package/dist/store/workspaceLayout.d.ts +12 -0
- package/dist/store/workspaceLayout.d.ts.map +1 -0
- package/dist/store/workspaceLayout.js +9 -0
- package/dist/styles/global.css +1 -1
- package/dist/types/chat.d.ts +18 -0
- package/dist/types/chat.d.ts.map +1 -1
- package/dist/types/dto.d.ts +2 -1
- package/dist/types/dto.d.ts.map +1 -1
- package/dist/utils/a11yClickable.d.ts +10 -0
- package/dist/utils/a11yClickable.d.ts.map +1 -0
- package/dist/utils/a11yClickable.js +15 -0
- package/dist/utils/events.d.ts +4 -0
- package/dist/utils/events.d.ts.map +1 -1
- package/dist/utils/headerMemberCount.d.ts +10 -0
- package/dist/utils/headerMemberCount.d.ts.map +1 -0
- package/dist/utils/headerMemberCount.js +3 -0
- package/dist/utils/memberEventRun.d.ts +16 -0
- package/dist/utils/memberEventRun.d.ts.map +1 -0
- package/dist/utils/memberEventRun.js +40 -0
- package/package.json +1 -1
- package/dist/components/session/SessionFilterMenu.d.ts +0 -15
- package/dist/components/session/SessionFilterMenu.d.ts.map +0 -1
- package/dist/components/session/SessionFilterMenu.js +0 -30
- package/dist/components/session/sessionMenuItems.d.ts +0 -28
- package/dist/components/session/sessionMenuItems.d.ts.map +0 -1
- package/dist/components/session/sessionMenuItems.js +0 -119
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const MESSAGE_FOCUSABLE_ATTR = "data-msg-focusable";
|
|
2
|
+
/**
|
|
3
|
+
* Up/Down on the message log moves focus between messages. The log renders
|
|
4
|
+
* newest first in a column-reverse flex, so the next DOM node is the older message.
|
|
5
|
+
*/
|
|
6
|
+
export const handleMessageLogKeyDown = (event) => {
|
|
7
|
+
if (event.key !== "ArrowUp" && event.key !== "ArrowDown")
|
|
8
|
+
return;
|
|
9
|
+
const container = event.currentTarget;
|
|
10
|
+
const target = event.target;
|
|
11
|
+
const isMessage = target.hasAttribute(MESSAGE_FOCUSABLE_ATTR);
|
|
12
|
+
if (target !== container && !isMessage)
|
|
13
|
+
return;
|
|
14
|
+
const items = Array.from(container.querySelectorAll(`[${MESSAGE_FOCUSABLE_ATTR}]`));
|
|
15
|
+
if (!items.length)
|
|
16
|
+
return;
|
|
17
|
+
const current = items.indexOf(target);
|
|
18
|
+
const older = event.key === "ArrowUp";
|
|
19
|
+
const next = current === -1
|
|
20
|
+
? 0
|
|
21
|
+
: Math.min(items.length - 1, Math.max(0, current + (older ? 1 : -1)));
|
|
22
|
+
event.preventDefault();
|
|
23
|
+
items[next].focus();
|
|
24
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReplyPreviewBar.d.ts","sourceRoot":"","sources":["../../../../src/components/message/reply/ReplyPreviewBar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReplyPreviewBar.d.ts","sourceRoot":"","sources":["../../../../src/components/message/reply/ReplyPreviewBar.tsx"],"names":[],"mappings":"AAQA,eAAO,MAAM,eAAe,sDAmD3B,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useTranslation } from "react-i18next";
|
|
3
|
-
import {
|
|
3
|
+
import { AdaptiveIcon } from "../../../components/icon/AdaptiveIcon";
|
|
4
4
|
import useAuthStore from "../../../store/auth";
|
|
5
5
|
import useConversationStore from "../../../store/conversation";
|
|
6
|
+
import { useUserUsername } from "../../../hooks/user/useUserUsername";
|
|
7
|
+
import { isSupportSessionAgentView } from "../../../utils/conversation";
|
|
6
8
|
import { ReplyQuoteContent } from "./ReplyQuoteContent";
|
|
7
9
|
export const ReplyPreviewBar = () => {
|
|
8
10
|
const { t } = useTranslation();
|
|
9
11
|
const quotedMessage = useConversationStore((state) => state.quotedMessage);
|
|
10
12
|
const setQuotedMessage = useConversationStore((state) => state.setQuotedMessage);
|
|
13
|
+
const conversationData = useConversationStore((state) => state.conversationData);
|
|
11
14
|
const userID = useAuthStore((state) => state.userID);
|
|
15
|
+
const isCrm = useAuthStore((state) => state.isCrm);
|
|
16
|
+
const isMe = (quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.sendID) === userID;
|
|
17
|
+
// Matches the sent quote's title, which shows agents outside CRM the username.
|
|
18
|
+
const isAgentView = !isCrm && isSupportSessionAgentView(conversationData, userID);
|
|
19
|
+
const quotedUsername = useUserUsername(isAgentView && !isMe ? quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.sendID : undefined);
|
|
12
20
|
const handleClearQuotedMessage = () => {
|
|
13
21
|
setQuotedMessage(null);
|
|
14
22
|
};
|
|
15
23
|
if (!quotedMessage)
|
|
16
24
|
return null;
|
|
17
|
-
const isMe = quotedMessage.sendID === userID;
|
|
18
25
|
const senderName = isMe
|
|
19
26
|
? t("your_self")
|
|
20
|
-
: quotedMessage.senderNickname || "";
|
|
21
|
-
return (_jsxs("div", { "data-testid": "reply-preview-bar", "data-cp-name": "ReplyPreviewBar", className: "flex h-[59px] w-full shrink-0 items-center bg-gray-200/10 px-2 py-1", children: [_jsx(ReplyQuoteContent, { message: quotedMessage, title: t("reply_to", { name: senderName }) }), _jsx("button", { type: "button", onClick: handleClearQuotedMessage, "aria-label": t("cancel"), "data-testid": "reply-preview-bar-close", className: "flex h-4 w-4 shrink-0 items-center justify-center", children: _jsx(
|
|
27
|
+
: quotedUsername || quotedMessage.senderNickname || "";
|
|
28
|
+
return (_jsxs("div", { "data-testid": "reply-preview-bar", "data-cp-name": "ReplyPreviewBar", className: "flex h-[59px] w-full shrink-0 items-center bg-gray-200/10 px-2 py-1", children: [_jsx(ReplyQuoteContent, { message: quotedMessage, title: t("reply_to", { name: senderName }) }), _jsx("button", { type: "button", onClick: handleClearQuotedMessage, "aria-label": t("cancel"), "data-testid": "reply-preview-bar-close", className: "flex h-4 w-4 shrink-0 items-center justify-center", children: _jsx(AdaptiveIcon, { stroke: "x", font: "close-o", size: 16, className: "text-gray-600" }) })] }));
|
|
22
29
|
};
|
|
23
30
|
export default ReplyPreviewBar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageToolboxMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/message/toolbox/MessageToolboxMenu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageToolboxMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/message/toolbox/MessageToolboxMenu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAKtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,eAAO,MAAM,iCAAiC,QAS7C,CAAC;AAgDF,eAAO,MAAM,4BAA4B,GACvC,SAAS,oBAAoB,EAAE,KAC9B,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAO5B,CAAC"}
|
|
@@ -1,8 +1,23 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import clsx from "clsx";
|
|
3
3
|
import { Icon } from "../../../components/icon";
|
|
4
|
+
import { StrokeIcon } from "../../../components/icon/StrokeIcon";
|
|
5
|
+
import useAuthStore from "../../../store/auth";
|
|
4
6
|
export const MESSAGE_TOOLBOX_OVERLAY_CLASSNAME = clsx("[&_.ant-dropdown-menu]:min-w-[200px]", "[&_.ant-dropdown-menu]:rounded-2xl", "[&_.ant-dropdown-menu]:p-0", "[&_.ant-dropdown-menu]:py-2", "[&_.ant-dropdown-menu]:shadow-message-toolbox", "[&_.ant-dropdown-menu-item]:rounded-none", "[&_.ant-dropdown-menu-item]:!px-4", "[&_.ant-dropdown-menu-item]:!py-1.5");
|
|
5
|
-
|
|
7
|
+
// Icon-font names of the toolbox actions and their line-icon twins in CRM.
|
|
8
|
+
const CRM_ICONS = {
|
|
9
|
+
"arrow-reply-o": "reply",
|
|
10
|
+
"thumbtack-o": "pin",
|
|
11
|
+
"thumbtack-off-o": "pin",
|
|
12
|
+
"copy-o": "copy",
|
|
13
|
+
"link-o": "link",
|
|
14
|
+
"trash-o": "undo",
|
|
15
|
+
};
|
|
16
|
+
const ToolboxMenuRow = ({ icon, label, danger = false }) => {
|
|
17
|
+
const isCrm = useAuthStore((state) => state.isCrm);
|
|
18
|
+
const crmIcon = isCrm ? CRM_ICONS[icon] : undefined;
|
|
19
|
+
return (_jsxs("div", { "data-cp-name": "ToolboxMenuRow", className: "flex items-center gap-3", children: [crmIcon ? (_jsx(StrokeIcon, { name: crmIcon, size: 18, className: danger ? "text-danger-600" : "text-gray-600" })) : (_jsx(Icon, { icon: icon, size: 24, className: danger ? "text-danger-400" : "text-gray-900" })), _jsx("span", { className: clsx("text-base font-medium", danger ? "text-danger-400" : "text-gray-900"), children: label })] }));
|
|
20
|
+
};
|
|
6
21
|
export const buildMessageToolboxMenuItems = (actions) => actions.map((action) => ({
|
|
7
22
|
key: action.key,
|
|
8
23
|
label: (_jsx(ToolboxMenuRow, { icon: action.icon, label: action.label, danger: action.danger })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchAll.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/SearchAll.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SearchAll.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/SearchAll.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,wBAAwB,EAAE,MAAM,GAAG,CAAC;AAI7C,UAAU,0BAA0B;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,CAAC,GAAG,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACvD;AA+CD,QAAA,MAAM,qBAAqB,GAAI,+BAG5B,0BAA0B,4CA4G5B,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -2,6 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Button, Empty, Spin } from "antd";
|
|
3
3
|
import clsx from "clsx";
|
|
4
4
|
import { useTranslation } from "react-i18next";
|
|
5
|
+
import { StrokeIcon } from "../../components/icon/StrokeIcon";
|
|
6
|
+
import useAuthStore from "../../store/auth";
|
|
5
7
|
import { useSearchMessage } from "../../hooks/search/useSearchMessage";
|
|
6
8
|
import { MessageType } from "@droppii-org/wasm-client-sdk";
|
|
7
9
|
import { Icon } from "../../components/icon";
|
|
@@ -13,6 +15,15 @@ import { useSearchUsers } from "../../hooks/search/useSearchUsers";
|
|
|
13
15
|
import { SearchConversationTabKey } from ".";
|
|
14
16
|
import { useSearchScope } from "./SearchScopeContext";
|
|
15
17
|
import { PAGE_SIZE } from "../../constants";
|
|
18
|
+
/** Section title with "Xem thêm"; CRM uses the desk list's sentence-case labels. */
|
|
19
|
+
const SearchSectionHeader = ({ title, hasMore, onSeeMore, }) => {
|
|
20
|
+
const { t } = useTranslation();
|
|
21
|
+
const isCrm = useAuthStore((state) => state.isCrm);
|
|
22
|
+
if (isCrm) {
|
|
23
|
+
return (_jsxs("div", { className: "mt-2 flex min-h-[32px] items-center justify-between px-5", children: [_jsx("span", { className: "text-[13px] font-semibold text-gray-600", children: title }), hasMore && (_jsxs("button", { type: "button", onClick: onSeeMore, className: "flex items-center gap-0.5 rounded border-0 bg-transparent p-0 text-[13px] font-medium text-primary-500 hover:text-primary-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary-200", children: [t("see_more"), _jsx(StrokeIcon, { name: "chevron-right", size: 16 })] }))] }));
|
|
24
|
+
}
|
|
25
|
+
return (_jsxs("div", { className: "flex items-center justify-between px-3 min-h-[32px]", children: [_jsx("span", { className: "text-xs font-medium uppercase flex-1 text-gray-600", children: title }), _jsx(Button, { type: "link", icon: _jsx(Icon, { icon: "angle-right-o", size: 18, className: "!align-[-4px]" }), iconPosition: "end", className: clsx("p-0 gap-1", !hasMore && "invisible"), onClick: onSeeMore, children: t("see_more") })] }));
|
|
26
|
+
};
|
|
16
27
|
const SearchConversationAll = ({ searchTerm = "", setActiveKey, }) => {
|
|
17
28
|
const { t } = useTranslation();
|
|
18
29
|
const scope = useSearchScope();
|
|
@@ -36,6 +47,6 @@ const SearchConversationAll = ({ searchTerm = "", setActiveKey, }) => {
|
|
|
36
47
|
if (isLoadingMessage || isLoadingSession || isLoadingGroup) {
|
|
37
48
|
return (_jsx("div", { className: "h-full overflow-auto flex items-center justify-center", children: _jsx(Spin, {}) }));
|
|
38
49
|
}
|
|
39
|
-
return (_jsxs("div", { className: "h-full overflow-auto", "data-cp-name": "SearchConversationAll", children: [sessions.length > 0 && (_jsxs("div", { children: [
|
|
50
|
+
return (_jsxs("div", { className: "h-full overflow-auto", "data-cp-name": "SearchConversationAll", children: [sessions.length > 0 && (_jsxs("div", { children: [_jsx(SearchSectionHeader, { title: t("users"), hasMore: !!hasNextPageSession, onSeeMore: () => setActiveKey === null || setActiveKey === void 0 ? void 0 : setActiveKey(SearchConversationTabKey.Users) }), _jsx("div", { children: sessions.map((session) => (_jsx(SearchItemAsUser, { session: session, searchTerm: searchTerm }, session.conversationId))) })] })), messages.length > 0 && (_jsxs("div", { children: [_jsx(SearchSectionHeader, { title: t("messages"), hasMore: !!hasNextPageMessage, onSeeMore: () => setActiveKey === null || setActiveKey === void 0 ? void 0 : setActiveKey(SearchConversationTabKey.Messages) }), _jsx("div", { children: messages.map((message) => (_jsx(SearchItemAsMessage, { message: message.chatLog, searchTerm: searchTerm, displayTag: message.displayTag, tag: message.tag }, message.chatLog.clientMsgID))) })] })), groups.length > 0 && (_jsxs("div", { children: [_jsx(SearchSectionHeader, { title: t("groups"), hasMore: !!hasNextPageGroup, onSeeMore: () => setActiveKey === null || setActiveKey === void 0 ? void 0 : setActiveKey(SearchConversationTabKey.Groups) }), _jsx("div", { children: groups.map((group) => (_jsx(SearchItemAsGroup, { group: group, searchTerm: searchTerm }, group.conversationId))) })] }))] }));
|
|
40
51
|
};
|
|
41
52
|
export default SearchConversationAll;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchDrawer.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/SearchDrawer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SearchDrawer.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/SearchDrawer.tsx"],"names":[],"mappings":"AAcA,QAAA,MAAM,YAAY,+CA8GjB,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -1,33 +1,49 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Button, Drawer, Input } from "antd";
|
|
3
|
+
import { headerIconButtonClass, HeaderIcon } from "../../components/message/headerIconButton";
|
|
4
|
+
import useAuthStore from "../../store/auth";
|
|
3
5
|
import { Icon } from "../../components/icon";
|
|
4
6
|
import { useIsMobile } from "../../hooks/common/useIsMobile";
|
|
5
|
-
import
|
|
7
|
+
import { useSidePanel } from "../../hooks/common/useSidePanel";
|
|
8
|
+
import useConversationStore from "../../store/conversation";
|
|
6
9
|
import { useTranslation } from "react-i18next";
|
|
7
10
|
import { useRef, useState } from "react";
|
|
11
|
+
import useDeskPanelHostStore from "../../store/deskPanelHost";
|
|
12
|
+
import DeskSidePanel from "../../components/common/DeskSidePanel";
|
|
13
|
+
import GroupPanelHeader from "../../components/group/GroupPanelHeader";
|
|
8
14
|
import SearchMessageOnCurrentConversation from "./SearchMessageOnCurrentConversation";
|
|
9
15
|
const SearchDrawer = () => {
|
|
10
16
|
const { t } = useTranslation();
|
|
11
|
-
const
|
|
12
|
-
const
|
|
17
|
+
const { isOpen, toggle } = useSidePanel("search");
|
|
18
|
+
const isCrm = useAuthStore((state) => state.isCrm);
|
|
19
|
+
const conversationId = useConversationStore((state) => { var _a; return (_a = state.conversationData) === null || _a === void 0 ? void 0 : _a.conversationID; });
|
|
13
20
|
const [search, setSearch] = useState("");
|
|
21
|
+
// Each conversation starts with an empty box. Reset during render so the old
|
|
22
|
+
// term never searches the new conversation.
|
|
23
|
+
const [searchConversationId, setSearchConversationId] = useState(conversationId);
|
|
24
|
+
if (searchConversationId !== conversationId) {
|
|
25
|
+
setSearchConversationId(conversationId);
|
|
26
|
+
setSearch("");
|
|
27
|
+
}
|
|
14
28
|
const isMobile = useIsMobile();
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
const triggerRef = useRef(null);
|
|
30
|
+
// CRM desk: opens like the members panel, inline or as a drawer over the workspace.
|
|
31
|
+
const hasDeskHost = useDeskPanelHostStore((state) => !!(state.workspace || state.slot));
|
|
32
|
+
// autoFocus is off so the input keeps focus; hand it back to the trigger on close.
|
|
33
|
+
const handleClose = () => {
|
|
34
|
+
var _a;
|
|
35
|
+
toggle();
|
|
36
|
+
(_a = triggerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
23
37
|
};
|
|
24
|
-
|
|
38
|
+
const searchField = (_jsx(Input, { placeholder: t("search"), prefix: _jsx(Icon, { icon: "search-o", size: 18, className: "text-gray-400" }), onChange: (e) => {
|
|
39
|
+
setSearch(e.target.value);
|
|
40
|
+
}, className: "rounded-lg text-sm", size: "large", allowClear: true, value: search, autoFocus: true }));
|
|
41
|
+
const results = (_jsx(SearchMessageOnCurrentConversation, { searchTerm: search, onClose: handleClose }));
|
|
42
|
+
return (_jsxs("div", { className: "inline-flex shrink-0", "data-cp-name": "SearchDrawer", children: [_jsx(Button, { ref: triggerRef, type: "text", shape: "default", className: headerIconButtonClass(isCrm, isOpen), onClick: toggle, "aria-label": t("search_in_conversation"), title: t("search_in_conversation"), children: _jsx(HeaderIcon, { isCrm: isCrm, stroke: "search", font: "search-o" }) }), isCrm && hasDeskHost ? (_jsx(DeskSidePanel, { open: isOpen, label: t("search_in_conversation"), onClose: handleClose, autoFocus: false, children: () => (_jsxs("div", { className: "flex h-full flex-col bg-white", "data-cp-name": "SearchMessagePanel", children: [_jsx(GroupPanelHeader, { title: t("search_message_title"), onClose: handleClose }), _jsx("div", { className: "px-4 pt-3", children: searchField }), _jsx("div", { className: "flex-1 overflow-auto py-3", children: results })] })) })) : (_jsx(Drawer, { open: isOpen, "aria-label": t("search_in_conversation"), onClose: handleClose, autoFocus: false, mask: false, closeIcon: false, styles: {
|
|
25
43
|
body: {
|
|
26
44
|
padding: 0,
|
|
27
45
|
height: "100%",
|
|
28
46
|
},
|
|
29
|
-
}, getContainer: false,
|
|
30
|
-
setSearch(e.target.value);
|
|
31
|
-
}, className: "rounded-lg text-sm", size: "large", allowClear: true, value: search, autoFocus: false }) }), _jsx("div", { className: "flex-1 py-3 overflow-auto", children: _jsx(SearchMessageOnCurrentConversation, { searchTerm: search, onClose: toggle }) })] }) })] }));
|
|
47
|
+
}, getContainer: false, destroyOnHidden: true, width: isMobile ? "100%" : 360, children: _jsxs("div", { className: "flex flex-col h-full", children: [_jsxs("div", { className: "flex items-center justify-between p-3", children: [_jsx("span", { className: "text-lg font-medium", children: t("search_message_title") }), _jsx(Button, { type: "text", shape: "default", className: "text-gray-500 w-8 h-8 p-0", onClick: handleClose, "aria-label": t("close"), children: _jsx(Icon, { icon: "close-b", size: 22 }) })] }), _jsx("div", { className: "px-3", children: searchField }), _jsx("div", { className: "flex-1 py-3 overflow-auto", children: results })] }) }))] }));
|
|
32
48
|
};
|
|
33
49
|
export default SearchDrawer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchMessageOnCurrentConversation.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/SearchMessageOnCurrentConversation.tsx"],"names":[],"mappings":"AAQA,UAAU,uCAAuC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AACD,QAAA,MAAM,kCAAkC,GACtC,OAAO,uCAAuC,
|
|
1
|
+
{"version":3,"file":"SearchMessageOnCurrentConversation.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/SearchMessageOnCurrentConversation.tsx"],"names":[],"mappings":"AAQA,UAAU,uCAAuC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AACD,QAAA,MAAM,kCAAkC,GACtC,OAAO,uCAAuC,4CA4D/C,CAAC;AAEF,eAAe,kCAAkC,CAAC"}
|
|
@@ -10,14 +10,17 @@ const SearchMessageOnCurrentConversation = (props) => {
|
|
|
10
10
|
const { searchTerm = "" } = props;
|
|
11
11
|
const { t } = useTranslation();
|
|
12
12
|
const conversationData = useConversationStore((state) => state.conversationData);
|
|
13
|
+
const term = searchTerm.trim();
|
|
14
|
+
// recvID alone passes the hook's filter, so hold the request until there is a term.
|
|
13
15
|
const { dataFlatten, hasNextPage, fetchNextPage, isLoading } = useSearchMessage({
|
|
14
16
|
payload: {
|
|
15
|
-
searchTerm:
|
|
17
|
+
searchTerm: term,
|
|
16
18
|
contentType: MessageType.TextMessage,
|
|
17
19
|
recvID: conversationData === null || conversationData === void 0 ? void 0 : conversationData.groupID,
|
|
18
20
|
},
|
|
21
|
+
enabled: term !== "",
|
|
19
22
|
});
|
|
20
|
-
if (
|
|
23
|
+
if (term === "")
|
|
21
24
|
return _jsx(Empty, { description: t("no_search_text") });
|
|
22
25
|
if (dataFlatten.length === 0 && !isLoading)
|
|
23
26
|
return _jsx(Empty, { description: t("no_result") });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/index.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/search-conversation/index.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,oBAAY,wBAAwB;IAClC,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AACD,QAAA,MAAM,kBAAkB,GAAI,wBAGzB,uBAAuB,4CAmFzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -9,6 +9,7 @@ import SearchConversationAsUsers from "./SearchConversationAsUsers";
|
|
|
9
9
|
import SearchConversationAsMessages from "./SearchConversationAsMessages";
|
|
10
10
|
import SearchConversationAsGroups from "./SearchConversationAsGroups";
|
|
11
11
|
import { SearchScopeProvider } from "./SearchScopeContext";
|
|
12
|
+
import useAuthStore from "../../store/auth";
|
|
12
13
|
export var SearchConversationTabKey;
|
|
13
14
|
(function (SearchConversationTabKey) {
|
|
14
15
|
SearchConversationTabKey["All"] = "all";
|
|
@@ -19,6 +20,7 @@ export var SearchConversationTabKey;
|
|
|
19
20
|
})(SearchConversationTabKey || (SearchConversationTabKey = {}));
|
|
20
21
|
const SearchConversation = ({ searchTerm, scope = "crm", }) => {
|
|
21
22
|
const { t } = useTranslation();
|
|
23
|
+
const isCrm = useAuthStore((state) => state.isCrm);
|
|
22
24
|
const [activeKey, setActiveKey] = useState(SearchConversationTabKey.All);
|
|
23
25
|
const items = useMemo(() => {
|
|
24
26
|
const allItems = [
|
|
@@ -63,7 +65,7 @@ const SearchConversation = ({ searchTerm, scope = "crm", }) => {
|
|
|
63
65
|
(_a = document
|
|
64
66
|
.querySelector('[data-cp-name="SearchConversation"] .ant-tabs-tab-active')) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ inline: "nearest", block: "nearest" });
|
|
65
67
|
}, [activeKey]);
|
|
66
|
-
return (_jsx(SearchScopeProvider, { value: scope, children: _jsx("div", { className: "h-full", "data-cp-name": "SearchConversation", children: _jsx(Tabs, { defaultActiveKey: SearchConversationTabKey.All, items: items, className: "h-full", activeKey: activeKey, onChange: (key) => setActiveKey(key), destroyOnHidden: true,
|
|
68
|
+
return (_jsx(SearchScopeProvider, { value: scope, children: _jsx("div", { className: "h-full", "data-cp-name": "SearchConversation", children: _jsx(Tabs, { defaultActiveKey: SearchConversationTabKey.All, items: items, className: isCrm ? "h-full dc-search-tabs-compact" : "h-full", activeKey: activeKey, onChange: (key) => setActiveKey(key), destroyOnHidden: true,
|
|
67
69
|
// Ant's built-in tab-overflow ("...") dropdown never recovers from
|
|
68
70
|
// its initial off-screen measurement inside this Drawer (rendered
|
|
69
71
|
// with getContainer={false} for unrelated scroll-position reasons —
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchItemAsGroup.d.ts","sourceRoot":"","sources":["../../../../src/components/search-conversation/item/SearchItemAsGroup.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SearchItemAsGroup.d.ts","sourceRoot":"","sources":["../../../../src/components/search-conversation/item/SearchItemAsGroup.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAUxF,UAAU,sBAAsB;IAC9B,KAAK,EAAE,4BAA4B,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,iBAAiB,GAAI,OAAO,sBAAsB,4CA4FvD,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { clickableProps } from "../../../utils/a11yClickable";
|
|
4
|
+
import { searchRowClass } from "./searchRowClass";
|
|
5
|
+
import useAuthStore from "../../../store/auth";
|
|
6
|
+
import { AdaptiveIcon } from "../../../components/icon/AdaptiveIcon";
|
|
3
7
|
import { useTranslation } from "react-i18next";
|
|
4
8
|
import { GroupVisibility } from "@droppii-org/wasm-client-sdk";
|
|
5
9
|
import useConversationStore from "../../../store/conversation";
|
|
6
10
|
import { useChatNavigate } from "../../../hooks/conversation/useChatNavigate";
|
|
7
11
|
import { highlightSearch, sanitizeHtml } from "../../../utils/common";
|
|
8
|
-
import { Icon } from "../../../components/icon";
|
|
9
12
|
import GroupCompositeAvatar from "../../../components/group/GroupCompositeAvatar";
|
|
13
|
+
import RowChip from "../../../components/conversation/RowChip";
|
|
14
|
+
import { StrokeIcon } from "../../../components/icon/StrokeIcon";
|
|
10
15
|
import { useOpenPdpSearchResult } from "../../../hooks/search/useOpenPdpSearchResult";
|
|
11
16
|
import { useSearchScope } from "../SearchScopeContext";
|
|
12
17
|
const SearchItemAsGroup = (props) => {
|
|
13
18
|
const { group, searchTerm = "" } = props;
|
|
14
19
|
const { t } = useTranslation();
|
|
20
|
+
const isCrm = useAuthStore((state) => state.isCrm);
|
|
15
21
|
const onNavigate = useChatNavigate();
|
|
16
22
|
const scope = useSearchScope();
|
|
17
23
|
const openPdpResult = useOpenPdpSearchResult();
|
|
@@ -35,10 +41,14 @@ const SearchItemAsGroup = (props) => {
|
|
|
35
41
|
newSearchParams.delete("botId");
|
|
36
42
|
onNavigate(`${window.location.pathname}?${newSearchParams.toString()}`);
|
|
37
43
|
};
|
|
38
|
-
return (_jsxs("div", { className:
|
|
44
|
+
return (_jsxs("div", Object.assign({ className: searchRowClass(isCrm) }, clickableProps(onPressItem), { "data-cp-name": "SearchItemAsGroup", children: [_jsx(GroupCompositeAvatar, { groupID: group.groupId, faceURL: conversation.faceURL, groupName: conversation.showName, size: isCrm ? 40 : 48 }), _jsxs("div", { className: "flex flex-col flex-1 min-w-0 gap-0.5", children: [_jsx("p", { className: isCrm
|
|
45
|
+
? "m-0 truncate text-sm font-medium text-gray-900"
|
|
46
|
+
: "text-sm font-semibold truncate", dangerouslySetInnerHTML: {
|
|
39
47
|
__html: sanitizeHtml(highlightSearch(conversation.showName || "", searchTerm)),
|
|
40
|
-
} }), _jsxs("div", { className:
|
|
48
|
+
} }), _jsxs("div", { className: `flex items-center gap-1.5 ${isCrm ? "mt-1 text-[13px] text-gray-600" : "text-xs text-gray-500"}`, children: [isCrm ? (
|
|
49
|
+
// Same primary chip as the "Toàn bộ" list and group info.
|
|
50
|
+
_jsxs(RowChip, { tone: "primary", children: [_jsx(StrokeIcon, { name: isPublic ? "globe" : "lock", size: 14 }), t(isPublic ? "group_visibility_public" : "group_visibility_private")] })) : (_jsxs("span", { className: "flex items-center gap-0.5", children: [_jsx(AdaptiveIcon, { stroke: isPublic ? "globe" : "lock", font: isPublic ? "globe-o" : "lock-o", size: 12, strokeSize: 14 }), isPublic
|
|
41
51
|
? t("group_visibility_public")
|
|
42
|
-
: t("group_visibility_private")] }), typeof group.memberCount === "number" && (_jsxs(_Fragment, { children: [_jsx("span", { children: "\u00B7" }), _jsx("span", { children: t("member_count", { count: group.memberCount }) })] }))] })] })] }));
|
|
52
|
+
: t("group_visibility_private")] })), typeof group.memberCount === "number" && (_jsxs(_Fragment, { children: [_jsx("span", { children: "\u00B7" }), _jsx("span", { children: t("member_count", { count: group.memberCount }) })] }))] })] })] })));
|
|
43
53
|
};
|
|
44
54
|
export default SearchItemAsGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchItemAsMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/search-conversation/item/SearchItemAsMessage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SearchItemAsMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/search-conversation/item/SearchItemAsMessage.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAA4B,MAAM,8BAA8B,CAAC;AA0BrF,UAAU,wBAAwB;IAChC,OAAO,EAAE,WAAW,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,QAAA,MAAM,mBAAmB,GAAI,OAAO,wBAAwB,4CAsJ3D,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { clickableProps } from "../../../utils/a11yClickable";
|
|
4
|
+
import { searchRowClass } from "./searchRowClass";
|
|
3
5
|
import { SessionType } from "@droppii-org/wasm-client-sdk";
|
|
4
6
|
import { Avatar } from "antd";
|
|
5
7
|
import { formatTimestamp, highlightSearch, sanitizeHtml, } from "../../../utils/common";
|
|
@@ -9,6 +11,8 @@ import { message as antdMessage } from "antd";
|
|
|
9
11
|
import { useTranslation } from "react-i18next";
|
|
10
12
|
import useConversationStore from "../../../store/conversation";
|
|
11
13
|
import { useMemo } from "react";
|
|
14
|
+
import TintedAvatar from "../../../components/common/TintedAvatar";
|
|
15
|
+
import RowChip from "../../../components/conversation/RowChip";
|
|
12
16
|
import useAuthStore from "../../../store/auth";
|
|
13
17
|
import { getConversationIdFromMessage } from "../../../utils/conversation";
|
|
14
18
|
import { useOpenPdpSearchResult } from "../../../hooks/search/useOpenPdpSearchResult";
|
|
@@ -19,7 +23,7 @@ const PDP_TAG_LABEL_KEYS = {
|
|
|
19
23
|
CS_TEAM: "pdp_team_inbox_tag",
|
|
20
24
|
};
|
|
21
25
|
const SearchItemAsMessage = (props) => {
|
|
22
|
-
var _a, _b;
|
|
26
|
+
var _a, _b, _c;
|
|
23
27
|
const { t } = useTranslation();
|
|
24
28
|
const { message, searchTerm = "", displayTag, tag, onClick } = props;
|
|
25
29
|
const { user } = useChatContext();
|
|
@@ -80,18 +84,25 @@ const SearchItemAsMessage = (props) => {
|
|
|
80
84
|
msgContent = message === null || message === void 0 ? void 0 : message.content;
|
|
81
85
|
}
|
|
82
86
|
}
|
|
83
|
-
return (_jsxs("div", { className:
|
|
87
|
+
return (_jsxs("div", Object.assign({ className: searchRowClass(isCrm) }, clickableProps(onPressItem), { "data-cp-name": "SearchItemAsMessage", children: [_jsx("div", { children: isCrm ? (_jsx(TintedAvatar, { name: (_b = (useConversationDisplay
|
|
88
|
+
? message.senderNickname
|
|
89
|
+
: conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName)) !== null && _b !== void 0 ? _b : "", src: useConversationDisplay
|
|
90
|
+
? message.senderFaceUrl
|
|
91
|
+
: conversationData === null || conversationData === void 0 ? void 0 : conversationData.faceURL, size: 40 })) : (_jsx(Avatar, { size: "large", src: useConversationDisplay
|
|
84
92
|
? message.senderFaceUrl
|
|
85
93
|
: conversationData === null || conversationData === void 0 ? void 0 : conversationData.faceURL, alt: useConversationDisplay
|
|
86
94
|
? message.senderNickname
|
|
87
95
|
: conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName, children: useConversationDisplay
|
|
88
|
-
? (
|
|
89
|
-
: conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName.charAt(0).toUpperCase() }) }), _jsxs("div", { className: "flex flex-col flex-1 min-w-0 gap-1", children: [_jsxs("div", { className: "flex flex-1 items-center justify-between", children: [_jsx("span", { className:
|
|
96
|
+
? (_c = message.senderNickname) === null || _c === void 0 ? void 0 : _c.charAt(0).toUpperCase()
|
|
97
|
+
: conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName.charAt(0).toUpperCase() })) }), _jsxs("div", { className: "flex flex-col flex-1 min-w-0 gap-1", children: [_jsxs("div", { className: "flex flex-1 items-center justify-between", children: [_jsx("span", { className: isCrm
|
|
98
|
+
? "min-w-0 flex-1 truncate text-sm font-medium text-gray-900"
|
|
99
|
+
: "text-sm flex-1 font-semibold truncate", children: useConversationDisplay
|
|
90
100
|
? message.senderNickname
|
|
91
|
-
: conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName }), _jsx("span", { className: "text-xs text-gray-500", children: formatTimestamp(message.sendTime, {
|
|
101
|
+
: conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName }), _jsx("span", { className: isCrm ? "ml-2 shrink-0 text-xs text-gray-600" : "text-xs text-gray-500", children: formatTimestamp(message.sendTime, {
|
|
92
102
|
hasTime: true,
|
|
93
|
-
}) })] }), _jsxs("div", { className: "flex flex-col flex-1 min-w-0 gap-1", children: [_jsx("span", { className: "text-xs flex-1 text-gray-500 truncate", dangerouslySetInnerHTML: {
|
|
103
|
+
}) })] }), _jsxs("div", { className: "flex flex-col flex-1 min-w-0 gap-1", children: [_jsx("span", { className: isCrm ? "truncate text-[13px] text-gray-600" : "text-xs flex-1 text-gray-500 truncate", dangerouslySetInnerHTML: {
|
|
94
104
|
__html: sanitizeHtml(highlightSearch(msgContent, searchTerm)),
|
|
95
|
-
} }), tagLabel &&
|
|
105
|
+
} }), tagLabel &&
|
|
106
|
+
(isCrm ? (_jsx("span", { className: "flex h-5 items-center", children: _jsx(RowChip, { tone: "primary", children: tagLabel }) })) : (_jsx("span", { className: "text-[10px] text-[var(--dc-color-primary)] bg-[var(--dc-color-primary-light)] px-1.5 py-0.5 rounded w-fit truncate", children: tagLabel })))] })] })] }), message.clientMsgID));
|
|
96
107
|
};
|
|
97
108
|
export default SearchItemAsMessage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchItemAsUser.d.ts","sourceRoot":"","sources":["../../../../src/components/search-conversation/item/SearchItemAsUser.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SearchItemAsUser.d.ts","sourceRoot":"","sources":["../../../../src/components/search-conversation/item/SearchItemAsUser.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIhD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAclF,UAAU,qBAAqB;IAE7B,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC;IAC9E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,gBAAgB,GAAI,OAAO,qBAAqB,4CAsFrD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { clickableProps } from "../../../utils/a11yClickable";
|
|
4
|
+
import { searchRowClass } from "./searchRowClass";
|
|
3
5
|
import { Avatar, message } from "antd";
|
|
4
6
|
import { highlightSearch, sanitizeHtml } from "../../../utils/common";
|
|
5
7
|
import useConversationStore from "../../../store/conversation";
|
|
6
8
|
import { useTranslation } from "react-i18next";
|
|
7
9
|
import { useOpenPdpSearchResult } from "../../../hooks/search/useOpenPdpSearchResult";
|
|
8
10
|
import { useSearchScope } from "../SearchScopeContext";
|
|
11
|
+
import useAuthStore from "../../../store/auth";
|
|
12
|
+
import { SessionStatus } from "../../../types/chat";
|
|
13
|
+
import TintedAvatar from "../../../components/common/TintedAvatar";
|
|
14
|
+
const STATUS_LABEL_KEYS = {
|
|
15
|
+
[SessionStatus.UNASSIGNED]: "unassigned",
|
|
16
|
+
[SessionStatus.WAITING_PROCESS]: "waiting_process",
|
|
17
|
+
[SessionStatus.IN_PROCESS]: "in_process",
|
|
18
|
+
[SessionStatus.COMPLETED]: "completed",
|
|
19
|
+
};
|
|
9
20
|
const SearchItemAsUser = (props) => {
|
|
10
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
21
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
11
22
|
const { session, searchTerm = "" } = props;
|
|
12
23
|
const { t } = useTranslation();
|
|
13
24
|
const scope = useSearchScope();
|
|
14
25
|
const openPdpResult = useOpenPdpSearchResult();
|
|
26
|
+
const isCrm = useAuthStore((state) => state.isCrm);
|
|
15
27
|
const ownerName = `${(_a = session.owner) === null || _a === void 0 ? void 0 : _a.fullName}${((_b = session.owner) === null || _b === void 0 ? void 0 : _b.username) ? ` (${(_c = session.owner) === null || _c === void 0 ? void 0 : _c.username})` : ""}`;
|
|
16
28
|
const onPressItem = async () => {
|
|
17
29
|
if (scope === "pdp-portal") {
|
|
@@ -25,8 +37,14 @@ const SearchItemAsUser = (props) => {
|
|
|
25
37
|
.getState()
|
|
26
38
|
.setSelectedConversationId(session.conversationId);
|
|
27
39
|
};
|
|
28
|
-
return (_jsxs("div", { className: "
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
return (_jsxs("div", Object.assign({ className: searchRowClass(isCrm) }, clickableProps(onPressItem), { "data-cp-name": "SearchItemAsUser", children: [isCrm ? (_jsx(TintedAvatar, { name: ((_d = session.owner) === null || _d === void 0 ? void 0 : _d.fullName) || ((_e = session.owner) === null || _e === void 0 ? void 0 : _e.username) || "", src: (_f = session.owner) === null || _f === void 0 ? void 0 : _f.avatar, size: 40 })) : (_jsx(Avatar, { size: "large", src: (_g = session.owner) === null || _g === void 0 ? void 0 : _g.avatar, alt: (_h = session.owner) === null || _h === void 0 ? void 0 : _h.username, children: (_k = (_j = session.owner) === null || _j === void 0 ? void 0 : _j.fullName) === null || _k === void 0 ? void 0 : _k.charAt(0).toUpperCase() })), _jsxs("div", { className: "flex flex-col flex-1 min-w-0", children: [_jsx("p", { className: isCrm
|
|
41
|
+
? "m-0 truncate text-sm font-medium text-gray-900"
|
|
42
|
+
: "text-sm font-semibold truncate", dangerouslySetInnerHTML: {
|
|
43
|
+
__html: sanitizeHtml(highlightSearch(isCrm ? ((_m = (_l = session.owner) === null || _l === void 0 ? void 0 : _l.fullName) !== null && _m !== void 0 ? _m : "") : ownerName, searchTerm)),
|
|
44
|
+
} }), isCrm && (
|
|
45
|
+
// Same-name customers differ by username and by the session's state.
|
|
46
|
+
_jsxs("p", { className: "m-0 mt-1 flex min-w-0 items-center gap-1 text-[13px] text-gray-600", children: [((_o = session.owner) === null || _o === void 0 ? void 0 : _o.username) && (_jsx("span", { className: "truncate", dangerouslySetInnerHTML: {
|
|
47
|
+
__html: sanitizeHtml(highlightSearch(session.owner.username, searchTerm)),
|
|
48
|
+
} })), STATUS_LABEL_KEYS[session.status] && (_jsxs(_Fragment, { children: [((_p = session.owner) === null || _p === void 0 ? void 0 : _p.username) && _jsx("span", { "aria-hidden": "true", children: "\u00B7" }), _jsx("span", { className: "shrink-0", children: t(STATUS_LABEL_KEYS[session.status]) })] }))] }))] })] }), session.id));
|
|
31
49
|
};
|
|
32
50
|
export default SearchItemAsUser;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** Search result rows. CRM matches the desk list row; other hosts keep the original look. */
|
|
2
|
+
export declare const searchRowClass: (isCrm: boolean) => "mx-2 flex cursor-pointer items-start gap-3 rounded-lg px-3 py-2.5 transition-colors hover:bg-gray-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400" | "py-3 px-2 flex items-center gap-3 hover:bg-gray-100 hover:rounded-sm cursor-pointer border-b mx-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary-200";
|
|
3
|
+
//# sourceMappingURL=searchRowClass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchRowClass.d.ts","sourceRoot":"","sources":["../../../../src/components/search-conversation/item/searchRowClass.ts"],"names":[],"mappings":"AAEA,6FAA6F;AAC7F,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,+WAGgF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { FOCUS_RING_CLASS } from "../../../utils/a11yClickable";
|
|
2
|
+
/** Search result rows. CRM matches the desk list row; other hosts keep the original look. */
|
|
3
|
+
export const searchRowClass = (isCrm) => isCrm
|
|
4
|
+
? "mx-2 flex cursor-pointer items-start gap-3 rounded-lg px-3 py-2.5 transition-colors hover:bg-gray-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400"
|
|
5
|
+
: `py-3 px-2 flex items-center gap-3 hover:bg-gray-100 hover:rounded-sm cursor-pointer border-b mx-1 ${FOCUS_RING_CLASS}`;
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
interface DeskAssignedSessionProps {
|
|
2
|
+
/** `inline` sits in the workspace row and can collapse; `overlay` floats over the list on narrow screens. */
|
|
3
|
+
variant?: "inline" | "overlay";
|
|
4
|
+
}
|
|
5
|
+
declare const DeskAssignedSession: ({ variant }: DeskAssignedSessionProps) => import("react/jsx-runtime").JSX.Element;
|
|
2
6
|
export default DeskAssignedSession;
|
|
3
7
|
//# sourceMappingURL=DeskAssignedSession.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeskAssignedSession.d.ts","sourceRoot":"","sources":["../../../src/components/session/DeskAssignedSession.tsx"],"names":[],"mappings":"AAeA,QAAA,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"DeskAssignedSession.d.ts","sourceRoot":"","sources":["../../../src/components/session/DeskAssignedSession.tsx"],"names":[],"mappings":"AAeA,UAAU,wBAAwB;IAChC,6GAA6G;IAC7G,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CAChC;AAED,QAAA,MAAM,mBAAmB,GAAI,aAAwB,wBAAwB,4CA2H5E,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1,26 +1,51 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { useCallback, useEffect } from "react";
|
|
3
|
+
import { Button, Tooltip } from "antd";
|
|
4
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
6
5
|
import { useTranslation } from "react-i18next";
|
|
7
|
-
import {
|
|
6
|
+
import { StrokeIcon } from "../../components/icon/StrokeIcon";
|
|
8
7
|
import { useGetSessionSummary } from "../../hooks/session/useGetSessionSummary";
|
|
9
8
|
import useSessionStore from "../../store/session";
|
|
9
|
+
import { getActiveFolderId } from "../../store/sessionFolder";
|
|
10
|
+
import useWorkspaceLayoutStore from "../../store/workspaceLayout";
|
|
11
|
+
import { LAYOUT_WIDTHS } from "../../constants/layout";
|
|
10
12
|
import emitter from "../../utils/events";
|
|
11
13
|
import DeskTeamInbox from "./DeskTeamInbox";
|
|
12
|
-
import
|
|
13
|
-
const {
|
|
14
|
-
const DeskAssignedSession = () => {
|
|
14
|
+
import SessionFolderList from "./SessionFolderList";
|
|
15
|
+
const DeskAssignedSession = ({ variant = "inline" }) => {
|
|
15
16
|
const { t } = useTranslation();
|
|
16
|
-
const
|
|
17
|
+
const isOverlay = variant === "overlay";
|
|
18
|
+
const collapsed = useWorkspaceLayoutStore((state) => { var _a; return !isOverlay && ((_a = state.folderCollapsedChoice) !== null && _a !== void 0 ? _a : false); });
|
|
19
|
+
const setFolderCollapsedChoice = useWorkspaceLayoutStore((state) => state.setFolderCollapsedChoice);
|
|
20
|
+
const setFolderOverlayOpen = useWorkspaceLayoutStore((state) => state.setFolderOverlayOpen);
|
|
17
21
|
const setFilterSummary = useSessionStore((state) => state.setFilterSummary);
|
|
18
22
|
const filterSummary = useSessionStore((state) => state.filterSummary);
|
|
19
23
|
const viewMode = useSessionStore((state) => state.viewMode);
|
|
24
|
+
const activeFolderId = useSessionStore((state) => getActiveFolderId(state.filterSummary, state.viewMode));
|
|
20
25
|
const setViewMode = useSessionStore((state) => state.setViewMode);
|
|
21
26
|
const { data: sessionSummary, refetch } = useGetSessionSummary();
|
|
22
|
-
const
|
|
23
|
-
|
|
27
|
+
const closeOverlay = useCallback(() => {
|
|
28
|
+
if (isOverlay)
|
|
29
|
+
setFolderOverlayOpen(false);
|
|
30
|
+
}, [isOverlay, setFolderOverlayOpen]);
|
|
31
|
+
const onFilterSelect = useCallback((filter) => {
|
|
32
|
+
setFilterSummary(filter);
|
|
33
|
+
closeOverlay();
|
|
34
|
+
}, [setFilterSummary, closeOverlay]);
|
|
35
|
+
const onAllGroupsSelect = useCallback(() => {
|
|
36
|
+
setViewMode("allGroups");
|
|
37
|
+
closeOverlay();
|
|
38
|
+
}, [setViewMode, closeOverlay]);
|
|
39
|
+
// Folders picked from the team inbox change the store without these handlers;
|
|
40
|
+
// compare against the values seen at mount so mounting itself never closes it.
|
|
41
|
+
const seenFolder = useRef({ filterSummary, viewMode });
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
const seen = seenFolder.current;
|
|
44
|
+
if (seen.filterSummary === filterSummary && seen.viewMode === viewMode)
|
|
45
|
+
return;
|
|
46
|
+
seenFolder.current = { filterSummary, viewMode };
|
|
47
|
+
closeOverlay();
|
|
48
|
+
}, [filterSummary, viewMode, closeOverlay]);
|
|
24
49
|
useEffect(() => {
|
|
25
50
|
const handler = () => refetch();
|
|
26
51
|
emitter.on("UPDATE_SESSION", handler);
|
|
@@ -29,8 +54,11 @@ const DeskAssignedSession = () => {
|
|
|
29
54
|
};
|
|
30
55
|
}, [refetch]);
|
|
31
56
|
if (collapsed) {
|
|
32
|
-
return (_jsx("div", { className: "flex flex-col items-center
|
|
57
|
+
return (_jsx("div", { className: "flex flex-col items-center shrink-0 pt-3 rounded-xl bg-white shadow-sm", style: { width: LAYOUT_WIDTHS.folderCollapsed }, "data-cp-name": "DeskAssignedSession", children: _jsx(Tooltip, { title: t("folder_panel_expand"), placement: "right", children: _jsx(Button, { type: "text", className: "text-gray-600 w-8 h-8 p-0", "aria-label": t("folder_panel_expand"), onClick: () => setFolderCollapsedChoice(false), children: _jsx(StrokeIcon, { name: "chevrons-right", size: 20 }) }) }) }));
|
|
33
58
|
}
|
|
34
|
-
return (
|
|
59
|
+
return (_jsxs("aside", { "aria-label": t("folder_panel_title"), className: `flex flex-col h-full shrink-0 overflow-hidden rounded-xl bg-white ${isOverlay ? "shadow-lg" : "shadow-sm"}`, style: { width: LAYOUT_WIDTHS.folder }, "data-cp-name": "DeskAssignedSession", children: [_jsxs("div", { className: "flex items-center justify-between h-14 pl-4 pr-2 border-b border-gray-25 shrink-0", children: [_jsx("span", { className: "text-base font-bold flex-1 truncate", children: t("desk_brand") }), _jsx(Tooltip, { title: t(isOverlay ? "folder_panel_close" : "folder_panel_collapse"), children: _jsx(Button, { type: "text", className: "text-gray-600 w-8 h-8 p-0", "aria-label": t(isOverlay ? "folder_panel_close" : "folder_panel_collapse"), onClick: () => isOverlay ? setFolderOverlayOpen(false) : setFolderCollapsedChoice(true), children: _jsx(StrokeIcon, { name: isOverlay ? "x" : "chevrons-left", size: 18 }) }) })] }), _jsxs("div", { className: "flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto px-2 pb-2 pt-1", children: [_jsx("div", { className: "px-2 pb-1 pt-3 text-xs font-medium text-gray-600", children: t("my_messages") }), sessionSummary && (_jsx(SessionFolderList, { summary: sessionSummary, activeFolderId: activeFolderId, onFilterSelect: onFilterSelect, allGroups: {
|
|
60
|
+
active: viewMode === "allGroups",
|
|
61
|
+
onSelect: onAllGroupsSelect,
|
|
62
|
+
} })), _jsx(DeskTeamInbox, {})] })] }));
|
|
35
63
|
};
|
|
36
64
|
export default DeskAssignedSession;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeskTeamInbox.d.ts","sourceRoot":"","sources":["../../../src/components/session/DeskTeamInbox.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DeskTeamInbox.d.ts","sourceRoot":"","sources":["../../../src/components/session/DeskTeamInbox.tsx"],"names":[],"mappings":"AAqEA,QAAA,MAAM,aAAa,sDAsDlB,CAAC;AAEF,eAAe,aAAa,CAAC"}
|