@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
@@ -7,3 +7,106 @@
7
7
  background-color: #FFFFFF;
8
8
  text-align: initial;
9
9
  }
10
+ .sample-chat {
11
+ position:relative;
12
+ margin: 0 auto;
13
+ width: calc(100% - 20rem);
14
+ min-width: 850px;
15
+ height: 86%;
16
+ box-sizing: border-box;
17
+ border-radius: 12px;
18
+ overflow: hidden;
19
+ &-profile {
20
+ position: absolute;
21
+ top: 0;
22
+ z-index: 1;
23
+ }
24
+ &-left-container {
25
+ max-width: 360px;
26
+ min-width: 360px;
27
+ display: flex;
28
+ flex-direction: column;
29
+ }
30
+ &-tab {
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: space-around;
34
+ margin: 12px;
35
+ }
36
+ &-tab-container {
37
+ display: flex;
38
+ flex-direction: column;
39
+ align-items: center;
40
+ justify-content: center;
41
+ cursor: pointer;
42
+ }
43
+ &-tab-text {
44
+ font-size: 15px;
45
+ line-height: 25px;
46
+ text-align: center;
47
+ }
48
+ &-tab-active {
49
+ color: #147AFF;
50
+ }
51
+ }
52
+ .tuikit-container {
53
+ display: flex;
54
+ height: 100%;
55
+ position: relative;
56
+ text-align: initial;
57
+ box-shadow: 0 11px 20px 0 rgba(0,0,0,.3);
58
+ }
59
+ .tui-chat-default {
60
+ width: 100%;
61
+ height: 100%;
62
+ background-size: cover;
63
+ background-position-x: -17px;
64
+ background-position-y: 173px;
65
+ padding: 100px 40px 0;
66
+ header {
67
+ display: flex;
68
+ align-items: center;
69
+ font-size: 1.75rem;
70
+ font-family: PingFangSC-Medium;
71
+ font-weight: 500;
72
+ color: #000;
73
+ letter-spacing: 0;
74
+ img {
75
+ width: 32px;
76
+ margin: 0 10px;
77
+ }
78
+ }
79
+ .content {
80
+ max-width: 393px;
81
+ font-size: 16px;
82
+ line-height: 24px;
83
+ font-family: PingFangSC-Regular;
84
+ font-weight: 400;
85
+ color: #666;
86
+ letter-spacing: 0;
87
+ padding: 36px 0 20px;
88
+ }
89
+ .link {
90
+ font-size: 14px;
91
+ line-height: 20px;
92
+ font-family: PingFangSC-Regular;
93
+ font-weight: 400;
94
+ color: #666;
95
+ letter-spacing: 0;
96
+ a {
97
+ font-family: PingFangSC-Regular;
98
+ font-weight: 400;
99
+ color: #006eff;
100
+ letter-spacing: 0;
101
+ text-decoration: none;
102
+ padding: 0 5px;
103
+ }
104
+ }
105
+ }
106
+
107
+
108
+ body {
109
+ #webpack-dev-server-client-overlay {
110
+ display: none !important;
111
+ }
112
+ }
@@ -45,3 +45,23 @@ table {
45
45
  border-collapse: collapse;
46
46
  border-spacing: 0;
47
47
  }
48
+ html, body {
49
+ height: 100%;
50
+ width: 100%;
51
+ margin: 0;
52
+ -webkit-text-size-adjust: 100%;
53
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
54
+ }
55
+ *{
56
+ -webkit-touch-callout:none;
57
+ -webkit-user-select:none;
58
+ -khtml-user-select:none;
59
+ -moz-user-select:none;
60
+ -ms-user-select:none;
61
+ user-select:none;
62
+ }
63
+ .text-ellipsis {
64
+ text-overflow: ellipsis;
65
+ white-space: nowrap;
66
+ overflow: hidden;
67
+ }
@@ -5,6 +5,7 @@ import { Icon, IconTypes } from '../Icon';
5
5
  import { Avatar, defaultGroupAvatarWork, defaultUserAvatar } from '../Avatar';
6
6
  import { Switch } from '../Switch';
7
7
  import { useTUIKitContext } from '../../context';
8
+ import { isH5, isPC } from '../../utils/env';
8
9
  import { getMessageProfile } from '../ConversationPreview/utils';
9
10
  import { useConversationUpdate } from '../TUIConversationList/hooks/useConversationUpdate';
10
11
  import { useConversation } from '../../hooks';
@@ -46,43 +47,66 @@ export function TUIManage() {
46
47
  setIsPinned(activeConversation ? activeConversation.isPinned : false);
47
48
  }, [activeConversation, forceUpdateCount]);
48
49
 
49
- return TUIManageShow && activeConversation && (
50
- <div className="tui-manage">
51
- <div className="tui-manage-title">
52
- <Icon type={IconTypes.CANCEL} width={16} height={16} onClick={close} />
53
- <span>{t('TUIConversation.Conversation Information')}</span>
54
- </div>
55
- <div className="tui-manage-container">
56
- <div className="tui-manage-info">
57
- <div className="info-avatar">
58
- <Avatar
59
- size={64}
60
- image={
61
- profile?.avatar || (profile?.groupID ? defaultGroupAvatarWork : defaultUserAvatar)
62
- }
63
- />
50
+ return (
51
+ TUIManageShow
52
+ && activeConversation && (
53
+ <div className={`tui-manage ${isH5 ? 'tui-h5-manage' : ''}`}>
54
+ <div className="tui-manage-title">
55
+ {isPC && (
56
+ <Icon
57
+ onClick={close}
58
+ type={IconTypes.CANCEL}
59
+ width={9}
60
+ height={16}
61
+ />
62
+ )}
63
+ {isH5 && (
64
+ <Icon onClick={close} type={IconTypes.BACK} width={9} height={16} />
65
+ )}
66
+ <span style={{ marginLeft: '10px' }}>
67
+ {t('TUIConversation.Conversation Information')}
68
+ </span>
64
69
  </div>
65
- <div className="info-name">
66
- {profile?.nick || profile?.name}
67
- </div>
68
- <div className="info-id">
69
- ID:
70
- {profile?.userID || profile?.groupID}
71
- </div>
72
- </div>
73
- <div className="tui-manage-handle">
74
- <div className="manage-handle-box">
75
- <div className="manage-handle-title">{t('TUIConversation.Pin')}</div>
76
- <Switch
77
- onChange={pinChatChange}
78
- checked={isPinned}
79
- />
80
- </div>
81
- <div className="manage-handle-box" role="presentation" onClick={handleDelete}>
82
- <div className="manage-handle-title red">{t('TUIConversation.Delete')}</div>
70
+ <div className="tui-manage-container">
71
+ <div className="tui-manage-info">
72
+ <div className="info-avatar">
73
+ <Avatar
74
+ size={64}
75
+ image={
76
+ profile?.avatar
77
+ || (profile?.groupID
78
+ ? defaultGroupAvatarWork
79
+ : defaultUserAvatar)
80
+ }
81
+ />
82
+ </div>
83
+ <div className="info-name">{profile?.nick || profile?.name}</div>
84
+ <div className="info-id">
85
+ ID:
86
+ {profile?.userID || profile?.groupID}
87
+ </div>
88
+ </div>
89
+ <div className="tui-manage-handle">
90
+ <div className="manage-handle-box">
91
+ <div className="manage-handle-title">
92
+ {t('TUIConversation.Pin')}
93
+ </div>
94
+ <Switch onChange={pinChatChange} checked={isPinned} />
95
+ </div>
96
+ {isPC && (
97
+ <div
98
+ className="manage-handle-box"
99
+ role="presentation"
100
+ onClick={handleDelete}
101
+ >
102
+ <div className="manage-handle-title red">
103
+ {t('TUIConversation.Delete')}
104
+ </div>
105
+ </div>
106
+ )}
107
+ </div>
83
108
  </div>
84
109
  </div>
85
- </div>
86
- </div>
110
+ )
87
111
  );
88
112
  }
@@ -13,7 +13,7 @@
13
13
  align-items: center;
14
14
  padding: 24px 20px;
15
15
  span {
16
- margin-left: 10px;
16
+ margin-right: 10px;
17
17
  font-weight: 700;
18
18
  font-size: 14px;
19
19
  font-family: PingFangSC-Medium;
@@ -69,3 +69,17 @@
69
69
  }
70
70
  }
71
71
  }
72
+
73
+ .tui-manage.tui-h5-manage {
74
+ border-left: 1px solid #f9fafb;
75
+ display: flex;
76
+ flex-direction: column;
77
+ position: absolute;
78
+ top: 0;
79
+ bottom: 0;
80
+ width: 100%;
81
+ max-width: 100%;
82
+ min-width: 100%;
83
+ z-index: 1;
84
+ background: #fff;
85
+ }
@@ -1,11 +1,12 @@
1
1
  import React, {
2
2
  PropsWithChildren,
3
3
  ReactNode,
4
+ useEffect,
4
5
  useState,
5
6
  } from 'react';
6
7
  import TencentCloudChat, { Message } from '@tencentcloud/chat';
7
8
  import { MESSAGE_STATUS } from '../../constants';
8
- import { useTUIChatActionContext } from '../../context';
9
+ import { useTUIChatActionContext, useTUIChatStateContext } from '../../context';
9
10
  import { Icon, IconTypes } from '../Icon';
10
11
  import { useMessageReply } from './hooks/useMessageReply';
11
12
  import { MessageProgress } from './MessageProgress';
@@ -36,7 +37,8 @@ function MessageBubbleWithContext <T extends MessageBubbleProps>(
36
37
  sender,
37
38
  } = useMessageReply({ message });
38
39
 
39
- const { setHighlightedMessageId } = useTUIChatActionContext('MessageBubbleWithContext');
40
+ const { setHighlightedMessageId, setActiveMessageID } = useTUIChatActionContext('MessageBubbleWithContext');
41
+ const { activeMessageID } = useTUIChatStateContext('MessageBubbleWithContext');
40
42
 
41
43
  const handleLoading = () => !!((
42
44
  message?.type === TencentCloudChat.TYPES.MSG_IMAGE
@@ -45,12 +47,24 @@ function MessageBubbleWithContext <T extends MessageBubbleProps>(
45
47
  ) && message?.status === MESSAGE_STATUS.UNSEND);
46
48
 
47
49
  const handleMouseEnter = () => {
50
+ setActiveMessageID(message.ID);
48
51
  setPluginsShow(true);
49
52
  };
50
53
  const handleMouseLeave = () => {
54
+ setActiveMessageID(message.ID);
51
55
  setPluginsShow(false);
52
56
  };
53
57
 
58
+ const activeMessage = () => {
59
+ setActiveMessageID(message.ID);
60
+ };
61
+
62
+ useEffect(() => {
63
+ if (activeMessageID !== message.ID) {
64
+ setPluginsShow(false);
65
+ }
66
+ }, [activeMessageID]);
67
+
54
68
  const handleReplyMessage = () => {
55
69
  setHighlightedMessageId(replyMessage?.ID);
56
70
  };
@@ -59,8 +73,11 @@ function MessageBubbleWithContext <T extends MessageBubbleProps>(
59
73
  <div className="meesage-bubble">
60
74
  <div
61
75
  className={`meesage-bubble-context ${message?.flow}`}
76
+ role="button"
77
+ tabIndex={0}
62
78
  onMouseEnter={handleMouseEnter}
63
79
  onMouseLeave={handleMouseLeave}
80
+ onClick={activeMessage}
64
81
  >
65
82
  <div
66
83
  className={
@@ -88,7 +105,7 @@ function MessageBubbleWithContext <T extends MessageBubbleProps>(
88
105
  {
89
106
  Plugins && (
90
107
  <div className="message-plugin">
91
- {PluginsShow && <Plugins />}
108
+ {PluginsShow && <Plugins message={message} />}
92
109
  </div>
93
110
  )
94
111
  }
@@ -1,7 +1,9 @@
1
1
  import React, { PropsWithChildren } from 'react';
2
2
  import TencentCloudChat from '@tencentcloud/chat';
3
+ import { useTranslation } from 'react-i18next';
3
4
  import { JSONStringToParse } from '../untils';
4
5
  import type { MessageContextProps } from './MessageText';
6
+ import { useComponentContext } from '../../context';
5
7
 
6
8
  function MessageCustomWithContext <T extends MessageContextProps>(
7
9
  props: PropsWithChildren<T>,
@@ -11,7 +13,8 @@ function MessageCustomWithContext <T extends MessageContextProps>(
11
13
  message,
12
14
  children,
13
15
  } = props;
14
-
16
+ const { t } = useTranslation();
17
+ const { MessageCustomPlugins } = useComponentContext('MessageCustom');
15
18
  const handleContext = (data) => {
16
19
  if (data.data === 'Hyperlink') {
17
20
  const extension = JSONStringToParse(data?.extension);
@@ -32,7 +35,13 @@ function MessageCustomWithContext <T extends MessageContextProps>(
32
35
  if (data.data === 'group_create') {
33
36
  return `${message?.nick || message?.from} Create a group`;
34
37
  }
35
- return data.extension;
38
+ const botMessage = JSONStringToParse(data.data);
39
+ if (botMessage?.chatbotPlugin === 1 && botMessage?.src === 15 && (botMessage?.subtype === 'welcome_msg' || botMessage?.subtype === 'clarify_msg')) {
40
+ return (
41
+ <MessageCustomPlugins data={JSONStringToParse(data.data).content} />
42
+ );
43
+ }
44
+ return `[${t('TUIChat.Custom message')}]`;
36
45
  };
37
46
 
38
47
  return (
@@ -1,5 +1,6 @@
1
1
  import React, { PropsWithChildren, useState } from 'react';
2
2
  import TencentCloudChat from '@tencentcloud/chat';
3
+ import { isH5 } from '../../utils/env';
3
4
  import { Model } from '../Model';
4
5
  import type { MessageContextProps } from './MessageText';
5
6
 
@@ -19,7 +20,7 @@ function MessageImageWithContext <T extends MessageContextProps>(
19
20
  return (
20
21
  <div className="message-image">
21
22
  <div role="button" tabIndex={0} onClick={() => { setShow(true); }}>
22
- <img className={`img bubble-${message.flow} ${message?.conversationType === TencentCloudChat.TYPES.CONV_GROUP ? 'group' : ''}`} src={context.url} alt="" />
23
+ <img className={`img ${isH5 ? 'img-h5' : ''} bubble-${message.flow} ${message?.conversationType === TencentCloudChat.TYPES.CONV_GROUP ? 'group' : ''}`} src={context.url} alt="" />
23
24
  </div>
24
25
  {children}
25
26
  {
@@ -34,7 +34,7 @@ export function MessageName <T extends MessageNameProps>(
34
34
  }
35
35
 
36
36
  return (
37
- <label htmlFor="content" className="name">
37
+ <label htmlFor="content" className="text-ellipsis name">
38
38
  {message?.nick || message?.from}
39
39
  </label>
40
40
  );
@@ -90,10 +90,12 @@ export function MessagePlugins <T extends MessagePluginsProps>(
90
90
 
91
91
  const handleVisible = (data) => {
92
92
  if (data.x && data.y) {
93
+ const isTop = data.y < data.height ? true : data.top;
94
+ const isLeft = data.x < data.width ? true : data.left;
93
95
  setPopStyle({
94
96
  position: 'fixed',
95
- left: `${!data.left ? (data.x - data.width) : data.x}px`,
96
- top: `${!data.top ? (data.y - data.height) : data.y}px`,
97
+ left: `${isLeft ? data.x : (data.x - data.width)}px`,
98
+ top: `${isTop ? data.y : (data.y - data.height)}px`,
97
99
  });
98
100
  }
99
101
  };
@@ -26,9 +26,9 @@ function MessageRevokeWithContext <T extends MessageContextProps>(
26
26
  message?.flow === MESSAGE_FLOW.IN && <span>{message?.nick || message?.from}</span>
27
27
  }
28
28
  {
29
- message?.flow !== MESSAGE_FLOW.IN && <span>{t('TUIChat.You')}</span>
29
+ message?.flow !== MESSAGE_FLOW.IN && <span style={{ marginRight: '5px' }}>{t('TUIChat.You')}</span>
30
30
  }
31
- <span>{t('TUIChat.recalled a message')}</span>
31
+ <span style={{ marginRight: '5px' }}>{t('TUIChat.recalled a message')}</span>
32
32
  {
33
33
  message?.flow === MESSAGE_FLOW.OUT
34
34
  && message?.type === TencentCloudChat.TYPES.MSG_TEXT
@@ -1,6 +1,6 @@
1
1
  import React, { PropsWithChildren } from 'react';
2
2
  import TencentCloudChat, { Message } from '@tencentcloud/chat';
3
- import { UnknowPorps } from '../../context';
3
+ import { UnknowPorps, useTUIChatStateContext, useComponentContext } from '../../context';
4
4
 
5
5
  export interface MessageContextProps {
6
6
  context?: UnknowPorps,
@@ -16,14 +16,36 @@ function MessageTextWithContext <T extends MessageContextProps>(
16
16
  message,
17
17
  children,
18
18
  } = props;
19
-
19
+ const { MessageTextPlugins } = useComponentContext('MessageText');
20
+ const { firstSendMessage } = useTUIChatStateContext('MessageText');
21
+ if (MessageTextPlugins && message.flow === 'in' && (firstSendMessage?.time <= message?.time)) {
22
+ return (
23
+ <div className={`bubble message-text bubble-${message.flow} ${message?.conversationType === TencentCloudChat.TYPES.CONV_GROUP ? 'group' : ''}`}>
24
+ <MessageTextPlugins data={message} />
25
+ </div>
26
+ );
27
+ }
28
+ const urlToLink = function (text: string) {
29
+ if (!text) {
30
+ return text;
31
+ }
32
+ // eslint-disable-next-line no-useless-escape
33
+ const urlRegex = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
34
+ return text.replace(urlRegex, (website) => `<a class='website' href='${website}' target='_blank'>${website}</a>`);
35
+ };
20
36
  return (
21
37
  <div className={`bubble message-text bubble-${message.flow} ${message?.conversationType === TencentCloudChat.TYPES.CONV_GROUP ? 'group' : ''}`}>
22
38
  <div className="message-text-content">
23
39
  {context.text.map((item, index) => {
24
40
  const key = message.ID + index;
25
41
  if (item.name === 'text') {
26
- return <p className="message-text-content-p" key={item.src + key}>{item.text}</p>;
42
+ return (
43
+ <p
44
+ className="message-text-content-p"
45
+ key={item.src + key}
46
+ dangerouslySetInnerHTML={{ __html: urlToLink(item.text) }}
47
+ />
48
+ );
27
49
  }
28
50
  return <img className="text-img" key={item.src + key} src={item.src} alt="" />;
29
51
  })}
@@ -1,5 +1,6 @@
1
- import React, { PropsWithChildren, useState } from 'react';
1
+ import React, { PropsWithChildren, useEffect, useState } from 'react';
2
2
  import { MESSAGE_STATUS } from '../../constants';
3
+ import { isH5, isPC } from '../../utils/env';
3
4
  import { Model } from '../Model';
4
5
  import type { MessageContextProps } from './MessageText';
5
6
 
@@ -13,18 +14,20 @@ function MessageVideoWithContext <T extends MessageContextProps>(
13
14
  } = props;
14
15
 
15
16
  const [show, setShow] = useState(false);
17
+ const transparentPosterUrl = 'https://web.sdk.qcloud.com/im/assets/images/transparent.png';
16
18
 
17
19
  return (
18
- <div className="message-video">
20
+ <div className={`message-video ${isH5 ? 'message-video-h5' : ''}`}>
19
21
  <div className={`${message?.status === MESSAGE_STATUS.SUCCESS ? 'snap-video' : ''}`} role="button" tabIndex={0} onClick={() => { setShow(true); }}>
20
- <video muted controls={false} src={context.url} />
22
+ {isPC && (<video muted controls={false} src={context.url} />)}
23
+ {isH5 && (<img src={message.payload.snapshotUrl || transparentPosterUrl} style={{ maxHeight: '200px', maxWidth: '200px', borderRadius: '10px' }} />)}
21
24
  </div>
22
25
 
23
26
  {children}
24
27
  {
25
28
  show && (
26
- <Model onClick={() => { setShow(false); }}>
27
- <video className="play-video" muted controls src={context.url} />
29
+ <Model onClick={(e) => { e.stopPropagation(); setShow(false); }}>
30
+ <video className="play-video" autoPlay controls src={context.url} />
28
31
  </Model>
29
32
  )
30
33
  }
@@ -1,7 +1,9 @@
1
1
  import { useCallback } from 'react';
2
2
  import { useTranslation } from 'react-i18next';
3
3
  import { Message } from '@tencentcloud/chat';
4
- import { MESSAGE_FLOW, MESSAGE_OPERATE } from '../../../constants';
4
+ import { TUIStore } from '@tencentcloud/chat-uikit-engine';
5
+ import { CONSTANT_DISPATCH_TYPE, MESSAGE_FLOW, MESSAGE_OPERATE } from '../../../constants';
6
+ import { enableSampleTaskStatus } from '../../untils';
5
7
  import { useTUIChatActionContext, useTUIKitContext } from '../../../context';
6
8
  import { Toast } from '../../Toast';
7
9
 
@@ -17,7 +19,6 @@ export const useMessageHandler = (props?: MessageHandlerProps) => {
17
19
  } = props;
18
20
 
19
21
  const {
20
- removeMessage,
21
22
  editLocalMessage,
22
23
  operateMessage,
23
24
  revokeMessage,
@@ -27,40 +28,19 @@ export const useMessageHandler = (props?: MessageHandlerProps) => {
27
28
 
28
29
  const handleDelMessage = useCallback(async (event?) => {
29
30
  event.preventDefault();
30
- if (!message?.ID || !chat || !removeMessage) {
31
- return;
32
- }
33
-
34
- try {
35
- await chat.deleteMessage([message]);
36
- removeMessage(message);
37
- } catch (error) {
38
- if (handleError) {
39
- handleError({
40
- functionName: 'deleteMessage',
41
- error,
42
- });
43
- } else {
44
- Toast({ text: t('TUIChat.Error deleting message'), type: 'error' });
45
- throw new Error(error);
46
- }
47
- }
31
+ if (!message) return;
32
+ const messageModel = TUIStore.getMessageModel(message?.ID);
33
+ messageModel.deleteMessage();
48
34
  }, [message]);
49
35
 
50
36
  const handleRevokeMessage = useCallback(async (event?) => {
51
37
  event.preventDefault();
52
- if (!message?.ID || !chat || !editLocalMessage) {
53
- return;
54
- }
55
-
56
- try {
57
- if (revokeMessage) {
58
- await revokeMessage(message);
59
- } else {
60
- await chat.revokeMessage(message);
61
- }
38
+ if (!message) return;
39
+ const messageModel = TUIStore.getMessageModel(message?.ID);
40
+ messageModel.revokeMessage().then(() => {
62
41
  editLocalMessage(message);
63
- } catch (error) {
42
+ enableSampleTaskStatus('revokeMessage');
43
+ }).catch((error: any) => {
64
44
  if (handleError) {
65
45
  handleError({
66
46
  functionName: 'revokeMessage',
@@ -71,7 +51,7 @@ export const useMessageHandler = (props?: MessageHandlerProps) => {
71
51
  Toast({ text, type: 'error' });
72
52
  throw new Error(error);
73
53
  }
74
- }
54
+ });
75
55
  }, [message]);
76
56
 
77
57
  const handleReplyMessage = useCallback((event?) => {
@@ -110,7 +90,7 @@ export const useMessageHandler = (props?: MessageHandlerProps) => {
110
90
  try {
111
91
  const res = await chat.resendMessage(message);
112
92
  editLocalMessage(res?.data?.message);
113
- } catch (error) {
93
+ } catch (error: any) {
114
94
  if (handleError) {
115
95
  handleError({
116
96
  functionName: 'resendMessage',
@@ -27,6 +27,7 @@
27
27
  .bubble {
28
28
  .edit {
29
29
  color: #147aff;
30
+ padding: 3px;
30
31
  }
31
32
  }
32
33
  }