@tencentcloud/chat-uikit-react 2.1.2 → 2.1.4
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 +0 -1
- package/CHANGELOG.md +10 -0
- package/dist/cjs/components/Avatar/Avatar.js +1 -1
- package/dist/cjs/components/Checkbox/index.d.ts +2 -1
- package/dist/cjs/components/ConversationCreate/ConversationCreatGroupDetail.js +1 -1
- package/dist/cjs/components/ConversationCreate/ConversationCreate.js +1 -1
- package/dist/cjs/components/ConversationCreate/hooks/useConversationCreate.js +1 -1
- package/dist/cjs/components/ConversationPreview/ConversationPreview.js +1 -1
- package/dist/cjs/components/ConversationPreview/ConversationPreviewContent.d.ts +4 -1
- package/dist/cjs/components/ConversationPreview/ConversationPreviewContent.js +1 -1
- package/dist/cjs/components/ConversationPreview/utils.js +1 -1
- package/dist/cjs/components/ConversationSearch/ConversationSearchInput.d.ts +2 -1
- package/dist/cjs/components/ConversationSearch/ConversationSearchResult.js +1 -1
- package/dist/cjs/components/DivWithEdit/DivWithEdit.d.ts +3 -2
- package/dist/cjs/components/DivWithEdit/DivWithEdit.js +1 -1
- package/dist/cjs/components/DivWithEdit/WithText.js +1 -1
- package/dist/cjs/components/EmptyStateIndicator/EmptyStateIndicator.d.ts +2 -1
- package/dist/cjs/components/Icon/Icon.d.ts +2 -1
- package/dist/cjs/components/Icon/Icon.js +1 -1
- package/dist/cjs/components/Input/Input.js +1 -1
- package/dist/cjs/components/Model/index.d.ts +1 -1
- package/dist/cjs/components/Model/index.js +1 -1
- package/dist/cjs/components/Plugins/index.js +1 -1
- package/dist/cjs/components/Popup/index.d.ts +1 -1
- package/dist/cjs/components/Popup/index.js +1 -1
- package/dist/cjs/components/Switch/Switch.d.ts +2 -6
- package/dist/cjs/components/Switch/Switch.js +1 -1
- 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/TUIContactInfo/addFriendInfo.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/TUIContactSearch/TUIContactSearch.js +1 -1
- package/dist/cjs/components/TUIContactSearch/hooks/useContactSearch.js +1 -1
- package/dist/cjs/components/TUIConversation/TUIConversation.js +1 -1
- package/dist/cjs/components/TUIConversationList/hooks/useConversationList.js +1 -1
- package/dist/cjs/components/TUIConversationList/hooks/useConversationUpdate.js +1 -1
- package/dist/cjs/components/TUIKit/TUIKit.d.ts +2 -2
- package/dist/cjs/components/TUIKit/TUIKit.js +1 -1
- package/dist/cjs/components/TUIKit/hooks/useCreateTUIKitContext.d.ts +7 -7
- package/dist/cjs/components/TUIKit/hooks/useTUIKit.d.ts +2 -2
- package/dist/cjs/components/TUIKit/hooks/useTUIKit.js +1 -1
- package/dist/cjs/components/TUIManage/TUIManage.d.ts +4 -1
- package/dist/cjs/components/TUIManage/TUIManage.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageAudio.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageAvatar.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/MessageFace.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageFile.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageImage.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageLocation.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageMerger.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/MessageProgress.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageRevoke.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageText.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/TUIMessageDefault.js +1 -1
- package/dist/cjs/components/TUIMessage/hooks/useMessageHandler.js +1 -1
- package/dist/cjs/components/TUIMessage/hooks/useMessageReply.js +1 -1
- package/dist/cjs/components/TUIMessage/utils/index.js +1 -1
- package/dist/cjs/components/TUIMessageInput/EmojiPicker.js +1 -1
- package/dist/cjs/components/TUIMessageInput/InputPluginsDefalut.js +1 -1
- package/dist/cjs/components/TUIMessageInput/InputQuoteDefalut.js +1 -1
- package/dist/cjs/components/TUIMessageInput/TUIForward.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/useHandleQuoteMessage.js +1 -1
- package/dist/cjs/components/TUIMessageInput/hooks/useMessageInputState.d.ts +2 -2
- package/dist/cjs/components/TUIMessageInput/hooks/useMessageInputText.js +1 -1
- package/dist/cjs/components/TUIMessageInput/hooks/useUploadElement.js +1 -1
- package/dist/cjs/components/TUIMessageList/TUIMessageList.js +1 -1
- package/dist/cjs/components/TUIMessageList/hooks/useMessageListElement.js +1 -1
- package/dist/cjs/components/TUIProfile/TUIProfile.js +1 -1
- package/dist/cjs/components/TUIProfile/TUIProfileDefault.d.ts +2 -2
- package/dist/cjs/components/TUIProfile/TUIProfileDefault.js +1 -1
- package/dist/cjs/components/TUIProfile/hooks/useMyProfile.js +1 -1
- package/dist/cjs/components/Toast/index.js +1 -1
- package/dist/cjs/context/ComponentContext.d.ts +3 -2
- package/dist/cjs/context/TUIChatActionContext.d.ts +1 -1
- package/dist/cjs/context/TUIChatStateContext.d.ts +4 -4
- package/dist/cjs/context/TUIContactContext.js +1 -1
- package/dist/cjs/context/TUIConversationContext.js +1 -1
- package/dist/cjs/context/TUIKitContext.d.ts +1 -1
- package/dist/cjs/context/TUIMessageContext.js +1 -1
- package/dist/cjs/context/TUIMessageInputContext.js +1 -1
- package/dist/cjs/hooks/useProfile.d.ts +1 -1
- package/dist/cjs/index.css +1 -1
- package/dist/cjs/index.d.css +3 -3
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/esm/components/Avatar/Avatar.js +1 -1
- package/dist/esm/components/Checkbox/index.d.ts +2 -1
- package/dist/esm/components/ConversationCreate/ConversationCreatGroupDetail.js +1 -1
- package/dist/esm/components/ConversationCreate/ConversationCreate.js +1 -1
- package/dist/esm/components/ConversationCreate/hooks/useConversationCreate.js +1 -1
- package/dist/esm/components/ConversationPreview/ConversationPreview.js +1 -1
- package/dist/esm/components/ConversationPreview/ConversationPreviewContent.d.ts +4 -1
- package/dist/esm/components/ConversationPreview/ConversationPreviewContent.js +1 -1
- package/dist/esm/components/ConversationPreview/utils.js +1 -1
- package/dist/esm/components/ConversationSearch/ConversationSearchInput.d.ts +2 -1
- package/dist/esm/components/ConversationSearch/ConversationSearchResult.js +1 -1
- package/dist/esm/components/DivWithEdit/DivWithEdit.d.ts +3 -2
- package/dist/esm/components/DivWithEdit/DivWithEdit.js +1 -1
- package/dist/esm/components/DivWithEdit/WithText.js +1 -1
- package/dist/esm/components/EmptyStateIndicator/EmptyStateIndicator.d.ts +2 -1
- package/dist/esm/components/Icon/Icon.d.ts +2 -1
- package/dist/esm/components/Icon/Icon.js +1 -1
- package/dist/esm/components/Input/Input.js +1 -1
- package/dist/esm/components/Model/index.d.ts +1 -1
- package/dist/esm/components/Model/index.js +1 -1
- package/dist/esm/components/Plugins/index.js +1 -1
- package/dist/esm/components/Popup/index.d.ts +1 -1
- package/dist/esm/components/Popup/index.js +1 -1
- package/dist/esm/components/Switch/Switch.d.ts +2 -6
- package/dist/esm/components/Switch/Switch.js +1 -1
- 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/TUIContactInfo/addFriendInfo.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/TUIContactSearch/TUIContactSearch.js +1 -1
- package/dist/esm/components/TUIContactSearch/hooks/useContactSearch.js +1 -1
- package/dist/esm/components/TUIConversation/TUIConversation.js +1 -1
- package/dist/esm/components/TUIConversationList/hooks/useConversationList.js +1 -1
- package/dist/esm/components/TUIConversationList/hooks/useConversationUpdate.js +1 -1
- package/dist/esm/components/TUIKit/TUIKit.d.ts +2 -2
- package/dist/esm/components/TUIKit/TUIKit.js +1 -1
- package/dist/esm/components/TUIKit/hooks/useCreateTUIKitContext.d.ts +7 -7
- package/dist/esm/components/TUIKit/hooks/useTUIKit.d.ts +2 -2
- package/dist/esm/components/TUIKit/hooks/useTUIKit.js +1 -1
- package/dist/esm/components/TUIManage/TUIManage.d.ts +4 -1
- package/dist/esm/components/TUIManage/TUIManage.js +1 -1
- package/dist/esm/components/TUIMessage/MessageAudio.js +1 -1
- package/dist/esm/components/TUIMessage/MessageAvatar.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/MessageFace.js +1 -1
- package/dist/esm/components/TUIMessage/MessageFile.js +1 -1
- package/dist/esm/components/TUIMessage/MessageImage.js +1 -1
- package/dist/esm/components/TUIMessage/MessageLocation.js +1 -1
- package/dist/esm/components/TUIMessage/MessageMerger.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/MessageProgress.js +1 -1
- package/dist/esm/components/TUIMessage/MessageRevoke.js +1 -1
- package/dist/esm/components/TUIMessage/MessageText.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/TUIMessageDefault.js +1 -1
- package/dist/esm/components/TUIMessage/hooks/useMessageHandler.js +1 -1
- package/dist/esm/components/TUIMessage/hooks/useMessageReply.js +1 -1
- package/dist/esm/components/TUIMessage/utils/index.js +1 -1
- package/dist/esm/components/TUIMessageInput/EmojiPicker.js +1 -1
- package/dist/esm/components/TUIMessageInput/InputPluginsDefalut.js +1 -1
- package/dist/esm/components/TUIMessageInput/InputQuoteDefalut.js +1 -1
- package/dist/esm/components/TUIMessageInput/TUIForward.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/useHandleQuoteMessage.js +1 -1
- package/dist/esm/components/TUIMessageInput/hooks/useMessageInputState.d.ts +2 -2
- package/dist/esm/components/TUIMessageInput/hooks/useMessageInputText.js +1 -1
- package/dist/esm/components/TUIMessageInput/hooks/useUploadElement.js +1 -1
- package/dist/esm/components/TUIMessageList/TUIMessageList.js +1 -1
- package/dist/esm/components/TUIMessageList/hooks/useMessageListElement.js +1 -1
- package/dist/esm/components/TUIProfile/TUIProfile.js +1 -1
- package/dist/esm/components/TUIProfile/TUIProfileDefault.d.ts +2 -2
- package/dist/esm/components/TUIProfile/TUIProfileDefault.js +1 -1
- package/dist/esm/components/TUIProfile/hooks/useMyProfile.js +1 -1
- package/dist/esm/components/Toast/index.js +1 -1
- package/dist/esm/context/ComponentContext.d.ts +3 -2
- package/dist/esm/context/TUIChatActionContext.d.ts +1 -1
- package/dist/esm/context/TUIChatStateContext.d.ts +4 -4
- package/dist/esm/context/TUIContactContext.js +1 -1
- package/dist/esm/context/TUIConversationContext.js +1 -1
- package/dist/esm/context/TUIKitContext.d.ts +1 -1
- package/dist/esm/context/TUIMessageContext.js +1 -1
- package/dist/esm/context/TUIMessageInputContext.js +1 -1
- package/dist/esm/hooks/useProfile.d.ts +1 -1
- package/dist/esm/index.css +1 -1
- package/dist/esm/index.d.css +3 -3
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/index.ts +1 -0
- package/package.json +7 -6
- package/rollup.config.js +2 -1
- package/src/components/Avatar/Avatar.tsx +7 -3
- package/src/components/Avatar/styles/index.scss +1 -1
- package/src/components/Checkbox/index.tsx +1 -1
- package/src/components/ConversationCreate/ConversationCreatGroupDetail.tsx +14 -7
- package/src/components/ConversationCreate/ConversationCreate.tsx +5 -1
- package/src/components/ConversationCreate/ConversationCreateSelectView.tsx +2 -2
- package/src/components/ConversationCreate/ConversationCreateUserSelectList.tsx +11 -10
- package/src/components/ConversationCreate/hooks/useConversationCreate.tsx +14 -12
- package/src/components/ConversationPreview/ConversationPreview.tsx +3 -3
- package/src/components/ConversationPreview/ConversationPreviewContent.tsx +9 -5
- package/src/components/ConversationPreview/utils.tsx +6 -3
- package/src/components/DivWithEdit/DivWithEdit.tsx +6 -5
- package/src/components/DivWithEdit/WithText.tsx +3 -1
- package/src/components/DivWithEdit/styles/index.scss +1 -1
- package/src/components/Icon/Icon.tsx +2 -2
- package/src/components/Input/Input.tsx +15 -12
- package/src/components/Model/index.tsx +2 -2
- package/src/components/Plugins/index.tsx +15 -12
- package/src/components/Popup/index.tsx +13 -9
- package/src/components/Profile/index.ts +1 -2
- package/src/components/Switch/Switch.tsx +5 -7
- package/src/components/TUIChat/TUIChat.tsx +20 -5
- package/src/components/TUIChat/TUIChatState.tsx +3 -3
- package/src/components/TUIChat/hooks/useHandleMessage.tsx +5 -5
- package/src/components/TUIChat/hooks/useHandleMessageList.tsx +2 -2
- package/src/components/TUIChat/unitls.ts +2 -2
- package/src/components/TUIChatHeader/TUIChatHeaderDefault.tsx +1 -1
- package/src/components/TUIContact/TUIContactInfo/addFriendInfo.tsx +2 -2
- package/src/components/TUIContact/TUIContactInfo/friendInfo.tsx +1 -2
- package/src/components/TUIContact/TUIContactInfo/hooks/useContactInfo.tsx +0 -10
- package/src/components/TUIContact/TUIContactList/TUIContactList.tsx +5 -3
- package/src/components/TUIContact/hooks/useTUIContact.tsx +3 -4
- package/src/components/TUIContactSearch/TUIContactSearch.tsx +6 -7
- package/src/components/TUIContactSearch/hooks/useContactSearch.tsx +1 -3
- package/src/components/TUIConversationList/TUIConversationList.tsx +1 -1
- package/src/components/TUIConversationList/hooks/useConversationList.tsx +19 -24
- package/src/components/TUIConversationList/hooks/useConversationUpdate.tsx +2 -2
- package/src/components/TUIKit/TUIKit.tsx +31 -12
- package/src/components/TUIKit/hooks/useTUIKit.tsx +14 -10
- package/src/components/TUIManage/TUIManage.tsx +20 -13
- package/src/components/TUIMessage/MessageAudio.tsx +8 -6
- package/src/components/TUIMessage/MessageAvatar.tsx +2 -2
- package/src/components/TUIMessage/MessageBubble.tsx +7 -5
- package/src/components/TUIMessage/MessageContext.tsx +3 -3
- package/src/components/TUIMessage/MessageCustom.tsx +5 -3
- package/src/components/TUIMessage/MessageFace.tsx +2 -2
- package/src/components/TUIMessage/MessageFile.tsx +5 -5
- package/src/components/TUIMessage/MessageImage.tsx +4 -2
- package/src/components/TUIMessage/MessageLocation.tsx +3 -3
- package/src/components/TUIMessage/MessageMerger.tsx +3 -3
- package/src/components/TUIMessage/MessageName.tsx +1 -1
- package/src/components/TUIMessage/MessagePlugins.tsx +12 -10
- package/src/components/TUIMessage/MessageProgress.tsx +5 -4
- package/src/components/TUIMessage/MessageRevoke.tsx +1 -1
- package/src/components/TUIMessage/MessageText.tsx +4 -4
- package/src/components/TUIMessage/MessageVideo.tsx +3 -3
- package/src/components/TUIMessage/TUIMessage.tsx +1 -1
- package/src/components/TUIMessage/TUIMessageDefault.tsx +3 -1
- package/src/components/TUIMessage/hooks/useMessageHandler.ts +13 -13
- package/src/components/TUIMessage/hooks/useMessageReply.ts +6 -4
- package/src/components/TUIMessage/utils/decodeText.ts +2 -3
- package/src/components/TUIMessage/utils/index.ts +1 -2
- package/src/components/TUIMessageInput/EmojiPicker.tsx +4 -4
- package/src/components/TUIMessageInput/InputPluginsDefalut.tsx +8 -8
- package/src/components/TUIMessageInput/InputQuoteDefalut.tsx +4 -2
- package/src/components/TUIMessageInput/TUIForward.tsx +22 -15
- package/src/components/TUIMessageInput/TUIMessageInputDefault.tsx +15 -9
- package/src/components/TUIMessageInput/hooks/useEmojiPicker.tsx +2 -2
- package/src/components/TUIMessageInput/hooks/useHandleForwardMessage.tsx +4 -4
- package/src/components/TUIMessageInput/hooks/useHandleQuoteMessage.tsx +5 -5
- package/src/components/TUIMessageInput/hooks/useMessageInputState.tsx +3 -3
- package/src/components/TUIMessageInput/hooks/useMessageInputText.tsx +12 -9
- package/src/components/TUIMessageInput/hooks/useUploadElement.tsx +2 -2
- package/src/components/TUIMessageInput/hooks/useUploadPicker.tsx +1 -1
- package/src/components/TUIMessageList/TUIMessageList.tsx +5 -6
- package/src/components/TUIMessageList/hooks/useMessageListElement.tsx +5 -2
- package/src/components/TUIProfile/TUIProfile.tsx +3 -1
- package/src/components/TUIProfile/TUIProfileDefault.tsx +17 -17
- package/src/components/TUIProfile/hooks/useMyProfile.tsx +19 -37
- package/src/components/Toast/index.tsx +3 -3
- package/src/components/Toast/styles/layout.scss +1 -1
- package/src/components/untils.ts +1 -1
- package/src/context/TUIChatStateContext.tsx +4 -4
- package/src/context/TUIContactContext.tsx +1 -1
- package/src/context/TUIConversationContext.tsx +2 -2
- package/src/context/TUIMessageContext.tsx +1 -1
- package/src/context/TUIMessageInputContext.tsx +1 -1
- package/src/hooks/useConversation.tsx +1 -1
- package/src/hooks/useProfile.tsx +2 -2
- package/tsconfig.json +1 -0
- package/dist/cjs/components/TUIProfile/hooks/useMyProfile.d.ts +0 -17
- package/dist/esm/components/TUIProfile/hooks/useMyProfile.d.ts +0 -17
- package/src/components/Profile/hooks/useProfile.tsx +0 -28
|
@@ -27,14 +27,14 @@ export function useHandleMessageList<T extends CreateMessageProps>(props:T) {
|
|
|
27
27
|
} = props;
|
|
28
28
|
|
|
29
29
|
const editLocalMessage = useCallback((message: Message) => {
|
|
30
|
-
dispatch({
|
|
30
|
+
dispatch && dispatch({
|
|
31
31
|
type: CONSTANT_DISPATCH_TYPE.SET_EDIT_MESSAGE,
|
|
32
32
|
value: message,
|
|
33
33
|
});
|
|
34
34
|
}, [dispatch]);
|
|
35
35
|
|
|
36
36
|
const updateUploadPendingMessageList = useCallback((message: Message) => {
|
|
37
|
-
dispatch({
|
|
37
|
+
dispatch && dispatch({
|
|
38
38
|
type: CONSTANT_DISPATCH_TYPE.UPDATE_UPLOAD_PENDING_MESSAGE_LIST,
|
|
39
39
|
value: message,
|
|
40
40
|
});
|
|
@@ -3,7 +3,7 @@ import constant from '../../constants';
|
|
|
3
3
|
import { JSONStringToParse } from '../untils';
|
|
4
4
|
|
|
5
5
|
export const handleMessage = (messageList:Array<Message>):Array<Message> => {
|
|
6
|
-
let customPayloadData = null;
|
|
6
|
+
let customPayloadData: any = null;
|
|
7
7
|
return messageList.filter((item) => {
|
|
8
8
|
if (item.type === TencentCloudChat.TYPES.MSG_CUSTOM) {
|
|
9
9
|
customPayloadData = JSONStringToParse(item?.payload?.data);
|
|
@@ -30,7 +30,7 @@ export const handleUploadPendingMessage = (
|
|
|
30
30
|
message: Message,
|
|
31
31
|
) => {
|
|
32
32
|
const list = [...messageList];
|
|
33
|
-
if (!list.some((item:Message) => item.ID === message
|
|
33
|
+
if (!list.some((item:Message) => item.ID === message?.ID)) {
|
|
34
34
|
list.push(message);
|
|
35
35
|
}
|
|
36
36
|
const index = list.findIndex((item) => item?.ID === message?.ID);
|
|
@@ -84,7 +84,7 @@ function TUIChatHeaderDefaultWithContext <T extends TUIChatHeaderBasicProps>(
|
|
|
84
84
|
};
|
|
85
85
|
const { setTUIManageShow } = useTUIKitContext();
|
|
86
86
|
const openTUIManage = () => {
|
|
87
|
-
setTUIManageShow(true);
|
|
87
|
+
setTUIManageShow && setTUIManageShow(true);
|
|
88
88
|
};
|
|
89
89
|
|
|
90
90
|
return (
|
|
@@ -41,7 +41,7 @@ export function UnMemoizedAddFriendInfo<T extends Props>(
|
|
|
41
41
|
setIsEditRemark('');
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
-
const handleChange = (e) => {
|
|
44
|
+
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
45
45
|
setWording(e.target.value);
|
|
46
46
|
};
|
|
47
47
|
return (
|
|
@@ -51,7 +51,7 @@ export function UnMemoizedAddFriendInfo<T extends Props>(
|
|
|
51
51
|
<div className="tui-contact-info-content">
|
|
52
52
|
<div className="content-item-wording">
|
|
53
53
|
<p className="content-item-label">{t('TUIContact.Enter the verification info')}</p>
|
|
54
|
-
<textarea className="content-item-wording-text" value={wording} onChange={handleChange} />
|
|
54
|
+
<textarea className="content-item-wording-text" value={wording} onChange={(e: any) => {handleChange(e)}} />
|
|
55
55
|
</div>
|
|
56
56
|
<div className="content-item">
|
|
57
57
|
<p className="content-item-label">{t('TUIContact.remark')}</p>
|
|
@@ -52,7 +52,6 @@ export function UnMemoizedFriendInfo<T extends Props>(
|
|
|
52
52
|
const addToBlocklistHandler = async () => {
|
|
53
53
|
await addToBlocklist(userID);
|
|
54
54
|
setIsAddToBlocklist(true);
|
|
55
|
-
// 清空右侧 container 内容
|
|
56
55
|
setActiveContact();
|
|
57
56
|
};
|
|
58
57
|
|
|
@@ -65,7 +64,7 @@ export function UnMemoizedFriendInfo<T extends Props>(
|
|
|
65
64
|
const conversation = await createConversation(conversationID);
|
|
66
65
|
TUIConversationService.switchConversation(conversationID);
|
|
67
66
|
setActiveConversation(conversation);
|
|
68
|
-
openChat();
|
|
67
|
+
openChat && openChat();
|
|
69
68
|
};
|
|
70
69
|
|
|
71
70
|
return (
|
|
@@ -6,14 +6,12 @@ import { useTUIKitContext } from '../../../../context';
|
|
|
6
6
|
function useContactInfo() {
|
|
7
7
|
const { chat } = useTUIKitContext('useContactInfo');
|
|
8
8
|
|
|
9
|
-
// 移除黑名单
|
|
10
9
|
const removeFromBlocklist = useCallback((userID: string) => {
|
|
11
10
|
chat.removeFromBlacklist({
|
|
12
11
|
userIDList: [userID],
|
|
13
12
|
});
|
|
14
13
|
}, [chat]);
|
|
15
14
|
|
|
16
|
-
// 添加好友
|
|
17
15
|
const addFriend = useCallback((param: any) => {
|
|
18
16
|
chat.addFriend({
|
|
19
17
|
to: param?.userID,
|
|
@@ -29,14 +27,12 @@ function useContactInfo() {
|
|
|
29
27
|
});
|
|
30
28
|
}, [chat]);
|
|
31
29
|
|
|
32
|
-
// 删除好友
|
|
33
30
|
const deleteFriend = useCallback((userID: string) => {
|
|
34
31
|
chat.deleteFriend({
|
|
35
32
|
userIDList: [userID],
|
|
36
33
|
});
|
|
37
34
|
}, [chat]);
|
|
38
35
|
|
|
39
|
-
// 添加黑名单
|
|
40
36
|
const addToBlocklist = useCallback((userID: string) => {
|
|
41
37
|
chat.addToBlacklist({
|
|
42
38
|
userIDList: [userID],
|
|
@@ -55,8 +51,6 @@ function useContactInfo() {
|
|
|
55
51
|
userID,
|
|
56
52
|
});
|
|
57
53
|
}, [chat]);
|
|
58
|
-
// 好友相关
|
|
59
|
-
// 判断是否为双向好友关系
|
|
60
54
|
const isFriend = (info: any): Promise<boolean> => (
|
|
61
55
|
new Promise((resolve, reject) => {
|
|
62
56
|
chat.checkFriend({
|
|
@@ -65,19 +59,15 @@ function useContactInfo() {
|
|
|
65
59
|
})
|
|
66
60
|
.then((res: any) => {
|
|
67
61
|
switch (res?.data?.successUserIDList[0]?.relation) {
|
|
68
|
-
// 无好友关系:A 的好友表中没有 B,B 的好友表中也没有 A
|
|
69
62
|
case TencentCloudChat.TYPES.SNS_TYPE_NO_RELATION:
|
|
70
63
|
resolve(false);
|
|
71
64
|
break;
|
|
72
|
-
// 单项好友:A 的好友表中有 B,但 B 的好友表中没有 A
|
|
73
65
|
case TencentCloudChat.TYPES.SNS_TYPE_A_WITH_B:
|
|
74
66
|
resolve(false);
|
|
75
67
|
break;
|
|
76
|
-
// 单项好友:A 的好友表中没有 B,但 B 的好友表中有 A
|
|
77
68
|
case TencentCloudChat.TYPES.SNS_TYPE_B_WITH_A:
|
|
78
69
|
resolve(false);
|
|
79
70
|
break;
|
|
80
|
-
// 双向好友关系
|
|
81
71
|
case TencentCloudChat.TYPES.SNS_TYPE_BOTH_WAY:
|
|
82
72
|
resolve(true);
|
|
83
73
|
break;
|
|
@@ -30,6 +30,8 @@ function UnMemoizedTUIContactList<T>(): React.ReactElement {
|
|
|
30
30
|
acceptFriendApplication(userID);
|
|
31
31
|
setActiveContact();
|
|
32
32
|
};
|
|
33
|
+
// eslint-disable-next-line
|
|
34
|
+
// @ts-ignore
|
|
33
35
|
return (
|
|
34
36
|
isShowContactList && (
|
|
35
37
|
<div className={`tui-contacts-list ${isH5 ? 'tui-contacts-list-h5' : ''} `}>
|
|
@@ -45,7 +47,7 @@ function UnMemoizedTUIContactList<T>(): React.ReactElement {
|
|
|
45
47
|
</div>
|
|
46
48
|
</div>
|
|
47
49
|
{iShowFriendApplication
|
|
48
|
-
&& friendApplicationList
|
|
50
|
+
&& friendApplicationList?.map((item, index) => {
|
|
49
51
|
const {
|
|
50
52
|
userID, avatar, nick, wording, type,
|
|
51
53
|
} = item;
|
|
@@ -106,7 +108,7 @@ function UnMemoizedTUIContactList<T>(): React.ReactElement {
|
|
|
106
108
|
</div>
|
|
107
109
|
</div>
|
|
108
110
|
{isShowBlocklist
|
|
109
|
-
&& blocklistProfile
|
|
111
|
+
&& blocklistProfile?.map((item, index) => {
|
|
110
112
|
const { userID, avatar, nick } = item;
|
|
111
113
|
return (
|
|
112
114
|
<div
|
|
@@ -137,7 +139,7 @@ function UnMemoizedTUIContactList<T>(): React.ReactElement {
|
|
|
137
139
|
</div>
|
|
138
140
|
</div>
|
|
139
141
|
{iShowFriends
|
|
140
|
-
&& friendList
|
|
142
|
+
&& friendList?.map((item, index) => {
|
|
141
143
|
const { userID, avatar, nick } = item.profile;
|
|
142
144
|
return (
|
|
143
145
|
<div
|
|
@@ -35,7 +35,6 @@ function useTUIContact() {
|
|
|
35
35
|
setFriendList(data);
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
-
// todo: 获取 100个
|
|
39
38
|
const getBlocklist = async () => {
|
|
40
39
|
const { data: _blocklist } = await chat.getBlacklist();
|
|
41
40
|
if (_blocklist.length === 0) {
|
|
@@ -51,15 +50,15 @@ function useTUIContact() {
|
|
|
51
50
|
});
|
|
52
51
|
setBlocklistProfile(data);
|
|
53
52
|
};
|
|
54
|
-
const onFriendApplicationListUpdated = (event) => {
|
|
53
|
+
const onFriendApplicationListUpdated = (event: any) => {
|
|
55
54
|
setFriendApplicationList(event?.data?.friendApplicationList);
|
|
56
55
|
};
|
|
57
|
-
const onBlocklistUpdated = (event) => {
|
|
56
|
+
const onBlocklistUpdated = (event: any) => {
|
|
58
57
|
setBlockList(event.data);
|
|
59
58
|
getBlocklistProfile(event.data);
|
|
60
59
|
};
|
|
61
60
|
|
|
62
|
-
const onFriendListUpdated = (event) => {
|
|
61
|
+
const onFriendListUpdated = (event: any) => {
|
|
63
62
|
setFriendList(event.data);
|
|
64
63
|
};
|
|
65
64
|
|
|
@@ -16,19 +16,19 @@ export function UnMemoizedTUIContactSearch<T>(): React.ReactElement {
|
|
|
16
16
|
const [searchedValue, setSearchedValue] = useState('');
|
|
17
17
|
const [searchResult, setSearchResult] = useState([]);
|
|
18
18
|
|
|
19
|
-
const searchValueChange = (e) => {
|
|
19
|
+
const searchValueChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
20
20
|
if (e.target?.value === '') {
|
|
21
|
-
setShowContactList(true);
|
|
21
|
+
setShowContactList && setShowContactList(true);
|
|
22
22
|
setShowSearchResult(false);
|
|
23
23
|
setSearchResult([]);
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
26
|
setShowSearchResult(true);
|
|
27
27
|
setSearchedValue(e.target?.value);
|
|
28
|
-
setShowContactList(false);
|
|
28
|
+
setShowContactList && setShowContactList(false);
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
-
const searchValueBlur = (e) => {
|
|
31
|
+
const searchValueBlur = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
32
32
|
setSearchedValue(e.target?.value);
|
|
33
33
|
};
|
|
34
34
|
|
|
@@ -47,15 +47,14 @@ export function UnMemoizedTUIContactSearch<T>(): React.ReactElement {
|
|
|
47
47
|
const setContactProfile = async (profile: any) => {
|
|
48
48
|
const isFriend = await checkFriend(profile);
|
|
49
49
|
if (isFriend) {
|
|
50
|
-
const friendProfile = friendList
|
|
51
|
-
setActiveContact({ type: 'friend', data: friendProfile });
|
|
50
|
+
const friendProfile = friendList?.find((item) => item.userID === searchedValue);
|
|
51
|
+
friendProfile && setActiveContact({ type: 'friend', data: friendProfile });
|
|
52
52
|
return;
|
|
53
53
|
}
|
|
54
54
|
if (isBlock(profile.userID)) {
|
|
55
55
|
setActiveContact({ type: 'block', data: profile });
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
|
-
// set 数据
|
|
59
58
|
setActiveContact({ type: 'addFriend', data: profile });
|
|
60
59
|
};
|
|
61
60
|
return (
|
|
@@ -5,8 +5,6 @@ function useContactSearch() {
|
|
|
5
5
|
const { blockList } = useTUIContactContext('TUIContactList');
|
|
6
6
|
const { chat } = useTUIKitContext('TUIContactSearch');
|
|
7
7
|
|
|
8
|
-
// 好友相关
|
|
9
|
-
// 判断是否为双向好友关系
|
|
10
8
|
const checkFriend = (info: any): Promise<any> => chat.checkFriend({
|
|
11
9
|
userIDList: [info?.userID],
|
|
12
10
|
type: TencentCloudChat.TYPES.SNS_CHECK_TYPE_BOTH,
|
|
@@ -14,7 +12,7 @@ function useContactSearch() {
|
|
|
14
12
|
=== TencentCloudChat.TYPES.SNS_TYPE_BOTH_WAY);
|
|
15
13
|
|
|
16
14
|
const isBlock = (userID: string) => (
|
|
17
|
-
blockList
|
|
15
|
+
blockList?.includes(userID)
|
|
18
16
|
);
|
|
19
17
|
const getUserProfile = (userID: string) => (
|
|
20
18
|
chat.getUserProfile({
|
|
@@ -82,7 +82,7 @@ export function UnMemoTUIConversationList<T extends Props>(props: T):React.React
|
|
|
82
82
|
const [conversationCreated, setConversationCreated] = useState(false);
|
|
83
83
|
const [activeConversationID, setActiveConversationID] = useState('');
|
|
84
84
|
|
|
85
|
-
const handleSearchValueChange = (e) => {
|
|
85
|
+
const handleSearchValueChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
86
86
|
setSearchValue(e.target?.value);
|
|
87
87
|
if (e.target?.value) {
|
|
88
88
|
const result = conversationList.filter(
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react';
|
|
2
2
|
import TencentCloudChat, { ChatSDK, Conversation } from '@tencentcloud/chat';
|
|
3
|
-
|
|
3
|
+
import {
|
|
4
|
+
TUIStore,
|
|
5
|
+
StoreName,
|
|
6
|
+
} from '@tencentcloud/chat-uikit-engine';
|
|
4
7
|
function useConversationList(
|
|
5
8
|
chat: ChatSDK,
|
|
6
9
|
activeConversationHandler?:(
|
|
@@ -10,33 +13,25 @@ function useConversationList(
|
|
|
10
13
|
filterConversation?:(conversationList: Array<Conversation>) => Array<Conversation>,
|
|
11
14
|
) {
|
|
12
15
|
const [conversationList, setConversationList] = useState<Array<Conversation>>([]);
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
const onConversationListUpdated = (list: any) => {
|
|
17
|
+
let resConversationList = [];
|
|
18
|
+
if (filterConversation) {
|
|
19
|
+
resConversationList = filterConversation(list);
|
|
20
|
+
} else {
|
|
21
|
+
resConversationList = list.filter(
|
|
22
|
+
(item: any) => item.type !== TencentCloudChat.TYPES.CONV_SYSTEM,
|
|
23
|
+
);
|
|
16
24
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (res?.code === 0) {
|
|
21
|
-
let resConversationList = [];
|
|
22
|
-
if (filterConversation) {
|
|
23
|
-
resConversationList = filterConversation(res.data.conversationList);
|
|
24
|
-
} else {
|
|
25
|
-
resConversationList = res.data.conversationList.filter(
|
|
26
|
-
(item) => item.type !== TencentCloudChat.TYPES.CONV_SYSTEM,
|
|
27
|
-
);
|
|
28
|
-
}
|
|
29
|
-
const newConversationList = queryType === 'reload'
|
|
30
|
-
? resConversationList
|
|
31
|
-
: [...conversationList, resConversationList];
|
|
32
|
-
setConversationList(newConversationList);
|
|
33
|
-
if (!offset && activeConversationHandler) {
|
|
34
|
-
activeConversationHandler(newConversationList, setConversationList);
|
|
35
|
-
}
|
|
25
|
+
setConversationList(resConversationList);
|
|
26
|
+
if (activeConversationHandler) {
|
|
27
|
+
activeConversationHandler(resConversationList, setConversationList);
|
|
36
28
|
}
|
|
37
29
|
};
|
|
30
|
+
|
|
38
31
|
useEffect(() => {
|
|
39
|
-
|
|
32
|
+
TUIStore.watch(StoreName.CONV, {
|
|
33
|
+
conversationList: onConversationListUpdated,
|
|
34
|
+
});
|
|
40
35
|
}, [chat]);
|
|
41
36
|
return {
|
|
42
37
|
conversationList,
|
|
@@ -19,7 +19,7 @@ export const useConversationUpdate = (
|
|
|
19
19
|
setConversationList(filterConversation(event.data));
|
|
20
20
|
} else {
|
|
21
21
|
setConversationList(event.data.filter(
|
|
22
|
-
(item) => item.type !== TencentCloudChat.TYPES.CONV_SYSTEM,
|
|
22
|
+
(item: any) => item.type !== TencentCloudChat.TYPES.CONV_SYSTEM,
|
|
23
23
|
));
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -27,7 +27,7 @@ export const useConversationUpdate = (
|
|
|
27
27
|
forceUpdate();
|
|
28
28
|
}
|
|
29
29
|
if (customHandler && typeof customHandler === 'function') {
|
|
30
|
-
customHandler(setConversationList, event);
|
|
30
|
+
setConversationList && customHandler(setConversationList, event);
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
33
|
chat?.on(TencentCloudChat.EVENT.CONVERSATION_LIST_UPDATED, onConversationListUpdated);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { PropsWithChildren, useState, useEffect } from 'react';
|
|
2
2
|
import { ChatSDK, Conversation } from '@tencentcloud/chat';
|
|
3
|
-
import { TUIStore, StoreName } from '@tencentcloud/chat-uikit-engine';
|
|
3
|
+
import { TUIStore, StoreName, IConversationModel } from '@tencentcloud/chat-uikit-engine';
|
|
4
|
+
import { TUILogin } from '@tencentcloud/tui-core';
|
|
4
5
|
import { useTranslation } from 'react-i18next';
|
|
5
6
|
import { isH5, isPC } from '../../utils/env';
|
|
6
7
|
import { useTUIKit, UseContactParams } from './hooks/useTUIKit';
|
|
@@ -22,7 +23,7 @@ import contacts from '../Icon/images/contacts.svg';
|
|
|
22
23
|
import contactsSelected from '../Icon/images/contacts-selected.svg';
|
|
23
24
|
|
|
24
25
|
export interface ChatProps {
|
|
25
|
-
chat?:
|
|
26
|
+
chat?: any,
|
|
26
27
|
language?: string,
|
|
27
28
|
customClasses?: unknown,
|
|
28
29
|
activeConversation?: Conversation,
|
|
@@ -126,13 +127,16 @@ export function TUIKit<
|
|
|
126
127
|
>(
|
|
127
128
|
props:PropsWithChildren<T>,
|
|
128
129
|
):React.ReactElement {
|
|
129
|
-
const [currentConversationID, setCurrentConversationID] = useState<string>('');
|
|
130
130
|
const [moduleValue, setModuleValue] = useState('chats');
|
|
131
131
|
const { t } = useTranslation();
|
|
132
|
-
|
|
133
132
|
const {
|
|
134
|
-
children,
|
|
133
|
+
children,
|
|
134
|
+
chat = TUILogin.getContext().chat,
|
|
135
|
+
customClasses,
|
|
136
|
+
activeConversation,
|
|
137
|
+
language = 'en',
|
|
135
138
|
} = props;
|
|
139
|
+
|
|
136
140
|
(window as any).tencent_cloud_im_csig_react_uikit_23F_xa = true;
|
|
137
141
|
const {
|
|
138
142
|
conversation,
|
|
@@ -161,21 +165,21 @@ export function TUIKit<
|
|
|
161
165
|
});
|
|
162
166
|
useEffect(() => {
|
|
163
167
|
TUIStore.watch(StoreName.CONV, {
|
|
164
|
-
|
|
168
|
+
currentConversation: onCurrentConversation,
|
|
165
169
|
});
|
|
166
170
|
return () => {
|
|
167
171
|
TUIStore.unwatch(StoreName.CONV, {
|
|
168
|
-
|
|
172
|
+
currentConversation: onCurrentConversation,
|
|
169
173
|
});
|
|
170
174
|
};
|
|
171
175
|
}, []);
|
|
172
176
|
|
|
173
|
-
const onCurrentConversationID = (id: string) => {
|
|
174
|
-
setCurrentConversationID(id);
|
|
175
|
-
};
|
|
176
177
|
const switchTabbar = (value: string) => {
|
|
177
178
|
setModuleValue(value);
|
|
178
179
|
};
|
|
180
|
+
const onCurrentConversation = (conversationModel: IConversationModel) => {
|
|
181
|
+
setActiveConversation(conversationModel?.getConversation());
|
|
182
|
+
};
|
|
179
183
|
|
|
180
184
|
const tabbarRender = (
|
|
181
185
|
<div className="sample-chat-tab">
|
|
@@ -200,8 +204,23 @@ export function TUIKit<
|
|
|
200
204
|
return (
|
|
201
205
|
<TUIKitProvider value={chatContextValue}>
|
|
202
206
|
<div className="tui-kit">
|
|
203
|
-
{children ||
|
|
204
|
-
|
|
207
|
+
{children ||
|
|
208
|
+
(isPC && (
|
|
209
|
+
<RenderForPC
|
|
210
|
+
moduleValue={moduleValue}
|
|
211
|
+
tabbarRender={tabbarRender}
|
|
212
|
+
setModuleValue={setModuleValue}
|
|
213
|
+
/>
|
|
214
|
+
)) ||
|
|
215
|
+
(isH5 && (
|
|
216
|
+
<RenderForH5
|
|
217
|
+
contactData={contactData}
|
|
218
|
+
moduleValue={moduleValue}
|
|
219
|
+
tabbarRender={tabbarRender}
|
|
220
|
+
currentConversationID={conversation?.conversationID || ''}
|
|
221
|
+
setModuleValue={setModuleValue}
|
|
222
|
+
/>
|
|
223
|
+
))}
|
|
205
224
|
</div>
|
|
206
225
|
</TUIKitProvider>
|
|
207
226
|
);
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import React, { useState, useCallback, useEffect } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
TUIStore,
|
|
4
|
+
StoreName,
|
|
5
|
+
} from '@tencentcloud/chat-uikit-engine';
|
|
2
6
|
import { useTranslation } from 'react-i18next';
|
|
3
7
|
import {
|
|
4
8
|
ChatSDK,
|
|
@@ -42,7 +46,7 @@ export const useTUIKit = ({
|
|
|
42
46
|
language,
|
|
43
47
|
}:UseChatParams) => {
|
|
44
48
|
const { i18n } = useTranslation();
|
|
45
|
-
const [conversation, setConversation] = useState<Conversation>(paramsActiveConversation);
|
|
49
|
+
const [conversation, setConversation] = useState<Conversation | undefined>(paramsActiveConversation);
|
|
46
50
|
const [myProfile, setMyProfile] = useState<Profile>();
|
|
47
51
|
const [TUIManageShow, setTUIManageShow] = useState<boolean>(false);
|
|
48
52
|
const [TUIProfileShow, setTUIProfileShow] = useState<boolean>(false);
|
|
@@ -50,21 +54,21 @@ export const useTUIKit = ({
|
|
|
50
54
|
|
|
51
55
|
useEffect(() => {
|
|
52
56
|
i18n.changeLanguage(language);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}, [
|
|
57
|
+
TUIStore.watch(StoreName.USER, {
|
|
58
|
+
userProfile: (userProfileData: any) => {
|
|
59
|
+
setMyProfile(userProfileData);
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
}, [language]);
|
|
59
63
|
const setActiveConversation = useCallback(
|
|
60
64
|
(activeConversation?: Conversation) => {
|
|
61
65
|
if (activeConversation) {
|
|
62
66
|
chat?.setMessageRead({ conversationID: activeConversation.conversationID });
|
|
63
67
|
}
|
|
64
|
-
if (conversation && (activeConversation
|
|
68
|
+
if (conversation && (activeConversation?.conversationID !== conversation.conversationID)) {
|
|
65
69
|
setTUIManageShow(false);
|
|
66
70
|
}
|
|
67
|
-
setConversation(activeConversation);
|
|
71
|
+
activeConversation && setConversation(activeConversation);
|
|
68
72
|
},
|
|
69
73
|
[chat],
|
|
70
74
|
);
|
|
@@ -73,7 +77,7 @@ export const useTUIKit = ({
|
|
|
73
77
|
};
|
|
74
78
|
|
|
75
79
|
useEffect(() => {
|
|
76
|
-
setConversation(paramsActiveConversation);
|
|
80
|
+
paramsActiveConversation && setConversation(paramsActiveConversation);
|
|
77
81
|
}, [paramsActiveConversation]);
|
|
78
82
|
return {
|
|
79
83
|
conversation,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { useState, useEffect } from 'react';
|
|
2
2
|
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import { Conversation} from '@tencentcloud/chat';
|
|
3
4
|
import './styles/index.scss';
|
|
4
5
|
import { Icon, IconTypes } from '../Icon';
|
|
5
6
|
import { Avatar, defaultGroupAvatarWork, defaultUserAvatar } from '../Avatar';
|
|
@@ -10,11 +11,13 @@ import { getMessageProfile } from '../ConversationPreview/utils';
|
|
|
10
11
|
import { useConversationUpdate } from '../TUIConversationList/hooks/useConversationUpdate';
|
|
11
12
|
import { useConversation } from '../../hooks';
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
|
|
15
|
+
function UnMemoizedTUIManage<T>(
|
|
16
|
+
):React.ReactElement {
|
|
14
17
|
const { t } = useTranslation();
|
|
15
|
-
const [conversation, setConversation] = useState(
|
|
16
|
-
const [profile, setProfile] = useState(
|
|
17
|
-
const [isPinned, setIsPinned] = useState(false);
|
|
18
|
+
const [conversation, setConversation] = useState<Conversation>();
|
|
19
|
+
const [profile, setProfile] = useState<any>();
|
|
20
|
+
const [isPinned, setIsPinned] = useState<boolean>(false);
|
|
18
21
|
const [forceUpdateCount, setForceUpdateCount] = useState(0);
|
|
19
22
|
const {
|
|
20
23
|
conversation: activeConversation,
|
|
@@ -23,30 +26,31 @@ export function TUIManage() {
|
|
|
23
26
|
TUIManageShow,
|
|
24
27
|
setTUIManageShow,
|
|
25
28
|
} = useTUIKitContext('TUIManage');
|
|
26
|
-
useConversationUpdate(
|
|
29
|
+
useConversationUpdate(undefined, () => {
|
|
27
30
|
setForceUpdateCount((count) => count + 1);
|
|
28
31
|
});
|
|
29
32
|
const { pinConversation, deleteConversation } = useConversation(chat);
|
|
30
|
-
const pinChatChange = (e) => {
|
|
33
|
+
const pinChatChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
31
34
|
setIsPinned(e.target.checked);
|
|
32
|
-
pinConversation({
|
|
35
|
+
conversation?.conversationID && pinConversation({
|
|
33
36
|
conversationID: conversation.conversationID,
|
|
34
37
|
isPinned: e.target.checked,
|
|
35
38
|
});
|
|
36
39
|
};
|
|
37
40
|
const handleDelete = () => {
|
|
38
|
-
deleteConversation(conversation.conversationID);
|
|
39
|
-
setActiveConversation(
|
|
41
|
+
conversation?.conversationID && deleteConversation(conversation.conversationID);
|
|
42
|
+
setActiveConversation(undefined);
|
|
40
43
|
};
|
|
41
44
|
const close = () => {
|
|
42
|
-
setTUIManageShow(false);
|
|
45
|
+
setTUIManageShow && setTUIManageShow(false);
|
|
43
46
|
};
|
|
44
47
|
useEffect(() => {
|
|
45
48
|
setConversation(activeConversation);
|
|
46
|
-
setProfile(getMessageProfile(activeConversation));
|
|
49
|
+
activeConversation && setProfile(getMessageProfile(activeConversation));
|
|
47
50
|
setIsPinned(activeConversation ? activeConversation.isPinned : false);
|
|
48
51
|
}, [activeConversation, forceUpdateCount]);
|
|
49
|
-
|
|
52
|
+
// eslint-disable-next-line
|
|
53
|
+
// @ts-ignore
|
|
50
54
|
return (
|
|
51
55
|
TUIManageShow
|
|
52
56
|
&& activeConversation && (
|
|
@@ -91,7 +95,7 @@ export function TUIManage() {
|
|
|
91
95
|
<div className="manage-handle-title">
|
|
92
96
|
{t('TUIConversation.Pin')}
|
|
93
97
|
</div>
|
|
94
|
-
<Switch onChange={pinChatChange} checked={isPinned} />
|
|
98
|
+
<Switch onChange={(e: any)=> {pinChatChange(e)}} checked={isPinned} />
|
|
95
99
|
</div>
|
|
96
100
|
{isPC && (
|
|
97
101
|
<div
|
|
@@ -110,3 +114,6 @@ export function TUIManage() {
|
|
|
110
114
|
)
|
|
111
115
|
);
|
|
112
116
|
}
|
|
117
|
+
|
|
118
|
+
export const TUIManage = React.memo(UnMemoizedTUIManage) as unknown as
|
|
119
|
+
typeof UnMemoizedTUIManage;
|
|
@@ -24,7 +24,7 @@ function MessageAudioWithContext <T extends MessageContextProps>(
|
|
|
24
24
|
if (audioSource && audioSource !== audioRef?.current) {
|
|
25
25
|
audioSource.pause();
|
|
26
26
|
audioSource.currentTime = 0;
|
|
27
|
-
setAudioSource(null);
|
|
27
|
+
setAudioSource && setAudioSource(null);
|
|
28
28
|
}
|
|
29
29
|
if (audioRef?.current) {
|
|
30
30
|
if (!audioRef.current.paused) {
|
|
@@ -33,7 +33,7 @@ function MessageAudioWithContext <T extends MessageContextProps>(
|
|
|
33
33
|
} else {
|
|
34
34
|
audioRef.current.play();
|
|
35
35
|
setPlayClassName(true);
|
|
36
|
-
setAudioSource(audioRef.current);
|
|
36
|
+
setAudioSource && setAudioSource(audioRef.current);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
}, [audioRef, audioSource]);
|
|
@@ -42,8 +42,10 @@ function MessageAudioWithContext <T extends MessageContextProps>(
|
|
|
42
42
|
setPlayClassName(false);
|
|
43
43
|
};
|
|
44
44
|
const endFunction = () => {
|
|
45
|
-
setAudioSource(null);
|
|
46
|
-
audioRef.current
|
|
45
|
+
setAudioSource && setAudioSource(null);
|
|
46
|
+
if(audioRef.current) {
|
|
47
|
+
audioRef.current.currentTime = 0
|
|
48
|
+
}
|
|
47
49
|
pauseFunction();
|
|
48
50
|
};
|
|
49
51
|
|
|
@@ -52,7 +54,7 @@ function MessageAudioWithContext <T extends MessageContextProps>(
|
|
|
52
54
|
audioRef.current.addEventListener('pause', pauseFunction);
|
|
53
55
|
audioRef.current.addEventListener('ended', endFunction);
|
|
54
56
|
audioRef.current.addEventListener('canplay', () => {
|
|
55
|
-
setCurrentTime(parseInt(`${audioRef.current
|
|
57
|
+
setCurrentTime(parseInt(`${audioRef.current?.duration}`, 10));
|
|
56
58
|
});
|
|
57
59
|
}
|
|
58
60
|
return () => {
|
|
@@ -65,7 +67,7 @@ function MessageAudioWithContext <T extends MessageContextProps>(
|
|
|
65
67
|
|
|
66
68
|
return (
|
|
67
69
|
<div className="message-audio">
|
|
68
|
-
<div className={`message-audio-content message-audio-${message
|
|
70
|
+
<div className={`message-audio-content message-audio-${message?.flow}`}>
|
|
69
71
|
<Icon className={`${message?.flow} ${playClassName ? 'playing' : ''}`} type={IconTypes.VOICE} width={16} height={16} onClick={play} />
|
|
70
72
|
<span>{`${currentTime}s`}</span>
|
|
71
73
|
</div>
|
|
@@ -10,7 +10,7 @@ import { handleDisplayAvatar } from '../untils';
|
|
|
10
10
|
export interface MessageAvatarProps {
|
|
11
11
|
CustomAvatar?: React.ReactElement,
|
|
12
12
|
className?: string,
|
|
13
|
-
message
|
|
13
|
+
message: Message,
|
|
14
14
|
showType?: messageShowType,
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -27,7 +27,7 @@ export function MessageAvatar <T extends MessageAvatarProps>(
|
|
|
27
27
|
const show = showType === messageShowType.ALL || message?.flow === showType;
|
|
28
28
|
|
|
29
29
|
if (!show || showType === messageShowType.NONE) {
|
|
30
|
-
return
|
|
30
|
+
return <></>;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
if (CustomAvatar) {
|