@droppii-org/chat-mobile 0.2.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/LICENSE +20 -0
- package/README.md +101 -0
- package/lib/module/assets/images/icon_bot.png +0 -0
- package/lib/module/assets/images/index.js +9 -0
- package/lib/module/assets/images/index.js.map +1 -0
- package/lib/module/assets/images/tag_bot.png +0 -0
- package/lib/module/assets/images/tag_mall.png +0 -0
- package/lib/module/build-ignore.d.js +2 -0
- package/lib/module/build-ignore.d.js.map +1 -0
- package/lib/module/components/Avatar/Avatar.js +81 -0
- package/lib/module/components/Avatar/Avatar.js.map +1 -0
- package/lib/module/components/Avatar/Avatar.types.js +2 -0
- package/lib/module/components/Avatar/Avatar.types.js.map +1 -0
- package/lib/module/components/Avatar/Avatar.utils.js +44 -0
- package/lib/module/components/Avatar/Avatar.utils.js.map +1 -0
- package/lib/module/components/Avatar/AvatarBadge.js +28 -0
- package/lib/module/components/Avatar/AvatarBadge.js.map +1 -0
- package/lib/module/components/Avatar/DoubleAvatar.js +74 -0
- package/lib/module/components/Avatar/DoubleAvatar.js.map +1 -0
- package/lib/module/components/Avatar/SingleAvatar.js +53 -0
- package/lib/module/components/Avatar/SingleAvatar.js.map +1 -0
- package/lib/module/components/Avatar/index.js +7 -0
- package/lib/module/components/Avatar/index.js.map +1 -0
- package/lib/module/components/ThreadCard/AvatarSection.js +37 -0
- package/lib/module/components/ThreadCard/AvatarSection.js.map +1 -0
- package/lib/module/components/ThreadCard/NamePrefixIcon.js +36 -0
- package/lib/module/components/ThreadCard/NamePrefixIcon.js.map +1 -0
- package/lib/module/components/ThreadCard/ThreadCard.js +132 -0
- package/lib/module/components/ThreadCard/ThreadCard.js.map +1 -0
- package/lib/module/components/ThreadCard/UnreadBadge.js +35 -0
- package/lib/module/components/ThreadCard/UnreadBadge.js.map +1 -0
- package/lib/module/components/ThreadCard/index.js +7 -0
- package/lib/module/components/ThreadCard/index.js.map +1 -0
- package/lib/module/components/ThreadCard/thread-card.utils.js +51 -0
- package/lib/module/components/ThreadCard/thread-card.utils.js.map +1 -0
- package/lib/module/core/index.js +11 -0
- package/lib/module/core/index.js.map +1 -0
- package/lib/module/core/useChatListener.js +62 -0
- package/lib/module/core/useChatListener.js.map +1 -0
- package/lib/module/core/useUserListener.js +72 -0
- package/lib/module/core/useUserListener.js.map +1 -0
- package/lib/module/hooks/query-keys.js +10 -0
- package/lib/module/hooks/query-keys.js.map +1 -0
- package/lib/module/hooks/useChatMessages.js +163 -0
- package/lib/module/hooks/useChatMessages.js.map +1 -0
- package/lib/module/hooks/useConversationList.js +51 -0
- package/lib/module/hooks/useConversationList.js.map +1 -0
- package/lib/module/index.js +14 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/screens/chat-detail/ChatAttachmentPanel.js +106 -0
- package/lib/module/screens/chat-detail/ChatAttachmentPanel.js.map +1 -0
- package/lib/module/screens/chat-detail/ChatComposer.js +288 -0
- package/lib/module/screens/chat-detail/ChatComposer.js.map +1 -0
- package/lib/module/screens/chat-detail/ChatDay.js +65 -0
- package/lib/module/screens/chat-detail/ChatDay.js.map +1 -0
- package/lib/module/screens/chat-detail/ChatDetail.js +104 -0
- package/lib/module/screens/chat-detail/ChatDetail.js.map +1 -0
- package/lib/module/screens/chat-detail/ChatDetailHeader.js +92 -0
- package/lib/module/screens/chat-detail/ChatDetailHeader.js.map +1 -0
- package/lib/module/screens/chat-detail/ChatList.js +145 -0
- package/lib/module/screens/chat-detail/ChatList.js.map +1 -0
- package/lib/module/screens/chat-detail/ChatLoadEarlier.js +23 -0
- package/lib/module/screens/chat-detail/ChatLoadEarlier.js.map +1 -0
- package/lib/module/screens/chat-detail/ChatQuickActions.js +85 -0
- package/lib/module/screens/chat-detail/ChatQuickActions.js.map +1 -0
- package/lib/module/screens/chat-detail/ChatScrollToBottom.js +12 -0
- package/lib/module/screens/chat-detail/ChatScrollToBottom.js.map +1 -0
- package/lib/module/screens/chat-detail/ChatTextBubble.js +62 -0
- package/lib/module/screens/chat-detail/ChatTextBubble.js.map +1 -0
- package/lib/module/screens/chat-detail/constants.js +59 -0
- package/lib/module/screens/chat-detail/constants.js.map +1 -0
- package/lib/module/screens/chat-detail/index.js +12 -0
- package/lib/module/screens/chat-detail/index.js.map +1 -0
- package/lib/module/screens/chat-detail/messages/ChatMessageBubble.js +24 -0
- package/lib/module/screens/chat-detail/messages/ChatMessageBubble.js.map +1 -0
- package/lib/module/screens/chat-detail/messages/types.js +4 -0
- package/lib/module/screens/chat-detail/messages/types.js.map +1 -0
- package/lib/module/screens/chat-detail/types.js +4 -0
- package/lib/module/screens/chat-detail/types.js.map +1 -0
- package/lib/module/screens/chat-detail/useChatActionPress.js +11 -0
- package/lib/module/screens/chat-detail/useChatActionPress.js.map +1 -0
- package/lib/module/screens/inbox/Inbox.js +134 -0
- package/lib/module/screens/inbox/Inbox.js.map +1 -0
- package/lib/module/screens/inbox/MessagesTab.js +58 -0
- package/lib/module/screens/inbox/MessagesTab.js.map +1 -0
- package/lib/module/screens/inbox/index.js +5 -0
- package/lib/module/screens/inbox/index.js.map +1 -0
- package/lib/module/services/apis.js +41 -0
- package/lib/module/services/apis.js.map +1 -0
- package/lib/module/services/index.js +5 -0
- package/lib/module/services/index.js.map +1 -0
- package/lib/module/services/message.js +38 -0
- package/lib/module/services/message.js.map +1 -0
- package/lib/module/store/conversation.js +89 -0
- package/lib/module/store/conversation.js.map +1 -0
- package/lib/module/store/index.js +6 -0
- package/lib/module/store/index.js.map +1 -0
- package/lib/module/store/storeConfig.js +19 -0
- package/lib/module/store/storeConfig.js.map +1 -0
- package/lib/module/store/user.js +25 -0
- package/lib/module/store/user.js.map +1 -0
- package/lib/module/translation/index.js +24 -0
- package/lib/module/translation/index.js.map +1 -0
- package/lib/module/translation/resources/i18n.js +10 -0
- package/lib/module/translation/resources/i18n.js.map +1 -0
- package/lib/module/types/auth.js +9 -0
- package/lib/module/types/auth.js.map +1 -0
- package/lib/module/types/chat.js +26 -0
- package/lib/module/types/chat.js.map +1 -0
- package/lib/module/types/message.js +16 -0
- package/lib/module/types/message.js.map +1 -0
- package/lib/module/utils/conversation.js +61 -0
- package/lib/module/utils/conversation.js.map +1 -0
- package/lib/module/utils/giftedChatMessage.js +90 -0
- package/lib/module/utils/giftedChatMessage.js.map +1 -0
- package/lib/module/utils/message.js +68 -0
- package/lib/module/utils/message.js.map +1 -0
- package/lib/module/utils/resolveMessageType.js +44 -0
- package/lib/module/utils/resolveMessageType.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/assets/images/index.d.ts +7 -0
- package/lib/typescript/src/assets/images/index.d.ts.map +1 -0
- package/lib/typescript/src/components/Avatar/Avatar.d.ts +4 -0
- package/lib/typescript/src/components/Avatar/Avatar.d.ts.map +1 -0
- package/lib/typescript/src/components/Avatar/Avatar.types.d.ts +18 -0
- package/lib/typescript/src/components/Avatar/Avatar.types.d.ts.map +1 -0
- package/lib/typescript/src/components/Avatar/Avatar.utils.d.ts +14 -0
- package/lib/typescript/src/components/Avatar/Avatar.utils.d.ts.map +1 -0
- package/lib/typescript/src/components/Avatar/AvatarBadge.d.ts +7 -0
- package/lib/typescript/src/components/Avatar/AvatarBadge.d.ts.map +1 -0
- package/lib/typescript/src/components/Avatar/DoubleAvatar.d.ts +13 -0
- package/lib/typescript/src/components/Avatar/DoubleAvatar.d.ts.map +1 -0
- package/lib/typescript/src/components/Avatar/SingleAvatar.d.ts +12 -0
- package/lib/typescript/src/components/Avatar/SingleAvatar.d.ts.map +1 -0
- package/lib/typescript/src/components/Avatar/index.d.ts +6 -0
- package/lib/typescript/src/components/Avatar/index.d.ts.map +1 -0
- package/lib/typescript/src/components/ThreadCard/AvatarSection.d.ts +8 -0
- package/lib/typescript/src/components/ThreadCard/AvatarSection.d.ts.map +1 -0
- package/lib/typescript/src/components/ThreadCard/NamePrefixIcon.d.ts +8 -0
- package/lib/typescript/src/components/ThreadCard/NamePrefixIcon.d.ts.map +1 -0
- package/lib/typescript/src/components/ThreadCard/ThreadCard.d.ts +11 -0
- package/lib/typescript/src/components/ThreadCard/ThreadCard.d.ts.map +1 -0
- package/lib/typescript/src/components/ThreadCard/UnreadBadge.d.ts +6 -0
- package/lib/typescript/src/components/ThreadCard/UnreadBadge.d.ts.map +1 -0
- package/lib/typescript/src/components/ThreadCard/index.d.ts +5 -0
- package/lib/typescript/src/components/ThreadCard/index.d.ts.map +1 -0
- package/lib/typescript/src/components/ThreadCard/thread-card.utils.d.ts +4 -0
- package/lib/typescript/src/components/ThreadCard/thread-card.utils.d.ts.map +1 -0
- package/lib/typescript/src/core/index.d.ts +3 -0
- package/lib/typescript/src/core/index.d.ts.map +1 -0
- package/lib/typescript/src/core/useChatListener.d.ts +2 -0
- package/lib/typescript/src/core/useChatListener.d.ts.map +1 -0
- package/lib/typescript/src/core/useUserListener.d.ts +2 -0
- package/lib/typescript/src/core/useUserListener.d.ts.map +1 -0
- package/lib/typescript/src/hooks/query-keys.d.ts +9 -0
- package/lib/typescript/src/hooks/query-keys.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useChatMessages.d.ts +21 -0
- package/lib/typescript/src/hooks/useChatMessages.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useConversationList.d.ts +8 -0
- package/lib/typescript/src/hooks/useConversationList.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +14 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/ChatAttachmentPanel.d.ts +3 -0
- package/lib/typescript/src/screens/chat-detail/ChatAttachmentPanel.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts +3 -0
- package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/ChatDay.d.ts +3 -0
- package/lib/typescript/src/screens/chat-detail/ChatDay.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts +4 -0
- package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/ChatDetailHeader.d.ts +4 -0
- package/lib/typescript/src/screens/chat-detail/ChatDetailHeader.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/ChatList.d.ts +3 -0
- package/lib/typescript/src/screens/chat-detail/ChatList.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/ChatLoadEarlier.d.ts +3 -0
- package/lib/typescript/src/screens/chat-detail/ChatLoadEarlier.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/ChatQuickActions.d.ts +3 -0
- package/lib/typescript/src/screens/chat-detail/ChatQuickActions.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/ChatScrollToBottom.d.ts +2 -0
- package/lib/typescript/src/screens/chat-detail/ChatScrollToBottom.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/ChatTextBubble.d.ts +3 -0
- package/lib/typescript/src/screens/chat-detail/ChatTextBubble.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/constants.d.ts +17 -0
- package/lib/typescript/src/screens/chat-detail/constants.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/index.d.ts +13 -0
- package/lib/typescript/src/screens/chat-detail/index.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/messages/ChatMessageBubble.d.ts +3 -0
- package/lib/typescript/src/screens/chat-detail/messages/ChatMessageBubble.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/messages/types.d.ts +13 -0
- package/lib/typescript/src/screens/chat-detail/messages/types.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/types.d.ts +86 -0
- package/lib/typescript/src/screens/chat-detail/types.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/useChatActionPress.d.ts +3 -0
- package/lib/typescript/src/screens/chat-detail/useChatActionPress.d.ts.map +1 -0
- package/lib/typescript/src/screens/inbox/Inbox.d.ts +10 -0
- package/lib/typescript/src/screens/inbox/Inbox.d.ts.map +1 -0
- package/lib/typescript/src/screens/inbox/MessagesTab.d.ts +7 -0
- package/lib/typescript/src/screens/inbox/MessagesTab.d.ts.map +1 -0
- package/lib/typescript/src/screens/inbox/index.d.ts +3 -0
- package/lib/typescript/src/screens/inbox/index.d.ts.map +1 -0
- package/lib/typescript/src/services/apis.d.ts +12 -0
- package/lib/typescript/src/services/apis.d.ts.map +1 -0
- package/lib/typescript/src/services/index.d.ts +3 -0
- package/lib/typescript/src/services/index.d.ts.map +1 -0
- package/lib/typescript/src/services/message.d.ts +21 -0
- package/lib/typescript/src/services/message.d.ts.map +1 -0
- package/lib/typescript/src/store/conversation.d.ts +24 -0
- package/lib/typescript/src/store/conversation.d.ts.map +1 -0
- package/lib/typescript/src/store/index.d.ts +4 -0
- package/lib/typescript/src/store/index.d.ts.map +1 -0
- package/lib/typescript/src/store/storeConfig.d.ts +4 -0
- package/lib/typescript/src/store/storeConfig.d.ts.map +1 -0
- package/lib/typescript/src/store/user.d.ts +12 -0
- package/lib/typescript/src/store/user.d.ts.map +1 -0
- package/lib/typescript/src/translation/index.d.ts +4 -0
- package/lib/typescript/src/translation/index.d.ts.map +1 -0
- package/lib/typescript/src/translation/resources/i18n.d.ts +5 -0
- package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -0
- package/lib/typescript/src/types/auth.d.ts +24 -0
- package/lib/typescript/src/types/auth.d.ts.map +1 -0
- package/lib/typescript/src/types/chat.d.ts +99 -0
- package/lib/typescript/src/types/chat.d.ts.map +1 -0
- package/lib/typescript/src/types/message.d.ts +15 -0
- package/lib/typescript/src/types/message.d.ts.map +1 -0
- package/lib/typescript/src/utils/conversation.d.ts +10 -0
- package/lib/typescript/src/utils/conversation.d.ts.map +1 -0
- package/lib/typescript/src/utils/giftedChatMessage.d.ts +10 -0
- package/lib/typescript/src/utils/giftedChatMessage.d.ts.map +1 -0
- package/lib/typescript/src/utils/message.d.ts +15 -0
- package/lib/typescript/src/utils/message.d.ts.map +1 -0
- package/lib/typescript/src/utils/resolveMessageType.d.ts +4 -0
- package/lib/typescript/src/utils/resolveMessageType.d.ts.map +1 -0
- package/package.json +209 -0
- package/src/assets/images/icon_bot.png +0 -0
- package/src/assets/images/index.ts +7 -0
- package/src/assets/images/tag_bot.png +0 -0
- package/src/assets/images/tag_mall.png +0 -0
- package/src/build-ignore.d.ts +24 -0
- package/src/components/Avatar/Avatar.tsx +105 -0
- package/src/components/Avatar/Avatar.types.ts +17 -0
- package/src/components/Avatar/Avatar.utils.ts +49 -0
- package/src/components/Avatar/AvatarBadge.tsx +29 -0
- package/src/components/Avatar/DoubleAvatar.tsx +89 -0
- package/src/components/Avatar/SingleAvatar.tsx +74 -0
- package/src/components/Avatar/index.ts +5 -0
- package/src/components/ThreadCard/AvatarSection.tsx +42 -0
- package/src/components/ThreadCard/NamePrefixIcon.tsx +45 -0
- package/src/components/ThreadCard/ThreadCard.tsx +145 -0
- package/src/components/ThreadCard/UnreadBadge.tsx +35 -0
- package/src/components/ThreadCard/index.ts +4 -0
- package/src/components/ThreadCard/thread-card.utils.ts +68 -0
- package/src/core/index.ts +10 -0
- package/src/core/useChatListener.ts +85 -0
- package/src/core/useUserListener.ts +86 -0
- package/src/hooks/query-keys.ts +11 -0
- package/src/hooks/useChatMessages.ts +243 -0
- package/src/hooks/useConversationList.ts +57 -0
- package/src/index.tsx +36 -0
- package/src/screens/chat-detail/ChatAttachmentPanel.tsx +142 -0
- package/src/screens/chat-detail/ChatComposer.tsx +412 -0
- package/src/screens/chat-detail/ChatDay.tsx +73 -0
- package/src/screens/chat-detail/ChatDetail.tsx +118 -0
- package/src/screens/chat-detail/ChatDetailHeader.tsx +114 -0
- package/src/screens/chat-detail/ChatList.tsx +187 -0
- package/src/screens/chat-detail/ChatLoadEarlier.tsx +20 -0
- package/src/screens/chat-detail/ChatQuickActions.tsx +108 -0
- package/src/screens/chat-detail/ChatScrollToBottom.tsx +8 -0
- package/src/screens/chat-detail/ChatTextBubble.tsx +73 -0
- package/src/screens/chat-detail/constants.ts +76 -0
- package/src/screens/chat-detail/index.ts +33 -0
- package/src/screens/chat-detail/messages/ChatMessageBubble.tsx +24 -0
- package/src/screens/chat-detail/messages/types.ts +14 -0
- package/src/screens/chat-detail/types.ts +97 -0
- package/src/screens/chat-detail/useChatActionPress.ts +17 -0
- package/src/screens/inbox/Inbox.tsx +164 -0
- package/src/screens/inbox/MessagesTab.tsx +62 -0
- package/src/screens/inbox/index.ts +2 -0
- package/src/services/apis.ts +60 -0
- package/src/services/index.ts +2 -0
- package/src/services/message.ts +61 -0
- package/src/store/conversation.ts +116 -0
- package/src/store/index.ts +3 -0
- package/src/store/storeConfig.ts +19 -0
- package/src/store/user.ts +26 -0
- package/src/translation/index.ts +30 -0
- package/src/translation/resources/i18n.ts +8 -0
- package/src/types/auth.ts +25 -0
- package/src/types/chat.ts +118 -0
- package/src/types/message.ts +17 -0
- package/src/utils/conversation.ts +106 -0
- package/src/utils/giftedChatMessage.ts +137 -0
- package/src/utils/message.ts +136 -0
- package/src/utils/resolveMessageType.ts +49 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect } from 'react';
|
|
4
|
+
import { useQuery } from '@tanstack/react-query';
|
|
5
|
+
import OpenIMSDK from '@droppii/openim-rn-client-sdk';
|
|
6
|
+
import { ChatAPI } from "../services/index.js";
|
|
7
|
+
import { conversationQueryKeys } from "./query-keys.js";
|
|
8
|
+
import { useConversationStore } from "../store/index.js";
|
|
9
|
+
import { mergeOpenIMIntoConversation } from "../utils/conversation.js";
|
|
10
|
+
export function useConversationList({
|
|
11
|
+
applicationType,
|
|
12
|
+
page = 1,
|
|
13
|
+
enabled = true
|
|
14
|
+
}) {
|
|
15
|
+
const newConversationSignal = useConversationStore(s => s.newConversationSignal);
|
|
16
|
+
const query = useQuery({
|
|
17
|
+
queryKey: [...conversationQueryKeys.list(applicationType), page],
|
|
18
|
+
enabled: enabled !== false,
|
|
19
|
+
queryFn: async () => {
|
|
20
|
+
const offset = (page - 1) * 20;
|
|
21
|
+
const [{
|
|
22
|
+
data: droppiiList
|
|
23
|
+
}, openimList] = await Promise.all([ChatAPI.queryConversations({
|
|
24
|
+
applicationType,
|
|
25
|
+
page,
|
|
26
|
+
pageSize: 20
|
|
27
|
+
}), OpenIMSDK.getConversationListSplit({
|
|
28
|
+
offset,
|
|
29
|
+
count: 20
|
|
30
|
+
})]);
|
|
31
|
+
const openimMap = new Map(openimList.map(c => [c.conversationID, c]));
|
|
32
|
+
const merged = droppiiList.map(conv => {
|
|
33
|
+
const openimConv = openimMap.get(conv.conversationId);
|
|
34
|
+
return openimConv ? mergeOpenIMIntoConversation(conv, openimConv) : conv;
|
|
35
|
+
});
|
|
36
|
+
useConversationStore.getState().updateConversations(merged);
|
|
37
|
+
return merged;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Refetch when a new conversation arrives from a realtime event that wasn't
|
|
42
|
+
// already in the store (signal is incremented by mergeOpenIMConversations).
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (newConversationSignal > 0) {
|
|
45
|
+
query.refetch();
|
|
46
|
+
}
|
|
47
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
48
|
+
}, [newConversationSignal]);
|
|
49
|
+
return query;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=useConversationList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useQuery","OpenIMSDK","ChatAPI","conversationQueryKeys","useConversationStore","mergeOpenIMIntoConversation","useConversationList","applicationType","page","enabled","newConversationSignal","s","query","queryKey","list","queryFn","offset","data","droppiiList","openimList","Promise","all","queryConversations","pageSize","getConversationListSplit","count","openimMap","Map","map","c","conversationID","merged","conv","openimConv","get","conversationId","getState","updateConversations","refetch"],"sourceRoot":"../../../src","sources":["hooks/useConversationList.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,QAAQ,QAAQ,uBAAuB;AAChD,OAAOC,SAAS,MAAM,+BAA+B;AACrD,SAASC,OAAO,QAAQ,sBAAa;AACrC,SAASC,qBAAqB,QAAQ,iBAAc;AACpD,SAASC,oBAAoB,QAAQ,mBAAU;AAC/C,SAASC,2BAA2B,QAAQ,0BAAuB;AAQnE,OAAO,SAASC,mBAAmBA,CAAC;EAClCC,eAAe;EACfC,IAAI,GAAG,CAAC;EACRC,OAAO,GAAG;AACJ,CAAC,EAAE;EACT,MAAMC,qBAAqB,GAAGN,oBAAoB,CAC/CO,CAAC,IAAKA,CAAC,CAACD,qBACX,CAAC;EAED,MAAME,KAAK,GAAGZ,QAAQ,CAAC;IACrBa,QAAQ,EAAE,CAAC,GAAGV,qBAAqB,CAACW,IAAI,CAACP,eAAe,CAAC,EAAEC,IAAI,CAAC;IAChEC,OAAO,EAAEA,OAAO,KAAK,KAAK;IAC1BM,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,MAAMC,MAAM,GAAG,CAACR,IAAI,GAAG,CAAC,IAAI,EAAE;MAC9B,MAAM,CAAC;QAAES,IAAI,EAAEC;MAAY,CAAC,EAAEC,UAAU,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CAC5DnB,OAAO,CAACoB,kBAAkB,CAAC;QAAEf,eAAe;QAAEC,IAAI;QAAEe,QAAQ,EAAE;MAAG,CAAC,CAAC,EACnEtB,SAAS,CAACuB,wBAAwB,CAAC;QAAER,MAAM;QAAES,KAAK,EAAE;MAAG,CAAC,CAAC,CAC1D,CAAC;MACF,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAACR,UAAU,CAACS,GAAG,CAAEC,CAAC,IAAK,CAACA,CAAC,CAACC,cAAc,EAAED,CAAC,CAAC,CAAC,CAAC;MAEvE,MAAME,MAAM,GAAGb,WAAW,CAACU,GAAG,CAAEI,IAAI,IAAK;QACvC,MAAMC,UAAU,GAAGP,SAAS,CAACQ,GAAG,CAACF,IAAI,CAACG,cAAc,CAAC;QACrD,OAAOF,UAAU,GACb5B,2BAA2B,CAAC2B,IAAI,EAAEC,UAAU,CAAC,GAC7CD,IAAI;MACV,CAAC,CAAC;MAEF5B,oBAAoB,CAACgC,QAAQ,CAAC,CAAC,CAACC,mBAAmB,CAACN,MAAM,CAAC;MAC3D,OAAOA,MAAM;IACf;EACF,CAAC,CAAC;;EAEF;EACA;EACAhC,SAAS,CAAC,MAAM;IACd,IAAIW,qBAAqB,GAAG,CAAC,EAAE;MAC7BE,KAAK,CAAC0B,OAAO,CAAC,CAAC;IACjB;IACA;EACF,CAAC,EAAE,CAAC5B,qBAAqB,CAAC,CAAC;EAE3B,OAAOE,KAAK;AACd","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export { ChatAPI } from "./services/index.js";
|
|
4
|
+
export * from "./core/index.js";
|
|
5
|
+
export * from "./store/index.js";
|
|
6
|
+
export * from "./hooks/useConversationList.js";
|
|
7
|
+
export * from "./hooks/useChatMessages.js";
|
|
8
|
+
export * from "./types/chat.js";
|
|
9
|
+
export { Avatar } from "./components/Avatar/index.js";
|
|
10
|
+
export { ThreadCard } from "./components/ThreadCard/index.js";
|
|
11
|
+
export { Inbox } from "./screens/inbox/index.js";
|
|
12
|
+
export { ChatDetail, ChatDetailHeader, ChatList, ChatComposer, ChatQuickActions, ChatAttachmentPanel, DEFAULT_Chat_QUICK_ACTIONS, DEFAULT_ATTACHMENT_ACTIONS } from "./screens/chat-detail/index.js";
|
|
13
|
+
export { mapOpenIMMessageToGiftedChat, mapOpenIMMessagesToGiftedChat } from "./utils/giftedChatMessage.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ChatAPI","Avatar","ThreadCard","Inbox","ChatDetail","ChatDetailHeader","ChatList","ChatComposer","ChatQuickActions","ChatAttachmentPanel","DEFAULT_Chat_QUICK_ACTIONS","DEFAULT_ATTACHMENT_ACTIONS","mapOpenIMMessageToGiftedChat","mapOpenIMMessagesToGiftedChat"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,OAAO,QAAQ,qBAAY;AACpC,cAAc,iBAAQ;AACtB,cAAc,kBAAS;AACvB,cAAc,gCAA6B;AAC3C,cAAc,4BAAyB;AACvC,cAAc,iBAAc;AAC5B,SAASC,MAAM,QAAQ,8BAAqB;AAC5C,SAASC,UAAU,QAAQ,kCAAyB;AACpD,SAASC,KAAK,QAAQ,0BAAiB;AACvC,SACEC,UAAU,EACVC,gBAAgB,EAChBC,QAAQ,EACRC,YAAY,EACZC,gBAAgB,EAChBC,mBAAmB,EACnBC,0BAA0B,EAC1BC,0BAA0B,QACrB,gCAAuB;AAc9B,SACEC,4BAA4B,EAC5BC,6BAA6B,QACxB,8BAA2B","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { memo, useCallback, useMemo } from 'react';
|
|
4
|
+
import { FlatList, StyleSheet } from 'react-native';
|
|
5
|
+
import { KContainer, KImage, KLabel, KColors, KSpacingValue } from '@droppii/libs';
|
|
6
|
+
import { ATTACHMENT_PANEL_COLUMNS } from "./constants.js";
|
|
7
|
+
import { useChatActionPress } from "./useChatActionPress.js";
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
9
|
+
const AttachmentActionItem = /*#__PURE__*/memo(({
|
|
10
|
+
action,
|
|
11
|
+
itemWidth,
|
|
12
|
+
onPress
|
|
13
|
+
}) => {
|
|
14
|
+
const handlePress = useCallback(() => {
|
|
15
|
+
onPress(action);
|
|
16
|
+
}, [action, onPress]);
|
|
17
|
+
return /*#__PURE__*/_jsxs(KContainer.Touchable, {
|
|
18
|
+
style: [styles.item, {
|
|
19
|
+
width: itemWidth
|
|
20
|
+
}],
|
|
21
|
+
onPress: handlePress,
|
|
22
|
+
disabled: action.disabled,
|
|
23
|
+
activeOpacity: 0.7,
|
|
24
|
+
children: [/*#__PURE__*/_jsx(KContainer.View, {
|
|
25
|
+
style: styles.iconCircle,
|
|
26
|
+
center: true,
|
|
27
|
+
children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
|
|
28
|
+
name: action.iconName,
|
|
29
|
+
provider: action.iconProvider ?? 'MaterialCommunityIcons',
|
|
30
|
+
size: 24,
|
|
31
|
+
color: action.disabled ? KColors.palette.gray.w300 : KColors.gray.dark
|
|
32
|
+
})
|
|
33
|
+
}), /*#__PURE__*/_jsx(KLabel.Text, {
|
|
34
|
+
typo: "TextXsMedium",
|
|
35
|
+
color: action.disabled ? KColors.palette.gray.w300 : KColors.gray.dark,
|
|
36
|
+
textAlign: "center",
|
|
37
|
+
numberOfLines: 2,
|
|
38
|
+
marginT: "0.25rem",
|
|
39
|
+
children: action.label
|
|
40
|
+
})]
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
AttachmentActionItem.displayName = 'AttachmentActionItem';
|
|
44
|
+
export const ChatAttachmentPanel = /*#__PURE__*/memo(({
|
|
45
|
+
actions,
|
|
46
|
+
columns = ATTACHMENT_PANEL_COLUMNS,
|
|
47
|
+
onActionPress,
|
|
48
|
+
renderAction
|
|
49
|
+
}) => {
|
|
50
|
+
const handleActionPress = useChatActionPress(onActionPress);
|
|
51
|
+
const itemWidth = useMemo(() => `${100 / columns}%`, [columns]);
|
|
52
|
+
const renderItem = useCallback(({
|
|
53
|
+
item
|
|
54
|
+
}) => {
|
|
55
|
+
const onPress = () => handleActionPress(item);
|
|
56
|
+
if (renderAction) {
|
|
57
|
+
return /*#__PURE__*/_jsx(_Fragment, {
|
|
58
|
+
children: renderAction(item, onPress)
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return /*#__PURE__*/_jsx(AttachmentActionItem, {
|
|
62
|
+
action: item,
|
|
63
|
+
itemWidth: itemWidth,
|
|
64
|
+
onPress: handleActionPress
|
|
65
|
+
});
|
|
66
|
+
}, [handleActionPress, itemWidth, renderAction]);
|
|
67
|
+
const keyExtractor = useCallback(item => item.id, []);
|
|
68
|
+
if (!actions?.length) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
return /*#__PURE__*/_jsx(KContainer.View, {
|
|
72
|
+
background: KColors.white,
|
|
73
|
+
flex: true,
|
|
74
|
+
children: /*#__PURE__*/_jsx(FlatList, {
|
|
75
|
+
data: actions,
|
|
76
|
+
renderItem: renderItem,
|
|
77
|
+
keyExtractor: keyExtractor,
|
|
78
|
+
numColumns: columns,
|
|
79
|
+
scrollEnabled: false,
|
|
80
|
+
contentContainerStyle: styles.grid,
|
|
81
|
+
columnWrapperStyle: columns > 1 ? styles.row : undefined
|
|
82
|
+
})
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
ChatAttachmentPanel.displayName = 'ChatAttachmentPanel';
|
|
86
|
+
const styles = StyleSheet.create({
|
|
87
|
+
grid: {
|
|
88
|
+
paddingHorizontal: KSpacingValue['0.5rem'],
|
|
89
|
+
paddingTop: KSpacingValue['1.5rem'],
|
|
90
|
+
paddingBottom: KSpacingValue['0.5rem']
|
|
91
|
+
},
|
|
92
|
+
row: {
|
|
93
|
+
justifyContent: 'flex-start'
|
|
94
|
+
},
|
|
95
|
+
item: {
|
|
96
|
+
alignItems: 'center',
|
|
97
|
+
marginBottom: KSpacingValue['1.5rem']
|
|
98
|
+
},
|
|
99
|
+
iconCircle: {
|
|
100
|
+
width: 44,
|
|
101
|
+
height: 44,
|
|
102
|
+
borderRadius: 22,
|
|
103
|
+
backgroundColor: KColors.hexToRgba(KColors.gray.light, 0.1)
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=ChatAttachmentPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["memo","useCallback","useMemo","FlatList","StyleSheet","KContainer","KImage","KLabel","KColors","KSpacingValue","ATTACHMENT_PANEL_COLUMNS","useChatActionPress","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","AttachmentActionItem","action","itemWidth","onPress","handlePress","Touchable","style","styles","item","width","disabled","activeOpacity","children","View","iconCircle","center","VectorIcons","name","iconName","provider","iconProvider","size","color","palette","gray","w300","dark","Text","typo","textAlign","numberOfLines","marginT","label","displayName","ChatAttachmentPanel","actions","columns","onActionPress","renderAction","handleActionPress","renderItem","keyExtractor","id","length","background","white","flex","data","numColumns","scrollEnabled","contentContainerStyle","grid","columnWrapperStyle","row","undefined","create","paddingHorizontal","paddingTop","paddingBottom","justifyContent","alignItems","marginBottom","height","borderRadius","backgroundColor","hexToRgba","light"],"sourceRoot":"../../../../src","sources":["screens/chat-detail/ChatAttachmentPanel.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { Keyboard, Platform, StyleSheet, TextInput } from 'react-native';
|
|
5
|
+
import Reanimated, { runOnJS, useAnimatedReaction, useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
|
|
6
|
+
import { useKeyboardState, useReanimatedKeyboardAnimation } from 'react-native-keyboard-controller';
|
|
7
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
8
|
+
import { KContainer, KImage, KColors, KSpacingValue } from '@droppii/libs';
|
|
9
|
+
import { ChatQuickActions } from "./ChatQuickActions.js";
|
|
10
|
+
import { ChatAttachmentPanel } from "./ChatAttachmentPanel.js";
|
|
11
|
+
import { getAttachmentPanelHeight } from "./constants.js";
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
const ACCESSORY_ANIMATION_MS = 250;
|
|
14
|
+
const ACCESSORY_SETTLE_MS = 150;
|
|
15
|
+
const IS_IOS = Platform.OS === 'ios';
|
|
16
|
+
const INPUT_FONT_SIZE = 16;
|
|
17
|
+
const INPUT_LINE_HEIGHT = 22.4;
|
|
18
|
+
const INPUT_MAX_HEIGHT = INPUT_LINE_HEIGHT * 5;
|
|
19
|
+
export const ChatComposer = /*#__PURE__*/memo(({
|
|
20
|
+
value,
|
|
21
|
+
placeholder = 'Nhập tin nhắn...',
|
|
22
|
+
onChangeText,
|
|
23
|
+
onSend,
|
|
24
|
+
onPressAttach,
|
|
25
|
+
onPressEmoji,
|
|
26
|
+
quickActions,
|
|
27
|
+
attachmentActions,
|
|
28
|
+
onQuickActionPress,
|
|
29
|
+
onAttachmentAction,
|
|
30
|
+
renderQuickAction,
|
|
31
|
+
renderAttachmentAction,
|
|
32
|
+
attachmentColumns
|
|
33
|
+
}) => {
|
|
34
|
+
const hasAttachmentActions = !!attachmentActions?.length;
|
|
35
|
+
const inputRef = useRef(null);
|
|
36
|
+
const isSwitchingToAttachmentRef = useRef(false);
|
|
37
|
+
const [isAttachmentOpen, setIsAttachmentOpen] = useState(false);
|
|
38
|
+
const [isInputFocused, setIsInputFocused] = useState(false);
|
|
39
|
+
const [isInputWrapped, setIsInputWrapped] = useState(false);
|
|
40
|
+
const insets = useSafeAreaInsets();
|
|
41
|
+
const isKeyboardVisible = useKeyboardState(state => state.isVisible);
|
|
42
|
+
const keyboardHeight = useKeyboardState(state => state.height);
|
|
43
|
+
const {
|
|
44
|
+
progress: keyboardProgress
|
|
45
|
+
} = useReanimatedKeyboardAnimation();
|
|
46
|
+
const panelHeight = useMemo(() => hasAttachmentActions ? getAttachmentPanelHeight(attachmentActions.length, attachmentColumns) : 0, [attachmentActions, attachmentColumns, hasAttachmentActions]);
|
|
47
|
+
const attachmentHeightSV = useSharedValue(0);
|
|
48
|
+
const panelHeightSV = useSharedValue(panelHeight);
|
|
49
|
+
const switchKeyboardHeightSV = useSharedValue(0);
|
|
50
|
+
const isKeyboardToAttachmentSwitchSV = useSharedValue(false);
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
panelHeightSV.value = panelHeight;
|
|
53
|
+
}, [panelHeight, panelHeightSV]);
|
|
54
|
+
const openAttachment = useCallback(() => {
|
|
55
|
+
attachmentHeightSV.value = withTiming(panelHeight, {
|
|
56
|
+
duration: ACCESSORY_ANIMATION_MS
|
|
57
|
+
});
|
|
58
|
+
setIsAttachmentOpen(true);
|
|
59
|
+
}, [attachmentHeightSV, panelHeight]);
|
|
60
|
+
const closeAttachment = useCallback(() => {
|
|
61
|
+
attachmentHeightSV.value = withTiming(0, {
|
|
62
|
+
duration: ACCESSORY_ANIMATION_MS
|
|
63
|
+
});
|
|
64
|
+
setIsAttachmentOpen(false);
|
|
65
|
+
}, [attachmentHeightSV]);
|
|
66
|
+
const finishKeyboardToAttachmentSwitch = useCallback(() => {
|
|
67
|
+
if (!isSwitchingToAttachmentRef.current) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
isSwitchingToAttachmentRef.current = false;
|
|
71
|
+
isKeyboardToAttachmentSwitchSV.value = false;
|
|
72
|
+
const targetHeight = panelHeightSV.value;
|
|
73
|
+
const startHeight = switchKeyboardHeightSV.value;
|
|
74
|
+
if (Math.abs(startHeight - targetHeight) < 1) {
|
|
75
|
+
attachmentHeightSV.value = targetHeight;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
attachmentHeightSV.value = withTiming(targetHeight, {
|
|
79
|
+
duration: ACCESSORY_SETTLE_MS
|
|
80
|
+
});
|
|
81
|
+
}, [attachmentHeightSV, isKeyboardToAttachmentSwitchSV, panelHeightSV, switchKeyboardHeightSV]);
|
|
82
|
+
useEffect(() => {
|
|
83
|
+
if (!isKeyboardVisible && isSwitchingToAttachmentRef.current) {
|
|
84
|
+
finishKeyboardToAttachmentSwitch();
|
|
85
|
+
}
|
|
86
|
+
}, [finishKeyboardToAttachmentSwitch, isKeyboardVisible]);
|
|
87
|
+
useAnimatedReaction(() => ({
|
|
88
|
+
switching: isKeyboardToAttachmentSwitchSV.value,
|
|
89
|
+
progress: keyboardProgress.value
|
|
90
|
+
}), (current, previous) => {
|
|
91
|
+
if (current.switching && current.progress === 0 && (previous?.progress ?? 1) > 0) {
|
|
92
|
+
runOnJS(finishKeyboardToAttachmentSwitch)();
|
|
93
|
+
}
|
|
94
|
+
}, [finishKeyboardToAttachmentSwitch]);
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
if (isSwitchingToAttachmentRef.current) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (isKeyboardVisible && isAttachmentOpen) {
|
|
100
|
+
closeAttachment();
|
|
101
|
+
}
|
|
102
|
+
}, [closeAttachment, isAttachmentOpen, isKeyboardVisible]);
|
|
103
|
+
const accessorySlotStyle = useAnimatedStyle(() => {
|
|
104
|
+
if (isKeyboardToAttachmentSwitchSV.value) {
|
|
105
|
+
return {
|
|
106
|
+
height: switchKeyboardHeightSV.value * (1 - keyboardProgress.value)
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
height: attachmentHeightSV.value
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
const handleSend = useCallback(() => {
|
|
114
|
+
onSend?.();
|
|
115
|
+
}, [onSend]);
|
|
116
|
+
const handleToggleAttachment = useCallback(() => {
|
|
117
|
+
if (!hasAttachmentActions) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (isAttachmentOpen) {
|
|
121
|
+
closeAttachment();
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
onPressAttach?.();
|
|
125
|
+
inputRef.current?.blur();
|
|
126
|
+
if (isKeyboardVisible && keyboardHeight > 0) {
|
|
127
|
+
isSwitchingToAttachmentRef.current = true;
|
|
128
|
+
switchKeyboardHeightSV.value = keyboardHeight;
|
|
129
|
+
isKeyboardToAttachmentSwitchSV.value = true;
|
|
130
|
+
setIsAttachmentOpen(true);
|
|
131
|
+
Keyboard.dismiss();
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
openAttachment();
|
|
135
|
+
}, [closeAttachment, isAttachmentOpen, isKeyboardVisible, keyboardHeight, isKeyboardToAttachmentSwitchSV, onPressAttach, hasAttachmentActions, openAttachment, switchKeyboardHeightSV]);
|
|
136
|
+
const handleInputFocus = useCallback(() => {
|
|
137
|
+
setIsInputFocused(true);
|
|
138
|
+
if (!isAttachmentOpen) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
closeAttachment();
|
|
142
|
+
}, [closeAttachment, isAttachmentOpen]);
|
|
143
|
+
const handleInputBlur = useCallback(() => {
|
|
144
|
+
setIsInputFocused(false);
|
|
145
|
+
}, []);
|
|
146
|
+
const handleInputContentSizeChange = useCallback(event => {
|
|
147
|
+
const {
|
|
148
|
+
height
|
|
149
|
+
} = event.nativeEvent.contentSize;
|
|
150
|
+
setIsInputWrapped(height > INPUT_LINE_HEIGHT + 4);
|
|
151
|
+
}, []);
|
|
152
|
+
const isMultilineInput = useMemo(() => {
|
|
153
|
+
if (!value) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
return value.includes('\n') || isInputWrapped;
|
|
157
|
+
}, [isInputWrapped, value]);
|
|
158
|
+
useEffect(() => {
|
|
159
|
+
if (!value) {
|
|
160
|
+
setIsInputWrapped(false);
|
|
161
|
+
}
|
|
162
|
+
}, [value]);
|
|
163
|
+
const renderEmojiNode = useCallback(() => /*#__PURE__*/_jsx(KContainer.Touchable, {
|
|
164
|
+
marginR: "0.5rem",
|
|
165
|
+
onPress: onPressEmoji,
|
|
166
|
+
activeOpacity: 0.7,
|
|
167
|
+
children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
|
|
168
|
+
name: "sticker-o",
|
|
169
|
+
size: 22,
|
|
170
|
+
color: KColors.gray.normal
|
|
171
|
+
})
|
|
172
|
+
}), [onPressEmoji]);
|
|
173
|
+
const inputRowStyle = useMemo(() => ({
|
|
174
|
+
paddingBottom: isAttachmentOpen || isKeyboardVisible ? 8 : insets.bottom + 12
|
|
175
|
+
}), [insets.bottom, isAttachmentOpen, isKeyboardVisible]);
|
|
176
|
+
return /*#__PURE__*/_jsxs(KContainer.View, {
|
|
177
|
+
background: 'rgba(131, 137, 157, 0.05)',
|
|
178
|
+
children: [/*#__PURE__*/_jsx(ChatQuickActions, {
|
|
179
|
+
actions: quickActions,
|
|
180
|
+
onActionPress: onQuickActionPress,
|
|
181
|
+
renderAction: renderQuickAction
|
|
182
|
+
}), /*#__PURE__*/_jsxs(KContainer.View, {
|
|
183
|
+
row: true,
|
|
184
|
+
alignItems: true,
|
|
185
|
+
paddingH: "0.75rem",
|
|
186
|
+
paddingT: "0.75rem",
|
|
187
|
+
paddingB: "0.75rem",
|
|
188
|
+
style: inputRowStyle,
|
|
189
|
+
children: [hasAttachmentActions ? /*#__PURE__*/_jsx(KContainer.Touchable, {
|
|
190
|
+
onPress: handleToggleAttachment,
|
|
191
|
+
center: true,
|
|
192
|
+
br: "round",
|
|
193
|
+
children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
|
|
194
|
+
name: isAttachmentOpen ? 'close-circle-o' : 'plus-circle-o',
|
|
195
|
+
size: 24,
|
|
196
|
+
color: isAttachmentOpen ? KColors.palette.primary.w400 : KColors.palette.gray.w600
|
|
197
|
+
})
|
|
198
|
+
}) : null, /*#__PURE__*/_jsx(KContainer.View, {
|
|
199
|
+
flex: true,
|
|
200
|
+
marginL: hasAttachmentActions ? '0.75rem' : undefined,
|
|
201
|
+
style: styles.inputWrapper,
|
|
202
|
+
children: /*#__PURE__*/_jsxs(KContainer.View, {
|
|
203
|
+
row: true,
|
|
204
|
+
alignItems: isMultilineInput ? 'flex-end' : 'center',
|
|
205
|
+
brW: 1,
|
|
206
|
+
brC: isInputFocused ? KColors.palette.primary.w400 : KColors.palette.gray.w100,
|
|
207
|
+
background: KColors.white,
|
|
208
|
+
paddingL: "0.75rem",
|
|
209
|
+
style: styles.inputContainer,
|
|
210
|
+
children: [/*#__PURE__*/_jsx(KContainer.View, {
|
|
211
|
+
marginR: "0.75rem",
|
|
212
|
+
children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
|
|
213
|
+
name: "chat-suggest-o",
|
|
214
|
+
size: 24,
|
|
215
|
+
color: KColors.gray.normal
|
|
216
|
+
})
|
|
217
|
+
}), /*#__PURE__*/_jsx(TextInput, {
|
|
218
|
+
ref: inputRef,
|
|
219
|
+
placeholder: placeholder,
|
|
220
|
+
placeholderTextColor: KColors.palette.gray.w200,
|
|
221
|
+
value: value,
|
|
222
|
+
onChangeText: onChangeText,
|
|
223
|
+
onFocus: handleInputFocus,
|
|
224
|
+
onBlur: handleInputBlur,
|
|
225
|
+
onContentSizeChange: handleInputContentSizeChange,
|
|
226
|
+
multiline: true,
|
|
227
|
+
blurOnSubmit: false,
|
|
228
|
+
scrollEnabled: true,
|
|
229
|
+
allowFontScaling: false,
|
|
230
|
+
underlineColorAndroid: KColors.transparent,
|
|
231
|
+
selectionColor: KColors.selector,
|
|
232
|
+
textAlignVertical: isMultilineInput ? 'top' : 'center',
|
|
233
|
+
style: [styles.textInput]
|
|
234
|
+
}), renderEmojiNode()]
|
|
235
|
+
})
|
|
236
|
+
}), /*#__PURE__*/_jsx(KContainer.Touchable, {
|
|
237
|
+
onPress: handleSend,
|
|
238
|
+
width: 40,
|
|
239
|
+
height: 40,
|
|
240
|
+
center: true,
|
|
241
|
+
br: "round",
|
|
242
|
+
background: KColors.palette.primary.w400,
|
|
243
|
+
marginL: "0.75rem",
|
|
244
|
+
children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
|
|
245
|
+
name: "send",
|
|
246
|
+
provider: "MaterialCommunityIcons",
|
|
247
|
+
size: 20,
|
|
248
|
+
color: KColors.white
|
|
249
|
+
})
|
|
250
|
+
})]
|
|
251
|
+
}), hasAttachmentActions ? /*#__PURE__*/_jsx(Reanimated.View, {
|
|
252
|
+
style: [styles.accessorySlot, accessorySlotStyle],
|
|
253
|
+
pointerEvents: isAttachmentOpen ? 'auto' : 'none',
|
|
254
|
+
children: /*#__PURE__*/_jsx(ChatAttachmentPanel, {
|
|
255
|
+
actions: attachmentActions,
|
|
256
|
+
columns: attachmentColumns,
|
|
257
|
+
onActionPress: onAttachmentAction,
|
|
258
|
+
renderAction: renderAttachmentAction
|
|
259
|
+
})
|
|
260
|
+
}) : null]
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
ChatComposer.displayName = 'ChatComposer';
|
|
264
|
+
const styles = StyleSheet.create({
|
|
265
|
+
accessorySlot: {
|
|
266
|
+
overflow: 'hidden',
|
|
267
|
+
backgroundColor: KColors.palette.gray.w25
|
|
268
|
+
},
|
|
269
|
+
inputWrapper: {
|
|
270
|
+
overflow: 'hidden'
|
|
271
|
+
},
|
|
272
|
+
inputContainer: {
|
|
273
|
+
borderRadius: KSpacingValue['1.25rem'],
|
|
274
|
+
minHeight: 48,
|
|
275
|
+
paddingVertical: IS_IOS ? 4 : 0
|
|
276
|
+
},
|
|
277
|
+
textInput: {
|
|
278
|
+
flex: 1,
|
|
279
|
+
maxHeight: INPUT_MAX_HEIGHT,
|
|
280
|
+
fontSize: INPUT_FONT_SIZE,
|
|
281
|
+
lineHeight: INPUT_LINE_HEIGHT,
|
|
282
|
+
color: KColors.palette.gray.w900,
|
|
283
|
+
paddingVertical: IS_IOS ? 0 : 4,
|
|
284
|
+
paddingHorizontal: IS_IOS ? 2 : 0,
|
|
285
|
+
marginVertical: IS_IOS ? 0 : -8
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
//# sourceMappingURL=ChatComposer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["memo","useCallback","useEffect","useMemo","useRef","useState","Keyboard","Platform","StyleSheet","TextInput","Reanimated","runOnJS","useAnimatedReaction","useAnimatedStyle","useSharedValue","withTiming","useKeyboardState","useReanimatedKeyboardAnimation","useSafeAreaInsets","KContainer","KImage","KColors","KSpacingValue","ChatQuickActions","ChatAttachmentPanel","getAttachmentPanelHeight","jsx","_jsx","jsxs","_jsxs","ACCESSORY_ANIMATION_MS","ACCESSORY_SETTLE_MS","IS_IOS","OS","INPUT_FONT_SIZE","INPUT_LINE_HEIGHT","INPUT_MAX_HEIGHT","ChatComposer","value","placeholder","onChangeText","onSend","onPressAttach","onPressEmoji","quickActions","attachmentActions","onQuickActionPress","onAttachmentAction","renderQuickAction","renderAttachmentAction","attachmentColumns","hasAttachmentActions","length","inputRef","isSwitchingToAttachmentRef","isAttachmentOpen","setIsAttachmentOpen","isInputFocused","setIsInputFocused","isInputWrapped","setIsInputWrapped","insets","isKeyboardVisible","state","isVisible","keyboardHeight","height","progress","keyboardProgress","panelHeight","attachmentHeightSV","panelHeightSV","switchKeyboardHeightSV","isKeyboardToAttachmentSwitchSV","openAttachment","duration","closeAttachment","finishKeyboardToAttachmentSwitch","current","targetHeight","startHeight","Math","abs","switching","previous","accessorySlotStyle","handleSend","handleToggleAttachment","blur","dismiss","handleInputFocus","handleInputBlur","handleInputContentSizeChange","event","nativeEvent","contentSize","isMultilineInput","includes","renderEmojiNode","Touchable","marginR","onPress","activeOpacity","children","VectorIcons","name","size","color","gray","normal","inputRowStyle","paddingBottom","bottom","View","background","actions","onActionPress","renderAction","row","alignItems","paddingH","paddingT","paddingB","style","center","br","palette","primary","w400","w600","flex","marginL","undefined","styles","inputWrapper","brW","brC","w100","white","paddingL","inputContainer","ref","placeholderTextColor","w200","onFocus","onBlur","onContentSizeChange","multiline","blurOnSubmit","scrollEnabled","allowFontScaling","underlineColorAndroid","transparent","selectionColor","selector","textAlignVertical","textInput","width","provider","accessorySlot","pointerEvents","columns","displayName","create","overflow","backgroundColor","w25","borderRadius","minHeight","paddingVertical","maxHeight","fontSize","lineHeight","w900","paddingHorizontal","marginVertical"],"sourceRoot":"../../../../src","sources":["screens/chat-detail/ChatComposer.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { memo, useMemo } from 'react';
|
|
4
|
+
import { KContainer, KLabel } from '@droppii/libs';
|
|
5
|
+
import { CHAT_BUBBLE_COLORS } from "./constants.js";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
const formatTime = date => date.toLocaleTimeString('vi-VN', {
|
|
8
|
+
hour: '2-digit',
|
|
9
|
+
minute: '2-digit',
|
|
10
|
+
hour12: false
|
|
11
|
+
});
|
|
12
|
+
const formatDayLabel = createdAt => {
|
|
13
|
+
const date = new Date(createdAt);
|
|
14
|
+
if (Number.isNaN(date.getTime())) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const today = new Date();
|
|
18
|
+
today.setHours(0, 0, 0, 0);
|
|
19
|
+
const messageDay = new Date(date);
|
|
20
|
+
messageDay.setHours(0, 0, 0, 0);
|
|
21
|
+
if (messageDay.getTime() === today.getTime()) {
|
|
22
|
+
return `${formatTime(date)} Hôm nay`;
|
|
23
|
+
}
|
|
24
|
+
const yesterday = new Date(today);
|
|
25
|
+
yesterday.setDate(yesterday.getDate() - 1);
|
|
26
|
+
if (messageDay.getTime() === yesterday.getTime()) {
|
|
27
|
+
return `${formatTime(date)} Hôm qua`;
|
|
28
|
+
}
|
|
29
|
+
if (messageDay.getFullYear() === today.getFullYear()) {
|
|
30
|
+
return `${formatTime(date)} ${date.toLocaleDateString('vi-VN', {
|
|
31
|
+
day: 'numeric',
|
|
32
|
+
month: 'long'
|
|
33
|
+
})}`;
|
|
34
|
+
}
|
|
35
|
+
return `${formatTime(date)} ${date.toLocaleDateString('vi-VN', {
|
|
36
|
+
day: 'numeric',
|
|
37
|
+
month: 'long',
|
|
38
|
+
year: 'numeric'
|
|
39
|
+
})}`;
|
|
40
|
+
};
|
|
41
|
+
export const ChatDay = /*#__PURE__*/memo(({
|
|
42
|
+
createdAt,
|
|
43
|
+
containerStyle,
|
|
44
|
+
wrapperStyle
|
|
45
|
+
}) => {
|
|
46
|
+
const dateStr = useMemo(() => createdAt == null ? null : formatDayLabel(createdAt), [createdAt]);
|
|
47
|
+
if (!dateStr) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
return /*#__PURE__*/_jsx(KContainer.View, {
|
|
51
|
+
center: true,
|
|
52
|
+
marginV: "0.5rem",
|
|
53
|
+
style: containerStyle,
|
|
54
|
+
children: /*#__PURE__*/_jsx(KContainer.View, {
|
|
55
|
+
style: wrapperStyle,
|
|
56
|
+
children: /*#__PURE__*/_jsx(KLabel.Text, {
|
|
57
|
+
typo: "TextXsNormal",
|
|
58
|
+
color: CHAT_BUBBLE_COLORS.dayLabel,
|
|
59
|
+
children: dateStr
|
|
60
|
+
})
|
|
61
|
+
})
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
ChatDay.displayName = 'ChatDay';
|
|
65
|
+
//# sourceMappingURL=ChatDay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["memo","useMemo","KContainer","KLabel","CHAT_BUBBLE_COLORS","jsx","_jsx","formatTime","date","toLocaleTimeString","hour","minute","hour12","formatDayLabel","createdAt","Date","Number","isNaN","getTime","today","setHours","messageDay","yesterday","setDate","getDate","getFullYear","toLocaleDateString","day","month","year","ChatDay","containerStyle","wrapperStyle","dateStr","View","center","marginV","style","children","Text","typo","color","dayLabel","displayName"],"sourceRoot":"../../../../src","sources":["screens/chat-detail/ChatDay.tsx"],"mappings":"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","ignoreList":[]}
|