@droppii-org/chat-mobile 0.2.23 → 0.2.25

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.
Files changed (194) hide show
  1. package/lib/module/assets/images/btn_resend.png +0 -0
  2. package/lib/module/assets/images/index.js +2 -1
  3. package/lib/module/assets/images/index.js.map +1 -1
  4. package/lib/module/components/AttachmentPreview/FilePreview.js +1 -1
  5. package/lib/module/components/AttachmentPreview/FilePreview.js.map +1 -1
  6. package/lib/module/components/messages/MessageStatusIndicator.js +70 -0
  7. package/lib/module/components/messages/MessageStatusIndicator.js.map +1 -0
  8. package/lib/module/components/messages/fileMessage/index.js.map +1 -1
  9. package/lib/module/components/messages/imageMessage/index.js +59 -50
  10. package/lib/module/components/messages/imageMessage/index.js.map +1 -1
  11. package/lib/module/components/messages/linkMessage/index.js +14 -6
  12. package/lib/module/components/messages/linkMessage/index.js.map +1 -1
  13. package/lib/module/components/messages/mergedMessage/index.js.map +1 -1
  14. package/lib/module/components/messages/textMessage/index.js +14 -6
  15. package/lib/module/components/messages/textMessage/index.js.map +1 -1
  16. package/lib/module/components/messages/videoMessage/index.js.map +1 -1
  17. package/lib/module/config/uploadLimits.js +13 -0
  18. package/lib/module/config/uploadLimits.js.map +1 -0
  19. package/lib/module/core/useChatListener.js +35 -4
  20. package/lib/module/core/useChatListener.js.map +1 -1
  21. package/lib/module/core/useUserListener.js +17 -7
  22. package/lib/module/core/useUserListener.js.map +1 -1
  23. package/lib/module/hooks/message/useSendMessage.js +62 -15
  24. package/lib/module/hooks/message/useSendMessage.js.map +1 -1
  25. package/lib/module/hooks/useChatCompose.js +153 -0
  26. package/lib/module/hooks/useChatCompose.js.map +1 -0
  27. package/lib/module/hooks/useChatMessages.js +39 -8
  28. package/lib/module/hooks/useChatMessages.js.map +1 -1
  29. package/lib/module/hooks/useFileAttachment.js +1 -1
  30. package/lib/module/hooks/useFileAttachment.js.map +1 -1
  31. package/lib/module/hooks/useFileDownload.js +1 -1
  32. package/lib/module/hooks/useFileDownload.js.map +1 -1
  33. package/lib/module/hooks/useImageAttachment.js +81 -152
  34. package/lib/module/hooks/useImageAttachment.js.map +1 -1
  35. package/lib/module/hooks/useSendAttachment.js +2 -2
  36. package/lib/module/hooks/useSendAttachment.js.map +1 -1
  37. package/lib/module/index.js +1 -1
  38. package/lib/module/index.js.map +1 -1
  39. package/lib/module/screens/chat-detail/ChatComposer.js +50 -185
  40. package/lib/module/screens/chat-detail/ChatComposer.js.map +1 -1
  41. package/lib/module/screens/chat-detail/ChatDetail.js +29 -137
  42. package/lib/module/screens/chat-detail/ChatDetail.js.map +1 -1
  43. package/lib/module/screens/chat-detail/ChatListLegend.js +20 -15
  44. package/lib/module/screens/chat-detail/ChatListLegend.js.map +1 -1
  45. package/lib/module/screens/chat-detail/index.js +0 -1
  46. package/lib/module/screens/chat-detail/index.js.map +1 -1
  47. package/lib/module/screens/chat-detail/legend/LegendChatMessage.js +18 -13
  48. package/lib/module/screens/chat-detail/legend/LegendChatMessage.js.map +1 -1
  49. package/lib/module/services/attachmentHandlers/fileAttachmentHandler.js +2 -2
  50. package/lib/module/services/attachmentHandlers/fileAttachmentHandler.js.map +1 -1
  51. package/lib/module/services/attachmentHandlers/imageAttachmentHandler.js +3 -3
  52. package/lib/module/services/attachmentHandlers/imageAttachmentHandler.js.map +1 -1
  53. package/lib/module/services/attachmentHandlers/videoAttachmentHandler.js +2 -1
  54. package/lib/module/services/attachmentHandlers/videoAttachmentHandler.js.map +1 -1
  55. package/lib/module/services/attachmentOrchestrator.js +40 -17
  56. package/lib/module/services/attachmentOrchestrator.js.map +1 -1
  57. package/lib/module/services/message.js +13 -5
  58. package/lib/module/services/message.js.map +1 -1
  59. package/lib/module/translation/resources/i18n.js +4 -3
  60. package/lib/module/translation/resources/i18n.js.map +1 -1
  61. package/lib/module/types/chat.js.map +1 -1
  62. package/lib/module/types/global.d.js +2 -0
  63. package/lib/module/types/global.d.js.map +1 -0
  64. package/lib/module/types/index.d.js +3 -0
  65. package/lib/module/types/index.d.js.map +1 -0
  66. package/lib/module/utils/UIUtils.js +37 -0
  67. package/lib/module/utils/UIUtils.js.map +1 -0
  68. package/lib/module/utils/imageUtils.js +3 -3
  69. package/lib/module/utils/imageUtils.js.map +1 -1
  70. package/lib/module/utils/pLimit.js +19 -0
  71. package/lib/module/utils/pLimit.js.map +1 -0
  72. package/lib/module/utils/videoThumbnail.js +8 -3
  73. package/lib/module/utils/videoThumbnail.js.map +1 -1
  74. package/lib/module/utils/videoThumbnailUpload.js +76 -0
  75. package/lib/module/utils/videoThumbnailUpload.js.map +1 -0
  76. package/lib/typescript/src/assets/images/index.d.ts +1 -0
  77. package/lib/typescript/src/assets/images/index.d.ts.map +1 -1
  78. package/lib/typescript/src/components/messages/MessageStatusIndicator.d.ts +9 -0
  79. package/lib/typescript/src/components/messages/MessageStatusIndicator.d.ts.map +1 -0
  80. package/lib/typescript/src/components/messages/fileMessage/index.d.ts.map +1 -1
  81. package/lib/typescript/src/components/messages/imageMessage/index.d.ts.map +1 -1
  82. package/lib/typescript/src/components/messages/linkMessage/index.d.ts +3 -8
  83. package/lib/typescript/src/components/messages/linkMessage/index.d.ts.map +1 -1
  84. package/lib/typescript/src/components/messages/mergedMessage/index.d.ts.map +1 -1
  85. package/lib/typescript/src/components/messages/textMessage/index.d.ts +2 -8
  86. package/lib/typescript/src/components/messages/textMessage/index.d.ts.map +1 -1
  87. package/lib/typescript/src/components/messages/videoMessage/index.d.ts.map +1 -1
  88. package/lib/typescript/src/config/uploadLimits.d.ts +7 -0
  89. package/lib/typescript/src/config/uploadLimits.d.ts.map +1 -0
  90. package/lib/typescript/src/core/useChatListener.d.ts.map +1 -1
  91. package/lib/typescript/src/core/useUserListener.d.ts.map +1 -1
  92. package/lib/typescript/src/hooks/message/useSendMessage.d.ts +2 -0
  93. package/lib/typescript/src/hooks/message/useSendMessage.d.ts.map +1 -1
  94. package/lib/typescript/src/hooks/useChatCompose.d.ts +27 -0
  95. package/lib/typescript/src/hooks/useChatCompose.d.ts.map +1 -0
  96. package/lib/typescript/src/hooks/useChatMessages.d.ts.map +1 -1
  97. package/lib/typescript/src/hooks/useImageAttachment.d.ts +2 -2
  98. package/lib/typescript/src/hooks/useImageAttachment.d.ts.map +1 -1
  99. package/lib/typescript/src/hooks/useSendAttachment.d.ts +1 -1
  100. package/lib/typescript/src/hooks/useSendAttachment.d.ts.map +1 -1
  101. package/lib/typescript/src/index.d.ts +1 -2
  102. package/lib/typescript/src/index.d.ts.map +1 -1
  103. package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts +5 -2
  104. package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts.map +1 -1
  105. package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts +1 -1
  106. package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts.map +1 -1
  107. package/lib/typescript/src/screens/chat-detail/ChatListLegend.d.ts +1 -1
  108. package/lib/typescript/src/screens/chat-detail/ChatListLegend.d.ts.map +1 -1
  109. package/lib/typescript/src/screens/chat-detail/index.d.ts +0 -2
  110. package/lib/typescript/src/screens/chat-detail/index.d.ts.map +1 -1
  111. package/lib/typescript/src/screens/chat-detail/legend/LegendChatMessage.d.ts +3 -5
  112. package/lib/typescript/src/screens/chat-detail/legend/LegendChatMessage.d.ts.map +1 -1
  113. package/lib/typescript/src/screens/chat-detail/types.d.ts +1 -35
  114. package/lib/typescript/src/screens/chat-detail/types.d.ts.map +1 -1
  115. package/lib/typescript/src/services/attachmentHandlers/fileAttachmentHandler.d.ts.map +1 -1
  116. package/lib/typescript/src/services/attachmentHandlers/imageAttachmentHandler.d.ts.map +1 -1
  117. package/lib/typescript/src/services/attachmentHandlers/videoAttachmentHandler.d.ts.map +1 -1
  118. package/lib/typescript/src/services/attachmentOrchestrator.d.ts +1 -1
  119. package/lib/typescript/src/services/attachmentOrchestrator.d.ts.map +1 -1
  120. package/lib/typescript/src/services/message.d.ts +7 -0
  121. package/lib/typescript/src/services/message.d.ts.map +1 -1
  122. package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -1
  123. package/lib/typescript/src/types/chat.d.ts +11 -0
  124. package/lib/typescript/src/types/chat.d.ts.map +1 -1
  125. package/lib/typescript/src/utils/UIUtils.d.ts +4 -0
  126. package/lib/typescript/src/utils/UIUtils.d.ts.map +1 -0
  127. package/lib/typescript/src/utils/imageUtils.d.ts.map +1 -1
  128. package/lib/typescript/src/utils/pLimit.d.ts +6 -0
  129. package/lib/typescript/src/utils/pLimit.d.ts.map +1 -0
  130. package/lib/typescript/src/utils/videoThumbnail.d.ts.map +1 -1
  131. package/lib/typescript/src/utils/videoThumbnailUpload.d.ts +11 -0
  132. package/lib/typescript/src/utils/videoThumbnailUpload.d.ts.map +1 -0
  133. package/package.json +2 -2
  134. package/src/assets/images/btn_resend.png +0 -0
  135. package/src/assets/images/index.ts +1 -0
  136. package/src/components/AttachmentPreview/FilePreview.tsx +1 -1
  137. package/src/components/messages/MessageStatusIndicator.tsx +82 -0
  138. package/src/components/messages/fileMessage/index.tsx +0 -1
  139. package/src/components/messages/imageMessage/index.tsx +71 -57
  140. package/src/components/messages/linkMessage/index.tsx +13 -19
  141. package/src/components/messages/mergedMessage/index.tsx +0 -1
  142. package/src/components/messages/textMessage/index.tsx +13 -18
  143. package/src/components/messages/videoMessage/index.tsx +0 -1
  144. package/src/config/uploadLimits.ts +11 -0
  145. package/src/core/useChatListener.ts +38 -4
  146. package/src/core/useUserListener.ts +17 -7
  147. package/src/hooks/message/useSendMessage.ts +103 -24
  148. package/src/hooks/useChatCompose.ts +195 -0
  149. package/src/hooks/useChatMessages.ts +54 -10
  150. package/src/hooks/useFileAttachment.ts +1 -1
  151. package/src/hooks/useFileDownload.ts +1 -1
  152. package/src/hooks/useImageAttachment.ts +120 -199
  153. package/src/hooks/useSendAttachment.ts +3 -6
  154. package/src/index.tsx +3 -5
  155. package/src/screens/chat-detail/ChatComposer.tsx +88 -240
  156. package/src/screens/chat-detail/ChatDetail.tsx +36 -195
  157. package/src/screens/chat-detail/ChatListLegend.tsx +16 -13
  158. package/src/screens/chat-detail/index.ts +1 -5
  159. package/src/screens/chat-detail/legend/LegendChatMessage.tsx +19 -12
  160. package/src/screens/chat-detail/types.ts +1 -38
  161. package/src/services/attachmentHandlers/fileAttachmentHandler.ts +3 -2
  162. package/src/services/attachmentHandlers/imageAttachmentHandler.ts +6 -3
  163. package/src/services/attachmentHandlers/videoAttachmentHandler.ts +2 -1
  164. package/src/services/attachmentOrchestrator.ts +49 -27
  165. package/src/services/message.ts +21 -4
  166. package/src/translation/resources/i18n.ts +6 -3
  167. package/src/types/chat.ts +6 -0
  168. package/src/types/global.d.ts +299 -0
  169. package/src/types/index.d.ts +1 -0
  170. package/src/utils/UIUtils.ts +31 -0
  171. package/src/utils/imageUtils.ts +3 -4
  172. package/src/utils/pLimit.ts +20 -0
  173. package/src/utils/videoThumbnail.ts +10 -3
  174. package/src/utils/videoThumbnailUpload.ts +103 -0
  175. package/lib/module/hooks/useVideoAttachment.js +0 -251
  176. package/lib/module/hooks/useVideoAttachment.js.map +0 -1
  177. package/lib/module/screens/chat-detail/hooks/useAttachmentSendHandler.js +0 -288
  178. package/lib/module/screens/chat-detail/hooks/useAttachmentSendHandler.js.map +0 -1
  179. package/lib/module/utils/giftedChatMessage.js +0 -90
  180. package/lib/module/utils/giftedChatMessage.js.map +0 -1
  181. package/lib/module/utils/ui.js +0 -17
  182. package/lib/module/utils/ui.js.map +0 -1
  183. package/lib/typescript/src/hooks/useVideoAttachment.d.ts +0 -29
  184. package/lib/typescript/src/hooks/useVideoAttachment.d.ts.map +0 -1
  185. package/lib/typescript/src/screens/chat-detail/hooks/useAttachmentSendHandler.d.ts +0 -26
  186. package/lib/typescript/src/screens/chat-detail/hooks/useAttachmentSendHandler.d.ts.map +0 -1
  187. package/lib/typescript/src/utils/giftedChatMessage.d.ts +0 -10
  188. package/lib/typescript/src/utils/giftedChatMessage.d.ts.map +0 -1
  189. package/lib/typescript/src/utils/ui.d.ts +0 -13
  190. package/lib/typescript/src/utils/ui.d.ts.map +0 -1
  191. package/src/hooks/useVideoAttachment.ts +0 -334
  192. package/src/screens/chat-detail/hooks/useAttachmentSendHandler.ts +0 -386
  193. package/src/utils/giftedChatMessage.ts +0 -137
  194. package/src/utils/ui.ts +0 -19
@@ -14,40 +14,20 @@ import { ChatAttachmentPanel } from "./ChatAttachmentPanel.js";
14
14
  import { ChatLinkPreview } from "./ChatLinkPreview.js";
15
15
  import { ChatMessageInput } from "./components/ChatMessageInput.js";
16
16
  import { AttachmentPreview } from "../../components/AttachmentPreview/index.js";
17
- import { getAttachmentPanelHeight } from "./constants.js";
18
- import { useLinkPreview } from "../../hooks/useLinkPreview/useLinkPreview.js";
19
- import { useImageAttachment } from "../../hooks/useImageAttachment.js";
20
- import { useFileAttachment } from "../../hooks/useFileAttachment.js";
21
- import { useSendAttachment } from "../../hooks/useSendAttachment.js";
17
+ import { DEFAULT_ATTACHMENT_ACTIONS, DEFAULT_Chat_QUICK_ACTIONS, getAttachmentPanelHeight } from "./constants.js";
22
18
  import { useChatComposerState } from "./hooks/useChatComposerState.js";
23
19
  import { useChatComposerAnimation } from "./hooks/useChatComposerAnimation.js";
24
- import { useAttachmentSendHandler } from "./hooks/useAttachmentSendHandler.js";
25
20
  import { useChatDetailContext } from "../../context/ChatDetailContext.js";
26
21
  import { trans } from "../../translation/index.js";
27
22
  import { useRunFlow } from "../../hooks/flows/useFlow.js";
28
23
  import { ReactFlowsNodeTypes } from "../../types/flows.js";
29
24
  import { useAttachmentMapping } from "./hooks/useAttachmentMapping.js";
25
+ import { useChatCompose } from "../../hooks/useChatCompose.js";
30
26
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
31
27
  export const ChatComposer = /*#__PURE__*/memo(({
32
- value,
33
- placeholder = 'Nhập tin nhắn...',
34
- onChangeText,
35
- onSend,
36
- onMessageSent,
37
- onPressEmoji: _onPressEmoji,
38
- showQuickActions = true,
39
- quickActions,
40
- attachmentActions,
41
- onQuickActionPress,
42
- onAttachmentAction,
43
- renderQuickAction,
44
- renderQuickActions,
45
- renderAttachmentAction,
46
- attachmentColumns,
47
28
  isEmptyMessage = false
48
29
  }) => {
49
30
  const insets = useSafeAreaInsets();
50
- const hasAttachmentActions = !!attachmentActions?.length;
51
31
  const {
52
32
  isBotConversation,
53
33
  conversationFlow
@@ -56,69 +36,7 @@ export const ChatComposer = /*#__PURE__*/memo(({
56
36
  mutate: runFlow,
57
37
  isPending
58
38
  } = useRunFlow();
59
-
60
- // Link preview
61
- const {
62
- isVisible: showLinkPreview,
63
- metadata: urlMetadata,
64
- isLoading: isMetadataLoading,
65
- dismiss: handleDismissPreview
66
- } = useLinkPreview(value);
67
-
68
- // Image attachment
69
- const {
70
- selectedImages,
71
- isImagePreviewVisible,
72
- handleImageAttach,
73
- handleImageRemove,
74
- clearAllImages
75
- } = useImageAttachment();
76
-
77
- // File attachment
78
- const {
79
- selectedFiles,
80
- isFilePreviewVisible,
81
- handleFileAttach,
82
- handleFileRemove,
83
- clearAllFiles
84
- } = useFileAttachment();
85
-
86
- // Send attachment
87
- const {
88
- send: sendAttachments
89
- } = useSendAttachment();
90
-
91
- // Callback to send text message (with optional preview link)
92
- // This is used when sending text after attachments
93
- const handleSendText = useCallback((text, previewMetadata) => {
94
- // Send with the captured text and preview metadata
95
- // Note: ChatDetail's handleSend will read currentInput, but for text sent
96
- // after attachments, we want to use the captured text instead
97
- // So we pass it via a special handling in the metadata
98
- const metadataWithText = previewMetadata ? {
99
- ...previewMetadata,
100
- _capturedText: text
101
- } : undefined;
102
- onSend?.(metadataWithText);
103
- }, [onSend]);
104
-
105
- // Attachment send handler
106
- const {
107
- handleSend: handleAttachmentSend
108
- } = useAttachmentSendHandler({
109
- selectedImages,
110
- selectedFiles,
111
- sendAttachments,
112
- clearAllImages,
113
- clearAllFiles,
114
- onSend,
115
- onMessageSent,
116
- textMessage: (value ?? '').trim(),
117
- urlMetadata: showLinkPreview ? urlMetadata : undefined,
118
- onSendText: handleSendText
119
- });
120
-
121
- // Composer state
39
+ const compose = useChatCompose();
122
40
  const {
123
41
  isAttachmentOpen,
124
42
  setIsAttachmentOpen,
@@ -127,12 +45,8 @@ export const ChatComposer = /*#__PURE__*/memo(({
127
45
  setIsInputWrapped,
128
46
  isMultilineInput,
129
47
  inputRef
130
- } = useChatComposerState(value);
131
-
132
- // Panel height calculation
133
- const panelHeight = useMemo(() => hasAttachmentActions ? getAttachmentPanelHeight(attachmentActions.length, attachmentColumns) : 0, [attachmentActions, attachmentColumns, hasAttachmentActions]);
134
-
135
- // Animation
48
+ } = useChatComposerState(compose.text);
49
+ const panelHeight = useMemo(() => getAttachmentPanelHeight(DEFAULT_ATTACHMENT_ACTIONS.length), []);
136
50
  const {
137
51
  accessorySlotStyle,
138
52
  toggleAttachmentVisibility,
@@ -142,55 +56,24 @@ export const ChatComposer = /*#__PURE__*/memo(({
142
56
  panelHeight,
143
57
  onAttachmentOpenChange: setIsAttachmentOpen
144
58
  });
145
-
146
- // Check if any attachments are currently uploading or have errors
147
- const isUploadingAttachments = useMemo(() => selectedImages.some(img => img.isUploading) || selectedFiles.some(f => f.isUploading || !!f.error), [selectedImages, selectedFiles]);
148
-
149
- // Send handler - includes attachment and preview link features
150
- const handleSend = useCallback(() => {
151
- const hasAttachments = selectedImages.length > 0 || selectedFiles.length > 0;
152
- const hasText = (value ?? '').trim().length > 0;
153
- // Only send metadata if preview is CURRENTLY visible (user didn't dismiss it)
154
- const previewMetadata = showLinkPreview && !!urlMetadata ? urlMetadata : undefined;
155
- const hasPreview = !!previewMetadata;
156
-
157
- // Prevent sending while files are uploading
158
- if (isUploadingAttachments) {
159
- console.warn('[ChatComposer] Cannot send message while files are uploading');
160
- return;
161
- }
162
-
163
- // Validate: must have at least one of: attachments, text, or preview link
164
- if (!hasAttachments && !hasText && !hasPreview) {
165
- console.warn('[ChatComposer] No attachments, text, or preview link to send');
166
- return;
167
- }
168
- if (hasAttachments) {
169
- // Send attachments (+ text if present, handled in attachment handler)
170
- handleAttachmentSend();
171
- } else {
172
- // Send text/preview link only
173
- console.log('[ChatComposer] handleSend - text message:', {
174
- hasText,
175
- hasPreview,
176
- previewUrl: previewMetadata?.url
177
- });
178
- onSend?.(previewMetadata);
59
+ const handleSend = useCallback(async () => {
60
+ if (compose.isUploading || !compose.canSend) return;
61
+ try {
62
+ await compose.send();
63
+ } catch (error) {
64
+ if (__DEV__) console.error('[ChatComposer] Failed to send:', error);
179
65
  }
180
- }, [onSend, urlMetadata, showLinkPreview, selectedImages, selectedFiles, handleAttachmentSend, value, isUploadingAttachments]);
66
+ }, [compose]);
181
67
  const handleInputFocus = useCallback(() => {
182
68
  setIsInputFocused(true);
183
- // Close attachment panel with animation when input is focused
184
- if (isAttachmentOpen) {
185
- closeAttachment();
186
- }
69
+ if (isAttachmentOpen) closeAttachment();
187
70
  }, [closeAttachment, isAttachmentOpen, setIsInputFocused]);
188
71
  const handleInputBlur = useCallback(() => {
189
72
  setIsInputFocused(false);
190
73
  }, [setIsInputFocused]);
191
74
  const handleChangeText = useCallback(text => {
192
- onChangeText?.(text);
193
- }, [onChangeText]);
75
+ compose.setText(text ?? '');
76
+ }, [compose]);
194
77
  const handleInputContentSizeChange = useCallback(event => {
195
78
  const {
196
79
  height
@@ -205,53 +88,41 @@ export const ChatComposer = /*#__PURE__*/memo(({
205
88
  plainText: trans('start')
206
89
  });
207
90
  }, [runFlow, conversationFlow]);
208
-
209
- // Reset wrapped state when value is cleared
210
91
  useEffect(() => {
211
- if (!value) {
212
- setIsInputWrapped(false);
213
- }
214
- }, [value, setIsInputWrapped]);
215
- const handleImageAttachRef = useRef(handleImageAttach);
216
- handleImageAttachRef.current = handleImageAttach;
217
- const debouncedImagePickerRef = useRef(debounce(() => handleImageAttachRef.current(), 300, {
92
+ if (!compose.text) setIsInputWrapped(false);
93
+ }, [compose.text, setIsInputWrapped]);
94
+ const addImagesRef = useRef(compose.addImages);
95
+ addImagesRef.current = compose.addImages;
96
+ const debouncedImagePickerRef = useRef(debounce(() => addImagesRef.current?.(), 300, {
218
97
  leading: true,
219
98
  trailing: false
220
99
  }));
221
- const handleFileAttachRef = useRef(handleFileAttach);
222
- handleFileAttachRef.current = handleFileAttach;
223
- const debouncedFilePickerRef = useRef(debounce(() => handleFileAttachRef.current(), 300, {
100
+ const addFilesRef = useRef(compose.addFiles);
101
+ addFilesRef.current = compose.addFiles;
102
+ const debouncedFilePickerRef = useRef(debounce(() => addFilesRef.current?.(), 300, {
224
103
  leading: true,
225
104
  trailing: false
226
105
  }));
227
-
228
- // Attachment action handler
229
- const handleAttachmentActionInternal = useCallback(async action => {
106
+ const handleAttachmentAction = useCallback(async action => {
230
107
  if (action.id === 'gallery') {
231
108
  debouncedImagePickerRef.current();
232
109
  } else if (action.id === 'file') {
233
110
  debouncedFilePickerRef.current();
234
111
  } else {
235
- onAttachmentAction?.(action);
112
+ console.log('[ChatComposer] attachment action:', action.id);
236
113
  }
237
- }, [onAttachmentAction]);
238
-
239
- // Input row padding
114
+ }, []);
240
115
  const inputRowStyle = useMemo(() => ({
241
116
  paddingBottom: isAttachmentOpen ? 8 : insets.bottom + 12
242
117
  }), [insets.bottom, isAttachmentOpen]);
243
118
  const attachments = useAttachmentMapping({
244
- selectedImages,
245
- selectedFiles
119
+ selectedImages: compose.selectedImages,
120
+ selectedFiles: compose.selectedFiles
246
121
  });
247
122
  const onRemove = useCallback((type, data) => {
248
- switch (type) {
249
- case 'file':
250
- return handleFileRemove(data);
251
- default:
252
- return handleImageRemove(data);
253
- }
254
- }, [handleImageRemove, handleFileRemove]);
123
+ if (type === 'file') return compose.removeFile(data);
124
+ return compose.removeImage(data);
125
+ }, [compose]);
255
126
  if (isBotConversation && conversationFlow?.flowCurrentStep?.type === ReactFlowsNodeTypes.Start && isEmptyMessage) {
256
127
  return /*#__PURE__*/_jsx(KContainer.View, {
257
128
  padding: '1.5rem',
@@ -272,17 +143,15 @@ export const ChatComposer = /*#__PURE__*/memo(({
272
143
  return /*#__PURE__*/_jsxs(KContainer.View, {
273
144
  background: 'rgba(131, 137, 157, 0.05)',
274
145
  children: [/*#__PURE__*/_jsx(ChatQuickActions, {
275
- visible: showQuickActions,
276
- actions: quickActions,
277
- onActionPress: onQuickActionPress,
278
- renderAction: renderQuickAction,
279
- renderQuickActions: renderQuickActions
280
- }), showLinkPreview && /*#__PURE__*/_jsx(ChatLinkPreview, {
281
- metadata: urlMetadata,
282
- isLoading: isMetadataLoading,
283
- onDismiss: handleDismissPreview
146
+ visible: true,
147
+ actions: DEFAULT_Chat_QUICK_ACTIONS,
148
+ onActionPress: action => console.log('[ChatComposer] quick action:', action.id)
149
+ }), compose.showLinkPreview && /*#__PURE__*/_jsx(ChatLinkPreview, {
150
+ metadata: compose.urlMetadata,
151
+ isLoading: compose.isMetadataLoading,
152
+ onDismiss: compose.dismissPreview
284
153
  }), /*#__PURE__*/_jsx(AttachmentPreview, {
285
- visible: isImagePreviewVisible || isFilePreviewVisible,
154
+ visible: compose.isImagePreviewVisible || compose.isFilePreviewVisible,
286
155
  attachments: attachments,
287
156
  onRemove: onRemove
288
157
  }), /*#__PURE__*/_jsxs(KContainer.View, {
@@ -292,7 +161,7 @@ export const ChatComposer = /*#__PURE__*/memo(({
292
161
  paddingT: "0.75rem",
293
162
  paddingB: "0.75rem",
294
163
  style: inputRowStyle,
295
- children: [hasAttachmentActions && /*#__PURE__*/_jsx(KContainer.Touchable, {
164
+ children: [/*#__PURE__*/_jsx(KContainer.Touchable, {
296
165
  onPress: toggleAttachmentVisibility,
297
166
  center: true,
298
167
  br: "round",
@@ -302,27 +171,25 @@ export const ChatComposer = /*#__PURE__*/memo(({
302
171
  color: isAttachmentOpen ? KColors.palette.primary.w400 : KColors.palette.gray.w600
303
172
  })
304
173
  }), /*#__PURE__*/_jsx(ChatMessageInput, {
305
- value: value,
306
- placeholder: placeholder,
174
+ value: compose.text,
175
+ placeholder: "Nh\u1EADp tin nh\u1EAFn...",
307
176
  onChangeText: handleChangeText,
308
177
  onFocus: handleInputFocus,
309
178
  onBlur: handleInputBlur,
310
179
  onContentSizeChange: handleInputContentSizeChange,
311
180
  isInputFocused: isInputFocused,
312
- isMultilineInput: isMultilineInput
313
- // onEmojiPress={onPressEmoji}
314
- ,
181
+ isMultilineInput: isMultilineInput,
315
182
  inputRef: inputRef
316
183
  }), /*#__PURE__*/_jsx(KContainer.Touchable, {
317
- onPress: isUploadingAttachments ? undefined : handleSend,
318
- pointerEvents: isUploadingAttachments ? 'none' : 'auto',
184
+ onPress: compose.isUploading ? undefined : handleSend,
185
+ pointerEvents: compose.isUploading ? 'none' : 'auto',
319
186
  width: 40,
320
187
  height: 40,
321
188
  center: true,
322
189
  br: "round",
323
- background: isUploadingAttachments ? KColors.palette.gray.w400 : KColors.palette.primary.w400,
190
+ background: compose.isUploading ? KColors.palette.gray.w400 : KColors.palette.primary.w400,
324
191
  marginL: "0.75rem",
325
- opacity: isUploadingAttachments ? 0.6 : 1,
192
+ opacity: compose.isUploading ? 0.6 : 1,
326
193
  children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
327
194
  name: "send",
328
195
  provider: "MaterialCommunityIcons",
@@ -330,14 +197,12 @@ export const ChatComposer = /*#__PURE__*/memo(({
330
197
  color: KColors.white
331
198
  })
332
199
  })]
333
- }), hasAttachmentActions && /*#__PURE__*/_jsx(Reanimated.View, {
200
+ }), /*#__PURE__*/_jsx(Reanimated.View, {
334
201
  style: [styles.accessorySlot, accessorySlotStyle],
335
202
  pointerEvents: isAttachmentOpen ? 'auto' : 'none',
336
203
  children: /*#__PURE__*/_jsx(ChatAttachmentPanel, {
337
- actions: attachmentActions,
338
- columns: attachmentColumns,
339
- onActionPress: handleAttachmentActionInternal,
340
- renderAction: renderAttachmentAction
204
+ actions: DEFAULT_ATTACHMENT_ACTIONS,
205
+ onActionPress: handleAttachmentAction
341
206
  })
342
207
  })]
343
208
  });
@@ -1 +1 @@
1
- {"version":3,"names":["memo","useCallback","useEffect","useMemo","useRef","Platform","StyleSheet","debounce","Reanimated","useSafeAreaInsets","KContainer","KColors","KImage","KButton","IS_IOS","OS","INPUT_LINE_HEIGHT","WRAPPED_HEIGHT_THRESHOLD","ChatQuickActions","ChatAttachmentPanel","ChatLinkPreview","ChatMessageInput","AttachmentPreview","getAttachmentPanelHeight","useLinkPreview","useImageAttachment","useFileAttachment","useSendAttachment","useChatComposerState","useChatComposerAnimation","useAttachmentSendHandler","useChatDetailContext","trans","useRunFlow","ReactFlowsNodeTypes","useAttachmentMapping","jsx","_jsx","jsxs","_jsxs","ChatComposer","value","placeholder","onChangeText","onSend","onMessageSent","onPressEmoji","_onPressEmoji","showQuickActions","quickActions","attachmentActions","onQuickActionPress","onAttachmentAction","renderQuickAction","renderQuickActions","renderAttachmentAction","attachmentColumns","isEmptyMessage","insets","hasAttachmentActions","length","isBotConversation","conversationFlow","mutate","runFlow","isPending","isVisible","showLinkPreview","metadata","urlMetadata","isLoading","isMetadataLoading","dismiss","handleDismissPreview","selectedImages","isImagePreviewVisible","handleImageAttach","handleImageRemove","clearAllImages","selectedFiles","isFilePreviewVisible","handleFileAttach","handleFileRemove","clearAllFiles","send","sendAttachments","handleSendText","text","previewMetadata","metadataWithText","_capturedText","undefined","handleSend","handleAttachmentSend","textMessage","trim","onSendText","isAttachmentOpen","setIsAttachmentOpen","isInputFocused","setIsInputFocused","setIsInputWrapped","isMultilineInput","inputRef","panelHeight","accessorySlotStyle","toggleAttachmentVisibility","closeAttachment","onAttachmentOpenChange","isUploadingAttachments","some","img","isUploading","f","error","hasAttachments","hasText","hasPreview","console","warn","log","previewUrl","url","handleInputFocus","handleInputBlur","handleChangeText","handleInputContentSizeChange","event","height","nativeEvent","contentSize","onStartConversationFlow","groupId","flowCurrentStep","id","actionId","childId","plainText","handleImageAttachRef","current","debouncedImagePickerRef","leading","trailing","handleFileAttachRef","debouncedFilePickerRef","handleAttachmentActionInternal","action","inputRowStyle","paddingBottom","bottom","attachments","onRemove","type","data","Start","View","padding","paddingB","children","Solid","size","label","stretch","icon","vectorName","loading","onPress","background","visible","actions","onActionPress","renderAction","onDismiss","row","alignItems","paddingH","paddingT","style","Touchable","center","br","VectorIcons","name","color","palette","primary","w400","gray","w600","onFocus","onBlur","onContentSizeChange","pointerEvents","width","marginL","opacity","provider","white","styles","accessorySlot","columns","displayName","create","overflow","backgroundColor","w25"],"sourceRoot":"../../../../src","sources":["screens/chat-detail/ChatComposer.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["memo","useCallback","useEffect","useMemo","useRef","Platform","StyleSheet","debounce","Reanimated","useSafeAreaInsets","KContainer","KColors","KImage","KButton","IS_IOS","OS","INPUT_LINE_HEIGHT","WRAPPED_HEIGHT_THRESHOLD","ChatQuickActions","ChatAttachmentPanel","ChatLinkPreview","ChatMessageInput","AttachmentPreview","DEFAULT_ATTACHMENT_ACTIONS","DEFAULT_Chat_QUICK_ACTIONS","getAttachmentPanelHeight","useChatComposerState","useChatComposerAnimation","useChatDetailContext","trans","useRunFlow","ReactFlowsNodeTypes","useAttachmentMapping","useChatCompose","jsx","_jsx","jsxs","_jsxs","ChatComposer","isEmptyMessage","insets","isBotConversation","conversationFlow","mutate","runFlow","isPending","compose","isAttachmentOpen","setIsAttachmentOpen","isInputFocused","setIsInputFocused","setIsInputWrapped","isMultilineInput","inputRef","text","panelHeight","length","accessorySlotStyle","toggleAttachmentVisibility","closeAttachment","onAttachmentOpenChange","handleSend","isUploading","canSend","send","error","__DEV__","console","handleInputFocus","handleInputBlur","handleChangeText","setText","handleInputContentSizeChange","event","height","nativeEvent","contentSize","onStartConversationFlow","groupId","flowCurrentStep","id","actionId","childId","plainText","addImagesRef","addImages","current","debouncedImagePickerRef","leading","trailing","addFilesRef","addFiles","debouncedFilePickerRef","handleAttachmentAction","action","log","inputRowStyle","paddingBottom","bottom","attachments","selectedImages","selectedFiles","onRemove","type","data","removeFile","removeImage","Start","View","padding","paddingB","children","Solid","size","label","stretch","icon","vectorName","loading","onPress","background","visible","actions","onActionPress","showLinkPreview","metadata","urlMetadata","isLoading","isMetadataLoading","onDismiss","dismissPreview","isImagePreviewVisible","isFilePreviewVisible","row","alignItems","paddingH","paddingT","style","Touchable","center","br","VectorIcons","name","color","palette","primary","w400","gray","w600","value","placeholder","onChangeText","onFocus","onBlur","onContentSizeChange","undefined","pointerEvents","width","marginL","opacity","provider","white","styles","accessorySlot","displayName","create","overflow","backgroundColor","w25"],"sourceRoot":"../../../../src","sources":["screens/chat-detail/ChatComposer.tsx"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,QAAQ,OAAO;AACrE,SAASC,QAAQ,EAAEC,UAAU,QAAQ,cAAc;AACnD,SAASC,QAAQ,QAAQ,QAAQ;AACjC,OAAOC,UAAU,MAAM,yBAAyB;AAChD,SAASC,iBAAiB,QAAQ,gCAAgC;AAClE,SAASC,UAAU,EAAEC,OAAO,EAAEC,MAAM,EAAEC,OAAO,QAAQ,eAAe;AAEpE,MAAMC,MAAM,GAAGT,QAAQ,CAACU,EAAE,KAAK,KAAK;AACpC,MAAMC,iBAAiB,GAAG,IAAI;AAC9B,MAAMC,wBAAwB,GAAGH,MAAM,GACnCE,iBAAiB,GAAG,CAAC,GACrBA,iBAAiB,GAAG,EAAE;AAE1B,SAASE,gBAAgB,QAAQ,uBAAoB;AACrD,SAASC,mBAAmB,QAAQ,0BAAuB;AAC3D,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,gBAAgB,QAAQ,kCAA+B;AAChE,SAASC,iBAAiB,QAAQ,6CAAoC;AAEtE,SACEC,0BAA0B,EAC1BC,0BAA0B,EAC1BC,wBAAwB,QACnB,gBAAa;AAEpB,SAASC,oBAAoB,QAAQ,iCAA8B;AACnE,SAASC,wBAAwB,QAAQ,qCAAkC;AAC3E,SAASC,oBAAoB,QAAQ,oCAAiC;AACtE,SAASC,KAAK,QAAQ,4BAAmB;AACzC,SAASC,UAAU,QAAQ,8BAA2B;AACtD,SAASC,mBAAmB,QAAQ,sBAAmB;AACvD,SAASC,oBAAoB,QAAQ,iCAA8B;AAEnE,SAASC,cAAc,QAAQ,+BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAM5D,OAAO,MAAMC,YAAY,gBAAGtC,IAAI,CAC9B,CAAC;EAAEuC,cAAc,GAAG;AAAiC,CAAC,KAAK;EACzD,MAAMC,MAAM,GAAG/B,iBAAiB,CAAC,CAAC;EAElC,MAAM;IAAEgC,iBAAiB;IAAEC;EAAiB,CAAC,GAAGd,oBAAoB,CAAC,CAAC;EACtE,MAAM;IAAEe,MAAM,EAAEC,OAAO;IAAEC;EAAU,CAAC,GAAGf,UAAU,CAAC,CAAC;EAEnD,MAAMgB,OAAO,GAAGb,cAAc,CAAC,CAAC;EAEhC,MAAM;IACJc,gBAAgB;IAChBC,mBAAmB;IACnBC,cAAc;IACdC,iBAAiB;IACjBC,iBAAiB;IACjBC,gBAAgB;IAChBC;EACF,CAAC,GAAG3B,oBAAoB,CAACoB,OAAO,CAACQ,IAAI,CAAC;EAEtC,MAAMC,WAAW,GAAGpD,OAAO,CACzB,MAAMsB,wBAAwB,CAACF,0BAA0B,CAACiC,MAAM,CAAC,EACjE,EACF,CAAC;EAED,MAAM;IAAEC,kBAAkB;IAAEC,0BAA0B;IAAEC;EAAgB,CAAC,GACvEhC,wBAAwB,CAAC;IACvBoB,gBAAgB;IAChBQ,WAAW;IACXK,sBAAsB,EAAEZ;EAC1B,CAAC,CAAC;EAEJ,MAAMa,UAAU,GAAG5D,WAAW,CAAC,YAAY;IACzC,IAAI6C,OAAO,CAACgB,WAAW,IAAI,CAAChB,OAAO,CAACiB,OAAO,EAAE;IAC7C,IAAI;MACF,MAAMjB,OAAO,CAACkB,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd,IAAIC,OAAO,EAAEC,OAAO,CAACF,KAAK,CAAC,gCAAgC,EAAEA,KAAK,CAAC;IACrE;EACF,CAAC,EAAE,CAACnB,OAAO,CAAC,CAAC;EAEb,MAAMsB,gBAAgB,GAAGnE,WAAW,CAAC,MAAM;IACzCiD,iBAAiB,CAAC,IAAI,CAAC;IACvB,IAAIH,gBAAgB,EAAEY,eAAe,CAAC,CAAC;EACzC,CAAC,EAAE,CAACA,eAAe,EAAEZ,gBAAgB,EAAEG,iBAAiB,CAAC,CAAC;EAE1D,MAAMmB,eAAe,GAAGpE,WAAW,CAAC,MAAM;IACxCiD,iBAAiB,CAAC,KAAK,CAAC;EAC1B,CAAC,EAAE,CAACA,iBAAiB,CAAC,CAAC;EAEvB,MAAMoB,gBAAgB,GAAGrE,WAAW,CACjCqD,IAAa,IAAK;IACjBR,OAAO,CAACyB,OAAO,CAACjB,IAAI,IAAI,EAAE,CAAC;EAC7B,CAAC,EACD,CAACR,OAAO,CACV,CAAC;EAED,MAAM0B,4BAA4B,GAAGvE,WAAW,CAC7CwE,KAA2D,IAAK;IAC/D,MAAM;MAAEC;IAAO,CAAC,GAAGD,KAAK,CAACE,WAAW,CAACC,WAAW;IAChDzB,iBAAiB,CAACuB,MAAM,GAAGzD,wBAAwB,CAAC;EACtD,CAAC,EACD,CAACkC,iBAAiB,CACpB,CAAC;EAED,MAAM0B,uBAAuB,GAAG5E,WAAW,CAAC,MAAM;IAChD2C,OAAO,CAAC;MACNkC,OAAO,EAAEpC,gBAAgB,EAAEqC,eAAe,EAAEC,EAAE,IAAI,EAAE;MACpDC,QAAQ,EAAE,IAAI;MACdC,OAAO,EAAE,IAAI;MACbC,SAAS,EAAEtD,KAAK,CAAC,OAAO;IAC1B,CAAC,CAAC;EACJ,CAAC,EAAE,CAACe,OAAO,EAAEF,gBAAgB,CAAC,CAAC;EAE/BxC,SAAS,CAAC,MAAM;IACd,IAAI,CAAC4C,OAAO,CAACQ,IAAI,EAAEH,iBAAiB,CAAC,KAAK,CAAC;EAC7C,CAAC,EAAE,CAACL,OAAO,CAACQ,IAAI,EAAEH,iBAAiB,CAAC,CAAC;EAErC,MAAMiC,YAAY,GAAGhF,MAAM,CAAC0C,OAAO,CAACuC,SAAS,CAAC;EAC9CD,YAAY,CAACE,OAAO,GAAGxC,OAAO,CAACuC,SAAS;EACxC,MAAME,uBAAuB,GAAGnF,MAAM,CACpCG,QAAQ,CAAC,MAAM6E,YAAY,CAACE,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE;IAC5CE,OAAO,EAAE,IAAI;IACbC,QAAQ,EAAE;EACZ,CAAC,CACH,CAAC;EAED,MAAMC,WAAW,GAAGtF,MAAM,CAAC0C,OAAO,CAAC6C,QAAQ,CAAC;EAC5CD,WAAW,CAACJ,OAAO,GAAGxC,OAAO,CAAC6C,QAAQ;EACtC,MAAMC,sBAAsB,GAAGxF,MAAM,CACnCG,QAAQ,CAAC,MAAMmF,WAAW,CAACJ,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE;IAC3CE,OAAO,EAAE,IAAI;IACbC,QAAQ,EAAE;EACZ,CAAC,CACH,CAAC;EAED,MAAMI,sBAAsB,GAAG5F,WAAW,CACxC,MAAO6F,MAA6B,IAAK;IACvC,IAAIA,MAAM,CAACd,EAAE,KAAK,SAAS,EAAE;MAC3BO,uBAAuB,CAACD,OAAO,CAAC,CAAC;IACnC,CAAC,MAAM,IAAIQ,MAAM,CAACd,EAAE,KAAK,MAAM,EAAE;MAC/BY,sBAAsB,CAACN,OAAO,CAAC,CAAC;IAClC,CAAC,MAAM;MACLnB,OAAO,CAAC4B,GAAG,CAAC,mCAAmC,EAAED,MAAM,CAACd,EAAE,CAAC;IAC7D;EACF,CAAC,EACD,EACF,CAAC;EAED,MAAMgB,aAAa,GAAG7F,OAAO,CAC3B,OAAO;IAAE8F,aAAa,EAAElD,gBAAgB,GAAG,CAAC,GAAGP,MAAM,CAAC0D,MAAM,GAAG;EAAG,CAAC,CAAC,EACpE,CAAC1D,MAAM,CAAC0D,MAAM,EAAEnD,gBAAgB,CAClC,CAAC;EAED,MAAMoD,WAAW,GAAGnE,oBAAoB,CAAC;IACvCoE,cAAc,EAAEtD,OAAO,CAACsD,cAAc;IACtCC,aAAa,EAAEvD,OAAO,CAACuD;EACzB,CAAC,CAAC;EAEF,MAAMC,QAAQ,GAAGrG,WAAW,CAC1B,CAACsG,IAAoB,EAAEC,IAAa,KAAK;IACvC,IAAID,IAAI,KAAK,MAAM,EAAE,OAAOzD,OAAO,CAAC2D,UAAU,CAACD,IAAc,CAAC;IAC9D,OAAO1D,OAAO,CAAC4D,WAAW,CAACF,IAAc,CAAC;EAC5C,CAAC,EACD,CAAC1D,OAAO,CACV,CAAC;EAED,IACEL,iBAAiB,IACjBC,gBAAgB,EAAEqC,eAAe,EAAEwB,IAAI,KAAKxE,mBAAmB,CAAC4E,KAAK,IACrEpE,cAAc,EACd;IACA,oBACEJ,IAAA,CAACzB,UAAU,CAACkG,IAAI;MAACC,OAAO,EAAE,QAAS;MAACC,QAAQ,EAAE,CAAE;MAAAC,QAAA,eAC9C5E,IAAA,CAACtB,OAAO,CAACmG,KAAK;QACZC,IAAI,EAAC,IAAI;QACTC,KAAK,EAAErF,KAAK,CAAC,OAAO,CAAE;QACtBsF,OAAO;QACPC,IAAI,EAAE;UAAEC,UAAU,EAAE,eAAe;UAAEJ,IAAI,EAAE;QAAG,CAAE;QAChDK,OAAO,EAAEzE,SAAU;QACnB0E,OAAO,EAAE1C;MAAwB,CAClC;IAAC,CACa,CAAC;EAEtB;EAEA,oBACExC,KAAA,CAAC3B,UAAU,CAACkG,IAAI;IAACY,UAAU,EAAE,2BAA4B;IAAAT,QAAA,gBACvD5E,IAAA,CAACjB,gBAAgB;MACfuG,OAAO;MACPC,OAAO,EAAElG,0BAA2B;MACpCmG,aAAa,EAAG7B,MAAM,IACpB3B,OAAO,CAAC4B,GAAG,CAAC,8BAA8B,EAAED,MAAM,CAACd,EAAE;IACtD,CACF,CAAC,EAEDlC,OAAO,CAAC8E,eAAe,iBACtBzF,IAAA,CAACf,eAAe;MACdyG,QAAQ,EAAE/E,OAAO,CAACgF,WAAY;MAC9BC,SAAS,EAAEjF,OAAO,CAACkF,iBAAkB;MACrCC,SAAS,EAAEnF,OAAO,CAACoF;IAAe,CACnC,CACF,eAED/F,IAAA,CAACb,iBAAiB;MAChBmG,OAAO,EACL3E,OAAO,CAACqF,qBAAqB,IAAIrF,OAAO,CAACsF,oBAC1C;MACDjC,WAAW,EAAEA,WAAY;MACzBG,QAAQ,EAAEA;IAAS,CACpB,CAAC,eAEFjE,KAAA,CAAC3B,UAAU,CAACkG,IAAI;MACdyB,GAAG;MACHC,UAAU;MACVC,QAAQ,EAAC,SAAS;MAClBC,QAAQ,EAAC,SAAS;MAClB1B,QAAQ,EAAC,SAAS;MAClB2B,KAAK,EAAEzC,aAAc;MAAAe,QAAA,gBAErB5E,IAAA,CAACzB,UAAU,CAACgI,SAAS;QACnBnB,OAAO,EAAE7D,0BAA2B;QACpCiF,MAAM;QACNC,EAAE,EAAC,OAAO;QAAA7B,QAAA,eAEV5E,IAAA,CAACvB,MAAM,CAACiI,WAAW;UACjBC,IAAI,EAAE/F,gBAAgB,GAAG,gBAAgB,GAAG,eAAgB;UAC5DkE,IAAI,EAAE,EAAG;UACT8B,KAAK,EACHhG,gBAAgB,GACZpC,OAAO,CAACqI,OAAO,CAACC,OAAO,CAACC,IAAI,GAC5BvI,OAAO,CAACqI,OAAO,CAACG,IAAI,CAACC;QAC1B,CACF;MAAC,CACkB,CAAC,eAEvBjH,IAAA,CAACd,gBAAgB;QACfgI,KAAK,EAAEvG,OAAO,CAACQ,IAAK;QACpBgG,WAAW,EAAC,4BAAkB;QAC9BC,YAAY,EAAEjF,gBAAiB;QAC/BkF,OAAO,EAAEpF,gBAAiB;QAC1BqF,MAAM,EAAEpF,eAAgB;QACxBqF,mBAAmB,EAAElF,4BAA6B;QAClDvB,cAAc,EAAEA,cAAe;QAC/BG,gBAAgB,EAAEA,gBAAiB;QACnCC,QAAQ,EAAEA;MAAS,CACpB,CAAC,eAEFlB,IAAA,CAACzB,UAAU,CAACgI,SAAS;QACnBnB,OAAO,EAAEzE,OAAO,CAACgB,WAAW,GAAG6F,SAAS,GAAG9F,UAAW;QACtD+F,aAAa,EAAE9G,OAAO,CAACgB,WAAW,GAAG,MAAM,GAAG,MAAO;QACrD+F,KAAK,EAAE,EAAG;QACVnF,MAAM,EAAE,EAAG;QACXiE,MAAM;QACNC,EAAE,EAAC,OAAO;QACVpB,UAAU,EACR1E,OAAO,CAACgB,WAAW,GACfnD,OAAO,CAACqI,OAAO,CAACG,IAAI,CAACD,IAAI,GACzBvI,OAAO,CAACqI,OAAO,CAACC,OAAO,CAACC,IAC7B;QACDY,OAAO,EAAC,SAAS;QACjBC,OAAO,EAAEjH,OAAO,CAACgB,WAAW,GAAG,GAAG,GAAG,CAAE;QAAAiD,QAAA,eAEvC5E,IAAA,CAACvB,MAAM,CAACiI,WAAW;UACjBC,IAAI,EAAC,MAAM;UACXkB,QAAQ,EAAC,wBAAwB;UACjC/C,IAAI,EAAE,EAAG;UACT8B,KAAK,EAAEpI,OAAO,CAACsJ;QAAM,CACtB;MAAC,CACkB,CAAC;IAAA,CACR,CAAC,eAElB9H,IAAA,CAAC3B,UAAU,CAACoG,IAAI;MACd6B,KAAK,EAAE,CAACyB,MAAM,CAACC,aAAa,EAAE1G,kBAAkB,CAAE;MAClDmG,aAAa,EAAE7G,gBAAgB,GAAG,MAAM,GAAG,MAAO;MAAAgE,QAAA,eAElD5E,IAAA,CAAChB,mBAAmB;QAClBuG,OAAO,EAAEnG,0BAA2B;QACpCoG,aAAa,EAAE9B;MAAuB,CACvC;IAAC,CACa,CAAC;EAAA,CACH,CAAC;AAEtB,CACF,CAAC;AAEDvD,YAAY,CAAC8H,WAAW,GAAG,cAAc;AAEzC,MAAMF,MAAM,GAAG5J,UAAU,CAAC+J,MAAM,CAAC;EAC/BF,aAAa,EAAE;IACbG,QAAQ,EAAE,QAAQ;IAClBC,eAAe,EAAE5J,OAAO,CAACqI,OAAO,CAACG,IAAI,CAACqB;EACxC;AACF,CAAC,CAAC","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { memo, useState, useCallback, useEffect, useMemo, useRef } from 'react';
3
+ import { memo, useCallback, useEffect, useMemo, useRef } from 'react';
4
4
  import { Platform, StyleSheet } from 'react-native';
5
5
  import { KeyboardAvoidingView } from 'react-native-keyboard-controller';
6
6
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
@@ -12,12 +12,10 @@ import { useConversation, useConversationStore } from "../../store/index.js";
12
12
  import ChatDetailHeader from "./ChatDetailHeader.js";
13
13
  import { ChatListLegend } from "./ChatListLegend.js";
14
14
  import { ChatComposer } from "./ChatComposer.js";
15
- import { DEFAULT_ATTACHMENT_ACTIONS, DEFAULT_Chat_QUICK_ACTIONS } from "./constants.js";
16
15
  import { getConversationAvatarUri, getConversationSubtitle, getConversationTitle, shouldShowAddMember } from "./conversationHeader.utils.js";
17
- import { useSendMessage } from "../../hooks/message/useSendMessage.js";
18
- import { useMessageStore } from "../../store/message.js";
19
16
  import { ChatDetailProvider } from "../../context/ChatDetailContext.js";
20
17
  import { normalizeUrl } from "../../utils/url.js";
18
+ // import { ChatMessageAPI } from '../../services/message';
21
19
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
20
  const ChatDetail = /*#__PURE__*/memo(({
23
21
  conversationId,
@@ -33,50 +31,18 @@ const ChatDetail = /*#__PURE__*/memo(({
33
31
  onPressAddMember,
34
32
  onPressMenu,
35
33
  onPressAvatar,
36
- showQuickActions = true,
37
- quickActions,
38
- inputPlaceholder,
39
- onChangeInput,
40
- onPressAttach,
41
- onPressEmoji,
42
- attachmentActions,
43
- onQuickActionPress,
44
- onAttachmentAction,
45
- renderQuickAction,
46
- renderQuickActions,
47
- renderAttachmentAction,
48
- attachmentColumns,
49
34
  onPressUrl,
50
35
  customMessageItemFactory
51
36
  }) => {
52
37
  const navigation = useNavigation();
53
- const [internalInput, setInternalInput] = useState('');
54
38
  const mediaViewerRef = useRef(null);
55
39
  const conversation = useConversation(conversationId);
56
- // const user = conversation?.peer;
57
-
58
- // Default handlers when props not provided
59
40
  const handleBackDefault = useCallback(() => {
60
41
  navigation.goBack();
61
42
  }, [navigation]);
62
- const quickActionsDefault = useMemo(() => DEFAULT_Chat_QUICK_ACTIONS.map(action => ({
63
- ...action,
64
- onPress: () => {
65
- console.log('[quick-action]', action.id);
66
- }
67
- })), []);
68
- const attachmentActionsDefault = useMemo(() => DEFAULT_ATTACHMENT_ACTIONS.map(action => ({
69
- ...action,
70
- onPress: () => {
71
- console.log('[attachment-action]', action.id);
72
- }
73
- })), []);
74
- const {
75
- sendMessage
76
- } = useSendMessage();
77
- const {
78
- pushNewMessage
79
- } = useMessageStore();
43
+ const handleMediaPress = useCallback((items, index) => {
44
+ mediaViewerRef.current?.show(items, index);
45
+ }, []);
80
46
  const {
81
47
  messages,
82
48
  currentUserId,
@@ -88,84 +54,35 @@ const ChatDetail = /*#__PURE__*/memo(({
88
54
  conversationId,
89
55
  enabled
90
56
  });
91
-
92
- // Callback for attachment messages - add them to the message list
93
- const handleAttachmentMessageSent = useCallback(message => {
94
- if (__DEV__) console.log('[ChatDetail] Attachment message received:', {
95
- clientMsgID: message?.clientMsgID,
96
- contentType: message?.contentType
97
- });
98
- if (message) {
99
- pushNewMessage(message);
100
- }
101
- }, [pushNewMessage]);
102
57
  useEffect(() => {
103
58
  useConversationStore.getState().setCurrentConversation(conversationId);
104
59
  }, [conversationId]);
60
+
61
+ // useEffect(() => {
62
+ // if (!conversationId) return;
63
+ // ChatMessageAPI.searchLocalMessages(conversationId, { count: 20 })
64
+ // .then((result) => {
65
+ // console.log('[TEST searchLocalMessages] success:', result);
66
+ // })
67
+ // .catch((err) => {
68
+ // console.log('[TEST searchLocalMessages] error:', err);
69
+ // });
70
+ // }, [conversationId]);
71
+
105
72
  const resolvedTitle = title ?? getConversationTitle(conversation);
106
73
  const resolvedAvatarUri = avatarUri ?? getConversationAvatarUri(conversation);
107
74
  const resolvedAvatarFullName = avatarFullName ?? resolvedTitle;
108
75
  const resolvedShowAddMember = showAddMember ?? shouldShowAddMember(conversation);
109
76
  const resolvedSubtitle = useMemo(() => {
110
- if (subtitle !== undefined) {
111
- return subtitle;
112
- }
113
- if (getSubtitle && conversation) {
114
- return getSubtitle(conversation);
115
- }
77
+ if (subtitle !== undefined) return subtitle;
78
+ if (getSubtitle && conversation) return getSubtitle(conversation);
116
79
  return getConversationSubtitle(conversation);
117
80
  }, [conversation, getSubtitle, subtitle]);
118
- const currentInput = internalInput;
119
- const handleChangeText = useCallback(text => {
120
- const newText = text ?? '';
121
- if (onChangeInput) {
122
- onChangeInput(newText);
123
- } else {
124
- setInternalInput(newText);
125
- }
126
- }, [onChangeInput]);
127
- const handleSend = useCallback(async urlMetadata => {
128
- // Support captured text passed from attachment handler
129
- const capturedText = urlMetadata?._capturedText;
130
- const cleanMetadata = capturedText ? (({
131
- _capturedText,
132
- ...rest
133
- }) => rest)(urlMetadata) : urlMetadata;
134
- const text = (capturedText || currentInput).trim();
135
-
136
- // Validate: must have text OR preview metadata (text is optional if preview exists)
137
- // If metadata exists, trust it (useLinkPreview is responsible for validity)
138
- if (!text && !cleanMetadata) {
139
- if (__DEV__) console.warn('[ChatDetail] No text or preview link to send');
140
- return;
141
- }
142
-
143
- // Log if metadata seems incomplete
144
- if (cleanMetadata && !cleanMetadata.url) {
145
- if (__DEV__) console.warn('[ChatDetail] Preview metadata missing URL - check useLinkPreview');
146
- }
147
- try {
148
- await sendMessage({
149
- files: [],
150
- plainText: text,
151
- urlMetadata: cleanMetadata || undefined
152
- });
153
-
154
- // Clear input after successful send
155
- if (onChangeInput) {
156
- onChangeInput('');
157
- } else {
158
- setInternalInput('');
159
- }
160
- } catch (error) {
161
- if (__DEV__) console.error('[ChatDetail] Failed to send message:', {
162
- error,
163
- text: text.substring(0, 50),
164
- hasPreview: !!cleanMetadata
165
- });
166
- }
167
- }, [currentInput, onChangeInput, sendMessage]);
168
81
  const insets = useSafeAreaInsets();
82
+ const keyboardVerticalOffset = useMemo(() => Platform.select({
83
+ android: insets.bottom,
84
+ default: 0
85
+ }), [insets.bottom]);
169
86
  const handlePressUrl = useCallback(url => {
170
87
  onPressUrl?.(normalizeUrl(url));
171
88
  }, [onPressUrl]);
@@ -181,17 +98,14 @@ const ChatDetail = /*#__PURE__*/memo(({
181
98
  avatarFullName: resolvedAvatarFullName,
182
99
  showAddMember: resolvedShowAddMember,
183
100
  onBack: onBack ?? handleBackDefault,
184
- onPressSearch: onPressSearch ?? (() => console.log('[onPressSearch]')),
185
- onPressAddMember: onPressAddMember ?? (() => console.log('[onPressAddMember]')),
186
- onPressMenu: onPressMenu ?? (() => console.log('[onPressMenu]')),
187
- onPressAvatar: onPressAvatar ?? (() => console.log('[onPressAvatar]'))
101
+ onPressSearch: onPressSearch,
102
+ onPressAddMember: onPressAddMember,
103
+ onPressMenu: onPressMenu,
104
+ onPressAvatar: onPressAvatar
188
105
  }), /*#__PURE__*/_jsxs(KeyboardAvoidingView, {
189
106
  style: styles.keyboardAvoiding,
190
107
  behavior: "padding",
191
- keyboardVerticalOffset: Platform.select({
192
- android: insets.bottom,
193
- default: 0
194
- }),
108
+ keyboardVerticalOffset: keyboardVerticalOffset,
195
109
  children: [/*#__PURE__*/_jsx(ChatListLegend, {
196
110
  messages: messages,
197
111
  currentUserId: currentUserId,
@@ -200,31 +114,9 @@ const ChatDetail = /*#__PURE__*/memo(({
200
114
  isLoading: isLoading,
201
115
  isLoadingEarlier: isLoadingEarlier,
202
116
  hasMoreEarlier: hasMoreEarlier,
203
- onMediaPress: (items, index) => {
204
- mediaViewerRef.current?.show(items, index);
205
- },
117
+ onMediaPress: handleMediaPress,
206
118
  onPressUrl: handlePressUrl
207
119
  }), /*#__PURE__*/_jsx(ChatComposer, {
208
- value: currentInput,
209
- placeholder: inputPlaceholder,
210
- onChangeText: handleChangeText,
211
- onSend: handleSend,
212
- onMessageSent: handleAttachmentMessageSent,
213
- onPressAttach: onPressAttach ?? (() => console.log('[onPressAttach]')),
214
- onPressEmoji: onPressEmoji ?? (() => console.log('[onPressEmoji]')),
215
- showQuickActions: showQuickActions,
216
- quickActions: quickActions ?? quickActionsDefault,
217
- attachmentActions: attachmentActions ?? attachmentActionsDefault,
218
- onQuickActionPress: onQuickActionPress ?? (action => {
219
- console.log('[onQuickActionPress]', action.id, action.meta);
220
- }),
221
- onAttachmentAction: onAttachmentAction ?? (action => {
222
- console.log('[onAttachmentAction]', action.id, action.meta);
223
- }),
224
- renderQuickAction: renderQuickAction,
225
- renderQuickActions: renderQuickActions,
226
- renderAttachmentAction: renderAttachmentAction,
227
- attachmentColumns: attachmentColumns,
228
120
  isEmptyMessage: messages?.length === 0
229
121
  })]
230
122
  }), /*#__PURE__*/_jsx(MediaViewerModal, {