@droppii-org/chat-sdk 0.6.56 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/dist/components/canned-response/CannedResponseBody.d.ts.map +1 -1
  2. package/dist/components/canned-response/CannedResponseBody.js +4 -3
  3. package/dist/components/canned-response/CannedResponsePanel.d.ts +9 -0
  4. package/dist/components/canned-response/CannedResponsePanel.d.ts.map +1 -0
  5. package/dist/components/canned-response/CannedResponsePanel.js +72 -0
  6. package/dist/components/canned-response/CannedResponseRow.d.ts +10 -0
  7. package/dist/components/canned-response/CannedResponseRow.d.ts.map +1 -0
  8. package/dist/components/canned-response/CannedResponseRow.js +6 -0
  9. package/dist/components/canned-response/CannedScopeChips.d.ts +10 -0
  10. package/dist/components/canned-response/CannedScopeChips.d.ts.map +1 -0
  11. package/dist/components/canned-response/CannedScopeChips.js +34 -0
  12. package/dist/components/canned-response/cannedScopes.d.ts +16 -0
  13. package/dist/components/canned-response/cannedScopes.d.ts.map +1 -0
  14. package/dist/components/canned-response/cannedScopes.js +39 -0
  15. package/dist/components/canned-response/index.d.ts.map +1 -1
  16. package/dist/components/canned-response/index.js +11 -10
  17. package/dist/components/canned-response/insertCannedContent.d.ts +7 -0
  18. package/dist/components/canned-response/insertCannedContent.d.ts.map +1 -0
  19. package/dist/components/canned-response/insertCannedContent.js +39 -0
  20. package/dist/components/canned-response/team/TeamItem.d.ts.map +1 -1
  21. package/dist/components/canned-response/team/TeamItem.js +5 -4
  22. package/dist/components/common/ConfirmModal.d.ts +13 -1
  23. package/dist/components/common/ConfirmModal.d.ts.map +1 -1
  24. package/dist/components/common/ConfirmModal.js +24 -6
  25. package/dist/components/common/DeskPanelDrawer.d.ts +17 -0
  26. package/dist/components/common/DeskPanelDrawer.d.ts.map +1 -0
  27. package/dist/components/common/DeskPanelDrawer.js +21 -0
  28. package/dist/components/common/DeskSidePanel.d.ts +17 -0
  29. package/dist/components/common/DeskSidePanel.d.ts.map +1 -0
  30. package/dist/components/common/DeskSidePanel.js +23 -0
  31. package/dist/components/common/TintedAvatar.d.ts +11 -0
  32. package/dist/components/common/TintedAvatar.d.ts.map +1 -0
  33. package/dist/components/common/TintedAvatar.js +17 -0
  34. package/dist/components/compose/ComposeNewMessageModal.d.ts.map +1 -1
  35. package/dist/components/compose/ComposeNewMessageModal.js +11 -1
  36. package/dist/components/conversation/ConversationByGroupItem.d.ts.map +1 -1
  37. package/dist/components/conversation/ConversationByGroupItem.js +10 -6
  38. package/dist/components/conversation/ConversationBySessionItem.d.ts +4 -1
  39. package/dist/components/conversation/ConversationBySessionItem.d.ts.map +1 -1
  40. package/dist/components/conversation/ConversationBySessionItem.js +36 -10
  41. package/dist/components/conversation/DeskConversationList.d.ts.map +1 -1
  42. package/dist/components/conversation/DeskConversationList.js +44 -29
  43. package/dist/components/conversation/DeskConversationRow.d.ts +19 -0
  44. package/dist/components/conversation/DeskConversationRow.d.ts.map +1 -0
  45. package/dist/components/conversation/DeskConversationRow.js +18 -0
  46. package/dist/components/conversation/DeskListEmptyState.d.ts +6 -0
  47. package/dist/components/conversation/DeskListEmptyState.d.ts.map +1 -0
  48. package/dist/components/conversation/DeskListEmptyState.js +11 -0
  49. package/dist/components/conversation/DeskListHeader.d.ts +14 -0
  50. package/dist/components/conversation/DeskListHeader.d.ts.map +1 -0
  51. package/dist/components/conversation/DeskListHeader.js +39 -0
  52. package/dist/components/conversation/DeskListSkeleton.d.ts +6 -0
  53. package/dist/components/conversation/DeskListSkeleton.d.ts.map +1 -0
  54. package/dist/components/conversation/DeskListSkeleton.js +9 -0
  55. package/dist/components/conversation/DeskRowAvatar.d.ts +8 -0
  56. package/dist/components/conversation/DeskRowAvatar.d.ts.map +1 -0
  57. package/dist/components/conversation/DeskRowAvatar.js +6 -0
  58. package/dist/components/conversation/RowChip.d.ts +14 -0
  59. package/dist/components/conversation/RowChip.d.ts.map +1 -0
  60. package/dist/components/conversation/RowChip.js +11 -0
  61. package/dist/components/conversation/avatarTint.d.ts +6 -0
  62. package/dist/components/conversation/avatarTint.d.ts.map +1 -0
  63. package/dist/components/conversation/avatarTint.js +27 -0
  64. package/dist/components/conversation/folderEmptyState.d.ts +2 -0
  65. package/dist/components/conversation/folderEmptyState.d.ts.map +1 -0
  66. package/dist/components/conversation/folderEmptyState.js +14 -0
  67. package/dist/components/conversation/internalNotePreview.d.ts +6 -0
  68. package/dist/components/conversation/internalNotePreview.d.ts.map +1 -0
  69. package/dist/components/conversation/internalNotePreview.js +11 -0
  70. package/dist/components/conversation/listHeading.d.ts +19 -0
  71. package/dist/components/conversation/listHeading.d.ts.map +1 -0
  72. package/dist/components/conversation/listHeading.js +24 -0
  73. package/dist/components/conversation/rowDisplayName.d.ts +7 -0
  74. package/dist/components/conversation/rowDisplayName.d.ts.map +1 -0
  75. package/dist/components/conversation/rowDisplayName.js +8 -0
  76. package/dist/components/conversation/rowTime.d.ts +4 -0
  77. package/dist/components/conversation/rowTime.d.ts.map +1 -0
  78. package/dist/components/conversation/rowTime.js +10 -0
  79. package/dist/components/conversation-detail/PinLimitModal.d.ts.map +1 -1
  80. package/dist/components/conversation-detail/PinLimitModal.js +3 -1
  81. package/dist/components/group/AddMemberModal.d.ts.map +1 -1
  82. package/dist/components/group/AddMemberModal.js +15 -4
  83. package/dist/components/group/AdminPermissionModal.d.ts +1 -0
  84. package/dist/components/group/AdminPermissionModal.d.ts.map +1 -1
  85. package/dist/components/group/AdminPermissionModal.js +38 -3
  86. package/dist/components/group/CreateGroupForm.d.ts +3 -1
  87. package/dist/components/group/CreateGroupForm.d.ts.map +1 -1
  88. package/dist/components/group/CreateGroupForm.js +7 -1
  89. package/dist/components/group/CreateGroupFormCrmView.d.ts +23 -0
  90. package/dist/components/group/CreateGroupFormCrmView.d.ts.map +1 -0
  91. package/dist/components/group/CreateGroupFormCrmView.js +25 -0
  92. package/dist/components/group/DisableSendPermissionConfirm.d.ts +11 -0
  93. package/dist/components/group/DisableSendPermissionConfirm.d.ts.map +1 -0
  94. package/dist/components/group/DisableSendPermissionConfirm.js +10 -0
  95. package/dist/components/group/GroupCompositeAvatar.d.ts.map +1 -1
  96. package/dist/components/group/GroupCompositeAvatar.js +39 -4
  97. package/dist/components/group/GroupMemberPicker.d.ts +5 -2
  98. package/dist/components/group/GroupMemberPicker.d.ts.map +1 -1
  99. package/dist/components/group/GroupMemberPicker.js +8 -42
  100. package/dist/components/group/GroupMemberPickerCrm.d.ts +4 -0
  101. package/dist/components/group/GroupMemberPickerCrm.d.ts.map +1 -0
  102. package/dist/components/group/GroupMemberPickerCrm.js +48 -0
  103. package/dist/components/group/GroupMemberPickerLegacy.d.ts +8 -0
  104. package/dist/components/group/GroupMemberPickerLegacy.d.ts.map +1 -0
  105. package/dist/components/group/GroupMemberPickerLegacy.js +46 -0
  106. package/dist/components/group/GroupPanelHeader.d.ts +10 -0
  107. package/dist/components/group/GroupPanelHeader.d.ts.map +1 -0
  108. package/dist/components/group/GroupPanelHeader.js +11 -0
  109. package/dist/components/group/MemberPermissionPanel.d.ts.map +1 -1
  110. package/dist/components/group/MemberPermissionPanel.js +31 -2
  111. package/dist/components/group/PermissionPanelCrm.d.ts +24 -0
  112. package/dist/components/group/PermissionPanelCrm.d.ts.map +1 -0
  113. package/dist/components/group/PermissionPanelCrm.js +16 -0
  114. package/dist/components/group/PersonAvatar.d.ts +11 -0
  115. package/dist/components/group/PersonAvatar.d.ts.map +1 -0
  116. package/dist/components/group/PersonAvatar.js +21 -0
  117. package/dist/components/group/crmIcon.d.ts +9 -0
  118. package/dist/components/group/crmIcon.d.ts.map +1 -0
  119. package/dist/components/group/crmIcon.js +38 -0
  120. package/dist/components/icon/AdaptiveIcon.d.ts +15 -0
  121. package/dist/components/icon/AdaptiveIcon.d.ts.map +1 -0
  122. package/dist/components/icon/AdaptiveIcon.js +10 -0
  123. package/dist/components/icon/StrokeIcon.d.ts +14 -0
  124. package/dist/components/icon/StrokeIcon.d.ts.map +1 -0
  125. package/dist/components/icon/StrokeIcon.js +5 -0
  126. package/dist/components/icon/strokeIconNodes.d.ts +431 -0
  127. package/dist/components/icon/strokeIconNodes.d.ts.map +1 -0
  128. package/dist/components/icon/strokeIconNodes.js +269 -0
  129. package/dist/components/media-collection/index.d.ts.map +1 -1
  130. package/dist/components/media-collection/index.js +21 -5
  131. package/dist/components/message/GroupMembersDrawer.d.ts.map +1 -1
  132. package/dist/components/message/GroupMembersDrawer.js +60 -13
  133. package/dist/components/message/GroupMembersPanelCrm.d.ts +23 -0
  134. package/dist/components/message/GroupMembersPanelCrm.d.ts.map +1 -0
  135. package/dist/components/message/GroupMembersPanelCrm.js +55 -0
  136. package/dist/components/message/MessageHeader.d.ts.map +1 -1
  137. package/dist/components/message/MessageHeader.js +76 -27
  138. package/dist/components/message/MessageInfiniteScroll.d.ts +4 -2
  139. package/dist/components/message/MessageInfiniteScroll.d.ts.map +1 -1
  140. package/dist/components/message/MessageInfiniteScroll.js +1 -1
  141. package/dist/components/message/MessageList.d.ts +2 -1
  142. package/dist/components/message/MessageList.d.ts.map +1 -1
  143. package/dist/components/message/MessageList.js +12 -1
  144. package/dist/components/message/SelectSession.d.ts +4 -1
  145. package/dist/components/message/SelectSession.d.ts.map +1 -1
  146. package/dist/components/message/SelectSession.js +13 -4
  147. package/dist/components/message/UnassignedSessionFooter.js +2 -2
  148. package/dist/components/message/footer/ActionBar.d.ts +5 -1
  149. package/dist/components/message/footer/ActionBar.d.ts.map +1 -1
  150. package/dist/components/message/footer/ActionBar.js +14 -1
  151. package/dist/components/message/footer/CannedResponsePlugin.d.ts.map +1 -1
  152. package/dist/components/message/footer/CannedResponsePlugin.js +18 -3
  153. package/dist/components/message/footer/ClosedSessionBanner.d.ts +9 -0
  154. package/dist/components/message/footer/ClosedSessionBanner.d.ts.map +1 -0
  155. package/dist/components/message/footer/ClosedSessionBanner.js +13 -0
  156. package/dist/components/message/footer/ComposerEditor.d.ts.map +1 -1
  157. package/dist/components/message/footer/ComposerEditor.js +9 -4
  158. package/dist/components/message/footer/ComposerTabs.d.ts +1 -2
  159. package/dist/components/message/footer/ComposerTabs.d.ts.map +1 -1
  160. package/dist/components/message/footer/ComposerTabs.js +14 -35
  161. package/dist/components/message/footer/CrmComposerCard.d.ts +11 -0
  162. package/dist/components/message/footer/CrmComposerCard.d.ts.map +1 -0
  163. package/dist/components/message/footer/CrmComposerCard.js +30 -0
  164. package/dist/components/message/footer/EnterHandler.d.ts.map +1 -1
  165. package/dist/components/message/footer/EnterHandler.js +3 -0
  166. package/dist/components/message/footer/FilePreview.js +2 -2
  167. package/dist/components/message/footer/LinkInputPreview.js +2 -2
  168. package/dist/components/message/footer/MediaActions.d.ts +2 -1
  169. package/dist/components/message/footer/MediaActions.d.ts.map +1 -1
  170. package/dist/components/message/footer/MediaActions.js +21 -4
  171. package/dist/components/message/footer/SessionClosedModal.d.ts +3 -1
  172. package/dist/components/message/footer/SessionClosedModal.d.ts.map +1 -1
  173. package/dist/components/message/footer/SessionClosedModal.js +6 -2
  174. package/dist/components/message/footer/ToolbarPlugin.d.ts +3 -1
  175. package/dist/components/message/footer/ToolbarPlugin.d.ts.map +1 -1
  176. package/dist/components/message/footer/ToolbarPlugin.js +2 -2
  177. package/dist/components/message/footer/clearComposerHistory.d.ts +3 -0
  178. package/dist/components/message/footer/clearComposerHistory.d.ts.map +1 -0
  179. package/dist/components/message/footer/clearComposerHistory.js +11 -0
  180. package/dist/components/message/footer/index.d.ts +2 -2
  181. package/dist/components/message/footer/index.d.ts.map +1 -1
  182. package/dist/components/message/footer/index.js +15 -5
  183. package/dist/components/message/footer/mention/MentionMenu.d.ts.map +1 -1
  184. package/dist/components/message/footer/mention/MentionMenu.js +4 -1
  185. package/dist/components/message/footer/useComposerFocusRequest.d.ts +10 -0
  186. package/dist/components/message/footer/useComposerFocusRequest.d.ts.map +1 -0
  187. package/dist/components/message/footer/useComposerFocusRequest.js +28 -0
  188. package/dist/components/message/groupMemberMenuCrm.d.ts +32 -0
  189. package/dist/components/message/groupMemberMenuCrm.d.ts.map +1 -0
  190. package/dist/components/message/groupMemberMenuCrm.js +83 -0
  191. package/dist/components/message/groupMemberTypes.d.ts +13 -0
  192. package/dist/components/message/groupMemberTypes.d.ts.map +1 -0
  193. package/dist/components/message/groupMemberTypes.js +1 -0
  194. package/dist/components/message/headerIconButton.d.ts +10 -0
  195. package/dist/components/message/headerIconButton.d.ts.map +1 -0
  196. package/dist/components/message/headerIconButton.js +9 -0
  197. package/dist/components/message/item/CrmSystemLine.d.ts +10 -0
  198. package/dist/components/message/item/CrmSystemLine.d.ts.map +1 -0
  199. package/dist/components/message/item/CrmSystemLine.js +6 -0
  200. package/dist/components/message/item/DateDivider.d.ts +5 -0
  201. package/dist/components/message/item/DateDivider.d.ts.map +1 -0
  202. package/dist/components/message/item/DateDivider.js +5 -0
  203. package/dist/components/message/item/GroupNotificationMessage.d.ts.map +1 -1
  204. package/dist/components/message/item/GroupNotificationMessage.js +9 -0
  205. package/dist/components/message/item/MemberEventSummary.d.ts +8 -0
  206. package/dist/components/message/item/MemberEventSummary.d.ts.map +1 -0
  207. package/dist/components/message/item/MemberEventSummary.js +18 -0
  208. package/dist/components/message/item/MessageBubble.d.ts +3 -1
  209. package/dist/components/message/item/MessageBubble.d.ts.map +1 -1
  210. package/dist/components/message/item/MessageBubble.js +27 -13
  211. package/dist/components/message/item/MessageMoreButton.d.ts +13 -0
  212. package/dist/components/message/item/MessageMoreButton.d.ts.map +1 -0
  213. package/dist/components/message/item/MessageMoreButton.js +42 -0
  214. package/dist/components/message/item/RevokeMessage.js +1 -1
  215. package/dist/components/message/item/SessionEventMessage.d.ts.map +1 -1
  216. package/dist/components/message/item/SessionEventMessage.js +13 -1
  217. package/dist/components/message/item/SystemLogMessage.d.ts.map +1 -1
  218. package/dist/components/message/item/SystemLogMessage.js +7 -0
  219. package/dist/components/message/item/index.d.ts.map +1 -1
  220. package/dist/components/message/item/index.js +64 -15
  221. package/dist/components/message/item/otherSenders.d.ts +7 -0
  222. package/dist/components/message/item/otherSenders.d.ts.map +1 -0
  223. package/dist/components/message/item/otherSenders.js +29 -0
  224. package/dist/components/message/item/textStyle.d.ts +1 -1
  225. package/dist/components/message/item/textStyle.d.ts.map +1 -1
  226. package/dist/components/message/item/textStyle.js +2 -2
  227. package/dist/components/message/messageKeyboardNav.d.ts +8 -0
  228. package/dist/components/message/messageKeyboardNav.d.ts.map +1 -0
  229. package/dist/components/message/messageKeyboardNav.js +24 -0
  230. package/dist/components/message/reply/ReplyPreviewBar.js +2 -2
  231. package/dist/components/message/toolbox/MessageToolboxMenu.d.ts.map +1 -1
  232. package/dist/components/message/toolbox/MessageToolboxMenu.js +16 -1
  233. package/dist/components/search-conversation/SearchAll.d.ts.map +1 -1
  234. package/dist/components/search-conversation/SearchAll.js +12 -1
  235. package/dist/components/search-conversation/SearchDrawer.d.ts.map +1 -1
  236. package/dist/components/search-conversation/SearchDrawer.js +31 -15
  237. package/dist/components/search-conversation/SearchMessageOnCurrentConversation.d.ts.map +1 -1
  238. package/dist/components/search-conversation/SearchMessageOnCurrentConversation.js +5 -2
  239. package/dist/components/search-conversation/index.d.ts.map +1 -1
  240. package/dist/components/search-conversation/index.js +3 -1
  241. package/dist/components/search-conversation/item/SearchItemAsGroup.d.ts.map +1 -1
  242. package/dist/components/search-conversation/item/SearchItemAsGroup.js +14 -4
  243. package/dist/components/search-conversation/item/SearchItemAsMessage.d.ts.map +1 -1
  244. package/dist/components/search-conversation/item/SearchItemAsMessage.js +18 -7
  245. package/dist/components/search-conversation/item/SearchItemAsUser.d.ts.map +1 -1
  246. package/dist/components/search-conversation/item/SearchItemAsUser.js +23 -5
  247. package/dist/components/search-conversation/item/searchRowClass.d.ts +3 -0
  248. package/dist/components/search-conversation/item/searchRowClass.d.ts.map +1 -0
  249. package/dist/components/search-conversation/item/searchRowClass.js +5 -0
  250. package/dist/components/session/DeskAssignedSession.d.ts +5 -1
  251. package/dist/components/session/DeskAssignedSession.d.ts.map +1 -1
  252. package/dist/components/session/DeskAssignedSession.js +40 -12
  253. package/dist/components/session/DeskTeamInbox.d.ts.map +1 -1
  254. package/dist/components/session/DeskTeamInbox.js +15 -22
  255. package/dist/components/session/FolderRow.d.ts +21 -0
  256. package/dist/components/session/FolderRow.d.ts.map +1 -0
  257. package/dist/components/session/FolderRow.js +16 -0
  258. package/dist/components/session/SessionFolderList.d.ts +23 -0
  259. package/dist/components/session/SessionFolderList.d.ts.map +1 -0
  260. package/dist/components/session/SessionFolderList.js +27 -0
  261. package/dist/components/session/sessionFilters.d.ts +24 -0
  262. package/dist/components/session/sessionFilters.d.ts.map +1 -0
  263. package/dist/components/session/sessionFilters.js +80 -0
  264. package/dist/components/shortcut-help/ShortcutHelpModal.d.ts +8 -0
  265. package/dist/components/shortcut-help/ShortcutHelpModal.d.ts.map +1 -0
  266. package/dist/components/shortcut-help/ShortcutHelpModal.js +23 -0
  267. package/dist/components/thread/AssignConfirmModal.d.ts.map +1 -1
  268. package/dist/components/thread/AssignConfirmModal.js +4 -3
  269. package/dist/components/thread/EndSessionConfirm.d.ts +11 -0
  270. package/dist/components/thread/EndSessionConfirm.d.ts.map +1 -0
  271. package/dist/components/thread/EndSessionConfirm.js +31 -0
  272. package/dist/components/thread/EndSessionToast.d.ts +6 -0
  273. package/dist/components/thread/EndSessionToast.d.ts.map +1 -0
  274. package/dist/components/thread/EndSessionToast.js +18 -0
  275. package/dist/components/thread/GroupInfoBodyCrm.d.ts +46 -0
  276. package/dist/components/thread/GroupInfoBodyCrm.d.ts.map +1 -0
  277. package/dist/components/thread/GroupInfoBodyCrm.js +41 -0
  278. package/dist/components/thread/GroupInfoRows.d.ts +33 -0
  279. package/dist/components/thread/GroupInfoRows.d.ts.map +1 -0
  280. package/dist/components/thread/GroupInfoRows.js +18 -0
  281. package/dist/components/thread/GroupThreadInfo.d.ts.map +1 -1
  282. package/dist/components/thread/GroupThreadInfo.js +23 -6
  283. package/dist/components/thread/ManualAssignPopover.d.ts +3 -1
  284. package/dist/components/thread/ManualAssignPopover.d.ts.map +1 -1
  285. package/dist/components/thread/ManualAssignPopover.js +21 -9
  286. package/dist/components/thread/SessionDetailCard.d.ts +6 -0
  287. package/dist/components/thread/SessionDetailCard.d.ts.map +1 -0
  288. package/dist/components/thread/SessionDetailCard.js +103 -0
  289. package/dist/components/thread/SessionSection.d.ts +2 -4
  290. package/dist/components/thread/SessionSection.d.ts.map +1 -1
  291. package/dist/components/thread/SessionSection.js +19 -122
  292. package/dist/components/thread/SessionTagPicker.d.ts +11 -0
  293. package/dist/components/thread/SessionTagPicker.d.ts.map +1 -0
  294. package/dist/components/thread/SessionTagPicker.js +27 -0
  295. package/dist/components/thread/SingleThreadInfo.d.ts.map +1 -1
  296. package/dist/components/thread/SingleThreadInfo.js +16 -6
  297. package/dist/components/thread/SupportSessionPanel.d.ts +18 -0
  298. package/dist/components/thread/SupportSessionPanel.d.ts.map +1 -0
  299. package/dist/components/thread/SupportSessionPanel.js +46 -0
  300. package/dist/components/thread/ThreadInfo.d.ts +8 -1
  301. package/dist/components/thread/ThreadInfo.d.ts.map +1 -1
  302. package/dist/components/thread/ThreadInfo.js +27 -29
  303. package/dist/components/thread/ThreadInfoHeader.d.ts +13 -0
  304. package/dist/components/thread/ThreadInfoHeader.d.ts.map +1 -0
  305. package/dist/components/thread/ThreadInfoHeader.js +11 -0
  306. package/dist/components/thread/UserSection.d.ts.map +1 -1
  307. package/dist/components/thread/UserSection.js +35 -22
  308. package/dist/components/thread/sessionDateFormat.d.ts +3 -0
  309. package/dist/components/thread/sessionDateFormat.d.ts.map +1 -0
  310. package/dist/components/thread/sessionDateFormat.js +13 -0
  311. package/dist/components/thread/sessionDuration.d.ts +5 -0
  312. package/dist/components/thread/sessionDuration.d.ts.map +1 -0
  313. package/dist/components/thread/sessionDuration.js +24 -0
  314. package/dist/constants/index.d.ts +1 -0
  315. package/dist/constants/index.d.ts.map +1 -1
  316. package/dist/constants/index.js +2 -0
  317. package/dist/constants/layout.d.ts +24 -0
  318. package/dist/constants/layout.d.ts.map +1 -0
  319. package/dist/constants/layout.js +23 -0
  320. package/dist/context/ChatContext.d.ts.map +1 -1
  321. package/dist/context/ChatContext.js +27 -1
  322. package/dist/hooks/canned-response/useSearchCannedAcrossScopes.d.ts +7 -0
  323. package/dist/hooks/canned-response/useSearchCannedAcrossScopes.d.ts.map +1 -0
  324. package/dist/hooks/canned-response/useSearchCannedAcrossScopes.js +46 -0
  325. package/dist/hooks/common/useCloseOnSidePanelOpen.d.ts +3 -0
  326. package/dist/hooks/common/useCloseOnSidePanelOpen.d.ts.map +1 -0
  327. package/dist/hooks/common/useCloseOnSidePanelOpen.js +15 -0
  328. package/dist/hooks/common/useDeskShortcuts.d.ts +11 -0
  329. package/dist/hooks/common/useDeskShortcuts.d.ts.map +1 -0
  330. package/dist/hooks/common/useDeskShortcuts.js +94 -0
  331. package/dist/hooks/common/useEscapeLayer.d.ts +3 -0
  332. package/dist/hooks/common/useEscapeLayer.d.ts.map +1 -0
  333. package/dist/hooks/common/useEscapeLayer.js +18 -0
  334. package/dist/hooks/common/useMediaQuery.d.ts +3 -0
  335. package/dist/hooks/common/useMediaQuery.d.ts.map +1 -0
  336. package/dist/hooks/common/useMediaQuery.js +12 -0
  337. package/dist/hooks/common/useSidePanel.d.ts +12 -0
  338. package/dist/hooks/common/useSidePanel.d.ts.map +1 -0
  339. package/dist/hooks/common/useSidePanel.js +32 -0
  340. package/dist/hooks/group/useConversationGroups.d.ts.map +1 -1
  341. package/dist/hooks/group/useConversationGroups.js +3 -0
  342. package/dist/hooks/message/useNewMessageAnnouncement.d.ts +3 -0
  343. package/dist/hooks/message/useNewMessageAnnouncement.d.ts.map +1 -0
  344. package/dist/hooks/message/useNewMessageAnnouncement.js +30 -0
  345. package/dist/hooks/search/useSearchGroups.js +2 -1
  346. package/dist/hooks/search/useSearchMessage.d.ts +3 -1
  347. package/dist/hooks/search/useSearchMessage.d.ts.map +1 -1
  348. package/dist/hooks/search/useSearchMessage.js +2 -2
  349. package/dist/hooks/session/useBotSessionOwnerIdentity.d.ts +12 -0
  350. package/dist/hooks/session/useBotSessionOwnerIdentity.d.ts.map +1 -0
  351. package/dist/hooks/session/useBotSessionOwnerIdentity.js +22 -0
  352. package/dist/hooks/session/useCloseSession.d.ts +1 -0
  353. package/dist/hooks/session/useCloseSession.d.ts.map +1 -1
  354. package/dist/hooks/session/useCloseSession.js +9 -8
  355. package/dist/hooks/session/useEndSession.d.ts +11 -0
  356. package/dist/hooks/session/useEndSession.d.ts.map +1 -0
  357. package/dist/hooks/session/useEndSession.js +45 -0
  358. package/dist/hooks/session/useGetSession.d.ts.map +1 -1
  359. package/dist/hooks/session/useGetSession.js +27 -6
  360. package/dist/hooks/session/usePendingSessionClose.d.ts +5 -0
  361. package/dist/hooks/session/usePendingSessionClose.d.ts.map +1 -0
  362. package/dist/hooks/session/usePendingSessionClose.js +12 -0
  363. package/dist/hooks/session/useSessionCustomerName.d.ts +3 -0
  364. package/dist/hooks/session/useSessionCustomerName.d.ts.map +1 -0
  365. package/dist/hooks/session/useSessionCustomerName.js +19 -0
  366. package/dist/hooks/session/useSessionFieldAutosave.d.ts +19 -0
  367. package/dist/hooks/session/useSessionFieldAutosave.d.ts.map +1 -0
  368. package/dist/hooks/session/useSessionFieldAutosave.js +52 -0
  369. package/dist/index.d.ts +8 -2
  370. package/dist/index.d.ts.map +1 -1
  371. package/dist/index.js +5 -1
  372. package/dist/locales/vi/common.json +201 -21
  373. package/dist/locales/vi/conversation-inbox.json +21 -2
  374. package/dist/screens/desk-message/DeskWorkspace.d.ts +12 -0
  375. package/dist/screens/desk-message/DeskWorkspace.d.ts.map +1 -0
  376. package/dist/screens/desk-message/DeskWorkspace.js +57 -0
  377. package/dist/screens/desk-message/FolderOverlay.d.ts +4 -0
  378. package/dist/screens/desk-message/FolderOverlay.d.ts.map +1 -0
  379. package/dist/screens/desk-message/FolderOverlay.js +32 -0
  380. package/dist/screens/desk-message/SkipLinks.d.ts +4 -0
  381. package/dist/screens/desk-message/SkipLinks.d.ts.map +1 -0
  382. package/dist/screens/desk-message/SkipLinks.js +19 -0
  383. package/dist/screens/desk-message/ViewportNotice.d.ts +4 -0
  384. package/dist/screens/desk-message/ViewportNotice.d.ts.map +1 -0
  385. package/dist/screens/desk-message/ViewportNotice.js +9 -0
  386. package/dist/screens/desk-message/index.d.ts +3 -2
  387. package/dist/screens/desk-message/index.d.ts.map +1 -1
  388. package/dist/screens/desk-message/index.js +4 -12
  389. package/dist/store/deskPanelHost.d.ts +13 -0
  390. package/dist/store/deskPanelHost.d.ts.map +1 -0
  391. package/dist/store/deskPanelHost.js +9 -0
  392. package/dist/store/escapeLayers.d.ts +15 -0
  393. package/dist/store/escapeLayers.d.ts.map +1 -0
  394. package/dist/store/escapeLayers.js +15 -0
  395. package/dist/store/pendingSessionClose.d.ts +19 -0
  396. package/dist/store/pendingSessionClose.d.ts.map +1 -0
  397. package/dist/store/pendingSessionClose.js +74 -0
  398. package/dist/store/session.d.ts +2 -1
  399. package/dist/store/session.d.ts.map +1 -1
  400. package/dist/store/session.js +4 -1
  401. package/dist/store/sessionFolder.d.ts +15 -0
  402. package/dist/store/sessionFolder.d.ts.map +1 -0
  403. package/dist/store/sessionFolder.js +18 -0
  404. package/dist/store/shortcutPrefs.d.ts +9 -0
  405. package/dist/store/shortcutPrefs.d.ts.map +1 -0
  406. package/dist/store/shortcutPrefs.js +23 -0
  407. package/dist/store/sidePanel.d.ts +12 -0
  408. package/dist/store/sidePanel.d.ts.map +1 -0
  409. package/dist/store/sidePanel.js +9 -0
  410. package/dist/store/workspaceLayout.d.ts +12 -0
  411. package/dist/store/workspaceLayout.d.ts.map +1 -0
  412. package/dist/store/workspaceLayout.js +9 -0
  413. package/dist/styles/global.css +1 -1
  414. package/dist/types/chat.d.ts +18 -0
  415. package/dist/types/chat.d.ts.map +1 -1
  416. package/dist/types/dto.d.ts +2 -1
  417. package/dist/types/dto.d.ts.map +1 -1
  418. package/dist/utils/a11yClickable.d.ts +10 -0
  419. package/dist/utils/a11yClickable.d.ts.map +1 -0
  420. package/dist/utils/a11yClickable.js +15 -0
  421. package/dist/utils/events.d.ts +4 -0
  422. package/dist/utils/events.d.ts.map +1 -1
  423. package/dist/utils/headerMemberCount.d.ts +10 -0
  424. package/dist/utils/headerMemberCount.d.ts.map +1 -0
  425. package/dist/utils/headerMemberCount.js +3 -0
  426. package/dist/utils/memberEventRun.d.ts +16 -0
  427. package/dist/utils/memberEventRun.d.ts.map +1 -0
  428. package/dist/utils/memberEventRun.js +40 -0
  429. package/package.json +2 -2
  430. package/dist/components/session/SessionFilterMenu.d.ts +0 -15
  431. package/dist/components/session/SessionFilterMenu.d.ts.map +0 -1
  432. package/dist/components/session/SessionFilterMenu.js +0 -30
  433. package/dist/components/session/sessionMenuItems.d.ts +0 -28
  434. package/dist/components/session/sessionMenuItems.d.ts.map +0 -1
  435. 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,3 @@
1
+ /** CRM only: runs `onClose` when a side panel opens, so popovers never stack over it. */
2
+ export declare const useCloseOnSidePanelOpen: (onClose: () => void) => void;
3
+ //# sourceMappingURL=useCloseOnSidePanelOpen.d.ts.map
@@ -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,3 @@
1
+ /** While `open`, Esc (from the desk shortcut hook) calls `close` before closing any panel. */
2
+ export declare const useEscapeLayer: (open: boolean, close: () => void) => void;
3
+ //# sourceMappingURL=useEscapeLayer.d.ts.map
@@ -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,3 @@
1
+ /** Subscribes to a CSS media query; returns `false` during SSR. */
2
+ export declare const useMediaQuery: (query: string) => boolean;
3
+ //# sourceMappingURL=useMediaQuery.d.ts.map
@@ -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;;;;;;CAoElC,CAAC"}
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,3 @@
1
+ /** Text for an aria-live region: who wrote the newest incoming message, never its content. */
2
+ export declare const useNewMessageAnnouncement: () => string;
3
+ //# sourceMappingURL=useNewMessageAnnouncement.d.ts.map
@@ -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;CAChF;AAED,eAAO,MAAM,gBAAgB,GAAI,uBAG9B,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0FzB,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,wGAqB3B,CAAC"}
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: async (sessionId) => {
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;AA6JD,eAAO,MAAM,aAAa,GAAI,sBAG3B,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiFpB,CAAC"}
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 syncSessionConversationsToStore = async (sessions) => {
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"}