@tencentcloud/chat-uikit-react 0.0.3 → 1.0.0
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/CHANGELOG.md +22 -0
- package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +1 -0
- package/dist/cjs/components/Checkbox/index.d.ts +16 -0
- package/dist/cjs/components/ConversationCreate/ConversationCreatGroupDetail.js +1 -1
- package/dist/cjs/components/ConversationCreate/ConversationCreate.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.js +1 -1
- package/dist/cjs/components/ConversationPreview/ConversationPreviewContent.js +1 -1
- package/dist/cjs/components/ConversationSearch/ConversationSearchResult.js +1 -1
- package/dist/cjs/components/DivWithEdit/DivWithEdit.d.ts +16 -0
- package/dist/cjs/components/EmptyStateIndicator/EmptyStateIndicator.d.ts +5 -1
- package/dist/cjs/components/Icon/Icon.d.ts +14 -0
- package/dist/cjs/components/Icon/config.js +1 -1
- package/dist/cjs/components/Icon/images/like.png.js +1 -0
- package/dist/cjs/components/Icon/images/liked.png.js +1 -0
- package/dist/cjs/components/Icon/images/living.png.js +1 -0
- package/dist/cjs/components/Icon/images/member.png.js +1 -0
- package/dist/cjs/components/Icon/images/owner.png.js +1 -0
- package/dist/cjs/components/Icon/images/send.png.js +1 -0
- package/dist/cjs/components/Icon/images/union.png.js +1 -0
- package/dist/cjs/components/Icon/images/unlike.png.js +1 -0
- package/dist/cjs/components/Icon/images/unliked.png.js +1 -0
- package/dist/cjs/components/Icon/images/ununion.png.js +1 -0
- package/dist/cjs/components/Icon/images/unvector.png.js +1 -0
- package/dist/cjs/components/Icon/images/vector.png.js +1 -0
- package/dist/cjs/components/Icon/images/voice.png.js +1 -0
- package/dist/cjs/components/Icon/type.d.ts +47 -0
- package/dist/cjs/components/Icon/type.js +1 -1
- package/dist/cjs/components/Input/Input.d.ts +7 -1
- package/dist/cjs/components/Model/index.d.ts +9 -0
- package/dist/cjs/components/Plugins/index.d.ts +17 -0
- package/dist/cjs/components/Plugins/index.js +1 -1
- package/dist/cjs/components/Popup/index.d.ts +12 -0
- package/dist/cjs/components/Switch/Switch.d.ts +16 -0
- package/dist/cjs/components/TUIChat/TUIChat.d.ts +8 -2
- package/dist/cjs/components/TUIChat/TUIChat.js +1 -1
- package/dist/cjs/components/TUIChat/TUIChatState.js +1 -1
- package/dist/cjs/components/TUIChat/hooks/useCreateMessage.d.ts +29 -1
- package/dist/cjs/components/TUIChat/hooks/useCreateMessage.js +1 -1
- package/dist/cjs/components/TUIChat/hooks/useCreateTUIChatStateContext.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/hooks/useMessageReceviedListener.js +1 -1
- package/dist/cjs/components/TUIChat/unitls.js +1 -1
- package/dist/cjs/components/TUIChatHeader/TUIChatHeader.d.ts +2 -0
- package/dist/cjs/components/TUIChatHeader/TUIChatHeader.js +1 -1
- package/dist/cjs/components/TUIChatHeader/TUIChatHeaderDefault.d.ts +7 -3
- package/dist/cjs/components/TUIChatHeader/TUIChatHeaderDefault.js +1 -1
- package/dist/cjs/components/TUIConversationList/TUIConversationList.js +1 -1
- package/dist/cjs/components/TUIConversationList/hooks/useConversationUpdate.js +1 -1
- package/dist/cjs/components/TUIKit/TUIKit.d.ts +2 -1
- package/dist/cjs/components/TUIKit/TUIKit.js +1 -1
- package/dist/cjs/components/TUIKit/hooks/useTUIKit.d.ts +2 -1
- package/dist/cjs/components/TUIKit/hooks/useTUIKit.js +1 -1
- package/dist/cjs/components/TUILive/TUILive.d.ts +29 -0
- package/dist/cjs/components/TUILive/TUILive.js +1 -0
- package/dist/cjs/components/TUILive/TUILiveContent.d.ts +13 -0
- package/dist/cjs/components/TUILive/TUILiveContent.js +1 -0
- package/dist/cjs/components/TUILive/TUILiveFooter.d.ts +29 -0
- package/dist/cjs/components/TUILive/TUILiveFooter.js +1 -0
- package/dist/cjs/components/TUILive/TUILiveHeader.d.ts +20 -0
- package/dist/cjs/components/TUILive/TUILiveHeader.js +1 -0
- package/dist/cjs/components/TUILive/TUILiveMemberList.d.ts +11 -0
- package/dist/cjs/components/TUILive/TUILiveMemberList.js +1 -0
- package/dist/cjs/components/TUILive/hooks/useLiveAtiveElements.js +1 -0
- package/dist/cjs/components/TUILive/hooks/useLivePlayer.js +1 -0
- package/dist/cjs/components/TUILive/hooks/useLiveState.js +1 -0
- package/dist/cjs/components/TUILive/untils.js +1 -0
- 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 -0
- package/dist/cjs/components/TUIMessage/MessageBubble.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageContext.d.ts +3 -1
- package/dist/cjs/components/TUIMessage/MessageCustom.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/MessageMerger.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageName.js +1 -0
- package/dist/cjs/components/TUIMessage/MessagePlugins.d.ts +24 -0
- package/dist/cjs/components/TUIMessage/MessagePlugins.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageProgress.js +1 -0
- package/dist/cjs/components/TUIMessage/MessageRevoke.js +1 -1
- package/dist/cjs/components/TUIMessage/MessageStatus.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/TUIMessage.d.ts +23 -3
- 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/useMessagePluginElement.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/TUIMessageInput.d.ts +18 -7
- package/dist/cjs/components/TUIMessageInput/TUIMessageInput.js +1 -1
- package/dist/cjs/components/TUIMessageInput/TUIMessageInputDefault.js +1 -1
- package/dist/cjs/components/TUIMessageInput/Transmitter.js +1 -0
- package/dist/cjs/components/TUIMessageInput/hooks/useCreateMessageInputContext.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.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.d.ts +3 -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.js +1 -1
- package/dist/cjs/components/TUIProfile/hooks/useMyProfile.js +1 -1
- package/dist/cjs/components/Toast/index.d.ts +11 -0
- package/dist/cjs/constants.js +1 -1
- package/dist/cjs/context/ComponentContext.d.ts +1 -1
- package/dist/cjs/context/TUIChatActionContext.d.ts +11 -2
- package/dist/cjs/context/TUIChatStateContext.d.ts +10 -0
- package/dist/cjs/context/TUIConversationContext.js +1 -1
- package/dist/cjs/context/TUILiveContext.d.ts +51 -0
- package/dist/cjs/context/TUILiveContext.js +1 -0
- package/dist/cjs/context/TUIMessageContext.d.ts +22 -1
- package/dist/cjs/context/TUIMessageContext.js +1 -1
- package/dist/cjs/context/TUIMessageInputContext.d.ts +4 -5
- package/dist/cjs/index.css +1 -1
- package/dist/cjs/index.d.css +547 -7
- package/dist/cjs/index.d.ts +18 -4
- package/dist/cjs/index.js +1 -1
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +1 -0
- package/dist/esm/components/Checkbox/index.d.ts +16 -0
- package/dist/esm/components/ConversationCreate/ConversationCreatGroupDetail.js +1 -1
- package/dist/esm/components/ConversationCreate/ConversationCreate.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.js +1 -1
- package/dist/esm/components/ConversationPreview/ConversationPreviewContent.js +1 -1
- package/dist/esm/components/ConversationSearch/ConversationSearchResult.js +1 -1
- package/dist/esm/components/DivWithEdit/DivWithEdit.d.ts +16 -0
- package/dist/esm/components/EmptyStateIndicator/EmptyStateIndicator.d.ts +5 -1
- package/dist/esm/components/Icon/Icon.d.ts +14 -0
- package/dist/esm/components/Icon/config.js +1 -1
- package/dist/esm/components/Icon/images/like.png.js +1 -0
- package/dist/esm/components/Icon/images/liked.png.js +1 -0
- package/dist/esm/components/Icon/images/living.png.js +1 -0
- package/dist/esm/components/Icon/images/member.png.js +1 -0
- package/dist/esm/components/Icon/images/owner.png.js +1 -0
- package/dist/esm/components/Icon/images/send.png.js +1 -0
- package/dist/esm/components/Icon/images/union.png.js +1 -0
- package/dist/esm/components/Icon/images/unlike.png.js +1 -0
- package/dist/esm/components/Icon/images/unliked.png.js +1 -0
- package/dist/esm/components/Icon/images/ununion.png.js +1 -0
- package/dist/esm/components/Icon/images/unvector.png.js +1 -0
- package/dist/esm/components/Icon/images/vector.png.js +1 -0
- package/dist/esm/components/Icon/images/voice.png.js +1 -0
- package/dist/esm/components/Icon/type.d.ts +47 -0
- package/dist/esm/components/Icon/type.js +1 -1
- package/dist/esm/components/Input/Input.d.ts +7 -1
- package/dist/esm/components/Model/index.d.ts +9 -0
- package/dist/esm/components/Plugins/index.d.ts +17 -0
- package/dist/esm/components/Plugins/index.js +1 -1
- package/dist/esm/components/Popup/index.d.ts +12 -0
- package/dist/esm/components/Switch/Switch.d.ts +16 -0
- package/dist/esm/components/TUIChat/TUIChat.d.ts +8 -2
- package/dist/esm/components/TUIChat/TUIChat.js +1 -1
- package/dist/esm/components/TUIChat/TUIChatState.js +1 -1
- package/dist/esm/components/TUIChat/hooks/useCreateMessage.d.ts +29 -1
- package/dist/esm/components/TUIChat/hooks/useCreateMessage.js +1 -1
- package/dist/esm/components/TUIChat/hooks/useCreateTUIChatStateContext.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/hooks/useMessageReceviedListener.js +1 -1
- package/dist/esm/components/TUIChat/unitls.js +1 -1
- package/dist/esm/components/TUIChatHeader/TUIChatHeader.d.ts +2 -0
- package/dist/esm/components/TUIChatHeader/TUIChatHeader.js +1 -1
- package/dist/esm/components/TUIChatHeader/TUIChatHeaderDefault.d.ts +7 -3
- package/dist/esm/components/TUIChatHeader/TUIChatHeaderDefault.js +1 -1
- package/dist/esm/components/TUIConversationList/TUIConversationList.js +1 -1
- package/dist/esm/components/TUIConversationList/hooks/useConversationUpdate.js +1 -1
- package/dist/esm/components/TUIKit/TUIKit.d.ts +2 -1
- package/dist/esm/components/TUIKit/TUIKit.js +1 -1
- package/dist/esm/components/TUIKit/hooks/useTUIKit.d.ts +2 -1
- package/dist/esm/components/TUIKit/hooks/useTUIKit.js +1 -1
- package/dist/esm/components/TUILive/TUILive.d.ts +29 -0
- package/dist/esm/components/TUILive/TUILive.js +1 -0
- package/dist/esm/components/TUILive/TUILiveContent.d.ts +13 -0
- package/dist/esm/components/TUILive/TUILiveContent.js +1 -0
- package/dist/esm/components/TUILive/TUILiveFooter.d.ts +29 -0
- package/dist/esm/components/TUILive/TUILiveFooter.js +1 -0
- package/dist/esm/components/TUILive/TUILiveHeader.d.ts +20 -0
- package/dist/esm/components/TUILive/TUILiveHeader.js +1 -0
- package/dist/esm/components/TUILive/TUILiveMemberList.d.ts +11 -0
- package/dist/esm/components/TUILive/TUILiveMemberList.js +1 -0
- package/dist/esm/components/TUILive/hooks/useLiveAtiveElements.js +1 -0
- package/dist/esm/components/TUILive/hooks/useLivePlayer.js +1 -0
- package/dist/esm/components/TUILive/hooks/useLiveState.js +1 -0
- package/dist/esm/components/TUILive/untils.js +1 -0
- 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 -0
- package/dist/esm/components/TUIMessage/MessageBubble.js +1 -1
- package/dist/esm/components/TUIMessage/MessageContext.d.ts +3 -1
- package/dist/esm/components/TUIMessage/MessageCustom.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/MessageMerger.js +1 -1
- package/dist/esm/components/TUIMessage/MessageName.js +1 -0
- package/dist/esm/components/TUIMessage/MessagePlugins.d.ts +24 -0
- package/dist/esm/components/TUIMessage/MessagePlugins.js +1 -1
- package/dist/esm/components/TUIMessage/MessageProgress.js +1 -0
- package/dist/esm/components/TUIMessage/MessageRevoke.js +1 -1
- package/dist/esm/components/TUIMessage/MessageStatus.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/TUIMessage.d.ts +23 -3
- 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/useMessagePluginElement.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/TUIMessageInput.d.ts +18 -7
- package/dist/esm/components/TUIMessageInput/TUIMessageInput.js +1 -1
- package/dist/esm/components/TUIMessageInput/TUIMessageInputDefault.js +1 -1
- package/dist/esm/components/TUIMessageInput/Transmitter.js +1 -0
- package/dist/esm/components/TUIMessageInput/hooks/useCreateMessageInputContext.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.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.d.ts +3 -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.js +1 -1
- package/dist/esm/components/TUIProfile/hooks/useMyProfile.js +1 -1
- package/dist/esm/components/Toast/index.d.ts +11 -0
- package/dist/esm/constants.js +1 -1
- package/dist/esm/context/ComponentContext.d.ts +1 -1
- package/dist/esm/context/TUIChatActionContext.d.ts +11 -2
- package/dist/esm/context/TUIChatStateContext.d.ts +10 -0
- package/dist/esm/context/TUIConversationContext.js +1 -1
- package/dist/esm/context/TUILiveContext.d.ts +51 -0
- package/dist/esm/context/TUILiveContext.js +1 -0
- package/dist/esm/context/TUIMessageContext.d.ts +22 -1
- package/dist/esm/context/TUIMessageContext.js +1 -1
- package/dist/esm/context/TUIMessageInputContext.d.ts +4 -5
- package/dist/esm/index.css +1 -1
- package/dist/esm/index.d.css +547 -7
- package/dist/esm/index.d.ts +18 -4
- package/dist/esm/index.js +1 -1
- package/package.json +1 -1
- package/src/components/Icon/config.ts +65 -0
- package/src/components/Icon/images/like.png +0 -0
- package/src/components/Icon/images/liked.png +0 -0
- package/src/components/Icon/images/living.png +0 -0
- package/src/components/Icon/images/member.png +0 -0
- package/src/components/Icon/images/owner.png +0 -0
- package/src/components/Icon/images/send.png +0 -0
- package/src/components/Icon/images/union.png +0 -0
- package/src/components/Icon/images/unlike.png +0 -0
- package/src/components/Icon/images/unliked.png +0 -0
- package/src/components/Icon/images/ununion.png +0 -0
- package/src/components/Icon/images/unvector.png +0 -0
- package/src/components/Icon/images/vector.png +0 -0
- package/src/components/Icon/images/voice.png +0 -0
- package/src/components/Icon/type.ts +13 -0
- package/src/components/Plugins/index.tsx +13 -11
- package/src/components/Plugins/styles/layout.scss +2 -1
- package/src/components/TUIChat/TUIChat.tsx +47 -8
- package/src/components/TUIChat/TUIChatState.tsx +27 -0
- package/src/components/TUIChat/hooks/useCreateMessage.tsx +85 -4
- package/src/components/TUIChat/hooks/useCreateTUIChatStateContext.tsx +12 -0
- package/src/components/TUIChat/hooks/useHandleMessage.tsx +24 -0
- package/src/components/TUIChat/hooks/useHandleMessageList.tsx +8 -0
- package/src/components/TUIChat/unitls.ts +13 -0
- package/src/components/TUIChatHeader/TUIChatHeader.tsx +6 -0
- package/src/components/TUIChatHeader/TUIChatHeaderDefault.tsx +36 -16
- package/src/components/TUIChatHeader/styles/color.scss +0 -3
- package/src/components/TUIChatHeader/styles/layout.scss +8 -4
- package/src/components/TUIKit/TUIKit.tsx +8 -5
- package/src/components/TUIKit/hooks/useTUIKit.tsx +7 -3
- package/src/components/TUIKit/styles/reset.scss +4 -0
- package/src/components/TUIMessage/MessageAudio.tsx +61 -2
- package/src/components/TUIMessage/MessageAvatar.tsx +38 -0
- package/src/components/TUIMessage/MessageBubble.tsx +24 -6
- package/src/components/TUIMessage/MessageContext.tsx +5 -2
- package/src/components/TUIMessage/MessageCustom.tsx +2 -1
- package/src/components/TUIMessage/MessageFile.tsx +9 -3
- package/src/components/TUIMessage/MessageImage.tsx +2 -1
- package/src/components/TUIMessage/MessageMerger.tsx +2 -1
- package/src/components/TUIMessage/MessageName.tsx +41 -0
- package/src/components/TUIMessage/MessagePlugins.tsx +81 -14
- package/src/components/TUIMessage/MessageProgress.tsx +88 -0
- package/src/components/TUIMessage/MessageRevoke.tsx +1 -1
- package/src/components/TUIMessage/MessageStatus.tsx +6 -1
- package/src/components/TUIMessage/MessageText.tsx +3 -3
- package/src/components/TUIMessage/TUIMessage.tsx +68 -16
- package/src/components/TUIMessage/TUIMessageDefault.tsx +25 -15
- package/src/components/TUIMessage/hooks/useMessagePluginElement.tsx +15 -1
- package/src/components/TUIMessage/styles/layout.scss +87 -2
- package/src/components/TUIMessage/utils/index.ts +14 -14
- package/src/components/TUIMessageInput/EmojiPicker.tsx +7 -1
- package/src/components/TUIMessageInput/InputPluginsDefalut.tsx +76 -8
- package/src/components/TUIMessageInput/TUIMessageInput.tsx +42 -22
- package/src/components/TUIMessageInput/TUIMessageInputDefault.tsx +2 -1
- package/src/components/TUIMessageInput/Transmitter.tsx +15 -0
- package/src/components/TUIMessageInput/hooks/useCreateMessageInputContext.ts +3 -9
- package/src/components/TUIMessageInput/hooks/useMessageInputState.tsx +8 -7
- package/src/components/TUIMessageInput/hooks/useMessageInputText.tsx +28 -30
- package/src/components/TUIMessageInput/hooks/useUploadPicker.tsx +2 -0
- package/src/components/TUIMessageInput/styles/layout.scss +16 -0
- package/src/components/TUIMessageList/TUIMessageList.tsx +32 -10
- package/src/components/TUIMessageList/hooks/useMessageListElement.tsx +26 -6
- package/src/components/TUIMessageList/styles/layout.scss +13 -1
- package/src/components/index.ts +11 -0
- package/src/constants.ts +3 -0
- package/src/context/ComponentContext.tsx +1 -1
- package/src/context/TUIChatActionContext.tsx +14 -1
- package/src/context/TUIChatStateContext.tsx +8 -0
- package/src/context/TUIMessageContext.tsx +20 -0
- package/src/context/TUIMessageInputContext.tsx +2 -3
|
@@ -118,21 +118,21 @@ export function handleTipMessageShowContext(message: Message) {
|
|
|
118
118
|
}
|
|
119
119
|
switch (message.payload.operationType) {
|
|
120
120
|
case TIM.TYPES.GRP_TIP_MBR_JOIN:
|
|
121
|
-
options.text = `${userName} ${t('message.tip
|
|
121
|
+
options.text = `${userName} ${t('message.tip.Join in group')}`;
|
|
122
122
|
break;
|
|
123
123
|
case TIM.TYPES.GRP_TIP_MBR_QUIT:
|
|
124
|
-
options.text = `${t('message.tip
|
|
124
|
+
options.text = `${t('message.tip.member')}:${userName} ${t('message.tip.quit group')}`;
|
|
125
125
|
break;
|
|
126
126
|
case TIM.TYPES.GRP_TIP_MBR_KICKED_OUT:
|
|
127
|
-
options.text = `${t('message.tip
|
|
128
|
-
'message.tip
|
|
127
|
+
options.text = `${t('message.tip.member')}:${userName} ${t('message.tip.by')}${message.payload.operatorID}${t(
|
|
128
|
+
'message.tip.kicked out of group',
|
|
129
129
|
)}`;
|
|
130
130
|
break;
|
|
131
131
|
case TIM.TYPES.GRP_TIP_MBR_SET_ADMIN:
|
|
132
|
-
options.text = `${t('message.tip
|
|
132
|
+
options.text = `${t('message.tip.member')}:${userName} ${t('message.tip.become admin')}`;
|
|
133
133
|
break;
|
|
134
134
|
case TIM.TYPES.GRP_TIP_MBR_CANCELED_ADMIN:
|
|
135
|
-
options.text = `${t('message.tip
|
|
135
|
+
options.text = `${t('message.tip.member')}:${userName} ${t('message.tip.by revoked administrator')}`;
|
|
136
136
|
break;
|
|
137
137
|
case TIM.TYPES.GRP_TIP_GRP_PROFILE_UPDATED:
|
|
138
138
|
// options.text = `${userName} 修改群组资料`;
|
|
@@ -141,15 +141,15 @@ export function handleTipMessageShowContext(message: Message) {
|
|
|
141
141
|
case TIM.TYPES.GRP_TIP_MBR_PROFILE_UPDATED:
|
|
142
142
|
message.payload.memberList.map((member:any) => {
|
|
143
143
|
if (member.muteTime > 0) {
|
|
144
|
-
options.text = `${t('message.tip
|
|
144
|
+
options.text = `${t('message.tip.member')}:${member.userID}${t('message.tip.muted')}`;
|
|
145
145
|
} else {
|
|
146
|
-
options.text = `${t('message.tip
|
|
146
|
+
options.text = `${t('message.tip.member')}:${member.userID}${t('message.tip.unmuted')}`;
|
|
147
147
|
}
|
|
148
148
|
return member;
|
|
149
149
|
});
|
|
150
150
|
break;
|
|
151
151
|
default:
|
|
152
|
-
options.text = `[${t('message.tip
|
|
152
|
+
options.text = `[${t('message.tip.reminder message')}]`;
|
|
153
153
|
break;
|
|
154
154
|
}
|
|
155
155
|
return options;
|
|
@@ -164,19 +164,19 @@ function handleTipGrpUpdated(message: Message) {
|
|
|
164
164
|
switch (name) {
|
|
165
165
|
case 'muteAllMembers':
|
|
166
166
|
if (newGroupProfile[name]) {
|
|
167
|
-
text = `${t('message.tip
|
|
167
|
+
text = `${t('message.tip.admin')} ${operatorID} ${t('message.tip.enable all staff mute')}`;
|
|
168
168
|
} else {
|
|
169
|
-
text = `${t('message.tip
|
|
169
|
+
text = `${t('message.tip.admin')} ${operatorID} ${t('message.tip.unmute everyone')}`;
|
|
170
170
|
}
|
|
171
171
|
break;
|
|
172
172
|
case 'ownerID':
|
|
173
|
-
text = `${newGroupProfile[name]} ${t('message.tip
|
|
173
|
+
text = `${newGroupProfile[name]} ${t('message.tip.become the new owner')}`;
|
|
174
174
|
break;
|
|
175
175
|
case 'groupName':
|
|
176
|
-
text = `${operatorID} ${t('message.tip
|
|
176
|
+
text = `${operatorID} ${t('message.tip.modify group name')} ${newGroupProfile[name]}`;
|
|
177
177
|
break;
|
|
178
178
|
case 'notification':
|
|
179
|
-
text = `${operatorID} ${t('message.tip
|
|
179
|
+
text = `${operatorID} ${t('message.tip.post a new announcement')}`;
|
|
180
180
|
break;
|
|
181
181
|
default:
|
|
182
182
|
break;
|
|
@@ -12,6 +12,7 @@ import type { EmojiData } from './hooks';
|
|
|
12
12
|
export function EmojiPicker():React.ReactElement {
|
|
13
13
|
const [show, setShow] = useState(false);
|
|
14
14
|
const [index, setIndex] = useState(0);
|
|
15
|
+
const [className, setClassName] = useState('');
|
|
15
16
|
|
|
16
17
|
const handleShow = () => {
|
|
17
18
|
setShow(!show);
|
|
@@ -37,13 +38,18 @@ export function EmojiPicker():React.ReactElement {
|
|
|
37
38
|
}
|
|
38
39
|
};
|
|
39
40
|
|
|
41
|
+
const handleVisible = (data) => {
|
|
42
|
+
setClassName(`${!data.top && 'emoji-plugin-top'} ${!data.left && 'emoji-plugin-right'}`);
|
|
43
|
+
};
|
|
44
|
+
|
|
40
45
|
return (
|
|
41
46
|
<div className="emoji-picker input-plugin-popup">
|
|
42
47
|
<Icon width={20} height={20} type={IconTypes.EMOJI} onClick={handleShow} />
|
|
43
48
|
<Popup
|
|
44
|
-
className=
|
|
49
|
+
className={`input-plugin-popup-box ${className}`}
|
|
45
50
|
show={show}
|
|
46
51
|
close={handleShow}
|
|
52
|
+
handleVisible={handleVisible}
|
|
47
53
|
>
|
|
48
54
|
<ul className="face-list">
|
|
49
55
|
{
|
|
@@ -7,18 +7,85 @@ import { useUploadElement } from './hooks/useUploadElement';
|
|
|
7
7
|
import { MESSAGE_TYPE_NAME } from '../../constants';
|
|
8
8
|
import { useTUIMessageInputContext } from '../../context/TUIMessageInputContext';
|
|
9
9
|
import { Icon, IconTypes } from '../Icon';
|
|
10
|
+
import { useTUIChatStateContext } from '../../context';
|
|
10
11
|
|
|
11
12
|
export function InputPluginsDefalut():React.ReactElement {
|
|
12
13
|
const {
|
|
13
14
|
sendUploadMessage,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
// pluginConfig: {
|
|
16
|
+
// plugins: propsPlugins,
|
|
17
|
+
// showNumber: propsShowNumber,
|
|
18
|
+
// MoreIcon: propsMoreIcon,
|
|
19
|
+
// isEmojiPicker: porpsIsEmojiPicker,
|
|
20
|
+
// isImagePicker: porpsIsImagePicker,
|
|
21
|
+
// isVideoPicker: porpsIsVideoPicker,
|
|
22
|
+
// isFilePicker: porpsIsFilePicker,
|
|
23
|
+
// },
|
|
24
|
+
pluginConfig: propsPluginConfig,
|
|
17
25
|
} = useTUIMessageInputContext('TUIMessageInputDefault');
|
|
18
26
|
|
|
27
|
+
const { TUIMessageInputConfig } = useTUIChatStateContext('TUIMessageInput');
|
|
28
|
+
|
|
29
|
+
// const {
|
|
30
|
+
// pluginConfig: {
|
|
31
|
+
// plugins: contextPlugins,
|
|
32
|
+
// showNumber: contextShowNumber,
|
|
33
|
+
// MoreIcon: contextMoreIcon,
|
|
34
|
+
// isEmojiPicker: contextIsEmojiPicker,
|
|
35
|
+
// isImagePicker: contextIsImagePicker,
|
|
36
|
+
// isVideoPicker: contextIsVideoPicker,
|
|
37
|
+
// isFilePicker: contextIsFilePicker,
|
|
38
|
+
// },
|
|
39
|
+
// } = TUIMessageInputConfig;
|
|
40
|
+
|
|
41
|
+
// const propPlugins = propsPlugins || contextPlugins || [];
|
|
42
|
+
// const showNumber = propsShowNumber || contextShowNumber || 1;
|
|
43
|
+
// const MoreIcon = propsMoreIcon || contextMoreIcon;
|
|
44
|
+
|
|
45
|
+
const propPlugins = propsPluginConfig?.plugins
|
|
46
|
+
|| TUIMessageInputConfig?.pluginConfig?.plugins || [];
|
|
47
|
+
const showNumber = propsPluginConfig?.showNumber
|
|
48
|
+
|| TUIMessageInputConfig?.pluginConfig?.showNumber || 1;
|
|
49
|
+
const MoreIcon = propsPluginConfig?.MoreIcon || TUIMessageInputConfig?.pluginConfig?.MoreIcon;
|
|
50
|
+
|
|
51
|
+
const handlePluginBoolenParams = (
|
|
52
|
+
porpsVal?:boolean | undefined,
|
|
53
|
+
contextVal?:boolean | undefined,
|
|
54
|
+
defaultVal?: boolean,
|
|
55
|
+
) => {
|
|
56
|
+
if (typeof (porpsVal) === 'boolean') {
|
|
57
|
+
return porpsVal;
|
|
58
|
+
}
|
|
59
|
+
if (typeof (contextVal) === 'boolean') {
|
|
60
|
+
return contextVal;
|
|
61
|
+
}
|
|
62
|
+
return defaultVal;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const isEmojiPicker = handlePluginBoolenParams(
|
|
66
|
+
propsPluginConfig?.isEmojiPicker,
|
|
67
|
+
TUIMessageInputConfig?.pluginConfig?.isEmojiPicker,
|
|
68
|
+
true,
|
|
69
|
+
);
|
|
70
|
+
const isImagePicker = handlePluginBoolenParams(
|
|
71
|
+
propsPluginConfig?.isImagePicker,
|
|
72
|
+
TUIMessageInputConfig?.pluginConfig?.isImagePicker,
|
|
73
|
+
true,
|
|
74
|
+
);
|
|
75
|
+
const isVideoPicker = handlePluginBoolenParams(
|
|
76
|
+
propsPluginConfig?.isVideoPicker,
|
|
77
|
+
TUIMessageInputConfig?.pluginConfig?.isVideoPicker,
|
|
78
|
+
true,
|
|
79
|
+
);
|
|
80
|
+
const isFilePicker = handlePluginBoolenParams(
|
|
81
|
+
propsPluginConfig?.isFilePicker,
|
|
82
|
+
TUIMessageInputConfig?.pluginConfig?.isFilePicker,
|
|
83
|
+
true,
|
|
84
|
+
);
|
|
85
|
+
|
|
19
86
|
const pluginsRef = useRef(null);
|
|
20
87
|
|
|
21
|
-
const ImagePicker = useUploadElement({
|
|
88
|
+
const ImagePicker = isImagePicker && useUploadElement({
|
|
22
89
|
children: (
|
|
23
90
|
<div className="input-plugin-item">
|
|
24
91
|
<Icon width={20} height={20} type={IconTypes.IMAGE} />
|
|
@@ -33,7 +100,7 @@ export function InputPluginsDefalut():React.ReactElement {
|
|
|
33
100
|
},
|
|
34
101
|
});
|
|
35
102
|
|
|
36
|
-
const VideoPicker = useUploadElement({
|
|
103
|
+
const VideoPicker = isVideoPicker && useUploadElement({
|
|
37
104
|
children: (
|
|
38
105
|
<div className="input-plugin-item">
|
|
39
106
|
<Icon width={20} height={20} type={IconTypes.VIDEO} />
|
|
@@ -48,7 +115,7 @@ export function InputPluginsDefalut():React.ReactElement {
|
|
|
48
115
|
},
|
|
49
116
|
});
|
|
50
117
|
|
|
51
|
-
const FilePicker = useUploadElement({
|
|
118
|
+
const FilePicker = isFilePicker && useUploadElement({
|
|
52
119
|
children: (
|
|
53
120
|
<div className="input-plugin-item">
|
|
54
121
|
<Icon width={20} height={20} type={IconTypes.DOCUMENT} />
|
|
@@ -62,8 +129,9 @@ export function InputPluginsDefalut():React.ReactElement {
|
|
|
62
129
|
sendUploadMessage({ file }, MESSAGE_TYPE_NAME.FILE);
|
|
63
130
|
},
|
|
64
131
|
});
|
|
65
|
-
const plugins =
|
|
66
|
-
|
|
132
|
+
const plugins = [
|
|
133
|
+
isEmojiPicker && <EmojiPicker />, ImagePicker, VideoPicker, FilePicker, ...propPlugins,
|
|
134
|
+
].filter((item) => item);
|
|
67
135
|
|
|
68
136
|
return <Plugins ref={pluginsRef} plugins={plugins} showNumber={showNumber} MoreIcon={MoreIcon} />;
|
|
69
137
|
}
|
|
@@ -14,43 +14,58 @@ import { InputQuoteDefalut } from './InputQuoteDefalut';
|
|
|
14
14
|
import { TUIMessageInputDefault } from './TUIMessageInputDefault';
|
|
15
15
|
import { InputPluginsDefalut } from './InputPluginsDefalut';
|
|
16
16
|
import { TUIForward } from './TUIForward';
|
|
17
|
+
import { Transmitter } from './Transmitter';
|
|
17
18
|
|
|
18
|
-
export interface
|
|
19
|
+
export interface PluginConfigProps {
|
|
20
|
+
plugins?: Array<React.ReactElement>,
|
|
21
|
+
showNumber?: number,
|
|
22
|
+
MoreIcon?: React.ReactElement,
|
|
23
|
+
isEmojiPicker?: boolean,
|
|
24
|
+
isImagePicker?: boolean,
|
|
25
|
+
isVideoPicker?: boolean,
|
|
26
|
+
isFilePicker?: boolean,
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface TUIMessageInputBasicProps {
|
|
19
30
|
disabled?: boolean,
|
|
31
|
+
focus?: boolean,
|
|
32
|
+
textareaRef?: MutableRefObject<HTMLTextAreaElement | undefined>,
|
|
33
|
+
isTransmitter?: boolean,
|
|
34
|
+
className?: string,
|
|
35
|
+
pluginConfig?: PluginConfigProps,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface TUIMessageInputProps extends TUIMessageInputBasicProps {
|
|
20
39
|
TUIMessageInput?: React.ComponentType,
|
|
21
40
|
InputPlugins?: React.ComponentType<UnknowPorps>,
|
|
22
41
|
InputQuote?: React.ComponentType<UnknowPorps>,
|
|
23
|
-
focus?: boolean,
|
|
24
|
-
textareaRef?: MutableRefObject<HTMLTextAreaElement | undefined>,
|
|
25
|
-
plugins?: Array<React.ReactElement>,
|
|
26
|
-
showNumber?: number,
|
|
27
|
-
MoreIcon?: React.ReactElement,
|
|
28
42
|
}
|
|
43
|
+
|
|
29
44
|
function TUIMessageInputProvider<T extends TUIMessageInputProps>(props: PropsWithChildren<T>)
|
|
30
45
|
:React.ReactElement {
|
|
31
46
|
const {
|
|
32
47
|
children,
|
|
33
48
|
disabled: propsDisabled,
|
|
34
|
-
focus
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
MoreIcon,
|
|
49
|
+
focus: propsFoces,
|
|
50
|
+
pluginConfig,
|
|
51
|
+
textareaRef: propsTextareaRef,
|
|
38
52
|
} = props;
|
|
39
53
|
const messageInputState = useMessageInputState(props);
|
|
40
|
-
const { conversation } =
|
|
41
|
-
|
|
54
|
+
const { textareaRef, conversation } = useTUIChatStateContext('TUIMessageInput');
|
|
55
|
+
|
|
56
|
+
const contextDisabled = conversation?.type === TIM.TYPES.CONV_SYSTEM;
|
|
57
|
+
|
|
58
|
+
const { TUIMessageInputConfig } = useTUIChatStateContext('TUIMessageInput');
|
|
42
59
|
|
|
43
|
-
const
|
|
60
|
+
const focus = propsFoces || TUIMessageInputConfig?.focus;
|
|
44
61
|
|
|
45
62
|
const messageInputContextValue = useCreateMessageInputContext({
|
|
46
63
|
...messageInputState,
|
|
47
64
|
...props,
|
|
48
|
-
textareaRef,
|
|
49
|
-
disabled: propsDisabled || contextDisabled,
|
|
50
|
-
focus,
|
|
51
|
-
|
|
52
|
-
showNumber,
|
|
53
|
-
MoreIcon,
|
|
65
|
+
textareaRef: propsTextareaRef || TUIMessageInputConfig?.textareaRef || textareaRef,
|
|
66
|
+
disabled: propsDisabled || TUIMessageInputConfig?.disabled || contextDisabled,
|
|
67
|
+
focus: typeof (focus) === 'boolean' ? focus : true,
|
|
68
|
+
pluginConfig,
|
|
54
69
|
});
|
|
55
70
|
|
|
56
71
|
return (
|
|
@@ -66,6 +81,8 @@ function UnMemoizedTUIMessageInput<T extends TUIMessageInputProps>(props: PropsW
|
|
|
66
81
|
TUIMessageInput: PropTUIMessageInput,
|
|
67
82
|
InputPlugins: PropInputPlugins,
|
|
68
83
|
InputQuote: PropInputQuote,
|
|
84
|
+
isTransmitter = false,
|
|
85
|
+
className,
|
|
69
86
|
} = props;
|
|
70
87
|
|
|
71
88
|
const {
|
|
@@ -78,13 +95,16 @@ function UnMemoizedTUIMessageInput<T extends TUIMessageInputProps>(props: PropsW
|
|
|
78
95
|
|| ContextInputPlugins || InputPluginsDefalut || EmptyStateIndicator;
|
|
79
96
|
const InputQuote = PropInputQuote || ContextInputQuote || InputQuoteDefalut;
|
|
80
97
|
return (
|
|
81
|
-
<div className=
|
|
98
|
+
<div className={`tui-message-input ${className}`}>
|
|
82
99
|
<TUIMessageInputProvider {...props}>
|
|
83
100
|
<TUIForward />
|
|
84
101
|
<InputQuote />
|
|
85
102
|
<div className="tui-message-input-main">
|
|
86
|
-
<
|
|
87
|
-
|
|
103
|
+
<div className="tui-message-input-box">
|
|
104
|
+
<InputPlugins />
|
|
105
|
+
<Input />
|
|
106
|
+
</div>
|
|
107
|
+
{isTransmitter && <Transmitter />}
|
|
88
108
|
</div>
|
|
89
109
|
</TUIMessageInputProvider>
|
|
90
110
|
</div>
|
|
@@ -3,6 +3,7 @@ import { MESSAGE_OPERATE } from '../../constants';
|
|
|
3
3
|
import { useTUIChatStateContext } from '../../context';
|
|
4
4
|
|
|
5
5
|
import { useTUIMessageInputContext } from '../../context/TUIMessageInputContext';
|
|
6
|
+
import { formatEmojiString } from '../TUIMessage/utils/emojiMap';
|
|
6
7
|
|
|
7
8
|
export function TUIMessageInputDefault():React.ReactElement {
|
|
8
9
|
const {
|
|
@@ -23,7 +24,7 @@ export function TUIMessageInputDefault():React.ReactElement {
|
|
|
23
24
|
// operateData
|
|
24
25
|
useEffect(() => {
|
|
25
26
|
if (operateData[MESSAGE_OPERATE.REVOKE]) {
|
|
26
|
-
setText(operateData[MESSAGE_OPERATE.REVOKE].payload.text);
|
|
27
|
+
setText(formatEmojiString(operateData[MESSAGE_OPERATE.REVOKE].payload.text, 1));
|
|
27
28
|
}
|
|
28
29
|
}, [operateData]);
|
|
29
30
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { useTUIMessageInputContext } from '../../context/TUIMessageInputContext';
|
|
3
|
+
import { Icon, IconTypes } from '../Icon';
|
|
4
|
+
|
|
5
|
+
export function Transmitter():React.ReactElement {
|
|
6
|
+
const {
|
|
7
|
+
handleSubmit,
|
|
8
|
+
} = useTUIMessageInputContext('Transmitter');
|
|
9
|
+
|
|
10
|
+
return (
|
|
11
|
+
<div className="transmitter">
|
|
12
|
+
<Icon className="icon-send" type={IconTypes.SEND} onClick={handleSubmit} />
|
|
13
|
+
</div>
|
|
14
|
+
);
|
|
15
|
+
}
|
|
@@ -11,9 +11,7 @@ export const useCreateMessageInputContext = (value:any) => {
|
|
|
11
11
|
disabled,
|
|
12
12
|
focus,
|
|
13
13
|
operateData,
|
|
14
|
-
|
|
15
|
-
showNumber,
|
|
16
|
-
MoreIcon,
|
|
14
|
+
pluginConfig,
|
|
17
15
|
} = value;
|
|
18
16
|
const messageInputContext = useMemo(
|
|
19
17
|
() => ({
|
|
@@ -26,9 +24,7 @@ export const useCreateMessageInputContext = (value:any) => {
|
|
|
26
24
|
disabled,
|
|
27
25
|
focus,
|
|
28
26
|
operateData,
|
|
29
|
-
|
|
30
|
-
showNumber,
|
|
31
|
-
MoreIcon,
|
|
27
|
+
pluginConfig,
|
|
32
28
|
...value,
|
|
33
29
|
}),
|
|
34
30
|
[
|
|
@@ -40,10 +36,8 @@ export const useCreateMessageInputContext = (value:any) => {
|
|
|
40
36
|
sendFaceMessage,
|
|
41
37
|
disabled,
|
|
42
38
|
focus,
|
|
43
|
-
plugins,
|
|
44
|
-
showNumber,
|
|
45
|
-
MoreIcon,
|
|
46
39
|
operateData,
|
|
40
|
+
pluginConfig,
|
|
47
41
|
],
|
|
48
42
|
);
|
|
49
43
|
|
|
@@ -51,6 +51,13 @@ const reducer = (state:IinitState, action) => {
|
|
|
51
51
|
export const useMessageInputState = (props:TUIMessageInputProps) => {
|
|
52
52
|
const [state, dispatch] = useReducer(reducer, initState);
|
|
53
53
|
const { focus, textareaRef } = props;
|
|
54
|
+
|
|
55
|
+
const {
|
|
56
|
+
sendUploadMessage,
|
|
57
|
+
} = useUploadPicker({
|
|
58
|
+
state,
|
|
59
|
+
dispatch,
|
|
60
|
+
});
|
|
54
61
|
const {
|
|
55
62
|
handleChange,
|
|
56
63
|
handleSubmit,
|
|
@@ -64,6 +71,7 @@ export const useMessageInputState = (props:TUIMessageInputProps) => {
|
|
|
64
71
|
dispatch,
|
|
65
72
|
textareaRef,
|
|
66
73
|
focus,
|
|
74
|
+
sendUploadMessage,
|
|
67
75
|
});
|
|
68
76
|
|
|
69
77
|
const {
|
|
@@ -76,13 +84,6 @@ export const useMessageInputState = (props:TUIMessageInputProps) => {
|
|
|
76
84
|
insertText,
|
|
77
85
|
});
|
|
78
86
|
|
|
79
|
-
const {
|
|
80
|
-
sendUploadMessage,
|
|
81
|
-
} = useUploadPicker({
|
|
82
|
-
state,
|
|
83
|
-
dispatch,
|
|
84
|
-
});
|
|
85
|
-
|
|
86
87
|
return {
|
|
87
88
|
...state,
|
|
88
89
|
handleChange,
|
|
@@ -2,22 +2,21 @@ import React, {
|
|
|
2
2
|
useCallback,
|
|
3
3
|
ChangeEventHandler,
|
|
4
4
|
MutableRefObject,
|
|
5
|
-
useEffect,
|
|
6
|
-
useState,
|
|
7
5
|
} from 'react';
|
|
8
|
-
import { CONSTANT_DISPATCH_TYPE, MESSAGE_OPERATE } from '../../../constants';
|
|
6
|
+
import { CONSTANT_DISPATCH_TYPE, MESSAGE_OPERATE, MESSAGE_TYPE_NAME } from '../../../constants';
|
|
9
7
|
import {
|
|
10
8
|
useTUIChatActionContext,
|
|
11
|
-
useTUIChatStateContext,
|
|
12
9
|
useTUIKitContext,
|
|
13
10
|
} from '../../../context';
|
|
14
11
|
import { formatEmojiString } from '../../TUIMessage/utils/emojiMap';
|
|
15
12
|
import { useHandleQuoteMessage } from './useHandleQuoteMessage';
|
|
16
13
|
import type { IbaseStateProps, ICursorPos } from './useMessageInputState';
|
|
14
|
+
import { filesData } from './useUploadPicker';
|
|
17
15
|
|
|
18
16
|
interface useMessageInputTextProps extends IbaseStateProps {
|
|
19
17
|
focus?: boolean,
|
|
20
18
|
textareaRef?: MutableRefObject<HTMLTextAreaElement | undefined>,
|
|
19
|
+
sendUploadMessage?: (file: filesData, type: MESSAGE_TYPE_NAME) => void
|
|
21
20
|
}
|
|
22
21
|
|
|
23
22
|
export const useMessageInputText = (props:useMessageInputTextProps) => {
|
|
@@ -26,19 +25,11 @@ export const useMessageInputText = (props:useMessageInputTextProps) => {
|
|
|
26
25
|
dispatch,
|
|
27
26
|
focus,
|
|
28
27
|
textareaRef,
|
|
28
|
+
sendUploadMessage,
|
|
29
29
|
} = props;
|
|
30
30
|
|
|
31
|
-
const [quoteMessage, setQuoteMessage] = useState(null);
|
|
32
|
-
|
|
33
31
|
const { tim } = useTUIKitContext('useMessageInputText');
|
|
34
32
|
const { sendMessage, createTextMessage, operateMessage } = useTUIChatActionContext('TUIMessageInput');
|
|
35
|
-
const {
|
|
36
|
-
operateData,
|
|
37
|
-
} = useTUIChatStateContext('TUIMessageInputDefault');
|
|
38
|
-
|
|
39
|
-
useEffect(() => {
|
|
40
|
-
setQuoteMessage(operateData[MESSAGE_OPERATE.QUOTE]);
|
|
41
|
-
}, [operateData]);
|
|
42
33
|
|
|
43
34
|
const { cloudCustomData } = useHandleQuoteMessage();
|
|
44
35
|
|
|
@@ -101,27 +92,34 @@ export const useMessageInputText = (props:useMessageInputTextProps) => {
|
|
|
101
92
|
);
|
|
102
93
|
|
|
103
94
|
const handlePasete = useCallback(
|
|
104
|
-
async (e: ClipboardEvent) => {
|
|
95
|
+
async (e: React.ClipboardEvent | any) => {
|
|
105
96
|
e.preventDefault();
|
|
106
97
|
if (!(e.clipboardData && e.clipboardData.items)) {
|
|
107
98
|
return;
|
|
108
99
|
}
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
100
|
+
const { types, items } = e.clipboardData;
|
|
101
|
+
types.find((type, index) => {
|
|
102
|
+
const item = items[index];
|
|
103
|
+
switch (type) {
|
|
104
|
+
case 'text/plain':
|
|
105
|
+
item.getAsString((str) => {
|
|
106
|
+
dispatch({
|
|
107
|
+
type: CONSTANT_DISPATCH_TYPE.SET_TEXT,
|
|
108
|
+
getNewText: (text:string) => `${text}${str}`,
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
return true;
|
|
112
|
+
case 'Files': {
|
|
113
|
+
const file = item.getAsFile();
|
|
114
|
+
if (item && item.kind === 'file' && item.type.match(/^image\//i)) {
|
|
115
|
+
sendUploadMessage({ file }, MESSAGE_TYPE_NAME.IMAGE);
|
|
116
|
+
}
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
default:
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
125
123
|
},
|
|
126
124
|
[textareaRef],
|
|
127
125
|
);
|
|
@@ -16,6 +16,7 @@ export function useUploadPicker<T extends IbaseStateProps>(props:PropsWithChildr
|
|
|
16
16
|
createImageMessage,
|
|
17
17
|
createVideoMessage,
|
|
18
18
|
createFileMessage,
|
|
19
|
+
updataUploadPenddingMessageList,
|
|
19
20
|
} = useTUIChatActionContext('useUploadPicker');
|
|
20
21
|
|
|
21
22
|
const creatUploadMessage = {
|
|
@@ -29,6 +30,7 @@ export function useUploadPicker<T extends IbaseStateProps>(props:PropsWithChildr
|
|
|
29
30
|
payload: file,
|
|
30
31
|
onProgress(num:number) {
|
|
31
32
|
message.progress = num;
|
|
33
|
+
updataUploadPenddingMessageList(message);
|
|
32
34
|
},
|
|
33
35
|
});
|
|
34
36
|
sendMessage(message);
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
display: flex;
|
|
8
8
|
align-items: center;
|
|
9
9
|
padding: 14px 12px;
|
|
10
|
+
gap: 12px;
|
|
10
11
|
.input-box {
|
|
11
12
|
flex: 1;
|
|
12
13
|
display: flex;
|
|
@@ -55,6 +56,11 @@
|
|
|
55
56
|
display: none;
|
|
56
57
|
}
|
|
57
58
|
}
|
|
59
|
+
&-box {
|
|
60
|
+
flex: 1;
|
|
61
|
+
display: flex;
|
|
62
|
+
align-items: center;
|
|
63
|
+
}
|
|
58
64
|
}
|
|
59
65
|
|
|
60
66
|
ul li {
|
|
@@ -115,6 +121,9 @@ ul li {
|
|
|
115
121
|
}
|
|
116
122
|
}
|
|
117
123
|
}
|
|
124
|
+
.emoji-plugin-right {
|
|
125
|
+
right: 0;
|
|
126
|
+
}
|
|
118
127
|
}
|
|
119
128
|
|
|
120
129
|
|
|
@@ -279,4 +288,11 @@ ul li {
|
|
|
279
288
|
-webkit-box-orient: vertical;
|
|
280
289
|
}
|
|
281
290
|
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.transmitter {
|
|
294
|
+
padding: 0 10px;
|
|
295
|
+
.icon-send {
|
|
296
|
+
transform: rotate(90deg);
|
|
297
|
+
}
|
|
282
298
|
}
|
|
@@ -14,9 +14,11 @@ import { EmptyStateIndicator as DefaultEmptyStateIndicator } from '../EmptyState
|
|
|
14
14
|
|
|
15
15
|
import './styles/index.scss';
|
|
16
16
|
|
|
17
|
-
interface MessageListProps extends InfiniteScrollProps {
|
|
17
|
+
export interface MessageListProps extends InfiniteScrollProps {
|
|
18
|
+
className?: string,
|
|
18
19
|
messageList?: Array<Message>,
|
|
19
20
|
highlightedMessageId?: string,
|
|
21
|
+
intervalsTimer?: number,
|
|
20
22
|
}
|
|
21
23
|
function TUIMessageListWithContext <T extends MessageListProps>(
|
|
22
24
|
props: PropsWithChildren<T>,
|
|
@@ -25,6 +27,7 @@ function TUIMessageListWithContext <T extends MessageListProps>(
|
|
|
25
27
|
messageList: propsMessageList,
|
|
26
28
|
highlightedMessageId: propsHighlightedMessageId,
|
|
27
29
|
loadMore: propsLoadMore,
|
|
30
|
+
intervalsTimer: propsIntervalsTimer,
|
|
28
31
|
} = props;
|
|
29
32
|
|
|
30
33
|
const [ulElement, setUlElement] = useState<HTMLUListElement | null>(null);
|
|
@@ -37,20 +40,26 @@ function TUIMessageListWithContext <T extends MessageListProps>(
|
|
|
37
40
|
isSameLastMessageID,
|
|
38
41
|
messageListRef,
|
|
39
42
|
noMore,
|
|
43
|
+
TUIMessageListConfig,
|
|
40
44
|
} = useTUIChatStateContext('TUIMessageList');
|
|
41
|
-
const { loadMore: contextLoadMore } = useTUIChatActionContext('TUIMessageList');
|
|
45
|
+
const { loadMore: contextLoadMore, setHighlightedMessageId } = useTUIChatActionContext('TUIMessageList');
|
|
42
46
|
const { TUIMessage, EmptyStateIndicator = DefaultEmptyStateIndicator } = useComponentContext('TUIMessageList');
|
|
43
|
-
|
|
47
|
+
|
|
48
|
+
const highlightedMessageId = propsHighlightedMessageId
|
|
49
|
+
|| TUIMessageListConfig?.highlightedMessageId
|
|
50
|
+
|| contextHighlightedMessageId;
|
|
51
|
+
const intervalsTimer = (propsIntervalsTimer || TUIMessageListConfig?.intervalsTimer || 30) * 60;
|
|
44
52
|
|
|
45
53
|
const { messageList: enrichedMessageList } = useEnrichedMessageList({
|
|
46
|
-
messageList: propsMessageList || contextMessageList,
|
|
54
|
+
messageList: propsMessageList || TUIMessageListConfig?.messageList || contextMessageList,
|
|
47
55
|
});
|
|
48
56
|
|
|
49
|
-
const loadMore = propsLoadMore || contextLoadMore;
|
|
57
|
+
const loadMore = propsLoadMore || TUIMessageListConfig?.loadMore || contextLoadMore;
|
|
50
58
|
|
|
51
59
|
const elements = useMessageListElement({
|
|
52
60
|
enrichedMessageList,
|
|
53
61
|
TUIMessage,
|
|
62
|
+
intervalsTimer,
|
|
54
63
|
});
|
|
55
64
|
|
|
56
65
|
useEffect(() => {
|
|
@@ -59,10 +68,6 @@ function TUIMessageListWithContext <T extends MessageListProps>(
|
|
|
59
68
|
if (!isCompleted && parentElement?.clientHeight >= ulElement?.clientHeight) {
|
|
60
69
|
await loadMore();
|
|
61
70
|
}
|
|
62
|
-
if (highlightedMessageId) {
|
|
63
|
-
const element = ulElement?.querySelector(`[data-message-id='${highlightedMessageId}']`);
|
|
64
|
-
element?.scrollIntoView({ block: 'center' });
|
|
65
|
-
}
|
|
66
71
|
|
|
67
72
|
if (ulElement?.children && (!firstRender || !isSameLastMessageID)) {
|
|
68
73
|
const HTMLCollection = ulElement?.children || [];
|
|
@@ -76,8 +81,25 @@ function TUIMessageListWithContext <T extends MessageListProps>(
|
|
|
76
81
|
})();
|
|
77
82
|
}, [elements, firstRender]);
|
|
78
83
|
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
if (highlightedMessageId) {
|
|
86
|
+
const element = ulElement?.querySelector(`[data-message-id='${highlightedMessageId}']`);
|
|
87
|
+
if (!element) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const { children } = element.children[1];
|
|
91
|
+
children[children.length - 1].classList.add('high-lighted');
|
|
92
|
+
element?.scrollIntoView({ block: 'center' });
|
|
93
|
+
const timer = setTimeout(() => {
|
|
94
|
+
children[children.length - 1].classList.remove('high-lighted');
|
|
95
|
+
clearTimeout(timer);
|
|
96
|
+
setHighlightedMessageId('');
|
|
97
|
+
}, 1000);
|
|
98
|
+
}
|
|
99
|
+
}, [highlightedMessageId]);
|
|
100
|
+
|
|
79
101
|
return (
|
|
80
|
-
<div className=
|
|
102
|
+
<div className={`message-list ${!firstRender ? 'hide' : ''}`} ref={messageListRef}>
|
|
81
103
|
{noMore}
|
|
82
104
|
{noMore && <p className="no-more">no More</p>}
|
|
83
105
|
<InfiniteScroll
|