@droppii-org/chat-mobile 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +101 -0
  3. package/lib/module/assets/images/icon_bot.png +0 -0
  4. package/lib/module/assets/images/index.js +9 -0
  5. package/lib/module/assets/images/index.js.map +1 -0
  6. package/lib/module/assets/images/tag_bot.png +0 -0
  7. package/lib/module/assets/images/tag_mall.png +0 -0
  8. package/lib/module/build-ignore.d.js +2 -0
  9. package/lib/module/build-ignore.d.js.map +1 -0
  10. package/lib/module/components/Avatar/Avatar.js +81 -0
  11. package/lib/module/components/Avatar/Avatar.js.map +1 -0
  12. package/lib/module/components/Avatar/Avatar.types.js +2 -0
  13. package/lib/module/components/Avatar/Avatar.types.js.map +1 -0
  14. package/lib/module/components/Avatar/Avatar.utils.js +44 -0
  15. package/lib/module/components/Avatar/Avatar.utils.js.map +1 -0
  16. package/lib/module/components/Avatar/AvatarBadge.js +28 -0
  17. package/lib/module/components/Avatar/AvatarBadge.js.map +1 -0
  18. package/lib/module/components/Avatar/DoubleAvatar.js +74 -0
  19. package/lib/module/components/Avatar/DoubleAvatar.js.map +1 -0
  20. package/lib/module/components/Avatar/SingleAvatar.js +53 -0
  21. package/lib/module/components/Avatar/SingleAvatar.js.map +1 -0
  22. package/lib/module/components/Avatar/index.js +7 -0
  23. package/lib/module/components/Avatar/index.js.map +1 -0
  24. package/lib/module/components/ThreadCard/AvatarSection.js +37 -0
  25. package/lib/module/components/ThreadCard/AvatarSection.js.map +1 -0
  26. package/lib/module/components/ThreadCard/NamePrefixIcon.js +36 -0
  27. package/lib/module/components/ThreadCard/NamePrefixIcon.js.map +1 -0
  28. package/lib/module/components/ThreadCard/ThreadCard.js +132 -0
  29. package/lib/module/components/ThreadCard/ThreadCard.js.map +1 -0
  30. package/lib/module/components/ThreadCard/UnreadBadge.js +35 -0
  31. package/lib/module/components/ThreadCard/UnreadBadge.js.map +1 -0
  32. package/lib/module/components/ThreadCard/index.js +7 -0
  33. package/lib/module/components/ThreadCard/index.js.map +1 -0
  34. package/lib/module/components/ThreadCard/thread-card.utils.js +51 -0
  35. package/lib/module/components/ThreadCard/thread-card.utils.js.map +1 -0
  36. package/lib/module/core/index.js +11 -0
  37. package/lib/module/core/index.js.map +1 -0
  38. package/lib/module/core/useChatListener.js +62 -0
  39. package/lib/module/core/useChatListener.js.map +1 -0
  40. package/lib/module/core/useUserListener.js +72 -0
  41. package/lib/module/core/useUserListener.js.map +1 -0
  42. package/lib/module/hooks/query-keys.js +10 -0
  43. package/lib/module/hooks/query-keys.js.map +1 -0
  44. package/lib/module/hooks/useChatMessages.js +163 -0
  45. package/lib/module/hooks/useChatMessages.js.map +1 -0
  46. package/lib/module/hooks/useConversationList.js +51 -0
  47. package/lib/module/hooks/useConversationList.js.map +1 -0
  48. package/lib/module/index.js +14 -0
  49. package/lib/module/index.js.map +1 -0
  50. package/lib/module/package.json +1 -0
  51. package/lib/module/screens/chat-detail/ChatAttachmentPanel.js +106 -0
  52. package/lib/module/screens/chat-detail/ChatAttachmentPanel.js.map +1 -0
  53. package/lib/module/screens/chat-detail/ChatComposer.js +288 -0
  54. package/lib/module/screens/chat-detail/ChatComposer.js.map +1 -0
  55. package/lib/module/screens/chat-detail/ChatDay.js +65 -0
  56. package/lib/module/screens/chat-detail/ChatDay.js.map +1 -0
  57. package/lib/module/screens/chat-detail/ChatDetail.js +104 -0
  58. package/lib/module/screens/chat-detail/ChatDetail.js.map +1 -0
  59. package/lib/module/screens/chat-detail/ChatDetailHeader.js +92 -0
  60. package/lib/module/screens/chat-detail/ChatDetailHeader.js.map +1 -0
  61. package/lib/module/screens/chat-detail/ChatList.js +145 -0
  62. package/lib/module/screens/chat-detail/ChatList.js.map +1 -0
  63. package/lib/module/screens/chat-detail/ChatLoadEarlier.js +23 -0
  64. package/lib/module/screens/chat-detail/ChatLoadEarlier.js.map +1 -0
  65. package/lib/module/screens/chat-detail/ChatQuickActions.js +85 -0
  66. package/lib/module/screens/chat-detail/ChatQuickActions.js.map +1 -0
  67. package/lib/module/screens/chat-detail/ChatScrollToBottom.js +12 -0
  68. package/lib/module/screens/chat-detail/ChatScrollToBottom.js.map +1 -0
  69. package/lib/module/screens/chat-detail/ChatTextBubble.js +62 -0
  70. package/lib/module/screens/chat-detail/ChatTextBubble.js.map +1 -0
  71. package/lib/module/screens/chat-detail/constants.js +59 -0
  72. package/lib/module/screens/chat-detail/constants.js.map +1 -0
  73. package/lib/module/screens/chat-detail/index.js +12 -0
  74. package/lib/module/screens/chat-detail/index.js.map +1 -0
  75. package/lib/module/screens/chat-detail/messages/ChatMessageBubble.js +24 -0
  76. package/lib/module/screens/chat-detail/messages/ChatMessageBubble.js.map +1 -0
  77. package/lib/module/screens/chat-detail/messages/types.js +4 -0
  78. package/lib/module/screens/chat-detail/messages/types.js.map +1 -0
  79. package/lib/module/screens/chat-detail/types.js +4 -0
  80. package/lib/module/screens/chat-detail/types.js.map +1 -0
  81. package/lib/module/screens/chat-detail/useChatActionPress.js +11 -0
  82. package/lib/module/screens/chat-detail/useChatActionPress.js.map +1 -0
  83. package/lib/module/screens/inbox/Inbox.js +134 -0
  84. package/lib/module/screens/inbox/Inbox.js.map +1 -0
  85. package/lib/module/screens/inbox/MessagesTab.js +58 -0
  86. package/lib/module/screens/inbox/MessagesTab.js.map +1 -0
  87. package/lib/module/screens/inbox/index.js +5 -0
  88. package/lib/module/screens/inbox/index.js.map +1 -0
  89. package/lib/module/services/apis.js +41 -0
  90. package/lib/module/services/apis.js.map +1 -0
  91. package/lib/module/services/index.js +5 -0
  92. package/lib/module/services/index.js.map +1 -0
  93. package/lib/module/services/message.js +38 -0
  94. package/lib/module/services/message.js.map +1 -0
  95. package/lib/module/store/conversation.js +89 -0
  96. package/lib/module/store/conversation.js.map +1 -0
  97. package/lib/module/store/index.js +6 -0
  98. package/lib/module/store/index.js.map +1 -0
  99. package/lib/module/store/storeConfig.js +19 -0
  100. package/lib/module/store/storeConfig.js.map +1 -0
  101. package/lib/module/store/user.js +25 -0
  102. package/lib/module/store/user.js.map +1 -0
  103. package/lib/module/translation/index.js +24 -0
  104. package/lib/module/translation/index.js.map +1 -0
  105. package/lib/module/translation/resources/i18n.js +10 -0
  106. package/lib/module/translation/resources/i18n.js.map +1 -0
  107. package/lib/module/types/auth.js +9 -0
  108. package/lib/module/types/auth.js.map +1 -0
  109. package/lib/module/types/chat.js +26 -0
  110. package/lib/module/types/chat.js.map +1 -0
  111. package/lib/module/types/message.js +16 -0
  112. package/lib/module/types/message.js.map +1 -0
  113. package/lib/module/utils/conversation.js +61 -0
  114. package/lib/module/utils/conversation.js.map +1 -0
  115. package/lib/module/utils/giftedChatMessage.js +90 -0
  116. package/lib/module/utils/giftedChatMessage.js.map +1 -0
  117. package/lib/module/utils/message.js +68 -0
  118. package/lib/module/utils/message.js.map +1 -0
  119. package/lib/module/utils/resolveMessageType.js +44 -0
  120. package/lib/module/utils/resolveMessageType.js.map +1 -0
  121. package/lib/typescript/package.json +1 -0
  122. package/lib/typescript/src/assets/images/index.d.ts +7 -0
  123. package/lib/typescript/src/assets/images/index.d.ts.map +1 -0
  124. package/lib/typescript/src/components/Avatar/Avatar.d.ts +4 -0
  125. package/lib/typescript/src/components/Avatar/Avatar.d.ts.map +1 -0
  126. package/lib/typescript/src/components/Avatar/Avatar.types.d.ts +18 -0
  127. package/lib/typescript/src/components/Avatar/Avatar.types.d.ts.map +1 -0
  128. package/lib/typescript/src/components/Avatar/Avatar.utils.d.ts +14 -0
  129. package/lib/typescript/src/components/Avatar/Avatar.utils.d.ts.map +1 -0
  130. package/lib/typescript/src/components/Avatar/AvatarBadge.d.ts +7 -0
  131. package/lib/typescript/src/components/Avatar/AvatarBadge.d.ts.map +1 -0
  132. package/lib/typescript/src/components/Avatar/DoubleAvatar.d.ts +13 -0
  133. package/lib/typescript/src/components/Avatar/DoubleAvatar.d.ts.map +1 -0
  134. package/lib/typescript/src/components/Avatar/SingleAvatar.d.ts +12 -0
  135. package/lib/typescript/src/components/Avatar/SingleAvatar.d.ts.map +1 -0
  136. package/lib/typescript/src/components/Avatar/index.d.ts +6 -0
  137. package/lib/typescript/src/components/Avatar/index.d.ts.map +1 -0
  138. package/lib/typescript/src/components/ThreadCard/AvatarSection.d.ts +8 -0
  139. package/lib/typescript/src/components/ThreadCard/AvatarSection.d.ts.map +1 -0
  140. package/lib/typescript/src/components/ThreadCard/NamePrefixIcon.d.ts +8 -0
  141. package/lib/typescript/src/components/ThreadCard/NamePrefixIcon.d.ts.map +1 -0
  142. package/lib/typescript/src/components/ThreadCard/ThreadCard.d.ts +11 -0
  143. package/lib/typescript/src/components/ThreadCard/ThreadCard.d.ts.map +1 -0
  144. package/lib/typescript/src/components/ThreadCard/UnreadBadge.d.ts +6 -0
  145. package/lib/typescript/src/components/ThreadCard/UnreadBadge.d.ts.map +1 -0
  146. package/lib/typescript/src/components/ThreadCard/index.d.ts +5 -0
  147. package/lib/typescript/src/components/ThreadCard/index.d.ts.map +1 -0
  148. package/lib/typescript/src/components/ThreadCard/thread-card.utils.d.ts +4 -0
  149. package/lib/typescript/src/components/ThreadCard/thread-card.utils.d.ts.map +1 -0
  150. package/lib/typescript/src/core/index.d.ts +3 -0
  151. package/lib/typescript/src/core/index.d.ts.map +1 -0
  152. package/lib/typescript/src/core/useChatListener.d.ts +2 -0
  153. package/lib/typescript/src/core/useChatListener.d.ts.map +1 -0
  154. package/lib/typescript/src/core/useUserListener.d.ts +2 -0
  155. package/lib/typescript/src/core/useUserListener.d.ts.map +1 -0
  156. package/lib/typescript/src/hooks/query-keys.d.ts +9 -0
  157. package/lib/typescript/src/hooks/query-keys.d.ts.map +1 -0
  158. package/lib/typescript/src/hooks/useChatMessages.d.ts +21 -0
  159. package/lib/typescript/src/hooks/useChatMessages.d.ts.map +1 -0
  160. package/lib/typescript/src/hooks/useConversationList.d.ts +8 -0
  161. package/lib/typescript/src/hooks/useConversationList.d.ts.map +1 -0
  162. package/lib/typescript/src/index.d.ts +14 -0
  163. package/lib/typescript/src/index.d.ts.map +1 -0
  164. package/lib/typescript/src/screens/chat-detail/ChatAttachmentPanel.d.ts +3 -0
  165. package/lib/typescript/src/screens/chat-detail/ChatAttachmentPanel.d.ts.map +1 -0
  166. package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts +3 -0
  167. package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts.map +1 -0
  168. package/lib/typescript/src/screens/chat-detail/ChatDay.d.ts +3 -0
  169. package/lib/typescript/src/screens/chat-detail/ChatDay.d.ts.map +1 -0
  170. package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts +4 -0
  171. package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts.map +1 -0
  172. package/lib/typescript/src/screens/chat-detail/ChatDetailHeader.d.ts +4 -0
  173. package/lib/typescript/src/screens/chat-detail/ChatDetailHeader.d.ts.map +1 -0
  174. package/lib/typescript/src/screens/chat-detail/ChatList.d.ts +3 -0
  175. package/lib/typescript/src/screens/chat-detail/ChatList.d.ts.map +1 -0
  176. package/lib/typescript/src/screens/chat-detail/ChatLoadEarlier.d.ts +3 -0
  177. package/lib/typescript/src/screens/chat-detail/ChatLoadEarlier.d.ts.map +1 -0
  178. package/lib/typescript/src/screens/chat-detail/ChatQuickActions.d.ts +3 -0
  179. package/lib/typescript/src/screens/chat-detail/ChatQuickActions.d.ts.map +1 -0
  180. package/lib/typescript/src/screens/chat-detail/ChatScrollToBottom.d.ts +2 -0
  181. package/lib/typescript/src/screens/chat-detail/ChatScrollToBottom.d.ts.map +1 -0
  182. package/lib/typescript/src/screens/chat-detail/ChatTextBubble.d.ts +3 -0
  183. package/lib/typescript/src/screens/chat-detail/ChatTextBubble.d.ts.map +1 -0
  184. package/lib/typescript/src/screens/chat-detail/constants.d.ts +17 -0
  185. package/lib/typescript/src/screens/chat-detail/constants.d.ts.map +1 -0
  186. package/lib/typescript/src/screens/chat-detail/index.d.ts +13 -0
  187. package/lib/typescript/src/screens/chat-detail/index.d.ts.map +1 -0
  188. package/lib/typescript/src/screens/chat-detail/messages/ChatMessageBubble.d.ts +3 -0
  189. package/lib/typescript/src/screens/chat-detail/messages/ChatMessageBubble.d.ts.map +1 -0
  190. package/lib/typescript/src/screens/chat-detail/messages/types.d.ts +13 -0
  191. package/lib/typescript/src/screens/chat-detail/messages/types.d.ts.map +1 -0
  192. package/lib/typescript/src/screens/chat-detail/types.d.ts +86 -0
  193. package/lib/typescript/src/screens/chat-detail/types.d.ts.map +1 -0
  194. package/lib/typescript/src/screens/chat-detail/useChatActionPress.d.ts +3 -0
  195. package/lib/typescript/src/screens/chat-detail/useChatActionPress.d.ts.map +1 -0
  196. package/lib/typescript/src/screens/inbox/Inbox.d.ts +10 -0
  197. package/lib/typescript/src/screens/inbox/Inbox.d.ts.map +1 -0
  198. package/lib/typescript/src/screens/inbox/MessagesTab.d.ts +7 -0
  199. package/lib/typescript/src/screens/inbox/MessagesTab.d.ts.map +1 -0
  200. package/lib/typescript/src/screens/inbox/index.d.ts +3 -0
  201. package/lib/typescript/src/screens/inbox/index.d.ts.map +1 -0
  202. package/lib/typescript/src/services/apis.d.ts +12 -0
  203. package/lib/typescript/src/services/apis.d.ts.map +1 -0
  204. package/lib/typescript/src/services/index.d.ts +3 -0
  205. package/lib/typescript/src/services/index.d.ts.map +1 -0
  206. package/lib/typescript/src/services/message.d.ts +21 -0
  207. package/lib/typescript/src/services/message.d.ts.map +1 -0
  208. package/lib/typescript/src/store/conversation.d.ts +24 -0
  209. package/lib/typescript/src/store/conversation.d.ts.map +1 -0
  210. package/lib/typescript/src/store/index.d.ts +4 -0
  211. package/lib/typescript/src/store/index.d.ts.map +1 -0
  212. package/lib/typescript/src/store/storeConfig.d.ts +4 -0
  213. package/lib/typescript/src/store/storeConfig.d.ts.map +1 -0
  214. package/lib/typescript/src/store/user.d.ts +12 -0
  215. package/lib/typescript/src/store/user.d.ts.map +1 -0
  216. package/lib/typescript/src/translation/index.d.ts +4 -0
  217. package/lib/typescript/src/translation/index.d.ts.map +1 -0
  218. package/lib/typescript/src/translation/resources/i18n.d.ts +5 -0
  219. package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -0
  220. package/lib/typescript/src/types/auth.d.ts +24 -0
  221. package/lib/typescript/src/types/auth.d.ts.map +1 -0
  222. package/lib/typescript/src/types/chat.d.ts +99 -0
  223. package/lib/typescript/src/types/chat.d.ts.map +1 -0
  224. package/lib/typescript/src/types/message.d.ts +15 -0
  225. package/lib/typescript/src/types/message.d.ts.map +1 -0
  226. package/lib/typescript/src/utils/conversation.d.ts +10 -0
  227. package/lib/typescript/src/utils/conversation.d.ts.map +1 -0
  228. package/lib/typescript/src/utils/giftedChatMessage.d.ts +10 -0
  229. package/lib/typescript/src/utils/giftedChatMessage.d.ts.map +1 -0
  230. package/lib/typescript/src/utils/message.d.ts +15 -0
  231. package/lib/typescript/src/utils/message.d.ts.map +1 -0
  232. package/lib/typescript/src/utils/resolveMessageType.d.ts +4 -0
  233. package/lib/typescript/src/utils/resolveMessageType.d.ts.map +1 -0
  234. package/package.json +209 -0
  235. package/src/assets/images/icon_bot.png +0 -0
  236. package/src/assets/images/index.ts +7 -0
  237. package/src/assets/images/tag_bot.png +0 -0
  238. package/src/assets/images/tag_mall.png +0 -0
  239. package/src/build-ignore.d.ts +24 -0
  240. package/src/components/Avatar/Avatar.tsx +105 -0
  241. package/src/components/Avatar/Avatar.types.ts +17 -0
  242. package/src/components/Avatar/Avatar.utils.ts +49 -0
  243. package/src/components/Avatar/AvatarBadge.tsx +29 -0
  244. package/src/components/Avatar/DoubleAvatar.tsx +89 -0
  245. package/src/components/Avatar/SingleAvatar.tsx +74 -0
  246. package/src/components/Avatar/index.ts +5 -0
  247. package/src/components/ThreadCard/AvatarSection.tsx +42 -0
  248. package/src/components/ThreadCard/NamePrefixIcon.tsx +45 -0
  249. package/src/components/ThreadCard/ThreadCard.tsx +145 -0
  250. package/src/components/ThreadCard/UnreadBadge.tsx +35 -0
  251. package/src/components/ThreadCard/index.ts +4 -0
  252. package/src/components/ThreadCard/thread-card.utils.ts +68 -0
  253. package/src/core/index.ts +10 -0
  254. package/src/core/useChatListener.ts +85 -0
  255. package/src/core/useUserListener.ts +86 -0
  256. package/src/hooks/query-keys.ts +11 -0
  257. package/src/hooks/useChatMessages.ts +243 -0
  258. package/src/hooks/useConversationList.ts +57 -0
  259. package/src/index.tsx +36 -0
  260. package/src/screens/chat-detail/ChatAttachmentPanel.tsx +142 -0
  261. package/src/screens/chat-detail/ChatComposer.tsx +412 -0
  262. package/src/screens/chat-detail/ChatDay.tsx +73 -0
  263. package/src/screens/chat-detail/ChatDetail.tsx +118 -0
  264. package/src/screens/chat-detail/ChatDetailHeader.tsx +114 -0
  265. package/src/screens/chat-detail/ChatList.tsx +187 -0
  266. package/src/screens/chat-detail/ChatLoadEarlier.tsx +20 -0
  267. package/src/screens/chat-detail/ChatQuickActions.tsx +108 -0
  268. package/src/screens/chat-detail/ChatScrollToBottom.tsx +8 -0
  269. package/src/screens/chat-detail/ChatTextBubble.tsx +73 -0
  270. package/src/screens/chat-detail/constants.ts +76 -0
  271. package/src/screens/chat-detail/index.ts +33 -0
  272. package/src/screens/chat-detail/messages/ChatMessageBubble.tsx +24 -0
  273. package/src/screens/chat-detail/messages/types.ts +14 -0
  274. package/src/screens/chat-detail/types.ts +97 -0
  275. package/src/screens/chat-detail/useChatActionPress.ts +17 -0
  276. package/src/screens/inbox/Inbox.tsx +164 -0
  277. package/src/screens/inbox/MessagesTab.tsx +62 -0
  278. package/src/screens/inbox/index.ts +2 -0
  279. package/src/services/apis.ts +60 -0
  280. package/src/services/index.ts +2 -0
  281. package/src/services/message.ts +61 -0
  282. package/src/store/conversation.ts +116 -0
  283. package/src/store/index.ts +3 -0
  284. package/src/store/storeConfig.ts +19 -0
  285. package/src/store/user.ts +26 -0
  286. package/src/translation/index.ts +30 -0
  287. package/src/translation/resources/i18n.ts +8 -0
  288. package/src/types/auth.ts +25 -0
  289. package/src/types/chat.ts +118 -0
  290. package/src/types/message.ts +17 -0
  291. package/src/utils/conversation.ts +106 -0
  292. package/src/utils/giftedChatMessage.ts +137 -0
  293. package/src/utils/message.ts +136 -0
  294. package/src/utils/resolveMessageType.ts +49 -0
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+
3
+ import { memo, useCallback } from 'react';
4
+ import { StyleSheet } from 'react-native';
5
+ import { KContainer, KImage, KLabel, KColors } from '@droppii/libs';
6
+ import { DChatCategory } from "../../types/chat.js";
7
+ import { AvatarSection } from "./AvatarSection.js";
8
+ import { NamePrefixIcon } from "./NamePrefixIcon.js";
9
+ import { UnreadBadge } from "./UnreadBadge.js";
10
+ import { formatTimestamp, getLastMessageText } from "./thread-card.utils.js";
11
+ import Images from "../../assets/images/index.js";
12
+ import { useConversation, useUserStore } from "../../store/index.js";
13
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
+ const ThreadCard = /*#__PURE__*/memo(({
15
+ item,
16
+ onPress
17
+ }) => {
18
+ const {
19
+ peer,
20
+ chatCategory,
21
+ lastMessage,
22
+ unreadCount = 0,
23
+ isMuted,
24
+ pinnedAt,
25
+ applicationType,
26
+ chatType,
27
+ latestMsgSendTime
28
+ } = useConversation(item) ?? {};
29
+ const fullName = peer?.fullName ?? peer?.username ?? '';
30
+ const hasUnread = unreadCount > 0;
31
+ const timestamp = formatTimestamp(latestMsgSendTime ?? lastMessage?.sendTime ?? null);
32
+ const currentUserId = useUserStore(s => s.user?.userID);
33
+ const lastMessageText = getLastMessageText(lastMessage, currentUserId);
34
+ const handlePress = useCallback(event => {
35
+ onPress?.({
36
+ item,
37
+ event
38
+ });
39
+ }, [item, onPress]);
40
+ return /*#__PURE__*/_jsxs(KContainer.Touchable, {
41
+ row: true,
42
+ alignItems: "center",
43
+ paddingH: "0.75rem",
44
+ paddingV: "0.75rem",
45
+ onPress: handlePress,
46
+ activeOpacity: 0.7,
47
+ children: [/*#__PURE__*/_jsx(AvatarSection, {
48
+ avatar: peer?.avatar ?? null,
49
+ fullName: fullName,
50
+ chatCategory: chatCategory,
51
+ applicationType: applicationType,
52
+ chatType: chatType
53
+ }), /*#__PURE__*/_jsxs(KContainer.View, {
54
+ flex: true,
55
+ marginL: "0.5rem",
56
+ paddingB: 2,
57
+ children: [/*#__PURE__*/_jsxs(KContainer.View, {
58
+ row: true,
59
+ alignItems: "center",
60
+ children: [/*#__PURE__*/_jsx(NamePrefixIcon, {
61
+ chatCategory: chatCategory,
62
+ chatType: chatType
63
+ }), /*#__PURE__*/_jsx(KContainer.VisibleView, {
64
+ visible: chatCategory === DChatCategory.BIZ_BOT_CRM || chatCategory === DChatCategory.BIZ_BOT_PDP,
65
+ children: /*#__PURE__*/_jsx(KImage.Base, {
66
+ uri: Images.ICON_BOT,
67
+ size: 14,
68
+ style: styles.botIcon
69
+ })
70
+ }), /*#__PURE__*/_jsx(KLabel.Text, {
71
+ typo: hasUnread ? 'TextMdBold' : 'TextMdNormal',
72
+ numberOfLines: 1,
73
+ color: KColors.black,
74
+ flex: true,
75
+ children: fullName
76
+ }), /*#__PURE__*/_jsx(KContainer.VisibleView, {
77
+ visible: !!isMuted,
78
+ children: /*#__PURE__*/_jsx(KContainer.View, {
79
+ marginL: "0.25rem",
80
+ children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
81
+ name: "bell-off",
82
+ provider: "MaterialCommunityIcons",
83
+ size: 16,
84
+ color: KColors.palette.gray.w500
85
+ })
86
+ })
87
+ }), /*#__PURE__*/_jsx(KContainer.VisibleView, {
88
+ visible: Boolean(timestamp),
89
+ children: /*#__PURE__*/_jsx(KLabel.Text, {
90
+ typo: "TextXsNormal",
91
+ color: KColors.palette.gray.w400,
92
+ marginL: "0.25rem",
93
+ children: timestamp
94
+ })
95
+ })]
96
+ }), /*#__PURE__*/_jsxs(KContainer.View, {
97
+ row: true,
98
+ alignItems: "center",
99
+ children: [/*#__PURE__*/_jsx(KLabel.Text, {
100
+ typo: hasUnread ? 'TextNmMedium' : 'TextNmNormal',
101
+ color: hasUnread ? KColors.black : KColors.gray.normal,
102
+ numberOfLines: 1,
103
+ flex: true,
104
+ children: lastMessageText
105
+ }), /*#__PURE__*/_jsx(KContainer.VisibleView, {
106
+ visible: Boolean(pinnedAt),
107
+ children: /*#__PURE__*/_jsx(KContainer.View, {
108
+ marginL: "0.5rem",
109
+ children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
110
+ name: "pin-outline",
111
+ provider: "MaterialCommunityIcons",
112
+ size: 14,
113
+ color: KColors.palette.gray.w400
114
+ })
115
+ })
116
+ }), /*#__PURE__*/_jsx(UnreadBadge, {
117
+ count: unreadCount
118
+ })]
119
+ })]
120
+ })]
121
+ });
122
+ });
123
+ ThreadCard.displayName = 'ThreadCard';
124
+ export default ThreadCard;
125
+ const styles = StyleSheet.create({
126
+ botIcon: {
127
+ width: 16,
128
+ height: 16,
129
+ marginRight: 4
130
+ }
131
+ });
132
+ //# sourceMappingURL=ThreadCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useCallback","StyleSheet","KContainer","KImage","KLabel","KColors","DChatCategory","AvatarSection","NamePrefixIcon","UnreadBadge","formatTimestamp","getLastMessageText","Images","useConversation","useUserStore","jsx","_jsx","jsxs","_jsxs","ThreadCard","item","onPress","peer","chatCategory","lastMessage","unreadCount","isMuted","pinnedAt","applicationType","chatType","latestMsgSendTime","fullName","username","hasUnread","timestamp","sendTime","currentUserId","s","user","userID","lastMessageText","handlePress","event","Touchable","row","alignItems","paddingH","paddingV","activeOpacity","children","avatar","View","flex","marginL","paddingB","VisibleView","visible","BIZ_BOT_CRM","BIZ_BOT_PDP","Base","uri","ICON_BOT","size","style","styles","botIcon","Text","typo","numberOfLines","color","black","VectorIcons","name","provider","palette","gray","w500","Boolean","w400","normal","count","displayName","create","width","height","marginRight"],"sourceRoot":"../../../../src","sources":["components/ThreadCard/ThreadCard.tsx"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,WAAW,QAAQ,OAAO;AACzC,SAASC,UAAU,QAAoC,cAAc;AACrE,SAASC,UAAU,EAAEC,MAAM,EAAEC,MAAM,EAAEC,OAAO,QAAQ,eAAe;AACnE,SAASC,aAAa,QAAQ,qBAAkB;AAChD,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SAASC,WAAW,QAAQ,kBAAe;AAC3C,SAASC,eAAe,EAAEC,kBAAkB,QAAQ,wBAAqB;AACzE,OAAOC,MAAM,MAAM,8BAAqB;AACxC,SAASC,eAAe,EAAEC,YAAY,QAAQ,sBAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAO5D,MAAMC,UAAU,gBAAGpB,IAAI,CAAC,CAAC;EAAEqB,IAAI;EAAEC;AAAyB,CAAC,KAAK;EAC9D,MAAM;IACJC,IAAI;IACJC,YAAY;IACZC,WAAW;IACXC,WAAW,GAAG,CAAC;IACfC,OAAO;IACPC,QAAQ;IACRC,eAAe;IACfC,QAAQ;IACRC;EACF,CAAC,GAAGjB,eAAe,CAACO,IAAI,CAAC,IAAI,CAAC,CAAC;EAE/B,MAAMW,QAAQ,GAAGT,IAAI,EAAES,QAAQ,IAAIT,IAAI,EAAEU,QAAQ,IAAI,EAAE;EACvD,MAAMC,SAAS,GAAGR,WAAW,GAAG,CAAC;EACjC,MAAMS,SAAS,GAAGxB,eAAe,CAC/BoB,iBAAiB,IAAIN,WAAW,EAAEW,QAAQ,IAAI,IAChD,CAAC;EACD,MAAMC,aAAa,GAAGtB,YAAY,CAAEuB,CAAC,IAAKA,CAAC,CAACC,IAAI,EAAEC,MAAM,CAAC;EACzD,MAAMC,eAAe,GAAG7B,kBAAkB,CAACa,WAAW,EAAEY,aAAa,CAAC;EAEtE,MAAMK,WAAW,GAAGzC,WAAW,CAC5B0C,KAA4B,IAAK;IAChCrB,OAAO,GAAG;MAAED,IAAI;MAAEsB;IAAM,CAAC,CAAC;EAC5B,CAAC,EACD,CAACtB,IAAI,EAAEC,OAAO,CAChB,CAAC;EAED,oBACEH,KAAA,CAAChB,UAAU,CAACyC,SAAS;IACnBC,GAAG;IACHC,UAAU,EAAC,QAAQ;IACnBC,QAAQ,EAAC,SAAS;IAClBC,QAAQ,EAAC,SAAS;IAClB1B,OAAO,EAAEoB,WAAY;IACrBO,aAAa,EAAE,GAAI;IAAAC,QAAA,gBAEnBjC,IAAA,CAACT,aAAa;MACZ2C,MAAM,EAAE5B,IAAI,EAAE4B,MAAM,IAAI,IAAK;MAC7BnB,QAAQ,EAAEA,QAAS;MACnBR,YAAY,EAAEA,YAAa;MAC3BK,eAAe,EAAEA,eAAgB;MACjCC,QAAQ,EAAEA;IAAS,CACpB,CAAC,eAGFX,KAAA,CAAChB,UAAU,CAACiD,IAAI;MAACC,IAAI;MAACC,OAAO,EAAC,QAAQ;MAACC,QAAQ,EAAE,CAAE;MAAAL,QAAA,gBAEjD/B,KAAA,CAAChB,UAAU,CAACiD,IAAI;QAACP,GAAG;QAACC,UAAU,EAAC,QAAQ;QAAAI,QAAA,gBACtCjC,IAAA,CAACR,cAAc;UAACe,YAAY,EAAEA,YAAa;UAACM,QAAQ,EAAEA;QAAS,CAAE,CAAC,eAClEb,IAAA,CAACd,UAAU,CAACqD,WAAW;UACrBC,OAAO,EACLjC,YAAY,KAAKjB,aAAa,CAACmD,WAAW,IAC1ClC,YAAY,KAAKjB,aAAa,CAACoD,WAChC;UAAAT,QAAA,eAEDjC,IAAA,CAACb,MAAM,CAACwD,IAAI;YACVC,GAAG,EAAEhD,MAAM,CAACiD,QAAS;YACrBC,IAAI,EAAE,EAAG;YACTC,KAAK,EAAEC,MAAM,CAACC;UAAQ,CACvB;QAAC,CACoB,CAAC,eACzBjD,IAAA,CAACZ,MAAM,CAAC8D,IAAI;UACVC,IAAI,EAAElC,SAAS,GAAG,YAAY,GAAG,cAAe;UAChDmC,aAAa,EAAE,CAAE;UACjBC,KAAK,EAAEhE,OAAO,CAACiE,KAAM;UACrBlB,IAAI;UAAAH,QAAA,EAEHlB;QAAQ,CACE,CAAC,eACdf,IAAA,CAACd,UAAU,CAACqD,WAAW;UAACC,OAAO,EAAE,CAAC,CAAC9B,OAAQ;UAAAuB,QAAA,eACzCjC,IAAA,CAACd,UAAU,CAACiD,IAAI;YAACE,OAAO,EAAC,SAAS;YAAAJ,QAAA,eAChCjC,IAAA,CAACb,MAAM,CAACoE,WAAW;cACjBC,IAAI,EAAC,UAAU;cACfC,QAAQ,EAAC,wBAAwB;cACjCX,IAAI,EAAE,EAAG;cACTO,KAAK,EAAEhE,OAAO,CAACqE,OAAO,CAACC,IAAI,CAACC;YAAK,CAClC;UAAC,CACa;QAAC,CACI,CAAC,eACzB5D,IAAA,CAACd,UAAU,CAACqD,WAAW;UAACC,OAAO,EAAEqB,OAAO,CAAC3C,SAAS,CAAE;UAAAe,QAAA,eAClDjC,IAAA,CAACZ,MAAM,CAAC8D,IAAI;YACVC,IAAI,EAAC,cAAc;YACnBE,KAAK,EAAEhE,OAAO,CAACqE,OAAO,CAACC,IAAI,CAACG,IAAK;YACjCzB,OAAO,EAAC,SAAS;YAAAJ,QAAA,EAEhBf;UAAS,CACC;QAAC,CACQ,CAAC;MAAA,CACV,CAAC,eAGlBhB,KAAA,CAAChB,UAAU,CAACiD,IAAI;QAACP,GAAG;QAACC,UAAU,EAAC,QAAQ;QAAAI,QAAA,gBACtCjC,IAAA,CAACZ,MAAM,CAAC8D,IAAI;UACVC,IAAI,EAAElC,SAAS,GAAG,cAAc,GAAG,cAAe;UAClDoC,KAAK,EAAEpC,SAAS,GAAG5B,OAAO,CAACiE,KAAK,GAAGjE,OAAO,CAACsE,IAAI,CAACI,MAAO;UACvDX,aAAa,EAAE,CAAE;UACjBhB,IAAI;UAAAH,QAAA,EAEHT;QAAe,CACL,CAAC,eACdxB,IAAA,CAACd,UAAU,CAACqD,WAAW;UAACC,OAAO,EAAEqB,OAAO,CAAClD,QAAQ,CAAE;UAAAsB,QAAA,eACjDjC,IAAA,CAACd,UAAU,CAACiD,IAAI;YAACE,OAAO,EAAC,QAAQ;YAAAJ,QAAA,eAC/BjC,IAAA,CAACb,MAAM,CAACoE,WAAW;cACjBC,IAAI,EAAC,aAAa;cAClBC,QAAQ,EAAC,wBAAwB;cACjCX,IAAI,EAAE,EAAG;cACTO,KAAK,EAAEhE,OAAO,CAACqE,OAAO,CAACC,IAAI,CAACG;YAAK,CAClC;UAAC,CACa;QAAC,CACI,CAAC,eACzB9D,IAAA,CAACP,WAAW;UAACuE,KAAK,EAAEvD;QAAY,CAAE,CAAC;MAAA,CACpB,CAAC;IAAA,CACH,CAAC;EAAA,CACE,CAAC;AAE3B,CAAC,CAAC;AAEFN,UAAU,CAAC8D,WAAW,GAAG,YAAY;AAErC,eAAe9D,UAAU;AAEzB,MAAM6C,MAAM,GAAG/D,UAAU,CAACiF,MAAM,CAAC;EAC/BjB,OAAO,EAAE;IACPkB,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE,EAAE;IACVC,WAAW,EAAE;EACf;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ import { memo } from 'react';
4
+ import { StyleSheet } from 'react-native';
5
+ import { KContainer, KLabel, KColors } from '@droppii/libs';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ export const UnreadBadge = /*#__PURE__*/memo(({
8
+ count
9
+ }) => {
10
+ if (count <= 0) return null;
11
+ const label = count > 99 ? '99+' : String(count);
12
+ return /*#__PURE__*/_jsx(KContainer.View, {
13
+ center: true,
14
+ marginL: "0.5rem",
15
+ style: styles.badge,
16
+ children: /*#__PURE__*/_jsx(KLabel.Text, {
17
+ typo: "Text2XsBold",
18
+ color: KColors.white,
19
+ children: label
20
+ })
21
+ });
22
+ });
23
+ UnreadBadge.displayName = 'UnreadBadge';
24
+ const styles = StyleSheet.create({
25
+ badge: {
26
+ minWidth: 19,
27
+ height: 19,
28
+ borderRadius: 32,
29
+ paddingHorizontal: 3,
30
+ backgroundColor: KColors.palette.danger.w400,
31
+ borderWidth: 2,
32
+ borderColor: KColors.white
33
+ }
34
+ });
35
+ //# sourceMappingURL=UnreadBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","StyleSheet","KContainer","KLabel","KColors","jsx","_jsx","UnreadBadge","count","label","String","View","center","marginL","style","styles","badge","children","Text","typo","color","white","displayName","create","minWidth","height","borderRadius","paddingHorizontal","backgroundColor","palette","danger","w400","borderWidth","borderColor"],"sourceRoot":"../../../../src","sources":["components/ThreadCard/UnreadBadge.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,OAAO;AAC5B,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,UAAU,EAAEC,MAAM,EAAEC,OAAO,QAAQ,eAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAM5D,OAAO,MAAMC,WAAW,gBAAGP,IAAI,CAAC,CAAC;EAAEQ;AAAwB,CAAC,KAAK;EAC/D,IAAIA,KAAK,IAAI,CAAC,EAAE,OAAO,IAAI;EAE3B,MAAMC,KAAK,GAAGD,KAAK,GAAG,EAAE,GAAG,KAAK,GAAGE,MAAM,CAACF,KAAK,CAAC;EAEhD,oBACEF,IAAA,CAACJ,UAAU,CAACS,IAAI;IAACC,MAAM;IAACC,OAAO,EAAC,QAAQ;IAACC,KAAK,EAAEC,MAAM,CAACC,KAAM;IAAAC,QAAA,eAC3DX,IAAA,CAACH,MAAM,CAACe,IAAI;MAACC,IAAI,EAAC,aAAa;MAACC,KAAK,EAAEhB,OAAO,CAACiB,KAAM;MAAAJ,QAAA,EAClDR;IAAK,CACK;EAAC,CACC,CAAC;AAEtB,CAAC,CAAC;AAEFF,WAAW,CAACe,WAAW,GAAG,aAAa;AAEvC,MAAMP,MAAM,GAAGd,UAAU,CAACsB,MAAM,CAAC;EAC/BP,KAAK,EAAE;IACLQ,QAAQ,EAAE,EAAE;IACZC,MAAM,EAAE,EAAE;IACVC,YAAY,EAAE,EAAE;IAChBC,iBAAiB,EAAE,CAAC;IACpBC,eAAe,EAAExB,OAAO,CAACyB,OAAO,CAACC,MAAM,CAACC,IAAI;IAC5CC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE7B,OAAO,CAACiB;EACvB;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ export { default as ThreadCard } from "./ThreadCard.js";
4
+ export { AvatarSection } from "./AvatarSection.js";
5
+ export { NamePrefixIcon } from "./NamePrefixIcon.js";
6
+ export { UnreadBadge } from "./UnreadBadge.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["default","ThreadCard","AvatarSection","NamePrefixIcon","UnreadBadge"],"sourceRoot":"../../../../src","sources":["components/ThreadCard/index.ts"],"mappings":";;AAAA,SAASA,OAAO,IAAIC,UAAU,QAAQ,iBAAc;AACpD,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SAASC,WAAW,QAAQ,kBAAe","ignoreList":[]}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ import { MessageType } from '@droppii/openim-rn-client-sdk';
4
+ const extractTextContent = message => {
5
+ if (message.textElem?.content) return message.textElem.content;
6
+ try {
7
+ const parsed = JSON.parse(message.content);
8
+ return parsed.content ?? '';
9
+ } catch {
10
+ return message.content ?? '';
11
+ }
12
+ };
13
+ export const getLastMessageText = (message, currentUserId) => {
14
+ if (!message) return '';
15
+ if (message.contentType !== MessageType.TextMessage) return '';
16
+ const text = extractTextContent(message);
17
+ if (currentUserId && message.sendID === currentUserId) {
18
+ return `Bạn: ${text}`;
19
+ }
20
+ return text;
21
+ };
22
+ export const formatTimestamp = ts => {
23
+ if (!ts) return '';
24
+ try {
25
+ const date = new Date(ts);
26
+ if (isNaN(date.getTime())) return '';
27
+ const now = new Date();
28
+ const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
29
+ const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);
30
+ const dateOnly = new Date(date.getFullYear(), date.getMonth(), date.getDate());
31
+ if (dateOnly.getTime() === today.getTime()) {
32
+ const h = date.getHours().toString().padStart(2, '0');
33
+ const m = date.getMinutes().toString().padStart(2, '0');
34
+ return `${h}:${m}`;
35
+ }
36
+ if (dateOnly.getTime() === yesterday.getTime()) {
37
+ return 'Hôm qua';
38
+ }
39
+ const daysAgo = Math.floor((today.getTime() - dateOnly.getTime()) / (24 * 60 * 60 * 1000));
40
+ if (daysAgo > 0 && daysAgo < 7) {
41
+ const dayNames = ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'];
42
+ return dayNames[date.getDay()] ?? '';
43
+ }
44
+ const d = date.getDate().toString().padStart(2, '0');
45
+ const mo = (date.getMonth() + 1).toString().padStart(2, '0');
46
+ return `${d}/${mo}`;
47
+ } catch {
48
+ return '';
49
+ }
50
+ };
51
+ //# sourceMappingURL=thread-card.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MessageType","extractTextContent","message","textElem","content","parsed","JSON","parse","getLastMessageText","currentUserId","contentType","TextMessage","text","sendID","formatTimestamp","ts","date","Date","isNaN","getTime","now","today","getFullYear","getMonth","getDate","yesterday","dateOnly","h","getHours","toString","padStart","m","getMinutes","daysAgo","Math","floor","dayNames","getDay","d","mo"],"sourceRoot":"../../../../src","sources":["components/ThreadCard/thread-card.utils.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ import OpenIMSDK from '@droppii/openim-rn-client-sdk';
4
+ import { useUserListener } from "./useUserListener.js";
5
+ import { useChatListener } from "./useChatListener.js";
6
+ export const initChatSdk = OpenIMSDK.initSDK.bind(OpenIMSDK);
7
+ export const useChatSdk = () => {
8
+ useUserListener();
9
+ useChatListener();
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["OpenIMSDK","useUserListener","useChatListener","initChatSdk","initSDK","bind","useChatSdk"],"sourceRoot":"../../../src","sources":["core/index.ts"],"mappings":";;AAAA,OAAOA,SAAS,MAAM,+BAA+B;AACrD,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,eAAe,QAAQ,sBAAmB;AAEnD,OAAO,MAAMC,WAAW,GAAGH,SAAS,CAACI,OAAO,CAACC,IAAI,CAACL,SAAS,CAAC;AAE5D,OAAO,MAAMM,UAAU,GAAGA,CAAA,KAAM;EAC9BL,eAAe,CAAC,CAAC;EACjBC,eAAe,CAAC,CAAC;AACnB,CAAC","ignoreList":[]}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ import OpenIMSDK, { OpenIMEvent } from '@droppii/openim-rn-client-sdk';
4
+ import { useCallback, useEffect } from 'react';
5
+ import { useConversationStore } from "../store/conversation.js";
6
+ import { getConversationID } from "../utils/conversation.js";
7
+ export const useChatListener = () => {
8
+ const onRecvNewMessages = useCallback(messages => {
9
+ console.log('onRecvNewMessages', messages);
10
+ messages.map(message => {
11
+ const conversationID = getConversationID(message.sessionType, message.sendID, message.recvID);
12
+ useConversationStore.getState().updateLastMessage(conversationID, message);
13
+ });
14
+ }, []);
15
+ const onNewRecvMessageRevoked = useCallback(revokedInfo => {
16
+ console.log('onNewRecvMessageRevoked', revokedInfo);
17
+ }, []);
18
+ const onConversationChanged = useCallback(conversations => {
19
+ console.log('onConversationChanged', conversations);
20
+ useConversationStore.getState().mergeOpenIMConversations(conversations);
21
+ }, []);
22
+ const onNewConversation = useCallback(conversations => {
23
+ console.log('onNewConversation', conversations);
24
+ // mergeOpenIMConversations increments newConversationSignal when a conversation
25
+ // isn't in the store yet, which triggers a full refetch in useConversationList.
26
+ useConversationStore.getState().mergeOpenIMConversations(conversations);
27
+ }, []);
28
+ const onGroupMemberAdded = useCallback(member => {
29
+ console.log('onGroupMemberAdded', member);
30
+ }, []);
31
+ const onGroupMemberDeleted = useCallback(member => {
32
+ console.log('onGroupMemberDeleted', member);
33
+ }, []);
34
+ useEffect(() => {
35
+ // Message
36
+ OpenIMSDK.on(OpenIMEvent.OnRecvNewMessages, onRecvNewMessages);
37
+ OpenIMSDK.on(OpenIMEvent.OnNewRecvMessageRevoked, onNewRecvMessageRevoked);
38
+
39
+ // Conversation
40
+ OpenIMSDK.on(OpenIMEvent.OnConversationChanged, onConversationChanged);
41
+ OpenIMSDK.on(OpenIMEvent.OnNewConversation, onNewConversation);
42
+
43
+ // Group members
44
+ OpenIMSDK.on(OpenIMEvent.OnGroupMemberAdded, onGroupMemberAdded);
45
+ OpenIMSDK.on(OpenIMEvent.OnGroupMemberDeleted, onGroupMemberDeleted);
46
+ return () => {
47
+ // Message
48
+ OpenIMSDK.off(OpenIMEvent.OnRecvNewMessages, onRecvNewMessages);
49
+ OpenIMSDK.off(OpenIMEvent.OnNewRecvMessageRevoked, onNewRecvMessageRevoked);
50
+
51
+ // Conversation
52
+ OpenIMSDK.off(OpenIMEvent.OnConversationChanged, onConversationChanged);
53
+ OpenIMSDK.off(OpenIMEvent.OnNewConversation, onNewConversation);
54
+
55
+ // Group members
56
+ OpenIMSDK.off(OpenIMEvent.OnGroupMemberAdded, onGroupMemberAdded);
57
+ OpenIMSDK.off(OpenIMEvent.OnGroupMemberDeleted, onGroupMemberDeleted);
58
+ };
59
+ // eslint-disable-next-line react-hooks/exhaustive-deps
60
+ }, []);
61
+ };
62
+ //# sourceMappingURL=useChatListener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["OpenIMSDK","OpenIMEvent","useCallback","useEffect","useConversationStore","getConversationID","useChatListener","onRecvNewMessages","messages","console","log","map","message","conversationID","sessionType","sendID","recvID","getState","updateLastMessage","onNewRecvMessageRevoked","revokedInfo","onConversationChanged","conversations","mergeOpenIMConversations","onNewConversation","onGroupMemberAdded","member","onGroupMemberDeleted","on","OnRecvNewMessages","OnNewRecvMessageRevoked","OnConversationChanged","OnNewConversation","OnGroupMemberAdded","OnGroupMemberDeleted","off"],"sourceRoot":"../../../src","sources":["core/useChatListener.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ import OpenIMSDK, { LoginStatus, OpenIMEvent } from '@droppii/openim-rn-client-sdk';
4
+ import { useCallback, useEffect } from 'react';
5
+ import { useUserStore } from "../store/index.js";
6
+ import { SyncStatus } from "../types/auth.js";
7
+ import { ChatAPI } from "../services/index.js";
8
+ export const useUserListener = () => {
9
+ const isLoggedIn = useUserStore(state => state.connectStatus === LoginStatus.Logged);
10
+ const fetchAndUpdateUser = useCallback(async () => {
11
+ try {
12
+ const user = await ChatAPI.getUser();
13
+ useUserStore.getState().setUser(user);
14
+ } catch (error) {
15
+ console.error('OpenIM get user failed', error);
16
+ }
17
+ }, []);
18
+ useEffect(() => {
19
+ ChatAPI.getLoginStatus().then(value => {
20
+ if (value) {
21
+ useUserStore.getState().updateConnectStatus(LoginStatus.Logged);
22
+ }
23
+ });
24
+ }, []);
25
+ useEffect(() => {
26
+ if (isLoggedIn) {
27
+ fetchAndUpdateUser();
28
+ }
29
+ }, [isLoggedIn, fetchAndUpdateUser]);
30
+ const onConnecting = useCallback(() => {
31
+ useUserStore.getState().updateConnectStatus(LoginStatus.Logging);
32
+ }, []);
33
+ const onConnectSuccess = useCallback(() => {
34
+ useUserStore.getState().updateConnectStatus(LoginStatus.Logged);
35
+ }, []);
36
+ const onConnectFailed = useCallback(() => {
37
+ useUserStore.getState().updateConnectStatus(LoginStatus.Logout);
38
+ }, []);
39
+ const onSyncServerStart = useCallback(() => {
40
+ useUserStore.getState().updateSyncStatus(SyncStatus.Loading);
41
+ }, []);
42
+ const onSyncServerFinish = useCallback(() => {
43
+ useUserStore.getState().updateSyncStatus(SyncStatus.Success);
44
+ }, []);
45
+ const onSyncServerFailed = useCallback(() => {
46
+ useUserStore.getState().updateSyncStatus(SyncStatus.Failed);
47
+ }, []);
48
+ useEffect(() => {
49
+ // User
50
+ OpenIMSDK.on(OpenIMEvent.OnConnecting, onConnecting);
51
+ OpenIMSDK.on(OpenIMEvent.OnConnectSuccess, onConnectSuccess);
52
+ OpenIMSDK.on(OpenIMEvent.OnConnectFailed, onConnectFailed);
53
+
54
+ // Sync
55
+ OpenIMSDK.on(OpenIMEvent.OnSyncServerStart, onSyncServerStart);
56
+ OpenIMSDK.on(OpenIMEvent.OnSyncServerFinish, onSyncServerFinish);
57
+ OpenIMSDK.on(OpenIMEvent.OnSyncServerFailed, onSyncServerFailed);
58
+ return () => {
59
+ // User
60
+ OpenIMSDK.off(OpenIMEvent.OnConnecting, onConnecting);
61
+ OpenIMSDK.off(OpenIMEvent.OnConnectSuccess, onConnectSuccess);
62
+ OpenIMSDK.off(OpenIMEvent.OnConnectFailed, onConnectFailed);
63
+
64
+ // Sync
65
+ OpenIMSDK.off(OpenIMEvent.OnSyncServerStart, onSyncServerStart);
66
+ OpenIMSDK.off(OpenIMEvent.OnSyncServerFinish, onSyncServerFinish);
67
+ OpenIMSDK.off(OpenIMEvent.OnSyncServerFailed, onSyncServerFailed);
68
+ };
69
+ // eslint-disable-next-line react-hooks/exhaustive-deps
70
+ }, []);
71
+ };
72
+ //# sourceMappingURL=useUserListener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["OpenIMSDK","LoginStatus","OpenIMEvent","useCallback","useEffect","useUserStore","SyncStatus","ChatAPI","useUserListener","isLoggedIn","state","connectStatus","Logged","fetchAndUpdateUser","user","getUser","getState","setUser","error","console","getLoginStatus","then","value","updateConnectStatus","onConnecting","Logging","onConnectSuccess","onConnectFailed","Logout","onSyncServerStart","updateSyncStatus","Loading","onSyncServerFinish","Success","onSyncServerFailed","Failed","on","OnConnecting","OnConnectSuccess","OnConnectFailed","OnSyncServerStart","OnSyncServerFinish","OnSyncServerFailed","off"],"sourceRoot":"../../../src","sources":["core/useUserListener.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ export const conversationQueryKeys = {
4
+ all: ['conversations'],
5
+ lists: () => [...conversationQueryKeys.all, 'list'],
6
+ list: applicationType => [...conversationQueryKeys.lists(), applicationType],
7
+ details: () => [...conversationQueryKeys.all, 'detail'],
8
+ detail: conversationId => [...conversationQueryKeys.details(), conversationId]
9
+ };
10
+ //# sourceMappingURL=query-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["conversationQueryKeys","all","lists","list","applicationType","details","detail","conversationId"],"sourceRoot":"../../../src","sources":["hooks/query-keys.ts"],"mappings":";;AAAA,OAAO,MAAMA,qBAAqB,GAAG;EACnCC,GAAG,EAAE,CAAC,eAAe,CAAU;EAC/BC,KAAK,EAAEA,CAAA,KAAM,CAAC,GAAGF,qBAAqB,CAACC,GAAG,EAAE,MAAM,CAAU;EAC5DE,IAAI,EAAGC,eAAuB,IAC5B,CAAC,GAAGJ,qBAAqB,CAACE,KAAK,CAAC,CAAC,EAAEE,eAAe,CAAU;EAC9DC,OAAO,EAAEA,CAAA,KAAM,CAAC,GAAGL,qBAAqB,CAACC,GAAG,EAAE,QAAQ,CAAU;EAChEK,MAAM,EAAGC,cAAsB,IAC7B,CAAC,GAAGP,qBAAqB,CAACK,OAAO,CAAC,CAAC,EAAEE,cAAc;AACvD,CAAC","ignoreList":[]}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+
3
+ import OpenIMSDK, { OpenIMEvent } from '@droppii/openim-rn-client-sdk';
4
+ import { useCallback, useEffect, useRef, useState } from 'react';
5
+ import { ChatMessageAPI } from "../services/message.js";
6
+ import { belongsToConversation, getHistoryPaginationAnchor, hasNewHistoryMessages, mergeMessages } from "../utils/message.js";
7
+ export function useChatMessages({
8
+ conversationId,
9
+ recvID = '',
10
+ groupID = '',
11
+ enabled = true,
12
+ pageSize = 20
13
+ }) {
14
+ const [messages, setMessages] = useState([]);
15
+ const [currentUserId, setCurrentUserId] = useState();
16
+ const [isLoading, setIsLoading] = useState(false);
17
+ const [isLoadingEarlier, setIsLoadingEarlier] = useState(false);
18
+ const [hasMoreEarlier, setHasMoreEarlier] = useState(false);
19
+ const [error, setError] = useState(null);
20
+ const conversationIdRef = useRef(conversationId);
21
+ conversationIdRef.current = conversationId;
22
+ const isLoadingEarlierRef = useRef(false);
23
+ const messagesRef = useRef(messages);
24
+ const hasMoreEarlierRef = useRef(hasMoreEarlier);
25
+ const historyAnchorRef = useRef(null);
26
+ messagesRef.current = messages;
27
+ hasMoreEarlierRef.current = hasMoreEarlier;
28
+ const resetState = useCallback(() => {
29
+ setMessages([]);
30
+ setHasMoreEarlier(false);
31
+ setError(null);
32
+ isLoadingEarlierRef.current = false;
33
+ historyAnchorRef.current = null;
34
+ }, []);
35
+ const loadInitialMessages = useCallback(async () => {
36
+ if (!conversationId) {
37
+ return;
38
+ }
39
+ setIsLoading(true);
40
+ setError(null);
41
+ try {
42
+ const [history, userId] = await Promise.all([ChatMessageAPI.fetchHistoryMessages(conversationId, {
43
+ count: pageSize
44
+ }), ChatMessageAPI.getCurrentUserId()]);
45
+ const initialMessages = history.messageList;
46
+ const oldestAnchor = getHistoryPaginationAnchor(initialMessages);
47
+ setCurrentUserId(userId);
48
+ setMessages(mergeMessages([], initialMessages));
49
+ historyAnchorRef.current = oldestAnchor ? {
50
+ clientMsgID: oldestAnchor.clientMsgID
51
+ // lastMinSeq: resolveHistoryLastMinSeq(
52
+ // history,
53
+ // initialMessages.find(
54
+ // (message) => message.clientMsgID === oldestAnchor.clientMsgID
55
+ // )
56
+ // ),
57
+ } : null;
58
+ setHasMoreEarlier(!history.isEnd && !!oldestAnchor);
59
+ ChatMessageAPI.markConversationAsRead(conversationId).catch(() => undefined);
60
+ } catch (err) {
61
+ setError(err instanceof Error ? err : new Error(String(err)));
62
+ } finally {
63
+ setIsLoading(false);
64
+ }
65
+ }, [conversationId, pageSize]);
66
+ const onLoadEarlier = useCallback(async () => {
67
+ if (!conversationId || isLoadingEarlierRef.current || !hasMoreEarlierRef.current || !messagesRef.current.length) {
68
+ return;
69
+ }
70
+ isLoadingEarlierRef.current = true;
71
+ setIsLoadingEarlier(true);
72
+ setError(null);
73
+ const anchor = historyAnchorRef.current;
74
+ if (!anchor?.clientMsgID) {
75
+ isLoadingEarlierRef.current = false;
76
+ setIsLoadingEarlier(false);
77
+ return;
78
+ }
79
+ try {
80
+ const history = await ChatMessageAPI.fetchHistoryMessages(conversationId, {
81
+ count: pageSize,
82
+ startClientMsgID: anchor.clientMsgID
83
+ });
84
+ const incoming = history.messageList;
85
+ const hasNewMessages = hasNewHistoryMessages(messagesRef.current, incoming);
86
+ if (hasNewMessages) {
87
+ setMessages(current => mergeMessages(current, incoming));
88
+ }
89
+ const nextAnchor = getHistoryPaginationAnchor(incoming);
90
+ historyAnchorRef.current = nextAnchor ? {
91
+ clientMsgID: nextAnchor.clientMsgID
92
+ // lastMinSeq: resolveHistoryLastMinSeq(
93
+ // history,
94
+ // incoming.find(
95
+ // (message) => message.clientMsgID === nextAnchor.clientMsgID
96
+ // )
97
+ // ),
98
+ } : null;
99
+ setHasMoreEarlier(!history.isEnd && hasNewMessages && !!nextAnchor);
100
+ } catch (err) {
101
+ setError(err instanceof Error ? err : new Error(String(err)));
102
+ } finally {
103
+ isLoadingEarlierRef.current = false;
104
+ setIsLoadingEarlier(false);
105
+ }
106
+ }, [conversationId, pageSize]);
107
+ const sendTextMessage = useCallback(async text => {
108
+ const trimmed = text.trim();
109
+ if (!trimmed) {
110
+ return;
111
+ }
112
+ const sentMessage = await ChatMessageAPI.sendTextMessage({
113
+ text: trimmed,
114
+ recvID,
115
+ groupID
116
+ });
117
+ setMessages(current => mergeMessages(current, [sentMessage]));
118
+ }, [groupID, recvID]);
119
+ const appendIncomingMessages = useCallback(incoming => {
120
+ const relevant = incoming.filter(message => belongsToConversation(message, conversationIdRef.current, groupID));
121
+ if (!relevant.length) {
122
+ return;
123
+ }
124
+ setMessages(current => mergeMessages(current, relevant));
125
+ ChatMessageAPI.markConversationAsRead(conversationIdRef.current).catch(() => undefined);
126
+ }, [groupID]);
127
+ useEffect(() => {
128
+ resetState();
129
+ if (!enabled || !conversationId) {
130
+ return;
131
+ }
132
+ loadInitialMessages();
133
+ }, [conversationId, enabled, loadInitialMessages, resetState]);
134
+ useEffect(() => {
135
+ if (!enabled || !conversationId) {
136
+ return;
137
+ }
138
+ const handleNewMessages = incoming => {
139
+ appendIncomingMessages(incoming);
140
+ };
141
+ const handleNewMessage = incoming => {
142
+ appendIncomingMessages([incoming]);
143
+ };
144
+ OpenIMSDK.on(OpenIMEvent.OnRecvNewMessages, handleNewMessages);
145
+ OpenIMSDK.on(OpenIMEvent.OnRecvNewMessage, handleNewMessage);
146
+ return () => {
147
+ OpenIMSDK.off(OpenIMEvent.OnRecvNewMessages, handleNewMessages);
148
+ OpenIMSDK.off(OpenIMEvent.OnRecvNewMessage, handleNewMessage);
149
+ };
150
+ }, [appendIncomingMessages, conversationId, enabled]);
151
+ return {
152
+ messages,
153
+ currentUserId,
154
+ isLoading,
155
+ isLoadingEarlier,
156
+ hasMoreEarlier,
157
+ error,
158
+ onLoadEarlier,
159
+ sendTextMessage,
160
+ refresh: loadInitialMessages
161
+ };
162
+ }
163
+ //# sourceMappingURL=useChatMessages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["OpenIMSDK","OpenIMEvent","useCallback","useEffect","useRef","useState","ChatMessageAPI","belongsToConversation","getHistoryPaginationAnchor","hasNewHistoryMessages","mergeMessages","useChatMessages","conversationId","recvID","groupID","enabled","pageSize","messages","setMessages","currentUserId","setCurrentUserId","isLoading","setIsLoading","isLoadingEarlier","setIsLoadingEarlier","hasMoreEarlier","setHasMoreEarlier","error","setError","conversationIdRef","current","isLoadingEarlierRef","messagesRef","hasMoreEarlierRef","historyAnchorRef","resetState","loadInitialMessages","history","userId","Promise","all","fetchHistoryMessages","count","getCurrentUserId","initialMessages","messageList","oldestAnchor","clientMsgID","isEnd","markConversationAsRead","catch","undefined","err","Error","String","onLoadEarlier","length","anchor","startClientMsgID","incoming","hasNewMessages","nextAnchor","sendTextMessage","text","trimmed","trim","sentMessage","appendIncomingMessages","relevant","filter","message","handleNewMessages","handleNewMessage","on","OnRecvNewMessages","OnRecvNewMessage","off","refresh"],"sourceRoot":"../../../src","sources":["hooks/useChatMessages.ts"],"mappings":"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","ignoreList":[]}