@droppii-org/chat-sdk 0.1.19 → 0.1.21

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 (131) hide show
  1. package/dist/components/conversation/ConversationBySessionItem.d.ts +3 -1
  2. package/dist/components/conversation/ConversationBySessionItem.d.ts.map +1 -1
  3. package/dist/components/conversation/ConversationBySessionItem.js +4 -7
  4. package/dist/components/conversation/DeskConversationList.d.ts.map +1 -1
  5. package/dist/components/conversation/DeskConversationList.js +6 -2
  6. package/dist/components/message/GroupMembersDrawer.d.ts +4 -1
  7. package/dist/components/message/GroupMembersDrawer.d.ts.map +1 -1
  8. package/dist/components/message/GroupMembersDrawer.js +39 -5
  9. package/dist/components/message/MessageHeader.d.ts +2 -1
  10. package/dist/components/message/MessageHeader.d.ts.map +1 -1
  11. package/dist/components/message/MessageHeader.js +3 -4
  12. package/dist/components/message/MessageList.d.ts.map +1 -1
  13. package/dist/components/message/MessageList.js +8 -11
  14. package/dist/components/message/UnassignedSessionFooter.d.ts +7 -0
  15. package/dist/components/message/UnassignedSessionFooter.d.ts.map +1 -0
  16. package/dist/components/message/UnassignedSessionFooter.js +26 -0
  17. package/dist/components/message/footer/ActionBar.d.ts.map +1 -1
  18. package/dist/components/message/footer/ActionBar.js +4 -1
  19. package/dist/components/message/footer/EnterHandler.d.ts.map +1 -1
  20. package/dist/components/message/footer/EnterHandler.js +20 -2
  21. package/dist/components/message/footer/SessionClosedModal.d.ts +10 -0
  22. package/dist/components/message/footer/SessionClosedModal.d.ts.map +1 -0
  23. package/dist/components/message/footer/SessionClosedModal.js +9 -0
  24. package/dist/components/message/footer/index.d.ts.map +1 -1
  25. package/dist/components/message/footer/index.js +103 -18
  26. package/dist/components/message/item/SystemLogMessage.d.ts.map +1 -1
  27. package/dist/components/message/item/SystemLogMessage.js +9 -10
  28. package/dist/components/searchConversation/SearchAll.d.ts.map +1 -1
  29. package/dist/components/searchConversation/SearchAll.js +5 -3
  30. package/dist/components/searchConversation/SearchConversationAsMessages.d.ts.map +1 -1
  31. package/dist/components/searchConversation/SearchConversationAsMessages.js +1 -1
  32. package/dist/components/searchConversation/SearchConversationAsUsers.js +1 -1
  33. package/dist/components/searchConversation/SearchConversationMyInbox.d.ts +6 -0
  34. package/dist/components/searchConversation/SearchConversationMyInbox.d.ts.map +1 -0
  35. package/dist/components/searchConversation/SearchConversationMyInbox.js +24 -0
  36. package/dist/components/searchConversation/SearchDrawer.js +10 -10
  37. package/dist/components/searchConversation/SearchMessageOnCurrentConversation.d.ts.map +1 -1
  38. package/dist/components/searchConversation/SearchMessageOnCurrentConversation.js +1 -1
  39. package/dist/components/searchConversation/index.d.ts +1 -0
  40. package/dist/components/searchConversation/index.d.ts.map +1 -1
  41. package/dist/components/searchConversation/index.js +8 -1
  42. package/dist/components/searchConversation/item/SearchItemAsMessage.d.ts +1 -0
  43. package/dist/components/searchConversation/item/SearchItemAsMessage.d.ts.map +1 -1
  44. package/dist/components/searchConversation/item/SearchItemAsMessage.js +4 -4
  45. package/dist/components/thread/ManualAssignPopover.d.ts +5 -2
  46. package/dist/components/thread/ManualAssignPopover.d.ts.map +1 -1
  47. package/dist/components/thread/ManualAssignPopover.js +40 -21
  48. package/dist/components/thread/SessionSection.d.ts.map +1 -1
  49. package/dist/components/thread/SessionSection.js +4 -2
  50. package/dist/components/thread/ThreadInfo.d.ts.map +1 -1
  51. package/dist/components/thread/ThreadInfo.js +2 -1
  52. package/dist/constants/index.d.ts +6 -1
  53. package/dist/constants/index.d.ts.map +1 -1
  54. package/dist/constants/index.js +6 -1
  55. package/dist/hooks/cannedResponse/useFetchCannedResponse.js +2 -2
  56. package/dist/hooks/global/useGlobalEvent.d.ts.map +1 -1
  57. package/dist/hooks/global/useGlobalEvent.js +11 -0
  58. package/dist/hooks/group/useGroupMembers.d.ts.map +1 -1
  59. package/dist/hooks/group/useGroupMembers.js +17 -0
  60. package/dist/hooks/message/useMessage.js +5 -5
  61. package/dist/hooks/message/usePullSessionMessages.d.ts +2 -0
  62. package/dist/hooks/message/usePullSessionMessages.d.ts.map +1 -1
  63. package/dist/hooks/message/usePullSessionMessages.js +18 -15
  64. package/dist/hooks/search/useSearchMessage.d.ts +2 -1
  65. package/dist/hooks/search/useSearchMessage.d.ts.map +1 -1
  66. package/dist/hooks/search/useSearchMessage.js +9 -9
  67. package/dist/hooks/session/useAssignSession.d.ts +4 -0
  68. package/dist/hooks/session/useAssignSession.d.ts.map +1 -1
  69. package/dist/hooks/session/useAssignSession.js +44 -11
  70. package/dist/hooks/session/useConversationSessionState.d.ts +1 -8
  71. package/dist/hooks/session/useConversationSessionState.d.ts.map +1 -1
  72. package/dist/hooks/session/useConversationSessionState.js +2 -25
  73. package/dist/hooks/session/useGetListSessionByConversation.d.ts.map +1 -1
  74. package/dist/hooks/session/useGetListSessionByConversation.js +2 -1
  75. package/dist/hooks/session/useGetSession.d.ts.map +1 -1
  76. package/dist/hooks/session/useGetSession.js +2 -2
  77. package/dist/hooks/session/useGetTeamSupporters.d.ts +2 -1
  78. package/dist/hooks/session/useGetTeamSupporters.d.ts.map +1 -1
  79. package/dist/hooks/session/useGetTeamSupporters.js +2 -2
  80. package/dist/hooks/session/useIsJoinedGroup.d.ts +1 -1
  81. package/dist/hooks/session/useIsJoinedGroup.d.ts.map +1 -1
  82. package/dist/hooks/session/useIsJoinedGroup.js +13 -19
  83. package/dist/hooks/session/useJoinGroupFlow.d.ts +8 -6
  84. package/dist/hooks/session/useJoinGroupFlow.d.ts.map +1 -1
  85. package/dist/hooks/session/useJoinGroupFlow.js +19 -57
  86. package/dist/hooks/session/useJoinSession.d.ts.map +1 -1
  87. package/dist/hooks/session/useJoinSession.js +3 -0
  88. package/dist/hooks/session/useLeaveConversation.d.ts +5 -0
  89. package/dist/hooks/session/useLeaveConversation.d.ts.map +1 -0
  90. package/dist/hooks/session/useLeaveConversation.js +35 -0
  91. package/dist/hooks/session/useReopenOrCreateSession.d.ts +4 -0
  92. package/dist/hooks/session/useReopenOrCreateSession.d.ts.map +1 -0
  93. package/dist/hooks/session/useReopenOrCreateSession.js +32 -0
  94. package/dist/hooks/session/useSessionLatestPreview.d.ts +7 -0
  95. package/dist/hooks/session/useSessionLatestPreview.d.ts.map +1 -0
  96. package/dist/hooks/session/useSessionLatestPreview.js +82 -0
  97. package/dist/hooks/session/useSortedSessions.d.ts +4 -0
  98. package/dist/hooks/session/useSortedSessions.d.ts.map +1 -0
  99. package/dist/hooks/session/useSortedSessions.js +13 -0
  100. package/dist/hooks/session/useSyncGroupStateAfterJoin.d.ts +9 -0
  101. package/dist/hooks/session/useSyncGroupStateAfterJoin.d.ts.map +1 -0
  102. package/dist/hooks/session/useSyncGroupStateAfterJoin.js +23 -0
  103. package/dist/index.d.ts +1 -0
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +1 -0
  106. package/dist/locales/vi/common.json +18 -2
  107. package/dist/services/query.d.ts +5 -0
  108. package/dist/services/query.d.ts.map +1 -1
  109. package/dist/services/query.js +5 -0
  110. package/dist/services/routes.d.ts +4 -0
  111. package/dist/services/routes.d.ts.map +1 -1
  112. package/dist/services/routes.js +4 -0
  113. package/dist/store/conversation.d.ts.map +1 -1
  114. package/dist/store/conversation.js +5 -2
  115. package/dist/styles/global.css +1 -1
  116. package/dist/tsconfig.tsbuildinfo +1 -1
  117. package/dist/types/chat.d.ts +1 -1
  118. package/dist/types/chat.d.ts.map +1 -1
  119. package/dist/types/dto.d.ts +4 -0
  120. package/dist/types/dto.d.ts.map +1 -1
  121. package/dist/utils/events.d.ts +2 -0
  122. package/dist/utils/events.d.ts.map +1 -1
  123. package/dist/utils/messageLog.d.ts +1 -1
  124. package/dist/utils/messageLog.d.ts.map +1 -1
  125. package/dist/utils/messageLog.js +23 -6
  126. package/dist/utils/messageTransform.d.ts.map +1 -1
  127. package/dist/utils/messageTransform.js +1 -1
  128. package/dist/utils/queryHelpers.d.ts +1 -1
  129. package/dist/utils/queryHelpers.d.ts.map +1 -1
  130. package/dist/utils/queryHelpers.js +1 -1
  131. package/package.json +1 -1
@@ -5,12 +5,12 @@ import { ToolbarPlugin } from "./ToolbarPlugin";
5
5
  import { LinkPlugin } from "@lexical/react/LexicalLinkPlugin";
6
6
  import { ListPlugin } from "@lexical/react/LexicalListPlugin";
7
7
  import { editorTheme, editorNodes, editorOnError } from "./editorConfig";
8
- import { createContext, useCallback, useContext, useEffect, useMemo, useState, } from "react";
8
+ import { createContext, useCallback, useContext, useEffect, useRef, useState, } from "react";
9
9
  import EnterHandler from "./EnterHandler";
10
10
  import ActionBar from "./ActionBar";
11
11
  import { AccountType } from "../../../types/chat";
12
12
  import { useSendMessage } from "../../../hooks/message/useSendMessage";
13
- import { Popover } from "antd";
13
+ import { Modal, Popover } from "antd";
14
14
  import FilePreview from "./FilePreview";
15
15
  import { useTranslation } from "react-i18next";
16
16
  import PasteAndDropPlugin from "./PasteAndDropPlugin";
@@ -23,6 +23,9 @@ import useConversationStore from "../../../store/conversation";
23
23
  import { useCurrentUserAccountType } from "../../../hooks/user/useCurrentUserAccountType";
24
24
  import ComposerTabs from "./ComposerTabs";
25
25
  import ComposerEditor from "./ComposerEditor";
26
+ import SessionClosedModal from "./SessionClosedModal";
27
+ import { useCreateSession, useReopenSession, } from "../../../hooks/session/useReopenOrCreateSession";
28
+ import { emit } from "../../../utils/events";
26
29
  const initialConfig = {
27
30
  namespace: "ChatInput",
28
31
  theme: editorTheme,
@@ -30,7 +33,7 @@ const initialConfig = {
30
33
  nodes: editorNodes,
31
34
  };
32
35
  export const MessageFooterContext = createContext({
33
- onSendMessage: () => { },
36
+ onSendMessage: () => false,
34
37
  isInternal: false,
35
38
  setIsInternal: () => { },
36
39
  listUploadFiles: [],
@@ -56,7 +59,13 @@ const MessageFooterProvider = ({ currentSession, openCreateCannedModal, }) => {
56
59
  const [isInternal, setIsInternal] = useState(false);
57
60
  const canUseInternal = isCrm && accountType === AccountType.Staff;
58
61
  const quotedMessage = useConversationStore((state) => state.quotedMessage);
62
+ const conversationData = useConversationStore((state) => state.conversationData);
59
63
  const lockToInternal = Boolean((quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.clientMsgID) && (quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.isInternal));
64
+ const [isSessionClosedModalOpen, { setTrue: openSessionClosedModal, setFalse: closeSessionClosedModal },] = useBoolean(false);
65
+ const pendingMessageRef = useRef(null);
66
+ const { mutateAsync: createSession, isPending: isCreatingSession } = useCreateSession();
67
+ const { mutateAsync: reopenSession, isPending: isReopeningSession } = useReopenSession();
68
+ const isSessionActionLoading = isCreatingSession || isReopeningSession;
60
69
  useEffect(() => {
61
70
  if (!canUseInternal && isInternal) {
62
71
  setIsInternal(false);
@@ -70,10 +79,21 @@ const MessageFooterProvider = ({ currentSession, openCreateCannedModal, }) => {
70
79
  }
71
80
  setIsInternal(true);
72
81
  }, [canUseInternal, quotedMessage]);
73
- const placeholderText = useMemo(() => {
74
- return isInternal ? t("enter_internal_message") : t("enter_message");
75
- }, [isInternal, t]);
76
- const onSendMessage = useCallback(async ({ plainText, richText, type, isInternal, }) => {
82
+ const placeholderText = isInternal
83
+ ? t("enter_internal_message")
84
+ : t("enter_message");
85
+ const onSendMessage = useCallback(({ plainText, richText, type, isInternal, }) => {
86
+ if ((currentSession === null || currentSession === void 0 ? void 0 : currentSession.isClosed) && !isInternal) {
87
+ pendingMessageRef.current = {
88
+ plainText,
89
+ richText,
90
+ type,
91
+ isInternal,
92
+ files: [...listUploadFiles],
93
+ };
94
+ openSessionClosedModal();
95
+ return false;
96
+ }
77
97
  if (type === "text") {
78
98
  sendTextMessage({ plainText, richText, currentSession, isInternal });
79
99
  }
@@ -87,23 +107,88 @@ const MessageFooterProvider = ({ currentSession, openCreateCannedModal, }) => {
87
107
  });
88
108
  }
89
109
  setListUploadFiles([]);
90
- }, [sendMergeMessage, sendTextMessage, listUploadFiles, currentSession]);
91
- const onOpenCreateCannedModal = useCallback(() => {
110
+ return true;
111
+ }, [
112
+ sendMergeMessage,
113
+ sendTextMessage,
114
+ listUploadFiles,
115
+ currentSession,
116
+ openSessionClosedModal,
117
+ ]);
118
+ const executePendingSend = useCallback((newSession) => {
119
+ const pending = pendingMessageRef.current;
120
+ if (!pending)
121
+ return;
122
+ const sessionToUse = newSession || currentSession;
123
+ if (pending.type === "text") {
124
+ sendTextMessage({
125
+ plainText: pending.plainText,
126
+ richText: pending.richText,
127
+ currentSession: sessionToUse,
128
+ isInternal: pending.isInternal,
129
+ });
130
+ }
131
+ else {
132
+ sendMergeMessage({
133
+ plainText: pending.plainText,
134
+ richText: pending.richText,
135
+ files: pending.files,
136
+ currentSession: sessionToUse,
137
+ isInternal: pending.isInternal,
138
+ });
139
+ }
140
+ setListUploadFiles([]);
141
+ pendingMessageRef.current = null;
142
+ emit("CLEAR_COMPOSER");
143
+ }, [sendTextMessage, sendMergeMessage, currentSession]);
144
+ const handleSessionAction = useCallback(async (action) => {
145
+ const conversationId = conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID;
146
+ if (!conversationId)
147
+ return;
148
+ try {
149
+ const newSession = await action(conversationId);
150
+ closeSessionClosedModal();
151
+ setTimeout(() => {
152
+ executePendingSend(newSession);
153
+ }, 700);
154
+ }
155
+ catch (_a) {
156
+ closeSessionClosedModal();
157
+ pendingMessageRef.current = null;
158
+ Modal.error({
159
+ centered: true,
160
+ content: t("session_action_error"),
161
+ });
162
+ }
163
+ }, [
164
+ conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID,
165
+ closeSessionClosedModal,
166
+ executePendingSend,
167
+ t,
168
+ ]);
169
+ const handleReopenSession = () => handleSessionAction(reopenSession);
170
+ const handleCreateNewSession = () => handleSessionAction(createSession);
171
+ const handleCloseSessionModal = () => {
172
+ if (isSessionActionLoading)
173
+ return;
174
+ closeSessionClosedModal();
175
+ };
176
+ const onOpenCreateCannedModal = () => {
92
177
  closeCanned();
93
178
  openCreateCannedModal === null || openCreateCannedModal === void 0 ? void 0 : openCreateCannedModal();
94
- }, [closeCanned, openCreateCannedModal]);
95
- const onOpenCanned = useCallback((query) => {
179
+ };
180
+ const onOpenCanned = (query) => {
96
181
  setCannedQuery(query);
97
182
  openCanned();
98
- }, [openCanned]);
99
- const setIsOpenCanned = useCallback((open) => {
183
+ };
184
+ const setIsOpenCanned = (open) => {
100
185
  if (open) {
101
186
  openCanned();
102
187
  return;
103
188
  }
104
189
  closeCanned();
105
- }, [closeCanned, openCanned]);
106
- return (_jsx(MessageFooterContext.Provider, { value: {
190
+ };
191
+ return (_jsxs(MessageFooterContext.Provider, { value: {
107
192
  onSendMessage,
108
193
  isInternal,
109
194
  setIsInternal,
@@ -115,8 +200,8 @@ const MessageFooterProvider = ({ currentSession, openCreateCannedModal, }) => {
115
200
  setActiveCannedIndex,
116
201
  maxActiveCannedIndex,
117
202
  setMaxActiveCannedIndex,
118
- }, children: _jsxs(LexicalComposer, { initialConfig: initialConfig, children: [_jsx(Popover, { open: isOpenCanned, content: _jsx(CannedResponse, { onClose: closeCanned, openCreateCannedModal: onOpenCreateCannedModal, cannedQuery: cannedQuery }), placement: "topLeft", trigger: "click", arrow: false, classNames: {
119
- body: "mx-1 !p-0",
120
- }, destroyOnHidden: true, children: _jsxs("div", { className: "border-t pb-2 flex flex-col gap-1 bg-white", children: [_jsx(QuotedMessageFooter, {}), listUploadFiles.length > 0 && _jsx(FilePreview, {}), _jsx(ToolbarPlugin, {}), _jsxs("div", { children: [_jsx(ComposerTabs, { canUseInternal: canUseInternal, hintText: t("canned_response_hint"), isInternal: isInternal, lockToInternal: lockToInternal, setIsInternal: setIsInternal }), _jsx(ComposerEditor, { isInternal: isInternal, placeholderText: placeholderText })] }), _jsx(ActionBar, {})] }) }), _jsx(LinkPlugin, {}), _jsx(ListPlugin, {}), _jsx(EnterHandler, {}), _jsx(PasteAndDropPlugin, {}), isCrm && (_jsx(CannedResponseTriggerPlugin, { onClose: closeCanned, onOpen: onOpenCanned }))] }) }));
203
+ }, children: [_jsxs(LexicalComposer, { initialConfig: initialConfig, children: [_jsx(Popover, { open: isOpenCanned, content: _jsx(CannedResponse, { onClose: closeCanned, openCreateCannedModal: onOpenCreateCannedModal, cannedQuery: cannedQuery }), placement: "topLeft", trigger: "click", arrow: false, classNames: {
204
+ body: "mx-1 !p-0",
205
+ }, destroyOnHidden: true, children: _jsxs("div", { className: "border-t pb-2 flex flex-col gap-1 bg-white", children: [_jsx(QuotedMessageFooter, {}), listUploadFiles.length > 0 && _jsx(FilePreview, {}), _jsx(ToolbarPlugin, {}), _jsxs("div", { children: [_jsx(ComposerTabs, { canUseInternal: canUseInternal, hintText: t("canned_response_hint"), isInternal: isInternal, lockToInternal: lockToInternal, setIsInternal: setIsInternal }), _jsx(ComposerEditor, { isInternal: isInternal, placeholderText: placeholderText })] }), _jsx(ActionBar, {})] }) }), _jsx(LinkPlugin, {}), _jsx(ListPlugin, {}), _jsx(EnterHandler, {}), _jsx(PasteAndDropPlugin, {}), isCrm && (_jsx(CannedResponseTriggerPlugin, { onClose: closeCanned, onOpen: onOpenCanned }))] }), _jsx(SessionClosedModal, { open: isSessionClosedModalOpen, loading: isSessionActionLoading, onReopen: handleReopenSession, onCreateNew: handleCreateNewSession, onClose: handleCloseSessionModal })] }));
121
206
  };
122
207
  export default MessageFooterProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"SystemLogMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/SystemLogMessage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAQtD,UAAU,yBAAyB;IACjC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,QAAA,MAAM,oBAAoB,GAAI,aAAa,yBAAyB,mDA+BnE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"SystemLogMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/SystemLogMessage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAOtD,UAAU,yBAAyB;IACjC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,QAAA,MAAM,oBAAoB,GAAI,aAAa,yBAAyB,mDAuBnE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -1,17 +1,16 @@
1
1
  "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import clsx from "clsx";
4
- import { Icon } from "../../icon";
5
- import { getSystemLogMessageText, getSystemLogMessageTone, } from "../../../utils/messageLog";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { getSystemLogMessageHtml, getSystemLogMessageText, } from "../../../utils/messageLog";
4
+ import { sanitizeHtml } from "../../../utils/common";
6
5
  const SystemLogMessageItem = ({ message }) => {
6
+ const html = getSystemLogMessageHtml(message);
7
7
  const text = getSystemLogMessageText(message);
8
- const tone = getSystemLogMessageTone(message);
9
- if (!text) {
8
+ if (!html && !text) {
10
9
  return null;
11
10
  }
12
- const isAccent = tone === "accent";
13
- return (_jsx("div", { className: "flex justify-center", children: _jsxs("div", { className: clsx("max-w-[85%] rounded-full px-3 py-1.5 text-center text-sm font-semibold break-words", isAccent
14
- ? "bg-orange-100 text-orange-900 inline-flex items-center gap-2"
15
- : "bg-white text-gray-800 shadow-sm"), children: [isAccent && (_jsx(Icon, { icon: "shuffle-o", size: 14, className: "shrink-0 text-orange-500" })), _jsx("span", { children: text })] }) }));
11
+ if (html) {
12
+ return (_jsx("div", { className: "flex justify-center", children: _jsx("div", { dangerouslySetInnerHTML: { __html: sanitizeHtml(html) } }) }));
13
+ }
14
+ return (_jsx("div", { className: "flex justify-center", children: _jsx("span", { className: "rounded-full bg-gray-200 px-3 py-1.5 text-center text-[13px] font-normal text-gray-900", children: text }) }));
16
15
  };
17
16
  export default SystemLogMessageItem;
@@ -1 +1 @@
1
- {"version":3,"file":"SearchAll.d.ts","sourceRoot":"","sources":["../../../src/components/searchConversation/SearchAll.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,wBAAwB,EAAE,MAAM,GAAG,CAAC;AAE7C,UAAU,0BAA0B;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,CAAC,GAAG,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACvD;AACD,QAAA,MAAM,qBAAqB,GAAI,+BAG5B,0BAA0B,4CAkH5B,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"SearchAll.d.ts","sourceRoot":"","sources":["../../../src/components/searchConversation/SearchAll.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,wBAAwB,EAAE,MAAM,GAAG,CAAC;AAG7C,UAAU,0BAA0B;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,CAAC,GAAG,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACvD;AACD,QAAA,MAAM,qBAAqB,GAAI,+BAG5B,0BAA0B,4CA6G5B,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Button, Empty, Spin } from "antd";
3
+ import clsx from "clsx";
3
4
  import { useTranslation } from "react-i18next";
4
5
  import { useSearchMessage } from "../../hooks/search/useSearchMessage";
5
6
  import { MessageType } from "@openim/wasm-client-sdk";
@@ -8,6 +9,7 @@ import SearchItemAsMessage from "./item/SearchItemAsMessage";
8
9
  import { useGetSession } from "../../hooks/session/useGetSession";
9
10
  import SearchItemAsUser from "./item/SearchItemAsUser";
10
11
  import { SearchConversationTabKey } from ".";
12
+ import { PAGE_SIZE } from "../../constants";
11
13
  const SearchConversationAll = ({ searchTerm = "", setActiveKey, }) => {
12
14
  const { t } = useTranslation();
13
15
  const { dataFlatten: messages, isLoading: isLoadingMessage, hasNextPage: hasNextPageMessage, } = useSearchMessage({
@@ -15,13 +17,13 @@ const SearchConversationAll = ({ searchTerm = "", setActiveKey, }) => {
15
17
  searchTerm: searchTerm.trim(),
16
18
  contentType: MessageType.TextMessage,
17
19
  },
18
- options: { pageSize: 5 },
20
+ options: { pageSize: PAGE_SIZE.xs },
19
21
  });
20
22
  const { dataFlatten: sessions, isLoading: isLoadingSession, hasNextPage: hasNextPageSession, } = useGetSession({
21
23
  filter: {
22
24
  searchTerm: searchTerm.trim(),
23
25
  },
24
- options: { pageSize: 5 },
26
+ options: { pageSize: PAGE_SIZE.xs },
25
27
  });
26
28
  if (searchTerm.trim() === "" ||
27
29
  (messages.length === 0 && sessions.length === 0)) {
@@ -30,6 +32,6 @@ const SearchConversationAll = ({ searchTerm = "", setActiveKey, }) => {
30
32
  if (isLoadingMessage || isLoadingSession) {
31
33
  return (_jsx("div", { className: "h-full overflow-auto flex items-center justify-center", children: _jsx(Spin, {}) }));
32
34
  }
33
- return (_jsxs("div", { className: "h-full overflow-auto", children: [sessions.length > 0 && (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between px-3", children: [_jsx("span", { className: "text-xs font-medium uppercase flex-1 text-gray-600", children: t("users") }), hasNextPageSession && (_jsx(Button, { type: "link", icon: _jsx(Icon, { icon: "angle-right-o", size: 18, className: "!align-[-4px]" }), iconPosition: "end", className: "p-0 gap-1", onClick: () => setActiveKey === null || setActiveKey === void 0 ? void 0 : setActiveKey(SearchConversationTabKey.Users), children: t("see_more") }))] }), _jsx("div", { children: sessions.map((session) => (_jsx(SearchItemAsUser, { session: session, searchTerm: searchTerm }))) })] })), messages.length > 0 && (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between px-3", children: [_jsx("span", { className: "text-xs font-medium uppercase flex-1 text-gray-600", children: t("messages") }), hasNextPageMessage && (_jsx(Button, { type: "link", icon: _jsx(Icon, { icon: "angle-right-o", size: 18, className: "!align-[-4px]" }), iconPosition: "end", className: "p-0 gap-1", onClick: () => setActiveKey === null || setActiveKey === void 0 ? void 0 : setActiveKey(SearchConversationTabKey.Messages), children: t("see_more") }))] }), _jsx("div", { children: messages.map((message) => (_jsx(SearchItemAsMessage, { message: message.chatLog, searchTerm: searchTerm }))) })] }))] }));
35
+ return (_jsxs("div", { className: "h-full overflow-auto", children: [sessions.length > 0 && (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between px-3 min-h-[32px]", children: [_jsx("span", { className: "text-xs font-medium uppercase flex-1 text-gray-600", children: t("users") }), _jsx(Button, { type: "link", icon: _jsx(Icon, { icon: "angle-right-o", size: 18, className: "!align-[-4px]" }), iconPosition: "end", className: clsx("p-0 gap-1", !hasNextPageSession && "invisible"), onClick: () => setActiveKey === null || setActiveKey === void 0 ? void 0 : setActiveKey(SearchConversationTabKey.Users), children: t("see_more") })] }), _jsx("div", { children: sessions.map((session) => (_jsx(SearchItemAsUser, { session: session, searchTerm: searchTerm }))) })] })), messages.length > 0 && (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between px-3 min-h-[32px]", children: [_jsx("span", { className: "text-xs font-medium uppercase flex-1 text-gray-600", children: t("messages") }), _jsx(Button, { type: "link", icon: _jsx(Icon, { icon: "angle-right-o", size: 18, className: "!align-[-4px]" }), iconPosition: "end", className: clsx("p-0 gap-1", !hasNextPageMessage && "invisible"), onClick: () => setActiveKey === null || setActiveKey === void 0 ? void 0 : setActiveKey(SearchConversationTabKey.Messages), children: t("see_more") })] }), _jsx("div", { children: messages.map((message) => (_jsx(SearchItemAsMessage, { message: message.chatLog, searchTerm: searchTerm, displayTag: message.displayTag }))) })] }))] }));
34
36
  };
35
37
  export default SearchConversationAll;
@@ -1 +1 @@
1
- {"version":3,"file":"SearchConversationAsMessages.d.ts","sourceRoot":"","sources":["../../../src/components/searchConversation/SearchConversationAsMessages.tsx"],"names":[],"mappings":"AAOA,UAAU,iCAAiC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB;AACD,QAAA,MAAM,4BAA4B,GAChC,OAAO,iCAAiC,4CAuCzC,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
1
+ {"version":3,"file":"SearchConversationAsMessages.d.ts","sourceRoot":"","sources":["../../../src/components/searchConversation/SearchConversationAsMessages.tsx"],"names":[],"mappings":"AAOA,UAAU,iCAAiC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB;AACD,QAAA,MAAM,4BAA4B,GAChC,OAAO,iCAAiC,4CA2CzC,CAAC;AAEF,eAAe,4BAA4B,CAAC"}
@@ -18,6 +18,6 @@ const SearchConversationAsMessages = (props) => {
18
18
  return _jsx(Empty, { description: t("no_conversation") });
19
19
  if (isLoading)
20
20
  return (_jsx("div", { className: "flex items-center justify-center", children: _jsx(Spin, {}) }));
21
- return (_jsx("div", { id: "scrollableVideoDiv", className: "h-full overflow-auto", children: _jsx(InfiniteScroll, { dataLength: dataFlatten.length, next: fetchNextPage, hasMore: hasNextPage, loader: _jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) }), scrollableTarget: "scrollableVideoDiv", children: dataFlatten.map((item) => (_jsx(SearchItemAsMessage, { message: item.chatLog, searchTerm: searchTerm }))) }) }));
21
+ return (_jsx("div", { id: "scrollableSearchMessagesTab", className: "h-full overflow-auto", children: _jsx(InfiniteScroll, { dataLength: dataFlatten.length, next: fetchNextPage, hasMore: hasNextPage, loader: _jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) }), scrollableTarget: "scrollableSearchMessagesTab", children: dataFlatten.map((item) => (_jsx(SearchItemAsMessage, { message: item.chatLog, searchTerm: searchTerm, displayTag: item.displayTag }))) }) }));
22
22
  };
23
23
  export default SearchConversationAsMessages;
@@ -16,6 +16,6 @@ const SearchConversationAsUsers = (props) => {
16
16
  return _jsx(Empty, { description: t("no_conversation") });
17
17
  if (isLoading)
18
18
  return (_jsx("div", { className: "flex items-center justify-center", children: _jsx(Spin, {}) }));
19
- return (_jsx("div", { id: "scrollableVideoDiv", className: "h-full overflow-auto", children: _jsx(InfiniteScroll, { dataLength: dataFlatten.length, next: fetchNextPage, hasMore: hasNextPage, loader: _jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) }), scrollableTarget: "scrollableVideoDiv", children: dataFlatten.map((item) => (_jsx(SearchItemAsUser, { session: item, searchTerm: searchTerm }))) }) }));
19
+ return (_jsx("div", { id: "scrollableSearchUsersTab", className: "h-full overflow-auto", children: _jsx(InfiniteScroll, { dataLength: dataFlatten.length, next: fetchNextPage, hasMore: hasNextPage, loader: _jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) }), scrollableTarget: "scrollableSearchUsersTab", children: dataFlatten.map((item) => (_jsx(SearchItemAsUser, { session: item, searchTerm: searchTerm }))) }) }));
20
20
  };
21
21
  export default SearchConversationAsUsers;
@@ -0,0 +1,6 @@
1
+ interface SearchConversationMyInboxProps {
2
+ searchTerm: string;
3
+ }
4
+ declare const SearchConversationMyInbox: ({ searchTerm, }: SearchConversationMyInboxProps) => import("react/jsx-runtime").JSX.Element;
5
+ export default SearchConversationMyInbox;
6
+ //# sourceMappingURL=SearchConversationMyInbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchConversationMyInbox.d.ts","sourceRoot":"","sources":["../../../src/components/searchConversation/SearchConversationMyInbox.tsx"],"names":[],"mappings":"AAQA,UAAU,8BAA8B;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,yBAAyB,GAAI,iBAEhC,8BAA8B,4CA2ChC,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Empty, Spin } from "antd";
3
+ import { useTranslation } from "react-i18next";
4
+ import { useSearchMessage } from "../../hooks/search/useSearchMessage";
5
+ import { MessageType } from "@openim/wasm-client-sdk";
6
+ import SearchItemAsMessage from "./item/SearchItemAsMessage";
7
+ const MY_INBOX_TAG = "MY_INBOX";
8
+ const SearchConversationMyInbox = ({ searchTerm = "", }) => {
9
+ const { t } = useTranslation();
10
+ const { dataFlatten, hasNextPage, fetchNextPage, isLoading, isFetchingNextPage } = useSearchMessage({
11
+ payload: {
12
+ searchTerm: searchTerm.trim(),
13
+ contentType: MessageType.TextMessage,
14
+ tag: MY_INBOX_TAG,
15
+ },
16
+ options: { untilEmptyPage: true },
17
+ });
18
+ if ((dataFlatten.length === 0 && !isLoading) || searchTerm.trim() === "")
19
+ return _jsx(Empty, { description: t("no_conversation") });
20
+ if (isLoading)
21
+ return (_jsx("div", { className: "flex items-center justify-center", children: _jsx(Spin, {}) }));
22
+ return (_jsxs("div", { className: "overflow-auto", children: [dataFlatten.map((item) => (_jsx(SearchItemAsMessage, { message: item.chatLog, searchTerm: searchTerm, displayTag: item.displayTag }, item.chatLog.clientMsgID))), _jsx("div", { className: "flex justify-center py-2", children: _jsx(Button, { type: "link", loading: isFetchingNextPage, onClick: () => fetchNextPage(), children: t("see_more") }) })] }));
23
+ };
24
+ export default SearchConversationMyInbox;
@@ -4,7 +4,7 @@ import { Icon } from "../icon";
4
4
  import { useIsMobile } from "../../hooks/common/useIsMobile";
5
5
  import useBoolean from "ahooks/lib/useBoolean";
6
6
  import { useTranslation } from "react-i18next";
7
- import { useEffect, useRef, useState } from "react";
7
+ import { useRef, useState } from "react";
8
8
  import SearchMessageOnCurrentConversation from "./SearchMessageOnCurrentConversation";
9
9
  const SearchDrawer = () => {
10
10
  const { t } = useTranslation();
@@ -12,16 +12,16 @@ const SearchDrawer = () => {
12
12
  const [isOpen, { toggle }] = useBoolean(false);
13
13
  const [search, setSearch] = useState("");
14
14
  const isMobile = useIsMobile();
15
- useEffect(() => {
16
- if (isOpen) {
17
- const timer = setTimeout(() => {
18
- var _a;
19
- (_a = searchInputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
20
- }, 100);
21
- return () => clearTimeout(timer);
15
+ const handleDrawerAfterOpenChange = (opened) => {
16
+ if (!opened) {
17
+ return;
22
18
  }
23
- }, [isOpen]);
24
- return (_jsxs("div", { children: [_jsx(Button, { type: "text", shape: "default", className: "text-gray-500 w-8 h-8 p-0", onClick: toggle, children: _jsx(Icon, { icon: "search-o", size: 22 }) }), _jsx(Drawer, { open: isOpen, onClose: toggle, mask: false, closeIcon: false, styles: {
19
+ requestAnimationFrame(() => {
20
+ var _a;
21
+ (_a = searchInputRef.current) === null || _a === void 0 ? void 0 : _a.focus({ preventScroll: true });
22
+ });
23
+ };
24
+ return (_jsxs("div", { className: "inline-flex shrink-0", children: [_jsx(Button, { type: "text", shape: "default", className: "text-gray-500 w-8 h-8 p-0", onClick: toggle, children: _jsx(Icon, { icon: "search-o", size: 22 }) }), _jsx(Drawer, { open: isOpen, onClose: toggle, afterOpenChange: handleDrawerAfterOpenChange, mask: false, closeIcon: false, styles: {
25
25
  body: {
26
26
  padding: 0,
27
27
  height: "100%",
@@ -1 +1 @@
1
- {"version":3,"file":"SearchMessageOnCurrentConversation.d.ts","sourceRoot":"","sources":["../../../src/components/searchConversation/SearchMessageOnCurrentConversation.tsx"],"names":[],"mappings":"AAQA,UAAU,uCAAuC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AACD,QAAA,MAAM,kCAAkC,GACtC,OAAO,uCAAuC,4CAoD/C,CAAC;AAEF,eAAe,kCAAkC,CAAC"}
1
+ {"version":3,"file":"SearchMessageOnCurrentConversation.d.ts","sourceRoot":"","sources":["../../../src/components/searchConversation/SearchMessageOnCurrentConversation.tsx"],"names":[],"mappings":"AAQA,UAAU,uCAAuC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AACD,QAAA,MAAM,kCAAkC,GACtC,OAAO,uCAAuC,4CAuD/C,CAAC;AAEF,eAAe,kCAAkC,CAAC"}
@@ -23,6 +23,6 @@ const SearchMessageOnCurrentConversation = (props) => {
23
23
  return _jsx(Empty, { description: t("no_result") });
24
24
  if (isLoading)
25
25
  return (_jsx("div", { className: "flex items-center justify-center", children: _jsx(Spin, {}) }));
26
- return (_jsx("div", { id: "scrollableVideoDiv", className: "h-full overflow-auto", children: _jsx(InfiniteScroll, { dataLength: dataFlatten.length, next: fetchNextPage, hasMore: hasNextPage, loader: _jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) }), scrollableTarget: "scrollableVideoDiv", children: dataFlatten.map((item) => (_jsx(SearchItemAsMessage, { message: item.chatLog, searchTerm: searchTerm, onClick: props === null || props === void 0 ? void 0 : props.onClose }))) }) }));
26
+ return (_jsx("div", { id: "scrollableCurrentConversationSearchMessages", className: "h-full overflow-auto", children: _jsx(InfiniteScroll, { dataLength: dataFlatten.length, next: fetchNextPage, hasMore: hasNextPage, loader: _jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) }), scrollableTarget: "scrollableCurrentConversationSearchMessages", children: dataFlatten.map((item) => (_jsx(SearchItemAsMessage, { message: item.chatLog, searchTerm: searchTerm, onClick: props === null || props === void 0 ? void 0 : props.onClose }))) }) }));
27
27
  };
28
28
  export default SearchMessageOnCurrentConversation;
@@ -1,5 +1,6 @@
1
1
  export declare enum SearchConversationTabKey {
2
2
  All = "all",
3
+ MyInbox = "myInbox",
3
4
  Users = "users",
4
5
  Messages = "messages"
5
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/searchConversation/index.tsx"],"names":[],"mappings":"AASA,oBAAY,wBAAwB;IAClC,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,QAAQ,aAAa;CACtB;AAED,UAAU,uBAAuB;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AACD,QAAA,MAAM,kBAAkB,GAAI,gBAAgB,uBAAuB,4CA0ClE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/searchConversation/index.tsx"],"names":[],"mappings":"AAUA,oBAAY,wBAAwB;IAClC,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,QAAQ,aAAa;CACtB;AAED,UAAU,uBAAuB;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AACD,QAAA,MAAM,kBAAkB,GAAI,gBAAgB,uBAAuB,4CAgDlE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -4,11 +4,13 @@ import { Tabs } from "antd";
4
4
  import { useMemo, useState } from "react";
5
5
  import { useTranslation } from "react-i18next";
6
6
  import SearchConversationAll from "./SearchAll";
7
+ import SearchConversationMyInbox from "./SearchConversationMyInbox";
7
8
  import SearchConversationAsUsers from "./SearchConversationAsUsers";
8
9
  import SearchConversationAsMessages from "./SearchConversationAsMessages";
9
10
  export var SearchConversationTabKey;
10
11
  (function (SearchConversationTabKey) {
11
12
  SearchConversationTabKey["All"] = "all";
13
+ SearchConversationTabKey["MyInbox"] = "myInbox";
12
14
  SearchConversationTabKey["Users"] = "users";
13
15
  SearchConversationTabKey["Messages"] = "messages";
14
16
  })(SearchConversationTabKey || (SearchConversationTabKey = {}));
@@ -22,6 +24,11 @@ const SearchConversation = ({ searchTerm }) => {
22
24
  label: t("all"),
23
25
  children: (_jsx(SearchConversationAll, { searchTerm: searchTerm, setActiveKey: setActiveKey })),
24
26
  },
27
+ {
28
+ key: SearchConversationTabKey.MyInbox,
29
+ label: t("my_inbox_tab"),
30
+ children: _jsx(SearchConversationMyInbox, { searchTerm: searchTerm }),
31
+ },
25
32
  {
26
33
  key: SearchConversationTabKey.Users,
27
34
  label: t("users"),
@@ -34,6 +41,6 @@ const SearchConversation = ({ searchTerm }) => {
34
41
  },
35
42
  ];
36
43
  }, [t, searchTerm]);
37
- return (_jsx("div", { className: "h-full", children: _jsx(Tabs, { defaultActiveKey: SearchConversationTabKey.All, items: items, className: "h-full", activeKey: activeKey, onChange: (key) => setActiveKey(key) }) }));
44
+ return (_jsx("div", { className: "h-full", children: _jsx(Tabs, { defaultActiveKey: SearchConversationTabKey.All, items: items, className: "h-full", activeKey: activeKey, onChange: (key) => setActiveKey(key), destroyOnHidden: true }) }));
38
45
  };
39
46
  export default SearchConversation;
@@ -4,6 +4,7 @@ interface SearchItemAsMessageProps {
4
4
  isRevoked?: boolean;
5
5
  };
6
6
  searchTerm: string;
7
+ displayTag?: string;
7
8
  onClick?: () => void;
8
9
  }
9
10
  declare const SearchItemAsMessage: (props: SearchItemAsMessageProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"SearchItemAsMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/searchConversation/item/SearchItemAsMessage.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAA4B,MAAM,yBAAyB,CAAC;AAehF,UAAU,wBAAwB;IAChC,OAAO,EAAE,WAAW,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,QAAA,MAAM,mBAAmB,GAAI,OAAO,wBAAwB,4CAkG3D,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"SearchItemAsMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/searchConversation/item/SearchItemAsMessage.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAA4B,MAAM,yBAAyB,CAAC;AAehF,UAAU,wBAAwB;IAChC,OAAO,EAAE,WAAW,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,QAAA,MAAM,mBAAmB,GAAI,OAAO,wBAAwB,4CAuG3D,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -13,7 +13,7 @@ import useAuthStore from "../../../store/auth";
13
13
  const SearchItemAsMessage = (props) => {
14
14
  var _a;
15
15
  const { t } = useTranslation();
16
- const { message, searchTerm = "", onClick } = props;
16
+ const { message, searchTerm = "", displayTag, onClick } = props;
17
17
  const { user } = useChatContext();
18
18
  const isCrm = useAuthStore((state) => state.isCrm);
19
19
  const conversationData = useConversationStore((state) => state.conversationData);
@@ -65,8 +65,8 @@ const SearchItemAsMessage = (props) => {
65
65
  ? message.senderNickname
66
66
  : conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName }), _jsx("span", { className: "text-xs text-gray-500", children: formatTimestamp(message.sendTime, {
67
67
  hasTime: true,
68
- }) })] }), _jsx("div", { className: "flex flex-col flex-1 min-w-0", children: _jsx("span", { className: "text-xs flex-1 text-gray-500 truncate", dangerouslySetInnerHTML: {
69
- __html: sanitizeHtml(highlightSearch(msgContent, searchTerm)),
70
- } }) })] })] }, message.clientMsgID));
68
+ }) })] }), _jsxs("div", { className: "flex flex-col flex-1 min-w-0 gap-1", children: [_jsx("span", { className: "text-xs flex-1 text-gray-500 truncate", dangerouslySetInnerHTML: {
69
+ __html: sanitizeHtml(highlightSearch(msgContent, searchTerm)),
70
+ } }), displayTag && (_jsx("span", { className: "text-[10px] text-blue-600 bg-blue-50 px-1.5 py-0.5 rounded w-fit truncate", children: displayTag }))] })] })] }, message.clientMsgID));
71
71
  };
72
72
  export default SearchItemAsMessage;
@@ -1,3 +1,4 @@
1
+ import { type ReactNode } from "react";
1
2
  interface SupporterInfo {
2
3
  avatar: string;
3
4
  username: string;
@@ -6,9 +7,11 @@ interface SupporterInfo {
6
7
  }
7
8
  interface ManualAssignPopoverProps {
8
9
  sessionId: string;
9
- supporter: SupporterInfo;
10
+ supporter?: SupporterInfo | null;
10
11
  teamId?: string;
12
+ children?: ReactNode;
13
+ excludeCurrentUser?: boolean;
11
14
  }
12
- declare const ManualAssignPopover: ({ sessionId, supporter, teamId: propTeamId, }: ManualAssignPopoverProps) => import("react/jsx-runtime").JSX.Element;
15
+ declare const ManualAssignPopover: ({ sessionId, supporter, teamId: propTeamId, children, excludeCurrentUser, }: ManualAssignPopoverProps) => import("react/jsx-runtime").JSX.Element;
13
16
  export default ManualAssignPopover;
14
17
  //# sourceMappingURL=ManualAssignPopover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ManualAssignPopover.d.ts","sourceRoot":"","sources":["../../../src/components/thread/ManualAssignPopover.tsx"],"names":[],"mappings":"AAiBA,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,wBAAwB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,aAAa,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqDD,QAAA,MAAM,mBAAmB,GAAI,+CAI1B,wBAAwB,4CAmL1B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"ManualAssignPopover.d.ts","sourceRoot":"","sources":["../../../src/components/thread/ManualAssignPopover.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAkBjD,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,wBAAwB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AA8CD,QAAA,MAAM,mBAAmB,GAAI,6EAM1B,wBAAwB,4CA4O1B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}