@droppii-org/chat-sdk 0.6.56 → 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/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 +64 -15
- 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.js +2 -2
- 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/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,46 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { useQueries } from "@tanstack/react-query";
|
|
3
|
+
import { QUERY_KEYS } from "../../services/query";
|
|
4
|
+
import { apiInstance } from "../../services/api";
|
|
5
|
+
import { ENDPOINTS } from "../../services/routes";
|
|
6
|
+
import { PAGE_SIZE } from "../../constants";
|
|
7
|
+
import { mergeCannedResults, } from "../../components/canned-response/cannedScopes";
|
|
8
|
+
// One request per scope with the existing search endpoint, merged in scope order.
|
|
9
|
+
export const useSearchCannedAcrossScopes = (scopes, shortcut) => {
|
|
10
|
+
const enabled = shortcut.length > 0;
|
|
11
|
+
const combined = useQueries({
|
|
12
|
+
queries: scopes.map((scope) => ({
|
|
13
|
+
queryKey: [
|
|
14
|
+
QUERY_KEYS.GET_CANNED_RESPONSES,
|
|
15
|
+
"composer-search",
|
|
16
|
+
scope.key,
|
|
17
|
+
shortcut,
|
|
18
|
+
],
|
|
19
|
+
enabled,
|
|
20
|
+
queryFn: async () => {
|
|
21
|
+
var _a, _b;
|
|
22
|
+
const res = await apiInstance.get(ENDPOINTS.chatService.getCannedResponses, {
|
|
23
|
+
params: {
|
|
24
|
+
visibilityScope: scope.visibilityScope,
|
|
25
|
+
teamId: scope.teamId,
|
|
26
|
+
shortcut,
|
|
27
|
+
page: 1,
|
|
28
|
+
pageSize: PAGE_SIZE.large,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
return (_b = (_a = res.data) === null || _a === void 0 ? void 0 : _a.data) !== null && _b !== void 0 ? _b : [];
|
|
32
|
+
},
|
|
33
|
+
})),
|
|
34
|
+
combine: (results) => ({
|
|
35
|
+
data: results.map((r) => r.data),
|
|
36
|
+
isLoading: results.some((r) => r.isLoading),
|
|
37
|
+
isError: results.length > 0 && results.every((r) => r.isError),
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
const rows = useMemo(() => mergeCannedResults(scopes, combined.data.map((data) => data !== null && data !== void 0 ? data : [])), [scopes, combined.data]);
|
|
41
|
+
return {
|
|
42
|
+
rows,
|
|
43
|
+
isLoading: enabled && combined.isLoading,
|
|
44
|
+
isError: enabled && combined.isError,
|
|
45
|
+
};
|
|
46
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCloseOnSidePanelOpen.d.ts","sourceRoot":"","sources":["../../../src/hooks/common/useCloseOnSidePanelOpen.ts"],"names":[],"mappings":"AAKA,yFAAyF;AACzF,eAAO,MAAM,uBAAuB,GAAI,SAAS,MAAM,IAAI,SAS1D,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect, useRef } from "react";
|
|
3
|
+
import useAuthStore from "../../store/auth";
|
|
4
|
+
import useSidePanelStore from "../../store/sidePanel";
|
|
5
|
+
/** CRM only: runs `onClose` when a side panel opens, so popovers never stack over it. */
|
|
6
|
+
export const useCloseOnSidePanelOpen = (onClose) => {
|
|
7
|
+
const isCrm = useAuthStore((state) => state.isCrm);
|
|
8
|
+
const activePanel = useSidePanelStore((state) => state.activePanel);
|
|
9
|
+
const onCloseRef = useRef(onClose);
|
|
10
|
+
onCloseRef.current = onClose;
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
if (isCrm && activePanel)
|
|
13
|
+
onCloseRef.current();
|
|
14
|
+
}, [isCrm, activePanel]);
|
|
15
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const DESK_ROW_SELECTOR = "[data-cp-name=\"DeskConversationRow\"]";
|
|
2
|
+
export declare const DESK_SEARCH_SELECTOR = "[data-desk-search]";
|
|
3
|
+
export declare const DESK_COMPOSER_SELECTOR = "[data-cp-name=\"ComposerEditor\"]";
|
|
4
|
+
export declare const isTypingTarget: (target: EventTarget | null) => boolean;
|
|
5
|
+
interface UseDeskShortcutsOptions {
|
|
6
|
+
onOpenHelp: () => void;
|
|
7
|
+
}
|
|
8
|
+
/** Desk keyboard shortcuts. Single-character keys never fire while typing. */
|
|
9
|
+
export declare const useDeskShortcuts: ({ onOpenHelp }: UseDeskShortcutsOptions) => void;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=useDeskShortcuts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDeskShortcuts.d.ts","sourceRoot":"","sources":["../../../src/hooks/common/useDeskShortcuts.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,iBAAiB,2CAAyC,CAAC;AACxE,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AACzD,eAAO,MAAM,sBAAsB,sCAAoC,CAAC;AAExE,eAAO,MAAM,cAAc,GAAI,QAAQ,WAAW,GAAG,IAAI,YAQxD,CAAC;AA2CF,UAAU,uBAAuB;IAC/B,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,GAAI,gBAAgB,uBAAuB,SAsCvE,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import emitter from "../../utils/events";
|
|
4
|
+
import useSidePanelStore from "../../store/sidePanel";
|
|
5
|
+
import useEscapeLayersStore from "../../store/escapeLayers";
|
|
6
|
+
import useShortcutPrefsStore from "../../store/shortcutPrefs";
|
|
7
|
+
export const DESK_ROW_SELECTOR = '[data-cp-name="DeskConversationRow"]';
|
|
8
|
+
export const DESK_SEARCH_SELECTOR = "[data-desk-search]";
|
|
9
|
+
export const DESK_COMPOSER_SELECTOR = '[data-cp-name="ComposerEditor"]';
|
|
10
|
+
export const isTypingTarget = (target) => {
|
|
11
|
+
if (!(target instanceof HTMLElement))
|
|
12
|
+
return false;
|
|
13
|
+
return (target.isContentEditable ||
|
|
14
|
+
target.closest('[contenteditable="true"]') !== null ||
|
|
15
|
+
["INPUT", "TEXTAREA", "SELECT"].includes(target.tagName) ||
|
|
16
|
+
target.getAttribute("role") === "textbox");
|
|
17
|
+
};
|
|
18
|
+
const isModalOpen = () => Array.from(document.querySelectorAll(".ant-modal-wrap")).some((el) => el.style.display !== "none");
|
|
19
|
+
/** Moves to the next/previous row in the order the list is rendered (filtered and loaded). */
|
|
20
|
+
const moveListSelection = (step) => {
|
|
21
|
+
var _a, _b;
|
|
22
|
+
const rows = Array.from(document.querySelectorAll(DESK_ROW_SELECTOR));
|
|
23
|
+
if (!rows.length)
|
|
24
|
+
return;
|
|
25
|
+
const current = rows.findIndex((row) => row.getAttribute("aria-current") === "true");
|
|
26
|
+
const next = current === -1
|
|
27
|
+
? step === 1
|
|
28
|
+
? 0
|
|
29
|
+
: rows.length - 1
|
|
30
|
+
: Math.min(rows.length - 1, Math.max(0, current + step));
|
|
31
|
+
if (next === current)
|
|
32
|
+
return;
|
|
33
|
+
rows[next].click();
|
|
34
|
+
(_b = (_a = rows[next]).scrollIntoView) === null || _b === void 0 ? void 0 : _b.call(_a, { block: "nearest" });
|
|
35
|
+
};
|
|
36
|
+
const handleEscape = (event) => {
|
|
37
|
+
// Modals and drawers close themselves when they hold focus.
|
|
38
|
+
if (event.defaultPrevented || isModalOpen())
|
|
39
|
+
return;
|
|
40
|
+
if (useEscapeLayersStore.getState().closeTop())
|
|
41
|
+
return;
|
|
42
|
+
const sidePanel = useSidePanelStore.getState();
|
|
43
|
+
if (sidePanel.activePanel) {
|
|
44
|
+
sidePanel.closePanel();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const active = document.activeElement;
|
|
48
|
+
if (active instanceof HTMLElement &&
|
|
49
|
+
active.closest(DESK_COMPOSER_SELECTOR)) {
|
|
50
|
+
active.blur();
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
/** Desk keyboard shortcuts. Single-character keys never fire while typing. */
|
|
54
|
+
export const useDeskShortcuts = ({ onOpenHelp }) => {
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
const onKeyDown = (event) => {
|
|
57
|
+
var _a;
|
|
58
|
+
if (event.key === "Escape") {
|
|
59
|
+
handleEscape(event);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (!useShortcutPrefsStore.getState().singleKeyEnabled)
|
|
63
|
+
return;
|
|
64
|
+
if (event.ctrlKey || event.metaKey || event.altKey || event.defaultPrevented)
|
|
65
|
+
return;
|
|
66
|
+
if (isTypingTarget(event.target) || isModalOpen())
|
|
67
|
+
return;
|
|
68
|
+
switch (event.key.toLowerCase()) {
|
|
69
|
+
case "j":
|
|
70
|
+
moveListSelection(1);
|
|
71
|
+
break;
|
|
72
|
+
case "k":
|
|
73
|
+
moveListSelection(-1);
|
|
74
|
+
break;
|
|
75
|
+
case "r":
|
|
76
|
+
emitter.emit("COMPOSER_FOCUS_REQUEST", { mode: "reply" });
|
|
77
|
+
break;
|
|
78
|
+
case "n":
|
|
79
|
+
emitter.emit("COMPOSER_FOCUS_REQUEST", { mode: "internal" });
|
|
80
|
+
break;
|
|
81
|
+
case "/":
|
|
82
|
+
event.preventDefault();
|
|
83
|
+
(_a = document.querySelector(DESK_SEARCH_SELECTOR)) === null || _a === void 0 ? void 0 : _a.focus();
|
|
84
|
+
break;
|
|
85
|
+
case "?":
|
|
86
|
+
event.preventDefault();
|
|
87
|
+
onOpenHelp();
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
document.addEventListener("keydown", onKeyDown);
|
|
92
|
+
return () => document.removeEventListener("keydown", onKeyDown);
|
|
93
|
+
}, [onOpenHelp]);
|
|
94
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEscapeLayer.d.ts","sourceRoot":"","sources":["../../../src/hooks/common/useEscapeLayer.ts"],"names":[],"mappings":"AAMA,8FAA8F;AAC9F,eAAO,MAAM,cAAc,GAAI,MAAM,OAAO,EAAE,OAAO,MAAM,IAAI,SAY9D,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect, useRef } from "react";
|
|
3
|
+
import useEscapeLayersStore from "../../store/escapeLayers";
|
|
4
|
+
let nextId = 1;
|
|
5
|
+
/** While `open`, Esc (from the desk shortcut hook) calls `close` before closing any panel. */
|
|
6
|
+
export const useEscapeLayer = (open, close) => {
|
|
7
|
+
const closeRef = useRef(close);
|
|
8
|
+
closeRef.current = close;
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
if (!open)
|
|
11
|
+
return;
|
|
12
|
+
const id = nextId++;
|
|
13
|
+
useEscapeLayersStore
|
|
14
|
+
.getState()
|
|
15
|
+
.push({ id, close: () => closeRef.current() });
|
|
16
|
+
return () => useEscapeLayersStore.getState().remove(id);
|
|
17
|
+
}, [open]);
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMediaQuery.d.ts","sourceRoot":"","sources":["../../../src/hooks/common/useMediaQuery.ts"],"names":[],"mappings":"AAGA,mEAAmE;AACnE,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,OAW7C,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useSyncExternalStore } from "react";
|
|
3
|
+
/** Subscribes to a CSS media query; returns `false` during SSR. */
|
|
4
|
+
export const useMediaQuery = (query) => {
|
|
5
|
+
const subscribe = useCallback((onChange) => {
|
|
6
|
+
const mql = window.matchMedia(query);
|
|
7
|
+
mql.addEventListener("change", onChange);
|
|
8
|
+
return () => mql.removeEventListener("change", onChange);
|
|
9
|
+
}, [query]);
|
|
10
|
+
const getSnapshot = () => window.matchMedia(query).matches;
|
|
11
|
+
return useSyncExternalStore(subscribe, getSnapshot, () => false);
|
|
12
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SidePanelKey } from "../../store/sidePanel";
|
|
2
|
+
/**
|
|
3
|
+
* Open state of one side panel. In CRM the panels share a store so only one
|
|
4
|
+
* is open at a time; other apps keep an independent local state per panel.
|
|
5
|
+
*/
|
|
6
|
+
export declare const useSidePanel: (panel: SidePanelKey) => {
|
|
7
|
+
isOpen: boolean;
|
|
8
|
+
open: () => void;
|
|
9
|
+
close: () => void;
|
|
10
|
+
toggle: () => void;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=useSidePanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSidePanel.d.ts","sourceRoot":"","sources":["../../../src/hooks/common/useSidePanel.ts"],"names":[],"mappings":"AAGA,OAA0B,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,YAAY;;;;;CAqB/C,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useState } from "react";
|
|
3
|
+
import useAuthStore from "../../store/auth";
|
|
4
|
+
import useSidePanelStore from "../../store/sidePanel";
|
|
5
|
+
/**
|
|
6
|
+
* Open state of one side panel. In CRM the panels share a store so only one
|
|
7
|
+
* is open at a time; other apps keep an independent local state per panel.
|
|
8
|
+
*/
|
|
9
|
+
export const useSidePanel = (panel) => {
|
|
10
|
+
const isCrm = useAuthStore((state) => state.isCrm);
|
|
11
|
+
const isActive = useSidePanelStore((state) => state.activePanel === panel);
|
|
12
|
+
const [localOpen, setLocalOpen] = useState(false);
|
|
13
|
+
const open = useCallback(() => {
|
|
14
|
+
if (isCrm)
|
|
15
|
+
useSidePanelStore.getState().openPanel(panel);
|
|
16
|
+
else
|
|
17
|
+
setLocalOpen(true);
|
|
18
|
+
}, [isCrm, panel]);
|
|
19
|
+
const close = useCallback(() => {
|
|
20
|
+
if (isCrm)
|
|
21
|
+
useSidePanelStore.getState().closePanel(panel);
|
|
22
|
+
else
|
|
23
|
+
setLocalOpen(false);
|
|
24
|
+
}, [isCrm, panel]);
|
|
25
|
+
const toggle = useCallback(() => {
|
|
26
|
+
if (isCrm)
|
|
27
|
+
useSidePanelStore.getState().togglePanel(panel);
|
|
28
|
+
else
|
|
29
|
+
setLocalOpen((v) => !v);
|
|
30
|
+
}, [isCrm, panel]);
|
|
31
|
+
return { isOpen: isCrm ? isActive : localOpen, open, close, toggle };
|
|
32
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConversationGroups.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useConversationGroups.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,eAAe,EAEhB,MAAM,8BAA8B,CAAC;AAKtC,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAKnE,UAAU,2BAA2B;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,gBAAgB,CAAC;IAG/B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,eAAO,MAAM,yBAAyB,GACpC,OAAO,sBAAsB,KAC5B,gBAyBD,CAAC;AAMH,eAAO,MAAM,6BAA6B,GACxC,QAAQ,sBAAsB,EAAE,kBAuBjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,yBAGnC,2BAAgC;;;;;;
|
|
1
|
+
{"version":3,"file":"useConversationGroups.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useConversationGroups.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,eAAe,EAEhB,MAAM,8BAA8B,CAAC;AAKtC,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAKnE,UAAU,2BAA2B;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,gBAAgB,CAAC;IAG/B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,eAAO,MAAM,yBAAyB,GACpC,OAAO,sBAAsB,KAC5B,gBAyBD,CAAC;AAMH,eAAO,MAAM,6BAA6B,GACxC,QAAQ,sBAAsB,EAAE,kBAuBjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,yBAGnC,2BAAgC;;;;;;CAsElC,CAAC"}
|
|
@@ -98,11 +98,14 @@ export const useConversationGroups = ({ enabled = true, pageSize = PAGE_SIZE.med
|
|
|
98
98
|
// fallback built from the REST fields so the row never disappears.
|
|
99
99
|
const allItems = data.pages.flatMap((page) => page.data);
|
|
100
100
|
return allItems.map((group) => {
|
|
101
|
+
var _a, _b;
|
|
101
102
|
const syncedConversation = conversationList === null || conversationList === void 0 ? void 0 : conversationList.find((conversation) => conversation.conversationID === group.conversationId);
|
|
102
103
|
return {
|
|
103
104
|
groupId: group.groupId,
|
|
104
105
|
conversationId: group.conversationId,
|
|
105
106
|
conversation: syncedConversation !== null && syncedConversation !== void 0 ? syncedConversation : buildFallbackConversation(group),
|
|
107
|
+
visibility: (_a = group.visibility) !== null && _a !== void 0 ? _a : undefined,
|
|
108
|
+
memberCount: (_b = group.memberCount) !== null && _b !== void 0 ? _b : undefined,
|
|
106
109
|
};
|
|
107
110
|
});
|
|
108
111
|
}, [data, conversationList]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNewMessageAnnouncement.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useNewMessageAnnouncement.ts"],"names":[],"mappings":"AAYA,8FAA8F;AAC9F,eAAO,MAAM,yBAAyB,cA2BrC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
4
|
+
import emitter from "../../utils/events";
|
|
5
|
+
import useAuthStore from "../../store/auth";
|
|
6
|
+
import { isGroupNotificationMessageType, isSessionEventMessage, isSystemLogMessageType, } from "../../utils/messageLog";
|
|
7
|
+
/** Text for an aria-live region: who wrote the newest incoming message, never its content. */
|
|
8
|
+
export const useNewMessageAnnouncement = () => {
|
|
9
|
+
const { t } = useTranslation();
|
|
10
|
+
const userID = useAuthStore((state) => state.userID);
|
|
11
|
+
const [announcement, setAnnouncement] = useState("");
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
let flip = false;
|
|
14
|
+
const onNewMessage = (message) => {
|
|
15
|
+
if (message.sendID === userID)
|
|
16
|
+
return;
|
|
17
|
+
if (isSystemLogMessageType(message.contentType) ||
|
|
18
|
+
isGroupNotificationMessageType(message.contentType) ||
|
|
19
|
+
isSessionEventMessage(message))
|
|
20
|
+
return;
|
|
21
|
+
flip = !flip;
|
|
22
|
+
// The trailing space flip makes a repeat from the same sender announce again.
|
|
23
|
+
setAnnouncement(t("new_message_from", { name: message.senderNickname || "" }) +
|
|
24
|
+
(flip ? "" : ""));
|
|
25
|
+
};
|
|
26
|
+
emitter.on("PUSH_NEW_MSG", onNewMessage);
|
|
27
|
+
return () => emitter.off("PUSH_NEW_MSG", onNewMessage);
|
|
28
|
+
}, [userID, t]);
|
|
29
|
+
return announcement;
|
|
30
|
+
};
|
|
@@ -66,12 +66,13 @@ export const useSearchGroups = ({ searchTerm, enabled = true, pageSize = PAGE_SI
|
|
|
66
66
|
return [];
|
|
67
67
|
const allItems = data.pages.flatMap((page) => page.data);
|
|
68
68
|
return allItems.map((group) => {
|
|
69
|
+
var _a;
|
|
69
70
|
const syncedConversation = conversationList === null || conversationList === void 0 ? void 0 : conversationList.find((conversation) => conversation.conversationID === group.conversationId);
|
|
70
71
|
return {
|
|
71
72
|
groupId: group.groupId,
|
|
72
73
|
conversationId: group.conversationId,
|
|
73
74
|
conversation: syncedConversation !== null && syncedConversation !== void 0 ? syncedConversation : buildSearchedGroupConversation(group),
|
|
74
|
-
visibility: group.visibility,
|
|
75
|
+
visibility: (_a = group.visibility) !== null && _a !== void 0 ? _a : undefined,
|
|
75
76
|
memberCount: group.memberCount,
|
|
76
77
|
};
|
|
77
78
|
});
|
|
@@ -7,8 +7,10 @@ interface UseSearchMessagePayload {
|
|
|
7
7
|
untilEmptyPage?: boolean;
|
|
8
8
|
scope?: SearchScope;
|
|
9
9
|
};
|
|
10
|
+
/** False holds the request back, e.g. until the user has typed a term. */
|
|
11
|
+
enabled?: boolean;
|
|
10
12
|
}
|
|
11
|
-
export declare const useSearchMessage: ({ payload, options, }: UseSearchMessagePayload) => {
|
|
13
|
+
export declare const useSearchMessage: ({ payload, options, enabled, }: UseSearchMessagePayload) => {
|
|
12
14
|
error: Error;
|
|
13
15
|
isError: true;
|
|
14
16
|
isPending: false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSearchMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/search/useSearchMessage.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,oBAAoB,EAErB,MAAM,aAAa,CAAC;AAOrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,UAAU,uBAAuB;IAC/B,OAAO,EAAE,IAAI,CACX,oBAAoB,EACpB,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,KAAK,CAC7D,CAAC;IACF,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"useSearchMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/search/useSearchMessage.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,oBAAoB,EAErB,MAAM,aAAa,CAAC;AAOrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,UAAU,uBAAuB;IAC/B,OAAO,EAAE,IAAI,CACX,oBAAoB,EACpB,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,GAAG,KAAK,CAC7D,CAAC;IACF,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC;IAC/E,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,gBAAgB,GAAI,gCAI9B,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0FzB,CAAC"}
|
|
@@ -19,7 +19,7 @@ import useAuthStore from "../../store/auth";
|
|
|
19
19
|
import useConversationStore from "../../store/conversation";
|
|
20
20
|
import { isGroupSession } from "../../utils/imCommon";
|
|
21
21
|
import { PAGE_SIZE } from "../../constants";
|
|
22
|
-
export const useSearchMessage = ({ payload, options, }) => {
|
|
22
|
+
export const useSearchMessage = ({ payload, options, enabled = true, }) => {
|
|
23
23
|
const isPdpPortal = (options === null || options === void 0 ? void 0 : options.scope) === "pdp-portal";
|
|
24
24
|
const _a = useInfiniteQuery({
|
|
25
25
|
initialPageParam: 1,
|
|
@@ -41,7 +41,7 @@ export const useSearchMessage = ({ payload, options, }) => {
|
|
|
41
41
|
const pageSize = (options === null || options === void 0 ? void 0 : options.pageSize) || PAGE_SIZE.small;
|
|
42
42
|
return dataLength < pageSize ? undefined : currentPage + 1;
|
|
43
43
|
},
|
|
44
|
-
enabled: hasValidFilter(payload),
|
|
44
|
+
enabled: enabled && hasValidFilter(payload),
|
|
45
45
|
}), { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading } = _a, rest = __rest(_a, ["data", "fetchNextPage", "hasNextPage", "isFetchingNextPage", "isLoading"]);
|
|
46
46
|
const { groupedData, dataFlatten } = useMemo(() => {
|
|
47
47
|
var _a, _b;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ConversationItem } from "@droppii-org/wasm-client-sdk";
|
|
2
|
+
/** The customer behind a bot support thread as the agent sees it; `identity` is undefined for other threads. */
|
|
3
|
+
export declare const useBotSessionOwnerIdentity: (conversationData: ConversationItem | null | undefined) => {
|
|
4
|
+
identity: {
|
|
5
|
+
displayName: string;
|
|
6
|
+
avatarUrl?: string;
|
|
7
|
+
} | null;
|
|
8
|
+
owner: import("../../types/dto").IGetUserSideInfoResponse | undefined;
|
|
9
|
+
/** A support thread whose customer is still loading; show a placeholder, not the bot group. */
|
|
10
|
+
isLoading: boolean;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=useBotSessionOwnerIdentity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBotSessionOwnerIdentity.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useBotSessionOwnerIdentity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAUrE,gHAAgH;AAChH,eAAO,MAAM,0BAA0B,GACrC,kBAAkB,gBAAgB,GAAG,IAAI,GAAG,SAAS;;;;;;IAgBnD,+FAA+F;;CAGlG,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import useAuthStore from "../../store/auth";
|
|
3
|
+
import { useGetUserSideInfo } from "../../hooks/session/useGetUserSideInfo";
|
|
4
|
+
import { PeerType } from "../../types/conversation";
|
|
5
|
+
import { isSupportSessionAgentView, resolveBotSessionOwnerIdentity, resolveSupportSessionOwnerId, } from "../../utils/conversation";
|
|
6
|
+
/** The customer behind a bot support thread as the agent sees it; `identity` is undefined for other threads. */
|
|
7
|
+
export const useBotSessionOwnerIdentity = (conversationData) => {
|
|
8
|
+
var _a;
|
|
9
|
+
const selfUserID = useAuthStore((state) => state.userID);
|
|
10
|
+
// Same chat-service user record as the desk list's session owner.
|
|
11
|
+
const botSessionOwnerId = (conversationData === null || conversationData === void 0 ? void 0 : conversationData.peerType) === PeerType.BOT &&
|
|
12
|
+
isSupportSessionAgentView(conversationData, selfUserID)
|
|
13
|
+
? resolveSupportSessionOwnerId(conversationData)
|
|
14
|
+
: "";
|
|
15
|
+
const { data: botSessionOwner, isPending } = useGetUserSideInfo((_a = conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID) !== null && _a !== void 0 ? _a : "", botSessionOwnerId);
|
|
16
|
+
return {
|
|
17
|
+
identity: resolveBotSessionOwnerIdentity(conversationData, botSessionOwner, selfUserID),
|
|
18
|
+
owner: botSessionOwner,
|
|
19
|
+
/** A support thread whose customer is still loading; show a placeholder, not the bot group. */
|
|
20
|
+
isLoading: !!botSessionOwnerId && isPending,
|
|
21
|
+
};
|
|
22
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { BaseResponse } from "../../types/dto";
|
|
2
|
+
export declare const closeSessionRequest: (sessionId: string) => Promise<BaseResponse<boolean>>;
|
|
2
3
|
export declare const useCloseSession: () => import("@tanstack/react-query").UseMutationResult<BaseResponse<boolean>, Error, string, unknown>;
|
|
3
4
|
//# sourceMappingURL=useCloseSession.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCloseSession.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useCloseSession.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"useCloseSession.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useCloseSession.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,eAAO,MAAM,mBAAmB,GAAU,WAAW,MAAM,mCAW1D,CAAC;AAEF,eAAO,MAAM,eAAe,wGAU3B,CAAC"}
|
|
@@ -4,18 +4,19 @@ import { apiInstance } from "../../services/api";
|
|
|
4
4
|
import { ENDPOINTS } from "../../services/routes";
|
|
5
5
|
import useAuthStore from "../../store/auth";
|
|
6
6
|
import { invalidateSessionQueries } from "../../utils/queryHelpers";
|
|
7
|
+
export const closeSessionRequest = async (sessionId) => {
|
|
8
|
+
const res = await apiInstance.post(ENDPOINTS.chatService.closeSession(sessionId), null, {
|
|
9
|
+
params: {
|
|
10
|
+
applicationType: useAuthStore.getState().applicationType,
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
return res === null || res === void 0 ? void 0 : res.data;
|
|
14
|
+
};
|
|
7
15
|
export const useCloseSession = () => {
|
|
8
16
|
const queryClient = useQueryClient();
|
|
9
17
|
return useMutation({
|
|
10
18
|
mutationKey: [QUERY_KEYS.CLOSE_SESSION],
|
|
11
|
-
mutationFn:
|
|
12
|
-
const res = await apiInstance.post(ENDPOINTS.chatService.closeSession(sessionId), null, {
|
|
13
|
-
params: {
|
|
14
|
-
applicationType: useAuthStore.getState().applicationType,
|
|
15
|
-
},
|
|
16
|
-
});
|
|
17
|
-
return res === null || res === void 0 ? void 0 : res.data;
|
|
18
|
-
},
|
|
19
|
+
mutationFn: closeSessionRequest,
|
|
19
20
|
onSuccess: async () => {
|
|
20
21
|
await invalidateSessionQueries(queryClient);
|
|
21
22
|
},
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface EndSessionTarget {
|
|
2
|
+
sessionId: string;
|
|
3
|
+
conversationId: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Ends a session after a short undo period: the close API is only called once
|
|
7
|
+
* the toast's "Hoàn tác" window has passed.
|
|
8
|
+
*/
|
|
9
|
+
export declare const useEndSession: () => ({ sessionId, conversationId }: EndSessionTarget) => void;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=useEndSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEndSession.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useEndSession.tsx"],"names":[],"mappings":"AAUA,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,wCAKU,gBAAgB,SAgCnD,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback } from "react";
|
|
3
|
+
import { message } from "antd";
|
|
4
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
5
|
+
import { useTranslation } from "react-i18next";
|
|
6
|
+
import usePendingSessionCloseStore from "../../store/pendingSessionClose";
|
|
7
|
+
import { invalidateSessionQueries } from "../../utils/queryHelpers";
|
|
8
|
+
import EndSessionToast from "../../components/thread/EndSessionToast";
|
|
9
|
+
import { StrokeIcon } from "../../components/icon/StrokeIcon";
|
|
10
|
+
import { closeSessionRequest } from "./useCloseSession";
|
|
11
|
+
/**
|
|
12
|
+
* Ends a session after a short undo period: the close API is only called once
|
|
13
|
+
* the toast's "Hoàn tác" window has passed.
|
|
14
|
+
*/
|
|
15
|
+
export const useEndSession = () => {
|
|
16
|
+
const queryClient = useQueryClient();
|
|
17
|
+
const { t } = useTranslation();
|
|
18
|
+
return useCallback(({ sessionId, conversationId }) => {
|
|
19
|
+
const toastKey = `end-session-${sessionId}`;
|
|
20
|
+
const scheduled = usePendingSessionCloseStore
|
|
21
|
+
.getState()
|
|
22
|
+
.schedule(sessionId, conversationId, async () => {
|
|
23
|
+
message.destroy(toastKey);
|
|
24
|
+
try {
|
|
25
|
+
await closeSessionRequest(sessionId);
|
|
26
|
+
await invalidateSessionQueries(queryClient);
|
|
27
|
+
}
|
|
28
|
+
catch (_a) {
|
|
29
|
+
message.error(t("close_session_failed"));
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
if (!scheduled)
|
|
33
|
+
return;
|
|
34
|
+
message.open({
|
|
35
|
+
key: toastKey,
|
|
36
|
+
type: "success",
|
|
37
|
+
icon: _jsx(StrokeIcon, { name: "check-circle", size: 18, className: "mr-2 text-success-900" }),
|
|
38
|
+
duration: 0,
|
|
39
|
+
content: (_jsx(EndSessionToast, { onUndo: () => {
|
|
40
|
+
usePendingSessionCloseStore.getState().cancel(sessionId);
|
|
41
|
+
message.destroy(toastKey);
|
|
42
|
+
} })),
|
|
43
|
+
});
|
|
44
|
+
}, [queryClient, t]);
|
|
45
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetSession.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useGetSession.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,YAAY,EAIb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAMhE,UAAU,kBAAkB;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"useGetSession.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useGetSession.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,YAAY,EAIb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAMhE,UAAU,kBAAkB;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAgLD,eAAO,MAAM,aAAa,GAAI,sBAG3B,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4FpB,CAAC"}
|
|
@@ -11,7 +11,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
11
11
|
return t;
|
|
12
12
|
};
|
|
13
13
|
import { useInfiniteQuery } from "@tanstack/react-query";
|
|
14
|
-
import { useMemo } from "react";
|
|
14
|
+
import { useEffect, useMemo } from "react";
|
|
15
15
|
import { apiInstance } from "../../services/api";
|
|
16
16
|
import { ENDPOINTS } from "../../services/routes";
|
|
17
17
|
import { QUERY_KEYS } from "../../services/query";
|
|
@@ -106,11 +106,7 @@ const fetchSdkConversations = async (sessions) => {
|
|
|
106
106
|
}
|
|
107
107
|
};
|
|
108
108
|
const findMissingSessionsFromSdk = (sessions, sdkConversations) => sessions.filter((session) => !sdkConversations.some((conversation) => conversation.conversationID === session.conversationId));
|
|
109
|
-
const
|
|
110
|
-
const currentList = useConversationStore.getState().conversationList;
|
|
111
|
-
const newSessions = sessions.filter((session) => !currentList.some((conversation) => conversation.conversationID === session.conversationId));
|
|
112
|
-
if (!newSessions.length)
|
|
113
|
-
return;
|
|
109
|
+
const addSessionConversationsToStore = async (newSessions) => {
|
|
114
110
|
const sdkConversations = await fetchSdkConversations(newSessions);
|
|
115
111
|
const missingSessions = findMissingSessionsFromSdk(newSessions, sdkConversations);
|
|
116
112
|
const conversationsToUpdate = [...sdkConversations];
|
|
@@ -132,6 +128,22 @@ const syncSessionConversationsToStore = async (sessions) => {
|
|
|
132
128
|
.updateConversationList(conversationsToUpdate, "filter");
|
|
133
129
|
}
|
|
134
130
|
};
|
|
131
|
+
// Conversation IDs being fetched, so several list hooks don't fetch the same rows twice.
|
|
132
|
+
const syncingConversationIds = new Set();
|
|
133
|
+
const syncSessionConversationsToStore = async (sessions) => {
|
|
134
|
+
const currentList = useConversationStore.getState().conversationList;
|
|
135
|
+
const newSessions = sessions.filter((session) => !syncingConversationIds.has(session.conversationId) &&
|
|
136
|
+
!currentList.some((conversation) => conversation.conversationID === session.conversationId));
|
|
137
|
+
if (!newSessions.length)
|
|
138
|
+
return;
|
|
139
|
+
newSessions.forEach((session) => syncingConversationIds.add(session.conversationId));
|
|
140
|
+
try {
|
|
141
|
+
await addSessionConversationsToStore(newSessions);
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
newSessions.forEach((session) => syncingConversationIds.delete(session.conversationId));
|
|
145
|
+
}
|
|
146
|
+
};
|
|
135
147
|
export const useGetSession = ({ filter, options = { pageSize: undefined, isEnabled: true }, }) => {
|
|
136
148
|
var _a, _b;
|
|
137
149
|
const pageSize = (_a = options === null || options === void 0 ? void 0 : options.pageSize) !== null && _a !== void 0 ? _a : PAGE_SIZE.medium;
|
|
@@ -183,6 +195,15 @@ export const useGetSession = ({ filter, options = { pageSize: undefined, isEnabl
|
|
|
183
195
|
const allItems = data.pages.flatMap((page) => page.data);
|
|
184
196
|
return allItems.length !== dataFlatten.length;
|
|
185
197
|
}, [data, dataFlatten]);
|
|
198
|
+
// A full conversation-list reload (e.g. after sync finishes) replaces the
|
|
199
|
+
// store list and drops rows synced for this filter; fetch them again.
|
|
200
|
+
useEffect(() => {
|
|
201
|
+
if (!isSyncing || !data)
|
|
202
|
+
return;
|
|
203
|
+
void syncSessionConversationsToStore(data.pages.flatMap((page) => page.data)).catch((error) => {
|
|
204
|
+
console.error("syncSessionConversationsToStore", error);
|
|
205
|
+
});
|
|
206
|
+
}, [isSyncing, data]);
|
|
186
207
|
return Object.assign({ data,
|
|
187
208
|
fetchNextPage,
|
|
188
209
|
hasNextPage,
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** True while a session's close is waiting out its undo period. */
|
|
2
|
+
export declare const useIsSessionClosePending: (sessionId?: string) => boolean;
|
|
3
|
+
/** Sends any pending close for the conversation as soon as it is left or unmounted. */
|
|
4
|
+
export declare const useFlushPendingCloseOnLeave: (conversationId?: string, enabled?: boolean) => void;
|
|
5
|
+
//# sourceMappingURL=usePendingSessionClose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePendingSessionClose.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/usePendingSessionClose.ts"],"names":[],"mappings":"AAGA,mEAAmE;AACnE,eAAO,MAAM,wBAAwB,GAAI,YAAY,MAAM,YAGxD,CAAC;AAEJ,uFAAuF;AACvF,eAAO,MAAM,2BAA2B,GACtC,iBAAiB,MAAM,EACvB,iBAAc,SAOf,CAAC"}
|