@tencentcloud/chat-uikit-react 1.2.2 → 2.1.2

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 (255) hide show
  1. package/.eslintrc.js +2 -1
  2. package/CHANGELOG.md +13 -2
  3. package/dist/cjs/components/ConversationCreate/ConversationCreatGroupDetail.js +1 -1
  4. package/dist/cjs/components/ConversationCreate/ConversationCreateUserSelectList.js +1 -1
  5. package/dist/cjs/components/ConversationCreate/hooks/useConversationCreate.js +1 -1
  6. package/dist/cjs/components/ConversationPreview/ConversationPreview.d.ts +2 -0
  7. package/dist/cjs/components/ConversationPreview/ConversationPreview.js +1 -1
  8. package/dist/cjs/components/ConversationPreview/ConversationPreviewContent.js +1 -1
  9. package/dist/cjs/components/ConversationPreview/utils.js +1 -1
  10. package/dist/cjs/components/ConversationSearch/ConversationSearchResult.js +1 -1
  11. package/dist/cjs/components/Icon/config.js +1 -1
  12. package/dist/cjs/components/Icon/images/chats-selected.svg.js +1 -0
  13. package/dist/cjs/components/Icon/images/chats.svg.js +1 -0
  14. package/dist/cjs/components/Icon/images/contacts-selected.svg.js +1 -0
  15. package/dist/cjs/components/Icon/images/contacts.svg.js +1 -0
  16. package/dist/cjs/components/Icon/images/files.png.js +1 -0
  17. package/dist/cjs/components/Icon/images/image.png.js +1 -1
  18. package/dist/cjs/components/Icon/images/video.png.js +1 -1
  19. package/dist/cjs/components/TUIChat/TUIChat.d.ts +5 -0
  20. package/dist/cjs/components/TUIChat/TUIChat.js +1 -1
  21. package/dist/cjs/components/TUIChat/TUIChatState.js +1 -1
  22. package/dist/cjs/components/TUIChat/hooks/useHandleMessage.js +1 -1
  23. package/dist/cjs/components/TUIChat/hooks/useHandleMessageList.js +1 -1
  24. package/dist/cjs/components/TUIChat/unitls.js +1 -1
  25. package/dist/cjs/components/TUIChatHeader/TUIChatHeaderDefault.js +1 -1
  26. package/dist/cjs/components/TUIContact/TUIContact.js +1 -1
  27. package/dist/cjs/components/TUIContact/TUIContactInfo/TUIContactInfo.js +1 -1
  28. package/dist/cjs/components/TUIContact/TUIContactInfo/basicInfo.js +1 -1
  29. package/dist/cjs/components/TUIContact/TUIContactInfo/friendInfo.js +1 -1
  30. package/dist/cjs/components/TUIContact/TUIContactList/TUIContactList.js +1 -1
  31. package/dist/cjs/components/TUIConversation/TUIConversation.js +1 -1
  32. package/dist/cjs/components/TUIConversationList/TUIConversationList.d.ts +1 -0
  33. package/dist/cjs/components/TUIConversationList/TUIConversationList.js +1 -1
  34. package/dist/cjs/components/TUIKit/TUIKit.js +1 -1
  35. package/dist/cjs/components/TUIManage/TUIManage.js +1 -1
  36. package/dist/cjs/components/TUIMessage/MessageBubble.js +1 -1
  37. package/dist/cjs/components/TUIMessage/MessageContext.js +1 -1
  38. package/dist/cjs/components/TUIMessage/MessageCustom.js +1 -1
  39. package/dist/cjs/components/TUIMessage/MessageImage.js +1 -1
  40. package/dist/cjs/components/TUIMessage/MessageName.js +1 -1
  41. package/dist/cjs/components/TUIMessage/MessagePlugins.js +1 -1
  42. package/dist/cjs/components/TUIMessage/MessageRevoke.js +1 -1
  43. package/dist/cjs/components/TUIMessage/MessageSystem.js +1 -1
  44. package/dist/cjs/components/TUIMessage/MessageText.js +1 -1
  45. package/dist/cjs/components/TUIMessage/MessageTip.js +1 -1
  46. package/dist/cjs/components/TUIMessage/MessageVideo.js +1 -1
  47. package/dist/cjs/components/TUIMessage/TUIMessage.js +1 -1
  48. package/dist/cjs/components/TUIMessage/hooks/useMessageHandler.js +1 -1
  49. package/dist/cjs/components/TUIMessage/utils/index.js +1 -1
  50. package/dist/cjs/components/TUIMessageInput/TUIForward.js +1 -1
  51. package/dist/cjs/components/TUIMessageInput/TUIMessageInput.js +1 -1
  52. package/dist/cjs/components/TUIMessageInput/TUIMessageInputDefault.js +1 -1
  53. package/dist/cjs/components/TUIMessageInput/hooks/useEmojiPicker.js +1 -1
  54. package/dist/cjs/components/TUIMessageInput/hooks/useHandleForwardMessage.js +1 -1
  55. package/dist/cjs/components/TUIMessageInput/hooks/useMessageInputText.js +1 -1
  56. package/dist/cjs/components/TUIMessageInput/hooks/useUploadPicker.js +1 -1
  57. package/dist/cjs/components/TUIMessageList/TUIMessageList.js +1 -1
  58. package/dist/cjs/components/TUIProfile/TUIProfileDefault.js +1 -1
  59. package/dist/cjs/components/untils.js +1 -1
  60. package/dist/cjs/constants.js +1 -1
  61. package/dist/cjs/context/ComponentContext.d.ts +2 -0
  62. package/dist/cjs/context/TUIChatActionContext.d.ts +3 -14
  63. package/dist/cjs/context/TUIChatStateContext.d.ts +2 -0
  64. package/dist/cjs/context/TUIConversationContext.js +1 -1
  65. package/dist/cjs/index.css +1 -1
  66. package/dist/cjs/index.d.css +257 -12
  67. package/dist/cjs/index.js +1 -1
  68. package/dist/cjs/locales/en/TUIChat.js +1 -1
  69. package/dist/cjs/locales/en/TUIContact.js +1 -1
  70. package/dist/cjs/locales/en/TUIProfile.js +1 -1
  71. package/dist/cjs/locales/index.js +1 -1
  72. package/dist/cjs/locales/zh_cn/TUIChat.js +1 -1
  73. package/dist/cjs/locales/zh_cn/TUIContact.js +1 -1
  74. package/dist/cjs/locales/zh_cn/TUIProfile.js +1 -1
  75. package/dist/cjs/server.js +1 -0
  76. package/dist/cjs/utils/env.js +1 -0
  77. package/dist/esm/components/ConversationCreate/ConversationCreatGroupDetail.js +1 -1
  78. package/dist/esm/components/ConversationCreate/ConversationCreateUserSelectList.js +1 -1
  79. package/dist/esm/components/ConversationCreate/hooks/useConversationCreate.js +1 -1
  80. package/dist/esm/components/ConversationPreview/ConversationPreview.d.ts +2 -0
  81. package/dist/esm/components/ConversationPreview/ConversationPreview.js +1 -1
  82. package/dist/esm/components/ConversationPreview/ConversationPreviewContent.js +1 -1
  83. package/dist/esm/components/ConversationPreview/utils.js +1 -1
  84. package/dist/esm/components/ConversationSearch/ConversationSearchResult.js +1 -1
  85. package/dist/esm/components/Icon/config.js +1 -1
  86. package/dist/esm/components/Icon/images/chats-selected.svg.js +1 -0
  87. package/dist/esm/components/Icon/images/chats.svg.js +1 -0
  88. package/dist/esm/components/Icon/images/contacts-selected.svg.js +1 -0
  89. package/dist/esm/components/Icon/images/contacts.svg.js +1 -0
  90. package/dist/esm/components/Icon/images/files.png.js +1 -0
  91. package/dist/esm/components/Icon/images/image.png.js +1 -1
  92. package/dist/esm/components/Icon/images/video.png.js +1 -1
  93. package/dist/esm/components/TUIChat/TUIChat.d.ts +5 -0
  94. package/dist/esm/components/TUIChat/TUIChat.js +1 -1
  95. package/dist/esm/components/TUIChat/TUIChatState.js +1 -1
  96. package/dist/esm/components/TUIChat/hooks/useHandleMessage.js +1 -1
  97. package/dist/esm/components/TUIChat/hooks/useHandleMessageList.js +1 -1
  98. package/dist/esm/components/TUIChat/unitls.js +1 -1
  99. package/dist/esm/components/TUIChatHeader/TUIChatHeaderDefault.js +1 -1
  100. package/dist/esm/components/TUIContact/TUIContact.js +1 -1
  101. package/dist/esm/components/TUIContact/TUIContactInfo/TUIContactInfo.js +1 -1
  102. package/dist/esm/components/TUIContact/TUIContactInfo/basicInfo.js +1 -1
  103. package/dist/esm/components/TUIContact/TUIContactInfo/friendInfo.js +1 -1
  104. package/dist/esm/components/TUIContact/TUIContactList/TUIContactList.js +1 -1
  105. package/dist/esm/components/TUIConversation/TUIConversation.js +1 -1
  106. package/dist/esm/components/TUIConversationList/TUIConversationList.d.ts +1 -0
  107. package/dist/esm/components/TUIConversationList/TUIConversationList.js +1 -1
  108. package/dist/esm/components/TUIKit/TUIKit.js +1 -1
  109. package/dist/esm/components/TUIManage/TUIManage.js +1 -1
  110. package/dist/esm/components/TUIMessage/MessageBubble.js +1 -1
  111. package/dist/esm/components/TUIMessage/MessageContext.js +1 -1
  112. package/dist/esm/components/TUIMessage/MessageCustom.js +1 -1
  113. package/dist/esm/components/TUIMessage/MessageImage.js +1 -1
  114. package/dist/esm/components/TUIMessage/MessageName.js +1 -1
  115. package/dist/esm/components/TUIMessage/MessagePlugins.js +1 -1
  116. package/dist/esm/components/TUIMessage/MessageRevoke.js +1 -1
  117. package/dist/esm/components/TUIMessage/MessageSystem.js +1 -1
  118. package/dist/esm/components/TUIMessage/MessageText.js +1 -1
  119. package/dist/esm/components/TUIMessage/MessageTip.js +1 -1
  120. package/dist/esm/components/TUIMessage/MessageVideo.js +1 -1
  121. package/dist/esm/components/TUIMessage/TUIMessage.js +1 -1
  122. package/dist/esm/components/TUIMessage/hooks/useMessageHandler.js +1 -1
  123. package/dist/esm/components/TUIMessage/utils/index.js +1 -1
  124. package/dist/esm/components/TUIMessageInput/TUIForward.js +1 -1
  125. package/dist/esm/components/TUIMessageInput/TUIMessageInput.js +1 -1
  126. package/dist/esm/components/TUIMessageInput/TUIMessageInputDefault.js +1 -1
  127. package/dist/esm/components/TUIMessageInput/hooks/useEmojiPicker.js +1 -1
  128. package/dist/esm/components/TUIMessageInput/hooks/useHandleForwardMessage.js +1 -1
  129. package/dist/esm/components/TUIMessageInput/hooks/useMessageInputText.js +1 -1
  130. package/dist/esm/components/TUIMessageInput/hooks/useUploadPicker.js +1 -1
  131. package/dist/esm/components/TUIMessageList/TUIMessageList.js +1 -1
  132. package/dist/esm/components/TUIProfile/TUIProfileDefault.js +1 -1
  133. package/dist/esm/components/untils.js +1 -1
  134. package/dist/esm/constants.js +1 -1
  135. package/dist/esm/context/ComponentContext.d.ts +2 -0
  136. package/dist/esm/context/TUIChatActionContext.d.ts +3 -14
  137. package/dist/esm/context/TUIChatStateContext.d.ts +2 -0
  138. package/dist/esm/context/TUIConversationContext.js +1 -1
  139. package/dist/esm/index.css +1 -1
  140. package/dist/esm/index.d.css +257 -12
  141. package/dist/esm/index.js +1 -1
  142. package/dist/esm/locales/en/TUIChat.js +1 -1
  143. package/dist/esm/locales/en/TUIContact.js +1 -1
  144. package/dist/esm/locales/en/TUIProfile.js +1 -1
  145. package/dist/esm/locales/index.js +1 -1
  146. package/dist/esm/locales/zh_cn/TUIChat.js +1 -1
  147. package/dist/esm/locales/zh_cn/TUIContact.js +1 -1
  148. package/dist/esm/locales/zh_cn/TUIProfile.js +1 -1
  149. package/dist/esm/server.js +1 -0
  150. package/dist/esm/utils/env.js +1 -0
  151. package/package.json +8 -7
  152. package/rollup.config.js +0 -1
  153. package/scripts/publish-github.js +60 -0
  154. package/scripts/publish-intl-demo.js +14 -0
  155. package/scripts/publish-npm.js +22 -0
  156. package/src/components/Avatar/styles/index.scss +1 -0
  157. package/src/components/ConversationCreate/ConversationCreatGroupDetail.tsx +6 -3
  158. package/src/components/ConversationCreate/ConversationCreateUserSelectList.tsx +5 -1
  159. package/src/components/ConversationCreate/hooks/useConversationCreate.tsx +7 -2
  160. package/src/components/ConversationCreate/styles/conversationGroupTypeInfo.scss +1 -0
  161. package/src/components/ConversationCreate/styles/index.scss +2 -0
  162. package/src/components/ConversationPreview/ConversationPreview.tsx +2 -0
  163. package/src/components/ConversationPreview/ConversationPreviewContent.tsx +57 -9
  164. package/src/components/ConversationPreview/styles/index.scss +4 -2
  165. package/src/components/ConversationPreview/utils.tsx +5 -1
  166. package/src/components/DivWithEdit/styles/index.scss +2 -1
  167. package/src/components/Icon/config.ts +4 -5
  168. package/src/components/Icon/images/chats-selected.svg +6 -0
  169. package/src/components/Icon/images/chats.svg +9 -0
  170. package/src/components/Icon/images/contacts-selected.svg +3 -0
  171. package/src/components/Icon/images/contacts.svg +6 -0
  172. package/src/components/Icon/images/files.png +0 -0
  173. package/src/components/Icon/images/image.png +0 -0
  174. package/src/components/Icon/images/language.svg +3 -0
  175. package/src/components/Icon/images/video.png +0 -0
  176. package/src/components/Model/styles/layout.scss +1 -1
  177. package/src/components/Profile/styles/index.scss +4 -0
  178. package/src/components/TUIChat/TUIChat.tsx +74 -120
  179. package/src/components/TUIChat/TUIChatState.tsx +18 -45
  180. package/src/components/TUIChat/hooks/useHandleMessage.tsx +8 -0
  181. package/src/components/TUIChat/hooks/useHandleMessageList.tsx +2 -41
  182. package/src/components/TUIChat/unitls.ts +0 -29
  183. package/src/components/TUIChatHeader/TUIChatHeaderDefault.tsx +9 -2
  184. package/src/components/TUIContact/TUIContact.tsx +2 -1
  185. package/src/components/TUIContact/TUIContactInfo/TUIContactInfo.tsx +2 -1
  186. package/src/components/TUIContact/TUIContactInfo/basicInfo.tsx +18 -0
  187. package/src/components/TUIContact/TUIContactInfo/friendInfo.tsx +4 -1
  188. package/src/components/TUIContact/TUIContactInfo/index.scss +5 -0
  189. package/src/components/TUIContact/TUIContactList/TUIContactList.tsx +3 -2
  190. package/src/components/TUIContact/TUIContactList/index.scss +5 -0
  191. package/src/components/TUIContact/index.scss +5 -0
  192. package/src/components/TUIConversation/TUIConversation.tsx +1 -4
  193. package/src/components/TUIConversationList/TUIConversationList.tsx +91 -65
  194. package/src/components/TUIConversationList/index.scss +5 -0
  195. package/src/components/TUIKit/TUIKit.tsx +152 -10
  196. package/src/components/TUIKit/styles/h5.scss +34 -0
  197. package/src/components/TUIKit/styles/index.scss +103 -0
  198. package/src/components/TUIKit/styles/reset.scss +20 -0
  199. package/src/components/TUIManage/TUIManage.tsx +59 -35
  200. package/src/components/TUIManage/styles/index.scss +15 -1
  201. package/src/components/TUIMessage/MessageBubble.tsx +20 -3
  202. package/src/components/TUIMessage/MessageCustom.tsx +11 -2
  203. package/src/components/TUIMessage/MessageImage.tsx +2 -1
  204. package/src/components/TUIMessage/MessageName.tsx +1 -1
  205. package/src/components/TUIMessage/MessagePlugins.tsx +4 -2
  206. package/src/components/TUIMessage/MessageRevoke.tsx +2 -2
  207. package/src/components/TUIMessage/MessageText.tsx +25 -3
  208. package/src/components/TUIMessage/MessageVideo.tsx +8 -5
  209. package/src/components/TUIMessage/hooks/useMessageHandler.ts +13 -33
  210. package/src/components/TUIMessage/styles/color.scss +1 -0
  211. package/src/components/TUIMessage/styles/layout.scss +33 -6
  212. package/src/components/TUIMessage/utils/index.ts +1 -1
  213. package/src/components/TUIMessageInput/TUIMessageInputDefault.tsx +2 -2
  214. package/src/components/TUIMessageInput/hooks/useEmojiPicker.tsx +2 -6
  215. package/src/components/TUIMessageInput/hooks/useHandleForwardMessage.tsx +4 -3
  216. package/src/components/TUIMessageInput/hooks/useMessageInputText.tsx +10 -3
  217. package/src/components/TUIMessageInput/hooks/useUploadPicker.tsx +10 -14
  218. package/src/components/TUIMessageInput/styles/color.scss +1 -1
  219. package/src/components/TUIMessageInput/styles/layout.scss +7 -2
  220. package/src/components/TUIMessageList/TUIMessageList.tsx +9 -13
  221. package/src/components/TUIMessageList/index.ts +0 -1
  222. package/src/components/TUIProfile/TUIProfileDefault.tsx +65 -51
  223. package/src/components/TUIProfile/styles/layout.scss +6 -0
  224. package/src/components/untils.ts +9 -0
  225. package/src/constants.ts +9 -1
  226. package/src/context/ComponentContext.tsx +2 -0
  227. package/src/context/TUIChatActionContext.tsx +3 -23
  228. package/src/context/TUIChatStateContext.tsx +2 -0
  229. package/src/context/TUIKitContext.tsx +0 -1
  230. package/src/index.ts +3 -0
  231. package/src/locales/en/TUIChat.ts +2 -1
  232. package/src/locales/en/TUIContact.ts +1 -1
  233. package/src/locales/en/TUIProfile.ts +5 -4
  234. package/src/locales/index.ts +1 -1
  235. package/src/locales/zh_cn/TUIChat.ts +1 -0
  236. package/src/locales/zh_cn/TUIContact.ts +1 -1
  237. package/src/locales/zh_cn/TUIProfile.ts +1 -0
  238. package/src/server.ts +44 -0
  239. package/src/utils/env.ts +5 -0
  240. package/tsconfig.json +1 -0
  241. package/dist/cjs/components/Icon/images/create.png.js +0 -1
  242. package/dist/cjs/components/Icon/images/document.png.js +0 -1
  243. package/dist/cjs/components/TUIChat/hooks/useCreateMessage.d.ts +0 -59
  244. package/dist/cjs/components/TUIChat/hooks/useCreateMessage.js +0 -1
  245. package/dist/cjs/components/TUIChat/hooks/useMessageReceviedListener.js +0 -1
  246. package/dist/cjs/components/TUIMessageList/hooks/useEnrichedMessageList.js +0 -1
  247. package/dist/esm/components/Icon/images/create.png.js +0 -1
  248. package/dist/esm/components/Icon/images/document.png.js +0 -1
  249. package/dist/esm/components/TUIChat/hooks/useCreateMessage.d.ts +0 -59
  250. package/dist/esm/components/TUIChat/hooks/useCreateMessage.js +0 -1
  251. package/dist/esm/components/TUIChat/hooks/useMessageReceviedListener.js +0 -1
  252. package/dist/esm/components/TUIMessageList/hooks/useEnrichedMessageList.js +0 -1
  253. package/src/components/TUIChat/hooks/useCreateMessage.tsx +0 -198
  254. package/src/components/TUIChat/hooks/useMessageReceviedListener.tsx +0 -26
  255. package/src/components/TUIMessageList/hooks/useEnrichedMessageList.tsx +0 -16
@@ -3,9 +3,9 @@
3
3
  position: fixed;
4
4
  z-index: 2;
5
5
  width: 100vw;
6
- height: 100vh;
7
6
  top: 0;
8
7
  left: 0;
8
+ bottom: 0;
9
9
  display: flex;
10
10
  justify-content: center;
11
11
  align-items: center;
@@ -14,6 +14,10 @@
14
14
  font-weight: 600;
15
15
  margin-left: 10px;
16
16
  font-size: 14px;
17
+ text-overflow: ellipsis;
18
+ white-space: nowrap;
19
+ max-width: 200px;
20
+ overflow: hidden;
17
21
  }
18
22
  }
19
23
  }
@@ -2,6 +2,13 @@ import React, {
2
2
  PropsWithChildren, useEffect, useMemo, useReducer, useRef, useState,
3
3
  } from 'react';
4
4
  import { ChatSDK, Conversation, Message } from '@tencentcloud/chat';
5
+ import TUIChatEngine, {
6
+ TUIChatService,
7
+ IMessageModel,
8
+ TUIStore,
9
+ StoreName,
10
+ } from '@tencentcloud/chat-uikit-engine';
11
+ import { JSONStringToParse } from '../untils';
5
12
  import { useTUIKitContext } from '../../context/TUIKitContext';
6
13
  import { TUIChatStateContextProvider } from '../../context/TUIChatStateContext';
7
14
  import { TUIChatActionProvider } from '../../context/TUIChatActionContext';
@@ -20,10 +27,8 @@ import type { MessageContextProps } from '../TUIMessage/MessageContext';
20
27
 
21
28
  import './styles/index.scss';
22
29
  import { CONSTANT_DISPATCH_TYPE } from '../../constants';
23
- import { useMessageReceviedListener } from './hooks/useMessageReceviedListener';
24
30
  import { chatReducer, ChatStateReducer, initialState } from './TUIChatState';
25
31
 
26
- import { useCreateMessage } from './hooks/useCreateMessage';
27
32
  import { useHandleMessageList } from './hooks/useHandleMessageList';
28
33
  import { useHandleMessage } from './hooks/useHandleMessage';
29
34
 
@@ -31,7 +36,6 @@ import { TUIChatHeader as TUIChatHeaderElement } from '../TUIChatHeader';
31
36
  import { MessageListProps, TUIMessageList } from '../TUIMessageList';
32
37
  import { TUIMessageInput as TUIMessageInputElement, TUIMessageInputBasicProps } from '../TUIMessageInput';
33
38
  import { EmptyStateIndicator } from '../EmptyStateIndicator';
34
- import { Toast } from '../Toast';
35
39
 
36
40
  interface TUIChatProps {
37
41
  className?: string,
@@ -44,12 +48,16 @@ interface TUIChatProps {
44
48
  InputPlugins?: React.ComponentType<UnknowPorps>,
45
49
  InputQuote?: React.ComponentType<UnknowPorps>,
46
50
  MessagePlugins?: React.ComponentType<UnknowPorps>,
51
+ MessageCustomPlugins?: React.ComponentType<UnknowPorps>,
52
+ MessageTextPlugins?: React.ComponentType<UnknowPorps>,
47
53
  onMessageRecevied?: (
48
54
  updateMessage: (event?: Array<Message>) => void,
49
55
  event: any,
50
56
  ) => void,
51
57
  sendMessage?: (message:Message, options?:any) => Promise<Message>,
52
58
  revokeMessage?: (message:Message) => Promise<Message>,
59
+ selectedConversation?: (conversation:Conversation) => Promise<Conversation>,
60
+ filterMessage?: (messageList: Array<IMessageModel>) => Array<IMessageModel>,
53
61
  messageConfig?: TUIMessageProps,
54
62
  cloudCustomData?: string,
55
63
  TUIMessageInputConfig?: TUIMessageInputBasicProps,
@@ -100,20 +108,24 @@ function TUIChatInner <T extends TUIChatInnerProps>(
100
108
  InputPlugins,
101
109
  MessagePlugins,
102
110
  MessageContext,
111
+ MessageCustomPlugins,
112
+ MessageTextPlugins,
103
113
  InputQuote,
104
114
  onMessageRecevied,
105
115
  sendMessage: propsSendMessage,
106
116
  revokeMessage,
117
+ selectedConversation,
118
+ filterMessage,
107
119
  messageConfig,
108
120
  cloudCustomData,
109
121
  TUIMessageInputConfig,
110
122
  TUIMessageListConfig,
111
123
  } = props;
112
124
 
113
- const [state, dispatch] = useReducer<ChatStateReducer>(
114
- chatReducer,
115
- { ...initialState, conversation },
116
- );
125
+ const [state, dispatch] = useReducer<ChatStateReducer>(chatReducer, {
126
+ ...initialState,
127
+ conversation,
128
+ });
117
129
 
118
130
  const messageListRef = useRef(null);
119
131
  const textareaRef = useRef<HTMLTextAreaElement>();
@@ -130,27 +142,14 @@ function TUIChatInner <T extends TUIChatInnerProps>(
130
142
  });
131
143
 
132
144
  const {
133
- createTextMessage,
134
- createFaceMessage,
135
- createImageMessage,
136
- createVideoMessage,
137
- createFileMessage,
138
- createForwardMessage,
139
- createCustomMessage,
140
- createAudioMessage,
141
- createTextAtMessage,
142
- createLocationMessage,
143
- createMergerMessage,
144
- } = useCreateMessage({ chat, conversation, cloudCustomData });
145
-
146
- const {
147
- getMessageList,
148
- updateMessage,
149
145
  editLocalMessage,
150
- removeMessage,
151
146
  updateUploadPendingMessageList,
152
147
  } = useHandleMessageList({
153
- chat, conversation, state, dispatch,
148
+ chat,
149
+ conversation,
150
+ state,
151
+ dispatch,
152
+ filterMessage,
154
153
  });
155
154
 
156
155
  const {
@@ -158,99 +157,62 @@ function TUIChatInner <T extends TUIChatInnerProps>(
158
157
  setAudioSource,
159
158
  setVideoSource,
160
159
  setHighlightedMessageId,
160
+ setActiveMessageID,
161
161
  } = useHandleMessage({
162
- state, dispatch,
162
+ state,
163
+ dispatch,
163
164
  });
164
165
 
165
- const sendMessage = async (message: Message, options?:any) => {
166
- updateMessage([message]);
167
- try {
168
- if (propsSendMessage) {
169
- await propsSendMessage(message, options);
170
- } else {
171
- await chat.sendMessage(message, options);
172
- }
173
- editLocalMessage(message);
174
- } catch (error) {
175
- Toast({ text: error, type: 'error' });
176
- editLocalMessage(message);
177
- throw new Error(error);
178
- }
166
+ // 消息 messageList
167
+ useEffect(() => {
168
+ TUIStore.watch(StoreName.CHAT, {
169
+ messageList: onMessageListUpdated,
170
+ isCompleted: isCompletedUpdated,
171
+ });
172
+ return () => {
173
+ TUIStore.unwatch(StoreName.CHAT, {
174
+ messageList: onMessageListUpdated,
175
+ isCompleted: isCompletedUpdated,
176
+ });
177
+ };
178
+ }, []);
179
+
180
+ const onMessageListUpdated = (list: IMessageModel[]) => {
181
+ const messageList = list.filter((message) => !message.isDeleted);
182
+ dispatch({
183
+ type: CONSTANT_DISPATCH_TYPE.SET_MESSAGELIST,
184
+ value: filterMessage ? filterMessage(messageList) : messageList,
185
+ });
179
186
  };
180
187
 
181
- const loadMore = async () => {
182
- if (state.isCompleted) {
188
+ const isCompletedUpdated = (flag: boolean) => {
189
+ if (flag) {
183
190
  dispatch({
184
191
  type: CONSTANT_DISPATCH_TYPE.SET_NO_MORE,
185
- value: true,
192
+ value: flag,
186
193
  });
187
- return;
188
- }
189
- const historyMessageData = await getMessageList({
190
- nextReqMessageID: state.nextReqMessageID,
191
- });
192
- if (!historyMessageData) {
193
- return;
194
194
  }
195
- dispatch({
196
- type: CONSTANT_DISPATCH_TYPE.SET_HISTORY_MESSAGELIST,
197
- value: historyMessageData.data.messageList,
198
- });
199
- dispatch({
200
- type: CONSTANT_DISPATCH_TYPE.SET_IS_COMPLETE,
201
- value: historyMessageData.data.isCompleted,
202
- });
203
- dispatch({
204
- type: CONSTANT_DISPATCH_TYPE.SET_NEXT_REQ_MESSAGE_ID,
205
- value: historyMessageData.data.nextReqMessageID,
206
- });
207
195
  };
208
196
 
209
- useMessageReceviedListener(updateMessage, onMessageRecevied);
197
+ // 加载历史消息 | Load historical messages
198
+ const loadMore = async () => {
199
+ TUIChatService.getMessageList();
200
+ };
210
201
 
211
- useEffect(() => {
212
- (async () => {
213
- const res = await getMessageList();
214
- if (!res) {
215
- return;
216
- }
217
- if (res.data.messageList.length > 0) {
218
- dispatch({
219
- type: CONSTANT_DISPATCH_TYPE.SET_MESSAGELIST,
220
- value: res.data.messageList,
221
- });
222
- }
223
- dispatch({
224
- type: CONSTANT_DISPATCH_TYPE.SET_MESSAGELIST,
225
- value: res.data.messageList,
226
- });
202
+ const setFirstSendMessage = async (message: any) => {
203
+ if (
204
+ !(message.type === 'TIMCustomElem' && JSONStringToParse(message.payload.data)?.src === 7)
205
+ && !state.firstSendMessage
206
+ ) {
227
207
  dispatch({
228
- type: CONSTANT_DISPATCH_TYPE.SET_IS_COMPLETE,
229
- value: res.data.isCompleted,
208
+ type: CONSTANT_DISPATCH_TYPE.SET_FIRST_SEND_MESSAGE,
209
+ value: message,
230
210
  });
231
- dispatch({
232
- type: CONSTANT_DISPATCH_TYPE.SET_NEXT_REQ_MESSAGE_ID,
233
- value: res.data.nextReqMessageID,
234
- });
235
- })();
236
- }, [conversation]);
211
+ }
212
+ };
237
213
 
238
214
  const chatActionContextValue: TUIChatActionContextValue = useMemo(
239
215
  () => ({
240
- sendMessage,
241
- removeMessage,
242
- updateMessage,
243
- createTextMessage,
244
- createFaceMessage,
245
- createImageMessage,
246
- createVideoMessage,
247
- createFileMessage,
248
- createForwardMessage,
249
- createCustomMessage,
250
- createAudioMessage,
251
- createTextAtMessage,
252
- createLocationMessage,
253
- createMergerMessage,
254
216
  editLocalMessage,
255
217
  operateMessage,
256
218
  loadMore,
@@ -258,23 +220,11 @@ function TUIChatInner <T extends TUIChatInnerProps>(
258
220
  setAudioSource,
259
221
  setVideoSource,
260
222
  setHighlightedMessageId,
223
+ setActiveMessageID,
261
224
  updateUploadPendingMessageList,
225
+ setFirstSendMessage,
262
226
  }),
263
227
  [
264
- sendMessage,
265
- removeMessage,
266
- updateMessage,
267
- createTextMessage,
268
- createFaceMessage,
269
- createImageMessage,
270
- createVideoMessage,
271
- createFileMessage,
272
- createForwardMessage,
273
- createCustomMessage,
274
- createAudioMessage,
275
- createTextAtMessage,
276
- createLocationMessage,
277
- createMergerMessage,
278
228
  editLocalMessage,
279
229
  operateMessage,
280
230
  loadMore,
@@ -282,7 +232,9 @@ function TUIChatInner <T extends TUIChatInnerProps>(
282
232
  setAudioSource,
283
233
  setVideoSource,
284
234
  setHighlightedMessageId,
235
+ setActiveMessageID,
285
236
  updateUploadPendingMessageList,
237
+ setFirstSendMessage,
286
238
  ],
287
239
  );
288
240
 
@@ -292,6 +244,8 @@ function TUIChatInner <T extends TUIChatInnerProps>(
292
244
  MessageContext,
293
245
  InputPlugins,
294
246
  MessagePlugins,
247
+ MessageCustomPlugins,
248
+ MessageTextPlugins,
295
249
  TUIChatHeader,
296
250
  TUIMessageInput,
297
251
  InputQuote,
@@ -305,11 +259,11 @@ function TUIChatInner <T extends TUIChatInnerProps>(
305
259
  <TUIChatActionProvider value={chatActionContextValue}>
306
260
  <ComponentProvider value={componentContextValue}>
307
261
  {children || (
308
- <>
309
- <TUIChatHeaderElement />
310
- <TUIMessageList />
311
- <TUIMessageInputElement />
312
- </>
262
+ <>
263
+ <TUIChatHeaderElement />
264
+ <TUIMessageList />
265
+ <TUIMessageInputElement />
266
+ </>
313
267
  )}
314
268
  </ComponentProvider>
315
269
  </TUIChatActionProvider>
@@ -1,13 +1,11 @@
1
1
  import type { Reducer } from 'react';
2
2
  import { Conversation, Message } from '@tencentcloud/chat';
3
+ import { IMessageModel } from '@tencentcloud/chat-uikit-engine';
3
4
  import { CONSTANT_DISPATCH_TYPE } from '../../constants';
4
5
  import type { TUIChatStateContextValue } from '../../context';
5
6
  import { OperateMessageParams } from './hooks/useHandleMessage';
6
7
  import {
7
- handleMessage,
8
- handleMessageList,
9
8
  handleEditMessage,
10
- handleRemoveMessage,
11
9
  handleUploadPendingMessage,
12
10
  } from './unitls';
13
11
 
@@ -18,30 +16,13 @@ export type ChatStateReducerAction =
18
16
  }
19
17
  | {
20
18
  type: CONSTANT_DISPATCH_TYPE.SET_MESSAGELIST,
21
- value?: Array<Message>,
22
- }
23
- | {
24
- type: CONSTANT_DISPATCH_TYPE.SET_UPDATE_MESSAGE,
25
- value?: Array<Message>,
26
- index?: number
19
+ value?: Array<IMessageModel>,
27
20
  }
28
21
  | {
29
22
  type: CONSTANT_DISPATCH_TYPE.SET_EDIT_MESSAGE,
30
23
  value?: Message,
31
24
  index?: number,
32
25
  }
33
- | {
34
- type: CONSTANT_DISPATCH_TYPE.SET_REMOVE_MESSAGE,
35
- value?: Message
36
- }
37
- | {
38
- type: CONSTANT_DISPATCH_TYPE.SET_HISTORY_MESSAGELIST,
39
- value?: Array<Message>,
40
- }
41
- | {
42
- type: CONSTANT_DISPATCH_TYPE.SET_NEXT_REQ_MESSAGE_ID,
43
- value?: string,
44
- }
45
26
  | {
46
27
  type: CONSTANT_DISPATCH_TYPE.SET_IS_COMPLETE,
47
28
  value?: boolean,
@@ -73,6 +54,14 @@ export type ChatStateReducerAction =
73
54
  type: CONSTANT_DISPATCH_TYPE.UPDATE_UPLOAD_PENDING_MESSAGE_LIST,
74
55
  value?: Message,
75
56
  }
57
+ | {
58
+ type: CONSTANT_DISPATCH_TYPE.SET_FIRST_SEND_MESSAGE;
59
+ value?: Message;
60
+ }
61
+ | {
62
+ type: CONSTANT_DISPATCH_TYPE.SET_ACTIVE_MESSAGE_ID,
63
+ value?: string,
64
+ };
76
65
  export type ChatStateReducer = Reducer<TUIChatStateContextValue, ChatStateReducerAction>;
77
66
 
78
67
  export const chatReducer = (
@@ -82,38 +71,17 @@ export const chatReducer = (
82
71
  switch (action?.type) {
83
72
  case CONSTANT_DISPATCH_TYPE.SET_CONVERSATION_PRPFILE:
84
73
  return { ...state, conversation: action.value };
74
+ // messageList 设置
85
75
  case CONSTANT_DISPATCH_TYPE.SET_MESSAGELIST:
86
76
  return {
87
77
  ...state,
88
- ...handleMessageList(
89
- [...state.messageList.concat(
90
- handleMessage(action.value).filter((item) => !state.messageList.includes(item)),
91
- )],
92
- state,
93
- ),
94
- };
95
- case CONSTANT_DISPATCH_TYPE.SET_UPDATE_MESSAGE:
96
- return {
97
- ...state,
98
- ...handleMessageList([...state.messageList, ...handleMessage(action.value)], state),
78
+ messageList: action.value,
99
79
  };
100
80
  case CONSTANT_DISPATCH_TYPE.SET_EDIT_MESSAGE:
101
81
  return {
102
82
  ...state,
103
83
  messageList: [...handleEditMessage(state.messageList, action.value)],
104
84
  };
105
- case CONSTANT_DISPATCH_TYPE.SET_REMOVE_MESSAGE:
106
- return {
107
- ...state,
108
- messageList: [...handleRemoveMessage(state.messageList, action.value)],
109
- };
110
- case CONSTANT_DISPATCH_TYPE.SET_HISTORY_MESSAGELIST:
111
- return {
112
- ...state,
113
- ...handleMessageList([...handleMessage(action.value), ...state.messageList], state),
114
- };
115
- case CONSTANT_DISPATCH_TYPE.SET_NEXT_REQ_MESSAGE_ID:
116
- return { ...state, nextReqMessageID: action.value };
117
85
  case CONSTANT_DISPATCH_TYPE.SET_IS_COMPLETE:
118
86
  return { ...state, isCompleted: action.value };
119
87
  case CONSTANT_DISPATCH_TYPE.RESET:
@@ -135,7 +103,10 @@ export const chatReducer = (
135
103
  ...handleUploadPendingMessage(state.uploadPendingMessageList, action.value),
136
104
  ],
137
105
  };
138
- default: return state;
106
+ case CONSTANT_DISPATCH_TYPE.SET_FIRST_SEND_MESSAGE:
107
+ return { ...state, firstSendMessage: action.value };
108
+ case CONSTANT_DISPATCH_TYPE.SET_ACTIVE_MESSAGE_ID:
109
+ return { ...state, activeMessageID: action.value };
139
110
  }
140
111
  };
141
112
 
@@ -153,4 +124,6 @@ export const initialState:TUIChatStateContextValue = {
153
124
  audioSource: null,
154
125
  vidoeSource: null,
155
126
  uploadPendingMessageList: [],
127
+ firstSendMessage: null,
128
+ activeMessageID: '',
156
129
  };
@@ -48,10 +48,18 @@ export function useHandleMessage<T extends CreateMessageProps>(props:T) {
48
48
  });
49
49
  }, [dispatch]);
50
50
 
51
+ const setActiveMessageID = useCallback((messageID: string) => {
52
+ dispatch({
53
+ type: CONSTANT_DISPATCH_TYPE.SET_ACTIVE_MESSAGE_ID,
54
+ value: messageID,
55
+ });
56
+ }, [dispatch]);
57
+
51
58
  return {
52
59
  operateMessage,
53
60
  setAudioSource,
54
61
  setVideoSource,
55
62
  setHighlightedMessageId,
63
+ setActiveMessageID,
56
64
  };
57
65
  }
@@ -9,6 +9,7 @@ export interface CreateMessageProps {
9
9
  conversation?: Conversation,
10
10
  state?: TUIChatStateContextValue,
11
11
  dispatch?: Dispatch<ChatStateReducerAction>,
12
+ filterMessage: any
12
13
  }
13
14
 
14
15
  export interface GetMessageListProps{
@@ -22,46 +23,9 @@ export function useHandleMessageList<T extends CreateMessageProps>(props:T) {
22
23
  conversation,
23
24
  state,
24
25
  dispatch,
26
+ filterMessage,
25
27
  } = props;
26
28
 
27
- const { conversationID, groupProfile, type } = conversation;
28
- const isC2CConversation = type === TencentCloudChat.TYPES.CONV_C2C;
29
-
30
- const basicConfig = {
31
- conversationID,
32
- };
33
-
34
- const getMessageList = useCallback(async (params?: GetMessageListProps) => {
35
- const data = params || {};
36
- let groupType;
37
- if (groupProfile) {
38
- groupType = groupProfile.type;
39
- }
40
- if (isC2CConversation || (groupType !== TencentCloudChat.TYPES.GRP_AVCHATROOM)) {
41
- return chat.getMessageList({
42
- ...basicConfig,
43
- ...data,
44
- });
45
- }
46
- return null;
47
- }, [chat]);
48
-
49
- const updateMessage = useCallback((messageList: Array<Message>) => {
50
- dispatch({
51
- type: CONSTANT_DISPATCH_TYPE.SET_UPDATE_MESSAGE,
52
- value: messageList.filter((item) => (
53
- item?.conversationID === conversationID
54
- )),
55
- });
56
- }, [dispatch]);
57
-
58
- const removeMessage = useCallback((message: Message) => {
59
- dispatch({
60
- type: CONSTANT_DISPATCH_TYPE.SET_REMOVE_MESSAGE,
61
- value: message,
62
- });
63
- }, [dispatch]);
64
-
65
29
  const editLocalMessage = useCallback((message: Message) => {
66
30
  dispatch({
67
31
  type: CONSTANT_DISPATCH_TYPE.SET_EDIT_MESSAGE,
@@ -77,9 +41,6 @@ export function useHandleMessageList<T extends CreateMessageProps>(props:T) {
77
41
  }, [dispatch]);
78
42
 
79
43
  return {
80
- getMessageList,
81
- updateMessage,
82
- removeMessage,
83
44
  editLocalMessage,
84
45
  updateUploadPendingMessageList,
85
46
  };
@@ -1,6 +1,5 @@
1
1
  import TencentCloudChat, { Message } from '@tencentcloud/chat';
2
2
  import constant from '../../constants';
3
- import type { TUIChatStateContextValue } from '../../context';
4
3
  import { JSONStringToParse } from '../untils';
5
4
 
6
5
  export const handleMessage = (messageList:Array<Message>):Array<Message> => {
@@ -16,24 +15,6 @@ export const handleMessage = (messageList:Array<Message>):Array<Message> => {
16
15
  });
17
16
  };
18
17
 
19
- export const handleMessageList = (
20
- list:Array<Message>,
21
- state:TUIChatStateContextValue,
22
- ) => {
23
- const data = {
24
- messageList: [],
25
- lastMessageID: '',
26
- isSameLastMessageID: false,
27
- };
28
- data.messageList = list;
29
- if (data.messageList.length >= 1) {
30
- data.lastMessageID = data?.messageList[data.messageList.length - 1]?.ID;
31
- }
32
- data.messageList = data.messageList.filter((item) => !item?.isDeleted);
33
- data.isSameLastMessageID = data?.lastMessageID === state?.lastMessageID;
34
- return data;
35
- };
36
-
37
18
  export const handleEditMessage = (
38
19
  messageList: Array<Message>,
39
20
  message: Message,
@@ -44,16 +25,6 @@ export const handleEditMessage = (
44
25
  return list;
45
26
  };
46
27
 
47
- export const handleRemoveMessage = (
48
- messageList: Array<Message>,
49
- message: Message,
50
- ) => {
51
- const list = [...messageList];
52
- const index = list.findIndex((item) => item?.ID === message?.ID);
53
- list.splice(index, 1);
54
- return list;
55
- };
56
-
57
28
  export const handleUploadPendingMessage = (
58
29
  messageList: Array<Message>,
59
30
  message: Message,
@@ -1,8 +1,9 @@
1
1
  import React, { PropsWithChildren, useEffect, useState } from 'react';
2
2
  import TencentCloudChat, { Conversation, Group, Profile } from '@tencentcloud/chat';
3
+ import { TUIConversationService } from '@tencentcloud/chat-uikit-engine';
3
4
  import { Avatar } from '../Avatar';
4
5
  import { handleDisplayAvatar } from '../untils';
5
-
6
+ import { isH5 } from '../../utils/env';
6
7
  import './styles/index.scss';
7
8
  import { Icon, IconTypes } from '../Icon';
8
9
  import { useTUIKitContext } from '../../context';
@@ -31,7 +32,7 @@ function TUIChatHeaderDefaultWithContext <T extends TUIChatHeaderBasicProps>(
31
32
  isLive,
32
33
  opateIcon,
33
34
  } = props;
34
-
35
+ const { setActiveContact } = useTUIKitContext('TUIContact');
35
36
  const [title, setTitle] = useState(propTitle);
36
37
  const [avatar, setAvatar] = useState<React.ReactElement | string>('');
37
38
 
@@ -76,6 +77,11 @@ function TUIChatHeaderDefaultWithContext <T extends TUIChatHeaderBasicProps>(
76
77
  />);
77
78
  }
78
79
  };
80
+
81
+ const back = () => {
82
+ TUIConversationService.switchConversation('');
83
+ setActiveContact();
84
+ };
79
85
  const { setTUIManageShow } = useTUIKitContext();
80
86
  const openTUIManage = () => {
81
87
  setTUIManageShow(true);
@@ -86,6 +92,7 @@ function TUIChatHeaderDefaultWithContext <T extends TUIChatHeaderBasicProps>(
86
92
  className={`tui-chat-header ${isLive ? 'tui-chat-live-header' : ''}`}
87
93
  key={conversation?.conversationID}
88
94
  >
95
+ {isH5 && (<div style={{ paddingRight: '10px' }}><Icon onClick={back} type={IconTypes.BACK} width={9} height={16} /></div>)}
89
96
  <div
90
97
  className={`tui-chat-header-left ${conversation?.type === TencentCloudChat.TYPES.CONV_SYSTEM ? 'system' : ''}`}
91
98
  >
@@ -4,6 +4,7 @@ import {
4
4
  TUIContactContextProvider,
5
5
  TUIContactContextValue,
6
6
  } from '../../context/TUIContactContext';
7
+ import { isH5 } from '../../utils/env';
7
8
  import { useTUIKitContext } from '../../context';
8
9
  import useTUIContact from './hooks/useTUIContact';
9
10
  import { TUIContactList } from './TUIContactList/TUIContactList';
@@ -55,7 +56,7 @@ export function UnMemoizedTUIContact<T>(
55
56
  return (
56
57
  <TUIContactContextProvider value={TUIContactValue}>
57
58
  {children || (
58
- <div className="tui-contacts">
59
+ <div className={`tui-contacts ${isH5 ? 'tui-contacts-h5' : ''} `}>
59
60
  {!isShowAddFriend && (
60
61
  <>
61
62
  <div className="tui-contacts-header">
@@ -2,6 +2,7 @@ import React, {
2
2
  PropsWithChildren,
3
3
  } from 'react';
4
4
  import { useTUIKitContext } from '../../../context';
5
+ import { isH5 } from '../../../utils/env';
5
6
  import { FriendInfo } from './friendInfo';
6
7
  import { BlockInfo } from './blockInfo';
7
8
  import { AddFriendInfo } from './addFriendInfo';
@@ -21,7 +22,7 @@ export function UnMemoizedTUIContactInfo<T extends TUIContactInfoProps>(
21
22
  return (<> </>);
22
23
  }
23
24
  return (
24
- <div className="tui-contact-info">
25
+ <div className={`tui-contact-info ${isH5 ? 'tui-contact-info-h5' : ''} `}>
25
26
  {contactData?.type === 'addFriend' && (<AddFriendInfo profile={contactData?.data} />)}
26
27
  {contactData?.type === 'friend' && (<FriendInfo openChat={showChat} friend={contactData?.data} />)}
27
28
  {contactData?.type === 'block' && (<BlockInfo profile={contactData?.data} />)}