react-native-chatbot-ai 0.1.19 → 0.1.22
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/lib/module/components/Drawer/DeleteSessionPopup.js +113 -0
- package/lib/module/components/Drawer/DeleteSessionPopup.js.map +1 -0
- package/lib/module/components/Drawer/DrawerContent.js +21 -8
- package/lib/module/components/Drawer/DrawerContent.js.map +1 -1
- package/lib/module/components/Drawer/RenameSessionPopup.js +121 -0
- package/lib/module/components/Drawer/RenameSessionPopup.js.map +1 -0
- package/lib/module/components/Drawer/SearchInput.js +10 -3
- package/lib/module/components/Drawer/SearchInput.js.map +1 -1
- package/lib/module/components/Drawer/SessionItem.js +36 -20
- package/lib/module/components/Drawer/SessionItem.js.map +1 -1
- package/lib/module/components/Drawer/SessionList.js +2 -5
- package/lib/module/components/Drawer/SessionList.js.map +1 -1
- package/lib/module/components/Drawer/SessionOptionsBottomSheet.js +129 -0
- package/lib/module/components/Drawer/SessionOptionsBottomSheet.js.map +1 -0
- package/lib/module/components/Drawer/ShareSessionPopup.js +132 -0
- package/lib/module/components/Drawer/ShareSessionPopup.js.map +1 -0
- package/lib/module/components/chat/ChatEmpty.js +15 -4
- package/lib/module/components/chat/ChatEmpty.js.map +1 -1
- package/lib/module/components/chat/ChatHeader.js +10 -4
- package/lib/module/components/chat/ChatHeader.js.map +1 -1
- package/lib/module/components/chat/ChatMessageList.js +75 -24
- package/lib/module/components/chat/ChatMessageList.js.map +1 -1
- package/lib/module/components/chat/SuggestionItem.js +2 -1
- package/lib/module/components/chat/SuggestionItem.js.map +1 -1
- package/lib/module/components/chat/footer/index.js +77 -15
- package/lib/module/components/chat/footer/index.js.map +1 -1
- package/lib/module/components/chat/footer/item/UploadImageItem.js +21 -1
- package/lib/module/components/chat/footer/item/UploadImageItem.js.map +1 -1
- package/lib/module/components/chat/index.js +7 -6
- package/lib/module/components/chat/index.js.map +1 -1
- package/lib/module/components/chat/item/ChatAIAnswerMessageItem.js +36 -5
- package/lib/module/components/chat/item/ChatAIAnswerMessageItem.js.map +1 -1
- package/lib/module/components/chat/item/DeeplinkItem.js +30 -2
- package/lib/module/components/chat/item/DeeplinkItem.js.map +1 -1
- package/lib/module/components/chat/item/MessageActionsBar.js +243 -0
- package/lib/module/components/chat/item/MessageActionsBar.js.map +1 -0
- package/lib/module/components/chat/item/actions/ActionButton.js +56 -0
- package/lib/module/components/chat/item/actions/ActionButton.js.map +1 -0
- package/lib/module/components/portal/BottomSheet.js +245 -0
- package/lib/module/components/portal/BottomSheet.js.map +1 -0
- package/lib/module/components/portal/Popup.js +278 -0
- package/lib/module/components/portal/Popup.js.map +1 -0
- package/lib/module/components/portal/index.js +11 -5
- package/lib/module/components/portal/index.js.map +1 -1
- package/lib/module/components/product/CardHorizontal.js +44 -7
- package/lib/module/components/product/CardHorizontal.js.map +1 -1
- package/lib/module/constants/events.js +33 -0
- package/lib/module/constants/events.js.map +1 -1
- package/lib/module/constants/index.js +5 -1
- package/lib/module/constants/index.js.map +1 -1
- package/lib/module/constants/query.js +5 -1
- package/lib/module/constants/query.js.map +1 -1
- package/lib/module/context/ChatContext.js +9 -3
- package/lib/module/context/ChatContext.js.map +1 -1
- package/lib/module/hooks/message/useSendMessage.js +21 -3
- package/lib/module/hooks/message/useSendMessage.js.map +1 -1
- package/lib/module/hooks/message/useStreamMessage.js +10 -3
- package/lib/module/hooks/message/useStreamMessage.js.map +1 -1
- package/lib/module/hooks/messageActions/index.js +13 -0
- package/lib/module/hooks/messageActions/index.js.map +1 -0
- package/lib/module/hooks/messageActions/useAudioPlayer.js +269 -0
- package/lib/module/hooks/messageActions/useAudioPlayer.js.map +1 -0
- package/lib/module/hooks/messageActions/useCopyToClipboard.js +38 -0
- package/lib/module/hooks/messageActions/useCopyToClipboard.js.map +1 -0
- package/lib/module/hooks/messageActions/useFeedback.js +93 -0
- package/lib/module/hooks/messageActions/useFeedback.js.map +1 -0
- package/lib/module/hooks/messageActions/useSendFeedback.js +24 -0
- package/lib/module/hooks/messageActions/useSendFeedback.js.map +1 -0
- package/lib/module/hooks/messageActions/useShareMessage.js +128 -0
- package/lib/module/hooks/messageActions/useShareMessage.js.map +1 -0
- package/lib/module/hooks/session/useDeleteSession.js +23 -0
- package/lib/module/hooks/session/useDeleteSession.js.map +1 -0
- package/lib/module/hooks/session/useRenameSession.js +28 -0
- package/lib/module/hooks/session/useRenameSession.js.map +1 -0
- package/lib/module/hooks/session/useSearchSessions.js +5 -1
- package/lib/module/hooks/session/useSearchSessions.js.map +1 -1
- package/lib/module/hooks/session/useShareSession.js +16 -0
- package/lib/module/hooks/session/useShareSession.js.map +1 -0
- package/lib/module/hooks/upload/useImageUpload.js +2 -1
- package/lib/module/hooks/upload/useImageUpload.js.map +1 -1
- package/lib/module/services/endpoints.js +6 -1
- package/lib/module/services/endpoints.js.map +1 -1
- package/lib/module/services/index.js +1 -0
- package/lib/module/services/index.js.map +1 -1
- package/lib/module/services/playbackService.js +22 -0
- package/lib/module/services/playbackService.js.map +1 -0
- package/lib/module/store/audioPlayer.js +75 -0
- package/lib/module/store/audioPlayer.js.map +1 -0
- package/lib/module/store/messageActions.js +160 -0
- package/lib/module/store/messageActions.js.map +1 -0
- package/lib/module/store/session.js +6 -3
- package/lib/module/store/session.js.map +1 -1
- package/lib/module/translation/index.js +21 -25
- package/lib/module/translation/index.js.map +1 -1
- package/lib/module/translation/resources/i18n.js +39 -0
- package/lib/module/translation/resources/i18n.js.map +1 -0
- package/lib/module/types/chat.js +12 -1
- package/lib/module/types/chat.js.map +1 -1
- package/lib/module/types/index.js +1 -0
- package/lib/module/types/index.js.map +1 -1
- package/lib/module/types/messageActions.js +56 -0
- package/lib/module/types/messageActions.js.map +1 -0
- package/lib/module/utils/textCleaner.js +67 -0
- package/lib/module/utils/textCleaner.js.map +1 -0
- package/lib/module/utils/ui.js +27 -1
- package/lib/module/utils/ui.js.map +1 -1
- package/lib/typescript/src/components/Drawer/DeleteSessionPopup.d.ts +3 -0
- package/lib/typescript/src/components/Drawer/DeleteSessionPopup.d.ts.map +1 -0
- package/lib/typescript/src/components/Drawer/DrawerContent.d.ts.map +1 -1
- package/lib/typescript/src/components/Drawer/RenameSessionPopup.d.ts +3 -0
- package/lib/typescript/src/components/Drawer/RenameSessionPopup.d.ts.map +1 -0
- package/lib/typescript/src/components/Drawer/SearchInput.d.ts.map +1 -1
- package/lib/typescript/src/components/Drawer/SessionItem.d.ts.map +1 -1
- package/lib/typescript/src/components/Drawer/SessionList.d.ts.map +1 -1
- package/lib/typescript/src/components/Drawer/SessionOptionsBottomSheet.d.ts +3 -0
- package/lib/typescript/src/components/Drawer/SessionOptionsBottomSheet.d.ts.map +1 -0
- package/lib/typescript/src/components/Drawer/ShareSessionPopup.d.ts +3 -0
- package/lib/typescript/src/components/Drawer/ShareSessionPopup.d.ts.map +1 -0
- package/lib/typescript/src/components/chat/ChatEmpty.d.ts.map +1 -1
- package/lib/typescript/src/components/chat/ChatHeader.d.ts.map +1 -1
- package/lib/typescript/src/components/chat/ChatMessageList.d.ts.map +1 -1
- package/lib/typescript/src/components/chat/SuggestionItem.d.ts +3 -2
- package/lib/typescript/src/components/chat/SuggestionItem.d.ts.map +1 -1
- package/lib/typescript/src/components/chat/footer/index.d.ts.map +1 -1
- package/lib/typescript/src/components/chat/footer/item/UploadImageItem.d.ts.map +1 -1
- package/lib/typescript/src/components/chat/index.d.ts.map +1 -1
- package/lib/typescript/src/components/chat/item/ChatAIAnswerMessageItem.d.ts.map +1 -1
- package/lib/typescript/src/components/chat/item/DeeplinkItem.d.ts +2 -1
- package/lib/typescript/src/components/chat/item/DeeplinkItem.d.ts.map +1 -1
- package/lib/typescript/src/components/chat/item/MessageActionsBar.d.ts +16 -0
- package/lib/typescript/src/components/chat/item/MessageActionsBar.d.ts.map +1 -0
- package/lib/typescript/src/components/chat/item/actions/ActionButton.d.ts +19 -0
- package/lib/typescript/src/components/chat/item/actions/ActionButton.d.ts.map +1 -0
- package/lib/typescript/src/components/portal/BottomSheet.d.ts +8 -0
- package/lib/typescript/src/components/portal/BottomSheet.d.ts.map +1 -0
- package/lib/typescript/src/components/portal/Popup.d.ts +4 -0
- package/lib/typescript/src/components/portal/Popup.d.ts.map +1 -0
- package/lib/typescript/src/components/portal/index.d.ts.map +1 -1
- package/lib/typescript/src/components/product/CardHorizontal.d.ts +3 -2
- package/lib/typescript/src/components/product/CardHorizontal.d.ts.map +1 -1
- package/lib/typescript/src/constants/events.d.ts +33 -0
- package/lib/typescript/src/constants/events.d.ts.map +1 -1
- package/lib/typescript/src/constants/index.d.ts +5 -1
- package/lib/typescript/src/constants/index.d.ts.map +1 -1
- package/lib/typescript/src/constants/query.d.ts +4 -0
- package/lib/typescript/src/constants/query.d.ts.map +1 -1
- package/lib/typescript/src/context/ChatContext.d.ts.map +1 -1
- package/lib/typescript/src/hooks/message/useSendMessage.d.ts +2 -2
- package/lib/typescript/src/hooks/message/useSendMessage.d.ts.map +1 -1
- package/lib/typescript/src/hooks/message/useStreamMessage.d.ts.map +1 -1
- package/lib/typescript/src/hooks/messageActions/index.d.ts +10 -0
- package/lib/typescript/src/hooks/messageActions/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/messageActions/useAudioPlayer.d.ts +14 -0
- package/lib/typescript/src/hooks/messageActions/useAudioPlayer.d.ts.map +1 -0
- package/lib/typescript/src/hooks/messageActions/useCopyToClipboard.d.ts +9 -0
- package/lib/typescript/src/hooks/messageActions/useCopyToClipboard.d.ts.map +1 -0
- package/lib/typescript/src/hooks/messageActions/useFeedback.d.ts +18 -0
- package/lib/typescript/src/hooks/messageActions/useFeedback.d.ts.map +1 -0
- package/lib/typescript/src/hooks/messageActions/useSendFeedback.d.ts +6 -0
- package/lib/typescript/src/hooks/messageActions/useSendFeedback.d.ts.map +1 -0
- package/lib/typescript/src/hooks/messageActions/useShareMessage.d.ts +12 -0
- package/lib/typescript/src/hooks/messageActions/useShareMessage.d.ts.map +1 -0
- package/lib/typescript/src/hooks/session/useDeleteSession.d.ts +2 -0
- package/lib/typescript/src/hooks/session/useDeleteSession.d.ts.map +1 -0
- package/lib/typescript/src/hooks/session/useRenameSession.d.ts +2 -0
- package/lib/typescript/src/hooks/session/useRenameSession.d.ts.map +1 -0
- package/lib/typescript/src/hooks/session/useSearchSessions.d.ts +1 -1
- package/lib/typescript/src/hooks/session/useSearchSessions.d.ts.map +1 -1
- package/lib/typescript/src/hooks/session/useShareSession.d.ts +2 -0
- package/lib/typescript/src/hooks/session/useShareSession.d.ts.map +1 -0
- package/lib/typescript/src/hooks/upload/useImageUpload.d.ts +1 -1
- package/lib/typescript/src/hooks/upload/useImageUpload.d.ts.map +1 -1
- package/lib/typescript/src/services/endpoints.d.ts +5 -0
- package/lib/typescript/src/services/endpoints.d.ts.map +1 -1
- package/lib/typescript/src/services/index.d.ts +1 -0
- package/lib/typescript/src/services/index.d.ts.map +1 -1
- package/lib/typescript/src/services/playbackService.d.ts +2 -0
- package/lib/typescript/src/services/playbackService.d.ts.map +1 -0
- package/lib/typescript/src/store/audioPlayer.d.ts +27 -0
- package/lib/typescript/src/store/audioPlayer.d.ts.map +1 -0
- package/lib/typescript/src/store/messageActions.d.ts +9 -0
- package/lib/typescript/src/store/messageActions.d.ts.map +1 -0
- package/lib/typescript/src/store/session.d.ts.map +1 -1
- package/lib/typescript/src/translation/index.d.ts +3 -4
- package/lib/typescript/src/translation/index.d.ts.map +1 -1
- 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/chat.d.ts +16 -1
- package/lib/typescript/src/types/chat.d.ts.map +1 -1
- package/lib/typescript/src/types/dto.d.ts +11 -0
- package/lib/typescript/src/types/dto.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +1 -0
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/types/messageActions.d.ts +85 -0
- package/lib/typescript/src/types/messageActions.d.ts.map +1 -0
- package/lib/typescript/src/types/ui.d.ts +16 -1
- package/lib/typescript/src/types/ui.d.ts.map +1 -1
- package/lib/typescript/src/utils/textCleaner.d.ts +30 -0
- package/lib/typescript/src/utils/textCleaner.d.ts.map +1 -0
- package/lib/typescript/src/utils/ui.d.ts +12 -1
- package/lib/typescript/src/utils/ui.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/components/Drawer/DeleteSessionPopup.tsx +121 -0
- package/src/components/Drawer/DrawerContent.tsx +23 -7
- package/src/components/Drawer/RenameSessionPopup.tsx +145 -0
- package/src/components/Drawer/SearchInput.tsx +11 -2
- package/src/components/Drawer/SessionItem.tsx +22 -8
- package/src/components/Drawer/SessionList.tsx +0 -2
- package/src/components/Drawer/SessionOptionsBottomSheet.tsx +138 -0
- package/src/components/Drawer/ShareSessionPopup.tsx +145 -0
- package/src/components/chat/ChatEmpty.tsx +15 -5
- package/src/components/chat/ChatHeader.tsx +9 -4
- package/src/components/chat/ChatMessageList.tsx +78 -18
- package/src/components/chat/SuggestionItem.tsx +4 -3
- package/src/components/chat/footer/index.tsx +95 -14
- package/src/components/chat/footer/item/UploadImageItem.tsx +21 -1
- package/src/components/chat/index.tsx +8 -11
- package/src/components/chat/item/ChatAIAnswerMessageItem.tsx +55 -6
- package/src/components/chat/item/DeeplinkItem.tsx +30 -2
- package/src/components/chat/item/MessageActionsBar.tsx +326 -0
- package/src/components/chat/item/actions/ActionButton.tsx +65 -0
- package/src/components/portal/BottomSheet.tsx +307 -0
- package/src/components/portal/Popup.tsx +345 -0
- package/src/components/portal/index.tsx +5 -1
- package/src/components/product/CardHorizontal.tsx +45 -10
- package/src/constants/events.ts +34 -0
- package/src/constants/index.ts +6 -1
- package/src/constants/query.ts +4 -0
- package/src/context/ChatContext.tsx +6 -0
- package/src/hooks/message/useSendMessage.ts +47 -4
- package/src/hooks/message/useStreamMessage.ts +15 -4
- package/src/hooks/messageActions/index.ts +10 -0
- package/src/hooks/messageActions/useAudioPlayer.ts +346 -0
- package/src/hooks/messageActions/useCopyToClipboard.ts +38 -0
- package/src/hooks/messageActions/useFeedback.ts +114 -0
- package/src/hooks/messageActions/useSendFeedback.ts +31 -0
- package/src/hooks/messageActions/useShareMessage.ts +146 -0
- package/src/hooks/session/useDeleteSession.ts +25 -0
- package/src/hooks/session/useRenameSession.ts +37 -0
- package/src/hooks/session/useSearchSessions.ts +6 -1
- package/src/hooks/session/useShareSession.ts +22 -0
- package/src/hooks/upload/useImageUpload.ts +6 -2
- package/src/ignore.d.ts +20 -1
- package/src/services/endpoints.ts +10 -0
- package/src/services/index.ts +1 -0
- package/src/services/playbackService.ts +22 -0
- package/src/store/audioPlayer.ts +112 -0
- package/src/store/messageActions.ts +161 -0
- package/src/store/session.ts +4 -2
- package/src/translation/index.ts +27 -19
- package/src/translation/resources/i18n.ts +45 -0
- package/src/types/chat.ts +21 -1
- package/src/types/dto.ts +14 -0
- package/src/types/index.ts +1 -0
- package/src/types/messageActions.ts +131 -0
- package/src/types/ui.ts +19 -1
- package/src/utils/textCleaner.ts +65 -0
- package/src/utils/ui.tsx +29 -2
- package/lib/module/translation/resources/vi.js +0 -12
- package/lib/module/translation/resources/vi.js.map +0 -1
- package/lib/typescript/src/translation/resources/vi.d.ts +0 -11
- package/lib/typescript/src/translation/resources/vi.d.ts.map +0 -1
- package/src/translation/resources/vi.ts +0 -10
|
@@ -4,12 +4,13 @@ import { useCallback } from 'react';
|
|
|
4
4
|
import { useQueryClient } from '@tanstack/react-query';
|
|
5
5
|
import useSessionStore from "../../store/session.js";
|
|
6
6
|
import { useStreamMessage } from "./useStreamMessage.js";
|
|
7
|
-
import { events } from "../../constants/events.js";
|
|
7
|
+
import { events, GAEvents } from "../../constants/events.js";
|
|
8
8
|
import { DeviceEventEmitter } from 'react-native';
|
|
9
9
|
import { MessageType, RoleType } from "../../types/index.js";
|
|
10
10
|
import dayjs from 'dayjs';
|
|
11
11
|
import { useCreateSession } from "../session/useCreateSession.js";
|
|
12
12
|
import { QUERY_KEYS } from "../../constants/query.js";
|
|
13
|
+
import { useChatContext } from "../../context/ChatContext.js";
|
|
13
14
|
export const useSendMessage = () => {
|
|
14
15
|
const {
|
|
15
16
|
startStream,
|
|
@@ -20,7 +21,8 @@ export const useSendMessage = () => {
|
|
|
20
21
|
mutateAsync: createSession
|
|
21
22
|
} = useCreateSession();
|
|
22
23
|
const queryClient = useQueryClient();
|
|
23
|
-
const
|
|
24
|
+
const logGA = useChatContext().logGA;
|
|
25
|
+
const onSendMessage = useCallback(async (message, attachments, actionType) => {
|
|
24
26
|
const messageId = dayjs().valueOf().toString();
|
|
25
27
|
const messageItem = {
|
|
26
28
|
id: messageId,
|
|
@@ -52,6 +54,22 @@ export const useSendMessage = () => {
|
|
|
52
54
|
refetchPage: (_page, index) => index === 0
|
|
53
55
|
});
|
|
54
56
|
}
|
|
57
|
+
logGA(GAEvents.chatDetailSendBtnTap, {
|
|
58
|
+
chat_type: useSessionStore.getState().sessionLogType,
|
|
59
|
+
conversation_id: latestSessionId || useSessionStore.getState().sessionId,
|
|
60
|
+
action_type: actionType
|
|
61
|
+
});
|
|
62
|
+
if (attachments?.length && attachments.length > 0) {
|
|
63
|
+
const totalFileCount = attachments.filter(i => i.type === 'file').length;
|
|
64
|
+
const totalImageCount = attachments.filter(i => i.type === 'image').length;
|
|
65
|
+
const fileType = [totalFileCount > 0 ? 'file' : null, totalImageCount > 0 ? 'image' : null].filter(Boolean).join(', ');
|
|
66
|
+
logGA(GAEvents.chatDetailMultimodalTap, {
|
|
67
|
+
conversation_id: latestSessionId || useSessionStore.getState().sessionId,
|
|
68
|
+
file_type: fileType,
|
|
69
|
+
total_image_count: totalImageCount,
|
|
70
|
+
total_file_count: totalFileCount
|
|
71
|
+
});
|
|
72
|
+
}
|
|
55
73
|
startStream({
|
|
56
74
|
content: message,
|
|
57
75
|
stream: true,
|
|
@@ -61,7 +79,7 @@ export const useSendMessage = () => {
|
|
|
61
79
|
},
|
|
62
80
|
manual_retry_attempts: 0
|
|
63
81
|
}, latestSessionId, messageId);
|
|
64
|
-
}, [startStream, createSession, queryClient]);
|
|
82
|
+
}, [startStream, createSession, queryClient, logGA]);
|
|
65
83
|
return {
|
|
66
84
|
onSendMessage,
|
|
67
85
|
stopStream,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useQueryClient","useSessionStore","useStreamMessage","events","DeviceEventEmitter","MessageType","RoleType","dayjs","useCreateSession","QUERY_KEYS","useSendMessage","startStream","stopStream","retryStream","mutateAsync","createSession","queryClient","onSendMessage","message","attachments","messageId","valueOf","toString","messageItem","id","type","user_message","created_at","toISOString","modified_at","content","additional_kwargs","response_metadata","name","role","user","metadata","manual_retry_attempts","group_suggestion_id","emit","updateOneMessage","latestSessionId","getState","sessionId","resSession","title","setSessionId","refetchQueries","queryKey","SEARCH_SESSIONS","refetchPage","_page","index","stream","source"],"sourceRoot":"../../../../src","sources":["hooks/message/useSendMessage.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,cAAc,QAAQ,uBAAuB;AACtD,OAAOC,eAAe,MAAM,wBAAqB;AACjD,SAASC,gBAAgB,QAAQ,uBAAoB;AACrD,SAASC,MAAM,QAAQ,2BAAwB;
|
|
1
|
+
{"version":3,"names":["useCallback","useQueryClient","useSessionStore","useStreamMessage","events","GAEvents","DeviceEventEmitter","MessageType","RoleType","dayjs","useCreateSession","QUERY_KEYS","useChatContext","useSendMessage","startStream","stopStream","retryStream","mutateAsync","createSession","queryClient","logGA","onSendMessage","message","attachments","actionType","messageId","valueOf","toString","messageItem","id","type","user_message","created_at","toISOString","modified_at","content","additional_kwargs","response_metadata","name","role","user","metadata","manual_retry_attempts","group_suggestion_id","emit","updateOneMessage","latestSessionId","getState","sessionId","resSession","title","setSessionId","refetchQueries","queryKey","SEARCH_SESSIONS","refetchPage","_page","index","chatDetailSendBtnTap","chat_type","sessionLogType","conversation_id","action_type","length","totalFileCount","filter","i","totalImageCount","fileType","Boolean","join","chatDetailMultimodalTap","file_type","total_image_count","total_file_count","stream","source"],"sourceRoot":"../../../../src","sources":["hooks/message/useSendMessage.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,18 +3,20 @@
|
|
|
3
3
|
import { useEffect, useRef, useCallback } from 'react';
|
|
4
4
|
import { useChatContext } from "../../context/ChatContext.js";
|
|
5
5
|
import { ENDPOINTS } from "../../services/endpoints.js";
|
|
6
|
+
import { SendActionLogType } from "../../types/index.js";
|
|
6
7
|
import EventSource from 'react-native-sse';
|
|
7
8
|
import useStreamMessageStore from "../../store/streamMessage.js";
|
|
8
9
|
import throttle from 'lodash/throttle';
|
|
9
10
|
import { DeviceEventEmitter } from 'react-native';
|
|
10
|
-
import { events } from "../../constants/events.js";
|
|
11
|
+
import { events, GAEvents } from "../../constants/events.js";
|
|
11
12
|
import useSessionStore from "../../store/session.js";
|
|
12
13
|
export const useStreamMessage = () => {
|
|
13
14
|
const sessionId = useSessionStore(state => state.sessionId);
|
|
14
15
|
const esRef = useRef(null);
|
|
15
16
|
const sessionIdRef = useRef(sessionId);
|
|
16
17
|
const {
|
|
17
|
-
apiAddress
|
|
18
|
+
apiAddress,
|
|
19
|
+
logGA
|
|
18
20
|
} = useChatContext();
|
|
19
21
|
const setStreamMessage = useStreamMessageStore(state => state.setStreamMessage);
|
|
20
22
|
const setIsStreaming = useStreamMessageStore(state => state.setIsStreaming);
|
|
@@ -118,6 +120,11 @@ export const useStreamMessage = () => {
|
|
|
118
120
|
...messageItem,
|
|
119
121
|
metadata: {}
|
|
120
122
|
});
|
|
123
|
+
logGA(GAEvents.chatDetailSendBtnTap, {
|
|
124
|
+
chat_type: useSessionStore.getState().sessionLogType,
|
|
125
|
+
conversation_id: sessionId,
|
|
126
|
+
action_type: SendActionLogType.retry
|
|
127
|
+
});
|
|
121
128
|
startStream({
|
|
122
129
|
content: messageItem.content,
|
|
123
130
|
stream: true,
|
|
@@ -127,7 +134,7 @@ export const useStreamMessage = () => {
|
|
|
127
134
|
},
|
|
128
135
|
manual_retry_attempts: 0
|
|
129
136
|
}, undefined, messageItem.id);
|
|
130
|
-
}, [startStream]);
|
|
137
|
+
}, [startStream, logGA, sessionId]);
|
|
131
138
|
useEffect(() => {
|
|
132
139
|
return () => {
|
|
133
140
|
stopStream();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","useCallback","useChatContext","ENDPOINTS","EventSource","useStreamMessageStore","throttle","DeviceEventEmitter","events","useSessionStore","useStreamMessage","sessionId","state","esRef","sessionIdRef","apiAddress","setStreamMessage","setIsStreaming","current","startStream","payload","latestSessionId","localMessageId","token","global","accessToken","currentSessionId","close","url","assistantService","getStreamMessage","es","method","headers","body","JSON","stringify","addEventListener","console","log","buffers","throttledFlush","emit","updateMultipleMessage","Object","values","map","m","content","leading","trailing","onStreamMessageEnd","isError","messageId","Promise","resolve","setTimeout","updateMessageError","id","metadata","needs_retry","original_message_id","status","forceUpdateMessages","event","data","parse","is_done","is_error","message_id","message","messages","join","error","err","stopStream","retryStream","messageItem","updateOneMessage","stream","attachments","source","manual_retry_attempts","undefined"],"sourceRoot":"../../../../src","sources":["hooks/message/useStreamMessage.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,WAAW,QAAQ,OAAO;AACtD,SAASC,cAAc,QAAQ,8BAA2B;AAC1D,SAASC,SAAS,QAAQ,6BAA0B;
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useCallback","useChatContext","ENDPOINTS","SendActionLogType","EventSource","useStreamMessageStore","throttle","DeviceEventEmitter","events","GAEvents","useSessionStore","useStreamMessage","sessionId","state","esRef","sessionIdRef","apiAddress","logGA","setStreamMessage","setIsStreaming","current","startStream","payload","latestSessionId","localMessageId","token","global","accessToken","currentSessionId","close","url","assistantService","getStreamMessage","es","method","headers","body","JSON","stringify","addEventListener","console","log","buffers","throttledFlush","emit","updateMultipleMessage","Object","values","map","m","content","leading","trailing","onStreamMessageEnd","isError","messageId","Promise","resolve","setTimeout","updateMessageError","id","metadata","needs_retry","original_message_id","status","forceUpdateMessages","event","data","parse","is_done","is_error","message_id","message","messages","join","error","err","stopStream","retryStream","messageItem","updateOneMessage","chatDetailSendBtnTap","chat_type","getState","sessionLogType","conversation_id","action_type","retry","stream","attachments","source","manual_retry_attempts","undefined"],"sourceRoot":"../../../../src","sources":["hooks/message/useStreamMessage.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Message Actions Hooks
|
|
5
|
+
* Barrel export for all message action hooks
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export { useFeedback } from "./useFeedback.js";
|
|
9
|
+
export { useCopyToClipboard } from "./useCopyToClipboard.js";
|
|
10
|
+
export { useShareMessage } from "./useShareMessage.js";
|
|
11
|
+
export { useSendFeedback } from "./useSendFeedback.js";
|
|
12
|
+
export { useAudioPlayer } from "./useAudioPlayer.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useFeedback","useCopyToClipboard","useShareMessage","useSendFeedback","useAudioPlayer"],"sourceRoot":"../../../../src","sources":["hooks/messageActions/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,QAAQ,kBAAe;AAC3C,SAASC,kBAAkB,QAAQ,yBAAsB;AACzD,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,cAAc,QAAQ,qBAAkB","ignoreList":[]}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* useAudioPlayer Hook - react-native-track-player version
|
|
5
|
+
*/
|
|
6
|
+
import { useCallback, useEffect } from 'react';
|
|
7
|
+
import TrackPlayer, { Event, Capability, State } from 'react-native-track-player';
|
|
8
|
+
import ReactNativeBlobUtil from 'react-native-blob-util';
|
|
9
|
+
import { apiInstance } from "../../services/apis.js";
|
|
10
|
+
import { ENDPOINTS } from "../../services/endpoints.js";
|
|
11
|
+
import useAudioPlayerStore from "../../store/audioPlayer.js";
|
|
12
|
+
import useSessionStore from "../../store/session.js";
|
|
13
|
+
import { PlaybackService } from "../../services/index.js";
|
|
14
|
+
import { useChatContext } from "../../context/ChatContext.js";
|
|
15
|
+
import { GAEvents } from "../../constants/events.js";
|
|
16
|
+
// Register playback service BEFORE setupPlayer
|
|
17
|
+
TrackPlayer.registerPlaybackService(() => PlaybackService);
|
|
18
|
+
|
|
19
|
+
// --- INIT PLAYER ONE TIME ---
|
|
20
|
+
let playerInitialized = false;
|
|
21
|
+
const setupPlayer = async () => {
|
|
22
|
+
if (playerInitialized) return;
|
|
23
|
+
try {
|
|
24
|
+
await TrackPlayer.setupPlayer();
|
|
25
|
+
await TrackPlayer.updateOptions({
|
|
26
|
+
capabilities: [Capability.Play, Capability.Pause, Capability.Stop],
|
|
27
|
+
compactCapabilities: [Capability.Play, Capability.Pause],
|
|
28
|
+
notificationCapabilities: [Capability.Play, Capability.Pause, Capability.Stop]
|
|
29
|
+
});
|
|
30
|
+
playerInitialized = true;
|
|
31
|
+
} catch (e) {
|
|
32
|
+
console.error('Error initializing TrackPlayer:', e);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
export const useAudioPlayer = ({
|
|
36
|
+
messageId
|
|
37
|
+
}) => {
|
|
38
|
+
const logGA = useChatContext().logGA;
|
|
39
|
+
const sessionId = useSessionStore().sessionId;
|
|
40
|
+
const {
|
|
41
|
+
currentMessageId,
|
|
42
|
+
currentSessionId,
|
|
43
|
+
isPlaying,
|
|
44
|
+
isLoading,
|
|
45
|
+
error,
|
|
46
|
+
setCurrentMessage,
|
|
47
|
+
setIsPlaying,
|
|
48
|
+
setIsLoading,
|
|
49
|
+
setError,
|
|
50
|
+
cacheAudioUrl,
|
|
51
|
+
getCachedAudioUrl,
|
|
52
|
+
stopPlayback: storeStopPlayback
|
|
53
|
+
} = useAudioPlayerStore();
|
|
54
|
+
const isThisMessagePlaying = currentMessageId === messageId && isPlaying;
|
|
55
|
+
const isThisMessageLoading = currentMessageId === messageId && isLoading;
|
|
56
|
+
const isThisMessagePaused = currentMessageId === messageId && !isPlaying && !isLoading;
|
|
57
|
+
|
|
58
|
+
// === FETCH AUDIO ===
|
|
59
|
+
const fetchAudio = useCallback(async (sid, mid) => {
|
|
60
|
+
try {
|
|
61
|
+
const cachedPath = getCachedAudioUrl(mid);
|
|
62
|
+
if (cachedPath) {
|
|
63
|
+
const exists = await ReactNativeBlobUtil.fs.exists(cachedPath);
|
|
64
|
+
if (exists) return cachedPath;
|
|
65
|
+
}
|
|
66
|
+
const endpoint = ENDPOINTS.assistantService.generateAudio(sid, mid);
|
|
67
|
+
const baseURL = apiInstance?.defaults?.baseURL || '';
|
|
68
|
+
const fullUrl = `${baseURL}${endpoint}`;
|
|
69
|
+
const token = global?.accessToken;
|
|
70
|
+
if (!token) throw new Error('Missing access token');
|
|
71
|
+
const headers = {
|
|
72
|
+
'Authorization': `Bearer ${token}`,
|
|
73
|
+
'Accept': 'application/json',
|
|
74
|
+
'Content-Type': 'application/json'
|
|
75
|
+
};
|
|
76
|
+
const dirs = ReactNativeBlobUtil.fs.dirs;
|
|
77
|
+
const audioDir = `${dirs.CacheDir}/chatbot_audio`;
|
|
78
|
+
const filePath = `${audioDir}/${mid}.mp3`;
|
|
79
|
+
const dirExists = await ReactNativeBlobUtil.fs.exists(audioDir);
|
|
80
|
+
if (!dirExists) await ReactNativeBlobUtil.fs.mkdir(audioDir);
|
|
81
|
+
const response = await ReactNativeBlobUtil.config({
|
|
82
|
+
path: filePath,
|
|
83
|
+
fileCache: true
|
|
84
|
+
}).fetch('GET', fullUrl, headers);
|
|
85
|
+
if (response.info().status !== 200) {
|
|
86
|
+
const text = await response.text();
|
|
87
|
+
throw new Error(`Server error: ${response.info().status} - ${text}`);
|
|
88
|
+
}
|
|
89
|
+
const path = response.path();
|
|
90
|
+
const stat = await ReactNativeBlobUtil.fs.stat(path);
|
|
91
|
+
if (stat.size === 0) throw new Error('Downloaded file is empty');
|
|
92
|
+
cacheAudioUrl(mid, path);
|
|
93
|
+
return path;
|
|
94
|
+
} catch (err) {
|
|
95
|
+
const msg = err?.response?.data?.message || err?.message || 'Failed to fetch audio';
|
|
96
|
+
console.error('Fetch audio error:', msg);
|
|
97
|
+
throw new Error(msg);
|
|
98
|
+
}
|
|
99
|
+
}, [getCachedAudioUrl, cacheAudioUrl]);
|
|
100
|
+
|
|
101
|
+
// === PLAY AUDIO ===
|
|
102
|
+
const playAudio = useCallback(async audioPath => {
|
|
103
|
+
try {
|
|
104
|
+
await setupPlayer();
|
|
105
|
+
await TrackPlayer.reset();
|
|
106
|
+
const track = {
|
|
107
|
+
id: messageId,
|
|
108
|
+
url: `file://${audioPath}`,
|
|
109
|
+
title: `Message Audio`,
|
|
110
|
+
artist: 'Assistant'
|
|
111
|
+
};
|
|
112
|
+
await TrackPlayer.add([track]);
|
|
113
|
+
await TrackPlayer.play();
|
|
114
|
+
setIsPlaying(true);
|
|
115
|
+
} catch (err) {
|
|
116
|
+
console.error('Failed to play audio:', err);
|
|
117
|
+
throw new Error('Không thể phát âm thanh');
|
|
118
|
+
}
|
|
119
|
+
}, [messageId, setIsPlaying]);
|
|
120
|
+
|
|
121
|
+
// === PAUSE ===
|
|
122
|
+
const pauseAudio = useCallback(async () => {
|
|
123
|
+
try {
|
|
124
|
+
await TrackPlayer.pause();
|
|
125
|
+
setIsPlaying(false);
|
|
126
|
+
} catch (e) {
|
|
127
|
+
console.warn('Pause failed:', e);
|
|
128
|
+
}
|
|
129
|
+
}, [setIsPlaying]);
|
|
130
|
+
|
|
131
|
+
// === STOP ===
|
|
132
|
+
const stopPlayback = useCallback(async () => {
|
|
133
|
+
try {
|
|
134
|
+
await TrackPlayer.stop();
|
|
135
|
+
await TrackPlayer.reset();
|
|
136
|
+
storeStopPlayback();
|
|
137
|
+
} catch (e) {
|
|
138
|
+
console.warn('Stop failed:', e);
|
|
139
|
+
}
|
|
140
|
+
}, [storeStopPlayback]);
|
|
141
|
+
|
|
142
|
+
// === TOGGLE ===
|
|
143
|
+
const togglePlayback = useCallback(async () => {
|
|
144
|
+
try {
|
|
145
|
+
if (!sessionId) throw new Error('No session ID');
|
|
146
|
+
|
|
147
|
+
// Case 1: Click on the SAME message that is currently playing → Pause it
|
|
148
|
+
if (isThisMessagePlaying) {
|
|
149
|
+
await pauseAudio();
|
|
150
|
+
logGA(GAEvents.chatDetailVoiceBtnTap, {
|
|
151
|
+
conversation_id: sessionId,
|
|
152
|
+
message_id: messageId,
|
|
153
|
+
button_status: 'stop',
|
|
154
|
+
duration: 0
|
|
155
|
+
});
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Case 2: Click on the SAME message that was paused → Resume it
|
|
160
|
+
if (currentMessageId === messageId && !isPlaying) {
|
|
161
|
+
await TrackPlayer.play();
|
|
162
|
+
setIsPlaying(true);
|
|
163
|
+
logGA(GAEvents.chatDetailVoiceBtnTap, {
|
|
164
|
+
conversation_id: sessionId,
|
|
165
|
+
message_id: messageId,
|
|
166
|
+
button_status: 'start',
|
|
167
|
+
duration: 0
|
|
168
|
+
});
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Case 3: Click on a DIFFERENT message → Stop current and play new one
|
|
173
|
+
if (currentMessageId && currentMessageId !== messageId) {
|
|
174
|
+
await stopPlayback();
|
|
175
|
+
logGA(GAEvents.chatDetailVoiceBtnTap, {
|
|
176
|
+
conversation_id: sessionId,
|
|
177
|
+
message_id: messageId,
|
|
178
|
+
button_status: 'stop',
|
|
179
|
+
duration: 0
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Set new message as current and start loading
|
|
184
|
+
setCurrentMessage(messageId, sessionId);
|
|
185
|
+
setIsLoading(true);
|
|
186
|
+
setError(null);
|
|
187
|
+
const startStreamTime = Date.now();
|
|
188
|
+
const path = await fetchAudio(sessionId, messageId);
|
|
189
|
+
await playAudio(path);
|
|
190
|
+
logGA(GAEvents.chatDetailVoiceBtnTap, {
|
|
191
|
+
conversation_id: sessionId,
|
|
192
|
+
message_id: messageId,
|
|
193
|
+
button_status: 'start',
|
|
194
|
+
duration: (Date.now() - startStreamTime) / 1000
|
|
195
|
+
});
|
|
196
|
+
} catch (err) {
|
|
197
|
+
const msg = err?.message || 'Failed to play audio';
|
|
198
|
+
setError(msg);
|
|
199
|
+
setIsPlaying(false);
|
|
200
|
+
console.error('togglePlayback error:', msg);
|
|
201
|
+
} finally {
|
|
202
|
+
setIsLoading(false);
|
|
203
|
+
}
|
|
204
|
+
}, [sessionId, messageId, isThisMessagePlaying, currentMessageId, isPlaying, setCurrentMessage, setIsLoading, setError, setIsPlaying, fetchAudio, playAudio, pauseAudio, stopPlayback, logGA]);
|
|
205
|
+
|
|
206
|
+
// === PLAYER EVENTS ===
|
|
207
|
+
useEffect(() => {
|
|
208
|
+
// Listen for queue end
|
|
209
|
+
const queueEndSubscription = TrackPlayer.addEventListener(Event.PlaybackQueueEnded, () => {
|
|
210
|
+
if (currentMessageId === messageId) {
|
|
211
|
+
// Audio finished playing → reset to initial state
|
|
212
|
+
storeStopPlayback();
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
// Listen for playback state changes (from lock screen, control center, etc.)
|
|
217
|
+
const stateSubscription = TrackPlayer.addEventListener(Event.PlaybackState, async () => {
|
|
218
|
+
const state = await TrackPlayer.getState();
|
|
219
|
+
|
|
220
|
+
// Only update if this is the current message
|
|
221
|
+
if (currentMessageId === messageId) {
|
|
222
|
+
if (state === State.Playing) {
|
|
223
|
+
setIsPlaying(true);
|
|
224
|
+
} else if (state === State.Paused || state === State.Ready) {
|
|
225
|
+
setIsPlaying(false);
|
|
226
|
+
} else if (state === State.Stopped) {
|
|
227
|
+
storeStopPlayback();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
return () => {
|
|
232
|
+
queueEndSubscription?.remove?.();
|
|
233
|
+
stateSubscription?.remove?.();
|
|
234
|
+
};
|
|
235
|
+
}, [currentMessageId, messageId, storeStopPlayback, setIsPlaying]);
|
|
236
|
+
|
|
237
|
+
// === CLEANUP CACHE WHEN SESSION CHANGES ===
|
|
238
|
+
const cleanupAudioCache = useCallback(async () => {
|
|
239
|
+
try {
|
|
240
|
+
const audioDir = `${ReactNativeBlobUtil.fs.dirs.CacheDir}/chatbot_audio`;
|
|
241
|
+
const exists = await ReactNativeBlobUtil.fs.exists(audioDir);
|
|
242
|
+
if (exists) await ReactNativeBlobUtil.fs.unlink(audioDir);
|
|
243
|
+
} catch (e) {
|
|
244
|
+
console.error('Cleanup cache error:', e);
|
|
245
|
+
}
|
|
246
|
+
}, []);
|
|
247
|
+
useEffect(() => {
|
|
248
|
+
if (currentSessionId && currentSessionId !== sessionId) {
|
|
249
|
+
if (currentMessageId === messageId) stopPlayback();
|
|
250
|
+
cleanupAudioCache();
|
|
251
|
+
}
|
|
252
|
+
}, [sessionId, currentSessionId, currentMessageId, messageId, stopPlayback, cleanupAudioCache]);
|
|
253
|
+
useEffect(() => {
|
|
254
|
+
return () => {
|
|
255
|
+
if (currentMessageId === messageId) {
|
|
256
|
+
stopPlayback();
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
}, [currentMessageId, messageId, stopPlayback]);
|
|
260
|
+
return {
|
|
261
|
+
isPlaying: isThisMessagePlaying,
|
|
262
|
+
isPaused: isThisMessagePaused,
|
|
263
|
+
isLoading: isThisMessageLoading,
|
|
264
|
+
error: currentMessageId === messageId ? error : null,
|
|
265
|
+
togglePlayback,
|
|
266
|
+
stopPlayback
|
|
267
|
+
};
|
|
268
|
+
};
|
|
269
|
+
//# sourceMappingURL=useAudioPlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","TrackPlayer","Event","Capability","State","ReactNativeBlobUtil","apiInstance","ENDPOINTS","useAudioPlayerStore","useSessionStore","PlaybackService","useChatContext","GAEvents","registerPlaybackService","playerInitialized","setupPlayer","updateOptions","capabilities","Play","Pause","Stop","compactCapabilities","notificationCapabilities","e","console","error","useAudioPlayer","messageId","logGA","sessionId","currentMessageId","currentSessionId","isPlaying","isLoading","setCurrentMessage","setIsPlaying","setIsLoading","setError","cacheAudioUrl","getCachedAudioUrl","stopPlayback","storeStopPlayback","isThisMessagePlaying","isThisMessageLoading","isThisMessagePaused","fetchAudio","sid","mid","cachedPath","exists","fs","endpoint","assistantService","generateAudio","baseURL","defaults","fullUrl","token","global","accessToken","Error","headers","dirs","audioDir","CacheDir","filePath","dirExists","mkdir","response","config","path","fileCache","fetch","info","status","text","stat","size","err","msg","data","message","playAudio","audioPath","reset","track","id","url","title","artist","add","play","pauseAudio","pause","warn","stop","togglePlayback","chatDetailVoiceBtnTap","conversation_id","message_id","button_status","duration","startStreamTime","Date","now","queueEndSubscription","addEventListener","PlaybackQueueEnded","stateSubscription","PlaybackState","state","getState","Playing","Paused","Ready","Stopped","remove","cleanupAudioCache","unlink","isPaused"],"sourceRoot":"../../../../src","sources":["hooks/messageActions/useAudioPlayer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* useCopyToClipboard Hook
|
|
5
|
+
* Custom hook for copying text to clipboard with markdown cleanup
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { useCallback, useState } from 'react';
|
|
9
|
+
import Clipboard from '@react-native-clipboard/clipboard';
|
|
10
|
+
import UIUtils from "../../utils/ui.js";
|
|
11
|
+
import { cleanMarkdown } from "../../utils/textCleaner.js";
|
|
12
|
+
export const useCopyToClipboard = () => {
|
|
13
|
+
const [isCopying, setIsCopying] = useState(false);
|
|
14
|
+
const copyToClipboard = useCallback(async text => {
|
|
15
|
+
if (!text || text.trim().length === 0) {
|
|
16
|
+
UIUtils.toast.showError('Không có nội dung để sao chép');
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
setIsCopying(true);
|
|
21
|
+
|
|
22
|
+
// Remove markdown formatting for cleaner copy
|
|
23
|
+
const cleanText = cleanMarkdown(text);
|
|
24
|
+
Clipboard.setString(cleanText);
|
|
25
|
+
UIUtils.toast.showSuccess('Đã sao chép vào clipboard');
|
|
26
|
+
} catch (error) {
|
|
27
|
+
console.error('Copy to clipboard error:', error);
|
|
28
|
+
UIUtils.toast.showError(error);
|
|
29
|
+
} finally {
|
|
30
|
+
setIsCopying(false);
|
|
31
|
+
}
|
|
32
|
+
}, []);
|
|
33
|
+
return {
|
|
34
|
+
copyToClipboard,
|
|
35
|
+
isCopying
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=useCopyToClipboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useState","Clipboard","UIUtils","cleanMarkdown","useCopyToClipboard","isCopying","setIsCopying","copyToClipboard","text","trim","length","toast","showError","cleanText","setString","showSuccess","error","console"],"sourceRoot":"../../../../src","sources":["hooks/messageActions/useCopyToClipboard.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AAC7C,OAAOC,SAAS,MAAM,mCAAmC;AACzD,OAAOC,OAAO,MAAM,mBAAgB;AACpC,SAASC,aAAa,QAAQ,4BAAyB;AAEvD,OAAO,MAAMC,kBAAkB,GAAGA,CAAA,KAAM;EACtC,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAGN,QAAQ,CAAC,KAAK,CAAC;EAEjD,MAAMO,eAAe,GAAGR,WAAW,CAAC,MAAOS,IAAY,IAAK;IAC1D,IAAI,CAACA,IAAI,IAAIA,IAAI,CAACC,IAAI,CAAC,CAAC,CAACC,MAAM,KAAK,CAAC,EAAE;MACrCR,OAAO,CAACS,KAAK,CAACC,SAAS,CAAC,+BAA+B,CAAC;MACxD;IACF;IAEA,IAAI;MACFN,YAAY,CAAC,IAAI,CAAC;;MAElB;MACA,MAAMO,SAAS,GAAGV,aAAa,CAACK,IAAI,CAAC;MAErCP,SAAS,CAACa,SAAS,CAACD,SAAS,CAAC;MAE9BX,OAAO,CAACS,KAAK,CAACI,WAAW,CAAC,2BAA2B,CAAC;IACxD,CAAC,CAAC,OAAOC,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CAAC,0BAA0B,EAAEA,KAAK,CAAC;MAChDd,OAAO,CAACS,KAAK,CAACC,SAAS,CAACI,KAAK,CAAC;IAChC,CAAC,SAAS;MACRV,YAAY,CAAC,KAAK,CAAC;IACrB;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IAAEC,eAAe;IAAEF;EAAU,CAAC;AACvC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* useFeedback Hook
|
|
5
|
+
* Custom hook for handling Like/Dislike feedback logic
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { useCallback } from 'react';
|
|
9
|
+
import useMessageActionsStore from "../../store/messageActions.js";
|
|
10
|
+
import { FeedbackType } from "../../types/messageActions.js";
|
|
11
|
+
import { useSendFeedback } from "./useSendFeedback.js";
|
|
12
|
+
import UIUtils from "../../utils/ui.js";
|
|
13
|
+
import useSessionStore from "../../store/session.js";
|
|
14
|
+
import { useChatContext } from "../../context/ChatContext.js";
|
|
15
|
+
import { GAEvents } from 'src/constants/events';
|
|
16
|
+
export const useFeedback = (messageId, message) => {
|
|
17
|
+
const logGA = useChatContext().logGA;
|
|
18
|
+
const sessionId = useSessionStore(state => state.sessionId);
|
|
19
|
+
const feedback = useMessageActionsStore(state => state.getFeedback(messageId));
|
|
20
|
+
const setFeedback = useMessageActionsStore(state => state.setFeedback);
|
|
21
|
+
const activeFeedbackList = useMessageActionsStore(state => state.activeFeedbackList);
|
|
22
|
+
const setActiveFeedbackList = useMessageActionsStore(state => state.setActiveFeedbackList);
|
|
23
|
+
const {
|
|
24
|
+
mutateAsync: sendFeedback,
|
|
25
|
+
isLoading
|
|
26
|
+
} = useSendFeedback();
|
|
27
|
+
|
|
28
|
+
// Check feedback from server (message) or local store
|
|
29
|
+
const serverFeedbackType = message?.feedback_type;
|
|
30
|
+
const serverFeedbackContent = message?.feedback_content;
|
|
31
|
+
const effectiveFeedback = feedback || (serverFeedbackType && serverFeedbackContent ? {
|
|
32
|
+
messageId,
|
|
33
|
+
feedbackType: serverFeedbackType,
|
|
34
|
+
reason: serverFeedbackContent,
|
|
35
|
+
timestamp: message.modified_at
|
|
36
|
+
} : null);
|
|
37
|
+
const isLikeActive = effectiveFeedback?.feedbackType === FeedbackType.like;
|
|
38
|
+
const isDislikeActive = effectiveFeedback?.feedbackType === FeedbackType.dislike;
|
|
39
|
+
const isLikeListOpen = activeFeedbackList === `${messageId}-like`;
|
|
40
|
+
const isDislikeListOpen = activeFeedbackList === `${messageId}-dislike`;
|
|
41
|
+
const toggleLikeList = useCallback(() => {
|
|
42
|
+
if (isLikeActive) return; // Already selected, cannot change
|
|
43
|
+
setActiveFeedbackList(isLikeListOpen ? null : `${messageId}-like`);
|
|
44
|
+
}, [messageId, isLikeActive, isLikeListOpen, setActiveFeedbackList]);
|
|
45
|
+
const toggleDislikeList = useCallback(() => {
|
|
46
|
+
if (isDislikeActive) return; // Already selected, cannot change
|
|
47
|
+
setActiveFeedbackList(isDislikeListOpen ? null : `${messageId}-dislike`);
|
|
48
|
+
}, [messageId, isDislikeActive, isDislikeListOpen, setActiveFeedbackList]);
|
|
49
|
+
const selectReason = useCallback(async (type, reason) => {
|
|
50
|
+
console.log('selectReason', sessionId);
|
|
51
|
+
if (!sessionId) {
|
|
52
|
+
console.error('Session ID is required to send feedback');
|
|
53
|
+
UIUtils.toast.open({
|
|
54
|
+
title: 'Không thể gửi phản hồi. Vui lòng thử lại.'
|
|
55
|
+
});
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
// Send to backend FIRST (no optimistic update)
|
|
60
|
+
await sendFeedback({
|
|
61
|
+
sessionId,
|
|
62
|
+
payload: {
|
|
63
|
+
message_id: messageId,
|
|
64
|
+
feedback_type: type,
|
|
65
|
+
feedback_content: reason
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
logGA(GAEvents.chatDetailLikeDislikeBtnTap, {
|
|
69
|
+
fb_type: type,
|
|
70
|
+
message_id: messageId
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Update local state AFTER successful API call
|
|
74
|
+
setFeedback(messageId, type, reason);
|
|
75
|
+
UIUtils.toast.showSuccess('Cảm ơn phản hồi của bạn!');
|
|
76
|
+
} catch (error) {
|
|
77
|
+
console.error('Failed to send feedback:', error);
|
|
78
|
+
UIUtils.toast.showError(error);
|
|
79
|
+
}
|
|
80
|
+
}, [messageId, setFeedback, sendFeedback, sessionId, logGA]);
|
|
81
|
+
return {
|
|
82
|
+
feedback: effectiveFeedback,
|
|
83
|
+
isLikeActive,
|
|
84
|
+
isDislikeActive,
|
|
85
|
+
isLikeListOpen,
|
|
86
|
+
isDislikeListOpen,
|
|
87
|
+
isLoading,
|
|
88
|
+
toggleLikeList,
|
|
89
|
+
toggleDislikeList,
|
|
90
|
+
selectReason
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=useFeedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useMessageActionsStore","FeedbackType","useSendFeedback","UIUtils","useSessionStore","useChatContext","GAEvents","useFeedback","messageId","message","logGA","sessionId","state","feedback","getFeedback","setFeedback","activeFeedbackList","setActiveFeedbackList","mutateAsync","sendFeedback","isLoading","serverFeedbackType","feedback_type","serverFeedbackContent","feedback_content","effectiveFeedback","feedbackType","reason","timestamp","modified_at","isLikeActive","like","isDislikeActive","dislike","isLikeListOpen","isDislikeListOpen","toggleLikeList","toggleDislikeList","selectReason","type","console","log","error","toast","open","title","payload","message_id","chatDetailLikeDislikeBtnTap","fb_type","showSuccess","showError"],"sourceRoot":"../../../../src","sources":["hooks/messageActions/useFeedback.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* useSendFeedback Hook
|
|
5
|
+
* React Query mutation hook for sending feedback to backend
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { useMutation } from '@tanstack/react-query';
|
|
9
|
+
import { apiInstance } from "../../services/apis.js";
|
|
10
|
+
import { ENDPOINTS } from "../../services/endpoints.js";
|
|
11
|
+
import { QUERY_KEYS } from "../../constants/query.js";
|
|
12
|
+
export const useSendFeedback = () => useMutation({
|
|
13
|
+
mutationKey: [QUERY_KEYS.SEND_FEEDBACK],
|
|
14
|
+
mutationFn: async ({
|
|
15
|
+
sessionId,
|
|
16
|
+
payload
|
|
17
|
+
}) => {
|
|
18
|
+
const res = await apiInstance?.put(ENDPOINTS.assistantService.sendFeedback(sessionId), payload);
|
|
19
|
+
return res?.data?.data;
|
|
20
|
+
},
|
|
21
|
+
retry: 2,
|
|
22
|
+
retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000)
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=useSendFeedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMutation","apiInstance","ENDPOINTS","QUERY_KEYS","useSendFeedback","mutationKey","SEND_FEEDBACK","mutationFn","sessionId","payload","res","put","assistantService","sendFeedback","data","retry","retryDelay","attemptIndex","Math","min"],"sourceRoot":"../../../../src","sources":["hooks/messageActions/useSendFeedback.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,QAAQ,uBAAuB;AACnD,SAASC,WAAW,QAAQ,wBAAqB;AACjD,SAASC,SAAS,QAAQ,6BAA0B;AAEpD,SAASC,UAAU,QAAQ,0BAAuB;AAQlD,OAAO,MAAMC,eAAe,GAAGA,CAAA,KAC7BJ,WAAW,CAAC;EACVK,WAAW,EAAE,CAACF,UAAU,CAACG,aAAa,CAAC;EACvCC,UAAU,EAAE,MAAAA,CAAO;IAAEC,SAAS;IAAEC;EAA4B,CAAC,KAAK;IAChE,MAAMC,GAAG,GAAG,MAAMT,WAAW,EAAEU,GAAG,CAChCT,SAAS,CAACU,gBAAgB,CAACC,YAAY,CAACL,SAAS,CAAC,EAClDC,OACF,CAAC;IACD,OAAOC,GAAG,EAAEI,IAAI,EAAEA,IAAI;EACxB,CAAC;EACDC,KAAK,EAAE,CAAC;EACRC,UAAU,EAAGC,YAAoB,IAC/BC,IAAI,CAACC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAIF,YAAY,EAAE,KAAK;AAC5C,CAAC,CAAC","ignoreList":[]}
|