@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.
- package/.eslintrc.js +2 -1
- package/CHANGELOG.md +13 -2
- package/dist/cjs/components/ConversationCreate/ConversationCreatGroupDetail.js +1 -1
- package/dist/cjs/components/ConversationCreate/ConversationCreateUserSelectList.js +1 -1
- package/dist/cjs/components/ConversationCreate/hooks/useConversationCreate.js +1 -1
- package/dist/cjs/components/ConversationPreview/ConversationPreview.d.ts +2 -0
- package/dist/cjs/components/ConversationPreview/ConversationPreview.js +1 -1
- package/dist/cjs/components/ConversationPreview/ConversationPreviewContent.js +1 -1
- package/dist/cjs/components/ConversationPreview/utils.js +1 -1
- package/dist/cjs/components/ConversationSearch/ConversationSearchResult.js +1 -1
- package/dist/cjs/components/Icon/config.js +1 -1
- package/dist/cjs/components/Icon/images/chats-selected.svg.js +1 -0
- package/dist/cjs/components/Icon/images/chats.svg.js +1 -0
- package/dist/cjs/components/Icon/images/contacts-selected.svg.js +1 -0
- package/dist/cjs/components/Icon/images/contacts.svg.js +1 -0
- package/dist/cjs/components/Icon/images/files.png.js +1 -0
- package/dist/cjs/components/Icon/images/image.png.js +1 -1
- package/dist/cjs/components/Icon/images/video.png.js +1 -1
- package/dist/cjs/components/TUIChat/TUIChat.d.ts +5 -0
- package/dist/cjs/components/TUIChat/TUIChat.js +1 -1
- package/dist/cjs/components/TUIChat/TUIChatState.js +1 -1
- package/dist/cjs/components/TUIChat/hooks/useHandleMessage.js +1 -1
- package/dist/cjs/components/TUIChat/hooks/useHandleMessageList.js +1 -1
- package/dist/cjs/components/TUIChat/unitls.js +1 -1
- package/dist/cjs/components/TUIChatHeader/TUIChatHeaderDefault.js +1 -1
- package/dist/cjs/components/TUIContact/TUIContact.js +1 -1
- package/dist/cjs/components/TUIContact/TUIContactInfo/TUIContactInfo.js +1 -1
- package/dist/cjs/components/TUIContact/TUIContactInfo/basicInfo.js +1 -1
- package/dist/cjs/components/TUIContact/TUIContactInfo/friendInfo.js +1 -1
- package/dist/cjs/components/TUIContact/TUIContactList/TUIContactList.js +1 -1
- package/dist/cjs/components/TUIConversation/TUIConversation.js +1 -1
- package/dist/cjs/components/TUIConversationList/TUIConversationList.d.ts +1 -0
- package/dist/cjs/components/TUIConversationList/TUIConversationList.js +1 -1
- package/dist/cjs/components/TUIKit/TUIKit.js +1 -1
- package/dist/cjs/components/TUIManage/TUIManage.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageBubble.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageContext.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageCustom.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageImage.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageName.js +1 -1
- package/dist/cjs/components/TUIMessage/MessagePlugins.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageRevoke.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageSystem.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageText.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageTip.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageVideo.js +1 -1
- package/dist/cjs/components/TUIMessage/TUIMessage.js +1 -1
- package/dist/cjs/components/TUIMessage/hooks/useMessageHandler.js +1 -1
- package/dist/cjs/components/TUIMessage/utils/index.js +1 -1
- package/dist/cjs/components/TUIMessageInput/TUIForward.js +1 -1
- package/dist/cjs/components/TUIMessageInput/TUIMessageInput.js +1 -1
- package/dist/cjs/components/TUIMessageInput/TUIMessageInputDefault.js +1 -1
- package/dist/cjs/components/TUIMessageInput/hooks/useEmojiPicker.js +1 -1
- package/dist/cjs/components/TUIMessageInput/hooks/useHandleForwardMessage.js +1 -1
- package/dist/cjs/components/TUIMessageInput/hooks/useMessageInputText.js +1 -1
- package/dist/cjs/components/TUIMessageInput/hooks/useUploadPicker.js +1 -1
- package/dist/cjs/components/TUIMessageList/TUIMessageList.js +1 -1
- package/dist/cjs/components/TUIProfile/TUIProfileDefault.js +1 -1
- package/dist/cjs/components/untils.js +1 -1
- package/dist/cjs/constants.js +1 -1
- package/dist/cjs/context/ComponentContext.d.ts +2 -0
- package/dist/cjs/context/TUIChatActionContext.d.ts +3 -14
- package/dist/cjs/context/TUIChatStateContext.d.ts +2 -0
- package/dist/cjs/context/TUIConversationContext.js +1 -1
- package/dist/cjs/index.css +1 -1
- package/dist/cjs/index.d.css +257 -12
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/locales/en/TUIChat.js +1 -1
- package/dist/cjs/locales/en/TUIContact.js +1 -1
- package/dist/cjs/locales/en/TUIProfile.js +1 -1
- package/dist/cjs/locales/index.js +1 -1
- package/dist/cjs/locales/zh_cn/TUIChat.js +1 -1
- package/dist/cjs/locales/zh_cn/TUIContact.js +1 -1
- package/dist/cjs/locales/zh_cn/TUIProfile.js +1 -1
- package/dist/cjs/server.js +1 -0
- package/dist/cjs/utils/env.js +1 -0
- package/dist/esm/components/ConversationCreate/ConversationCreatGroupDetail.js +1 -1
- package/dist/esm/components/ConversationCreate/ConversationCreateUserSelectList.js +1 -1
- package/dist/esm/components/ConversationCreate/hooks/useConversationCreate.js +1 -1
- package/dist/esm/components/ConversationPreview/ConversationPreview.d.ts +2 -0
- package/dist/esm/components/ConversationPreview/ConversationPreview.js +1 -1
- package/dist/esm/components/ConversationPreview/ConversationPreviewContent.js +1 -1
- package/dist/esm/components/ConversationPreview/utils.js +1 -1
- package/dist/esm/components/ConversationSearch/ConversationSearchResult.js +1 -1
- package/dist/esm/components/Icon/config.js +1 -1
- package/dist/esm/components/Icon/images/chats-selected.svg.js +1 -0
- package/dist/esm/components/Icon/images/chats.svg.js +1 -0
- package/dist/esm/components/Icon/images/contacts-selected.svg.js +1 -0
- package/dist/esm/components/Icon/images/contacts.svg.js +1 -0
- package/dist/esm/components/Icon/images/files.png.js +1 -0
- package/dist/esm/components/Icon/images/image.png.js +1 -1
- package/dist/esm/components/Icon/images/video.png.js +1 -1
- package/dist/esm/components/TUIChat/TUIChat.d.ts +5 -0
- package/dist/esm/components/TUIChat/TUIChat.js +1 -1
- package/dist/esm/components/TUIChat/TUIChatState.js +1 -1
- package/dist/esm/components/TUIChat/hooks/useHandleMessage.js +1 -1
- package/dist/esm/components/TUIChat/hooks/useHandleMessageList.js +1 -1
- package/dist/esm/components/TUIChat/unitls.js +1 -1
- package/dist/esm/components/TUIChatHeader/TUIChatHeaderDefault.js +1 -1
- package/dist/esm/components/TUIContact/TUIContact.js +1 -1
- package/dist/esm/components/TUIContact/TUIContactInfo/TUIContactInfo.js +1 -1
- package/dist/esm/components/TUIContact/TUIContactInfo/basicInfo.js +1 -1
- package/dist/esm/components/TUIContact/TUIContactInfo/friendInfo.js +1 -1
- package/dist/esm/components/TUIContact/TUIContactList/TUIContactList.js +1 -1
- package/dist/esm/components/TUIConversation/TUIConversation.js +1 -1
- package/dist/esm/components/TUIConversationList/TUIConversationList.d.ts +1 -0
- package/dist/esm/components/TUIConversationList/TUIConversationList.js +1 -1
- package/dist/esm/components/TUIKit/TUIKit.js +1 -1
- package/dist/esm/components/TUIManage/TUIManage.js +1 -1
- package/dist/esm/components/TUIMessage/MessageBubble.js +1 -1
- package/dist/esm/components/TUIMessage/MessageContext.js +1 -1
- package/dist/esm/components/TUIMessage/MessageCustom.js +1 -1
- package/dist/esm/components/TUIMessage/MessageImage.js +1 -1
- package/dist/esm/components/TUIMessage/MessageName.js +1 -1
- package/dist/esm/components/TUIMessage/MessagePlugins.js +1 -1
- package/dist/esm/components/TUIMessage/MessageRevoke.js +1 -1
- package/dist/esm/components/TUIMessage/MessageSystem.js +1 -1
- package/dist/esm/components/TUIMessage/MessageText.js +1 -1
- package/dist/esm/components/TUIMessage/MessageTip.js +1 -1
- package/dist/esm/components/TUIMessage/MessageVideo.js +1 -1
- package/dist/esm/components/TUIMessage/TUIMessage.js +1 -1
- package/dist/esm/components/TUIMessage/hooks/useMessageHandler.js +1 -1
- package/dist/esm/components/TUIMessage/utils/index.js +1 -1
- package/dist/esm/components/TUIMessageInput/TUIForward.js +1 -1
- package/dist/esm/components/TUIMessageInput/TUIMessageInput.js +1 -1
- package/dist/esm/components/TUIMessageInput/TUIMessageInputDefault.js +1 -1
- package/dist/esm/components/TUIMessageInput/hooks/useEmojiPicker.js +1 -1
- package/dist/esm/components/TUIMessageInput/hooks/useHandleForwardMessage.js +1 -1
- package/dist/esm/components/TUIMessageInput/hooks/useMessageInputText.js +1 -1
- package/dist/esm/components/TUIMessageInput/hooks/useUploadPicker.js +1 -1
- package/dist/esm/components/TUIMessageList/TUIMessageList.js +1 -1
- package/dist/esm/components/TUIProfile/TUIProfileDefault.js +1 -1
- package/dist/esm/components/untils.js +1 -1
- package/dist/esm/constants.js +1 -1
- package/dist/esm/context/ComponentContext.d.ts +2 -0
- package/dist/esm/context/TUIChatActionContext.d.ts +3 -14
- package/dist/esm/context/TUIChatStateContext.d.ts +2 -0
- package/dist/esm/context/TUIConversationContext.js +1 -1
- package/dist/esm/index.css +1 -1
- package/dist/esm/index.d.css +257 -12
- package/dist/esm/index.js +1 -1
- package/dist/esm/locales/en/TUIChat.js +1 -1
- package/dist/esm/locales/en/TUIContact.js +1 -1
- package/dist/esm/locales/en/TUIProfile.js +1 -1
- package/dist/esm/locales/index.js +1 -1
- package/dist/esm/locales/zh_cn/TUIChat.js +1 -1
- package/dist/esm/locales/zh_cn/TUIContact.js +1 -1
- package/dist/esm/locales/zh_cn/TUIProfile.js +1 -1
- package/dist/esm/server.js +1 -0
- package/dist/esm/utils/env.js +1 -0
- package/package.json +8 -7
- package/rollup.config.js +0 -1
- package/scripts/publish-github.js +60 -0
- package/scripts/publish-intl-demo.js +14 -0
- package/scripts/publish-npm.js +22 -0
- package/src/components/Avatar/styles/index.scss +1 -0
- package/src/components/ConversationCreate/ConversationCreatGroupDetail.tsx +6 -3
- package/src/components/ConversationCreate/ConversationCreateUserSelectList.tsx +5 -1
- package/src/components/ConversationCreate/hooks/useConversationCreate.tsx +7 -2
- package/src/components/ConversationCreate/styles/conversationGroupTypeInfo.scss +1 -0
- package/src/components/ConversationCreate/styles/index.scss +2 -0
- package/src/components/ConversationPreview/ConversationPreview.tsx +2 -0
- package/src/components/ConversationPreview/ConversationPreviewContent.tsx +57 -9
- package/src/components/ConversationPreview/styles/index.scss +4 -2
- package/src/components/ConversationPreview/utils.tsx +5 -1
- package/src/components/DivWithEdit/styles/index.scss +2 -1
- package/src/components/Icon/config.ts +4 -5
- package/src/components/Icon/images/chats-selected.svg +6 -0
- package/src/components/Icon/images/chats.svg +9 -0
- package/src/components/Icon/images/contacts-selected.svg +3 -0
- package/src/components/Icon/images/contacts.svg +6 -0
- package/src/components/Icon/images/files.png +0 -0
- package/src/components/Icon/images/image.png +0 -0
- package/src/components/Icon/images/language.svg +3 -0
- package/src/components/Icon/images/video.png +0 -0
- package/src/components/Model/styles/layout.scss +1 -1
- package/src/components/Profile/styles/index.scss +4 -0
- package/src/components/TUIChat/TUIChat.tsx +74 -120
- package/src/components/TUIChat/TUIChatState.tsx +18 -45
- package/src/components/TUIChat/hooks/useHandleMessage.tsx +8 -0
- package/src/components/TUIChat/hooks/useHandleMessageList.tsx +2 -41
- package/src/components/TUIChat/unitls.ts +0 -29
- package/src/components/TUIChatHeader/TUIChatHeaderDefault.tsx +9 -2
- package/src/components/TUIContact/TUIContact.tsx +2 -1
- package/src/components/TUIContact/TUIContactInfo/TUIContactInfo.tsx +2 -1
- package/src/components/TUIContact/TUIContactInfo/basicInfo.tsx +18 -0
- package/src/components/TUIContact/TUIContactInfo/friendInfo.tsx +4 -1
- package/src/components/TUIContact/TUIContactInfo/index.scss +5 -0
- package/src/components/TUIContact/TUIContactList/TUIContactList.tsx +3 -2
- package/src/components/TUIContact/TUIContactList/index.scss +5 -0
- package/src/components/TUIContact/index.scss +5 -0
- package/src/components/TUIConversation/TUIConversation.tsx +1 -4
- package/src/components/TUIConversationList/TUIConversationList.tsx +91 -65
- package/src/components/TUIConversationList/index.scss +5 -0
- package/src/components/TUIKit/TUIKit.tsx +152 -10
- package/src/components/TUIKit/styles/h5.scss +34 -0
- package/src/components/TUIKit/styles/index.scss +103 -0
- package/src/components/TUIKit/styles/reset.scss +20 -0
- package/src/components/TUIManage/TUIManage.tsx +59 -35
- package/src/components/TUIManage/styles/index.scss +15 -1
- package/src/components/TUIMessage/MessageBubble.tsx +20 -3
- package/src/components/TUIMessage/MessageCustom.tsx +11 -2
- package/src/components/TUIMessage/MessageImage.tsx +2 -1
- package/src/components/TUIMessage/MessageName.tsx +1 -1
- package/src/components/TUIMessage/MessagePlugins.tsx +4 -2
- package/src/components/TUIMessage/MessageRevoke.tsx +2 -2
- package/src/components/TUIMessage/MessageText.tsx +25 -3
- package/src/components/TUIMessage/MessageVideo.tsx +8 -5
- package/src/components/TUIMessage/hooks/useMessageHandler.ts +13 -33
- package/src/components/TUIMessage/styles/color.scss +1 -0
- package/src/components/TUIMessage/styles/layout.scss +33 -6
- package/src/components/TUIMessage/utils/index.ts +1 -1
- package/src/components/TUIMessageInput/TUIMessageInputDefault.tsx +2 -2
- package/src/components/TUIMessageInput/hooks/useEmojiPicker.tsx +2 -6
- package/src/components/TUIMessageInput/hooks/useHandleForwardMessage.tsx +4 -3
- package/src/components/TUIMessageInput/hooks/useMessageInputText.tsx +10 -3
- package/src/components/TUIMessageInput/hooks/useUploadPicker.tsx +10 -14
- package/src/components/TUIMessageInput/styles/color.scss +1 -1
- package/src/components/TUIMessageInput/styles/layout.scss +7 -2
- package/src/components/TUIMessageList/TUIMessageList.tsx +9 -13
- package/src/components/TUIMessageList/index.ts +0 -1
- package/src/components/TUIProfile/TUIProfileDefault.tsx +65 -51
- package/src/components/TUIProfile/styles/layout.scss +6 -0
- package/src/components/untils.ts +9 -0
- package/src/constants.ts +9 -1
- package/src/context/ComponentContext.tsx +2 -0
- package/src/context/TUIChatActionContext.tsx +3 -23
- package/src/context/TUIChatStateContext.tsx +2 -0
- package/src/context/TUIKitContext.tsx +0 -1
- package/src/index.ts +3 -0
- package/src/locales/en/TUIChat.ts +2 -1
- package/src/locales/en/TUIContact.ts +1 -1
- package/src/locales/en/TUIProfile.ts +5 -4
- package/src/locales/index.ts +1 -1
- package/src/locales/zh_cn/TUIChat.ts +1 -0
- package/src/locales/zh_cn/TUIContact.ts +1 -1
- package/src/locales/zh_cn/TUIProfile.ts +1 -0
- package/src/server.ts +44 -0
- package/src/utils/env.ts +5 -0
- package/tsconfig.json +1 -0
- package/dist/cjs/components/Icon/images/create.png.js +0 -1
- package/dist/cjs/components/Icon/images/document.png.js +0 -1
- package/dist/cjs/components/TUIChat/hooks/useCreateMessage.d.ts +0 -59
- package/dist/cjs/components/TUIChat/hooks/useCreateMessage.js +0 -1
- package/dist/cjs/components/TUIChat/hooks/useMessageReceviedListener.js +0 -1
- package/dist/cjs/components/TUIMessageList/hooks/useEnrichedMessageList.js +0 -1
- package/dist/esm/components/Icon/images/create.png.js +0 -1
- package/dist/esm/components/Icon/images/document.png.js +0 -1
- package/dist/esm/components/TUIChat/hooks/useCreateMessage.d.ts +0 -59
- package/dist/esm/components/TUIChat/hooks/useCreateMessage.js +0 -1
- package/dist/esm/components/TUIChat/hooks/useMessageReceviedListener.js +0 -1
- package/dist/esm/components/TUIMessageList/hooks/useEnrichedMessageList.js +0 -1
- package/src/components/TUIChat/hooks/useCreateMessage.tsx +0 -198
- package/src/components/TUIChat/hooks/useMessageReceviedListener.tsx +0 -26
- 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
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
<
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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="
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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-
|
|
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
|
-
|
|
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
|
{
|
|
@@ -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: `${
|
|
96
|
-
top: `${
|
|
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
|
|
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=
|
|
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"
|
|
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 {
|
|
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
|
|
31
|
-
|
|
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
|
|
53
|
-
|
|
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
|
-
|
|
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',
|