@droppii-org/chat-mobile 0.2.80 → 0.2.82

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 (228) hide show
  1. package/lib/module/components/ThreadCard/MentionBadge.js +24 -0
  2. package/lib/module/components/ThreadCard/MentionBadge.js.map +1 -0
  3. package/lib/module/components/ThreadCard/ThreadCard.js +5 -1
  4. package/lib/module/components/ThreadCard/ThreadCard.js.map +1 -1
  5. package/lib/module/components/messages/linkMessage/LinkPreviewCard.js +67 -0
  6. package/lib/module/components/messages/linkMessage/LinkPreviewCard.js.map +1 -0
  7. package/lib/module/components/messages/linkMessage/index.js +21 -68
  8. package/lib/module/components/messages/linkMessage/index.js.map +1 -1
  9. package/lib/module/components/messages/quotedMessage/QuotedMessagePreviewStrip.js +152 -0
  10. package/lib/module/components/messages/quotedMessage/QuotedMessagePreviewStrip.js.map +1 -0
  11. package/lib/module/components/messages/textMessage/index.js +102 -8
  12. package/lib/module/components/messages/textMessage/index.js.map +1 -1
  13. package/lib/module/config/api-endpoints.js +2 -1
  14. package/lib/module/config/api-endpoints.js.map +1 -1
  15. package/lib/module/core/useChatListener.js +1 -1
  16. package/lib/module/core/useChatListener.js.map +1 -1
  17. package/lib/module/hooks/contacts/useSearchContacts.js +50 -0
  18. package/lib/module/hooks/contacts/useSearchContacts.js.map +1 -0
  19. package/lib/module/hooks/message/useSendMessage.js +64 -3
  20. package/lib/module/hooks/message/useSendMessage.js.map +1 -1
  21. package/lib/module/hooks/query-keys.js +8 -0
  22. package/lib/module/hooks/query-keys.js.map +1 -1
  23. package/lib/module/hooks/useChatCompose.js +3 -2
  24. package/lib/module/hooks/useChatCompose.js.map +1 -1
  25. package/lib/module/screens/SearchConversation/ContactResultItem.js +119 -0
  26. package/lib/module/screens/SearchConversation/ContactResultItem.js.map +1 -0
  27. package/lib/module/screens/SearchConversation/SearchAllResult.js +26 -20
  28. package/lib/module/screens/SearchConversation/SearchAllResult.js.map +1 -1
  29. package/lib/module/screens/SearchConversation/SearchCommunityResult.js +79 -0
  30. package/lib/module/screens/SearchConversation/SearchCommunityResult.js.map +1 -0
  31. package/lib/module/screens/SearchConversation/SearchContactsResult.js +117 -0
  32. package/lib/module/screens/SearchConversation/SearchContactsResult.js.map +1 -0
  33. package/lib/module/screens/SearchConversation/SearchEmpty.js +2 -0
  34. package/lib/module/screens/SearchConversation/SearchEmpty.js.map +1 -1
  35. package/lib/module/screens/SearchConversation/SearchMessagesResult.js +1 -8
  36. package/lib/module/screens/SearchConversation/SearchMessagesResult.js.map +1 -1
  37. package/lib/module/screens/SearchConversation/SearchResultItem.js +2 -0
  38. package/lib/module/screens/SearchConversation/SearchResultItem.js.map +1 -1
  39. package/lib/module/screens/SearchConversation/TabResult.js +24 -7
  40. package/lib/module/screens/SearchConversation/TabResult.js.map +1 -1
  41. package/lib/module/screens/SearchConversation/index.js +6 -2
  42. package/lib/module/screens/SearchConversation/index.js.map +1 -1
  43. package/lib/module/screens/SearchConversation/types.js +1 -0
  44. package/lib/module/screens/SearchConversation/types.js.map +1 -1
  45. package/lib/module/screens/chat-detail/ChatComposer.js +170 -48
  46. package/lib/module/screens/chat-detail/ChatComposer.js.map +1 -1
  47. package/lib/module/screens/chat-detail/ChatListLegend.js +1 -0
  48. package/lib/module/screens/chat-detail/ChatListLegend.js.map +1 -1
  49. package/lib/module/screens/chat-detail/components/ChatMessageInput.js +23 -2
  50. package/lib/module/screens/chat-detail/components/ChatMessageInput.js.map +1 -1
  51. package/lib/module/screens/chat-detail/components/MentionHighlightAdapter.js +51 -0
  52. package/lib/module/screens/chat-detail/components/MentionHighlightAdapter.js.map +1 -0
  53. package/lib/module/screens/chat-detail/components/MentionSuggestionItem.js +49 -0
  54. package/lib/module/screens/chat-detail/components/MentionSuggestionItem.js.map +1 -0
  55. package/lib/module/screens/chat-detail/components/MentionSuggestionList.js +114 -0
  56. package/lib/module/screens/chat-detail/components/MentionSuggestionList.js.map +1 -0
  57. package/lib/module/screens/chat-detail/hooks/useChatComposerState.js +8 -0
  58. package/lib/module/screens/chat-detail/hooks/useChatComposerState.js.map +1 -1
  59. package/lib/module/screens/chat-detail/hooks/useMentionComposer.js +251 -0
  60. package/lib/module/screens/chat-detail/hooks/useMentionComposer.js.map +1 -0
  61. package/lib/module/screens/chat-detail/legend/LegendChatMessage.js +5 -1
  62. package/lib/module/screens/chat-detail/legend/LegendChatMessage.js.map +1 -1
  63. package/lib/module/screens/chat-detail/messageToolbox/MessageToolboxWrapper.js +11 -1
  64. package/lib/module/screens/chat-detail/messageToolbox/MessageToolboxWrapper.js.map +1 -1
  65. package/lib/module/services/endpoints.js +2 -1
  66. package/lib/module/services/endpoints.js.map +1 -1
  67. package/lib/module/services/mentionSearch.js +49 -0
  68. package/lib/module/services/mentionSearch.js.map +1 -0
  69. package/lib/module/services/message.js +6 -1
  70. package/lib/module/services/message.js.map +1 -1
  71. package/lib/module/translation/resources/i18n.js +11 -0
  72. package/lib/module/translation/resources/i18n.js.map +1 -1
  73. package/lib/module/types/chat.js +8 -0
  74. package/lib/module/types/chat.js.map +1 -1
  75. package/lib/module/types/mention.js +2 -0
  76. package/lib/module/types/mention.js.map +1 -0
  77. package/lib/module/utils/dateTimeUtils.js +10 -0
  78. package/lib/module/utils/dateTimeUtils.js.map +1 -1
  79. package/lib/module/utils/highlightSearch.js +6 -2
  80. package/lib/module/utils/highlightSearch.js.map +1 -1
  81. package/lib/module/utils/mentionSerializer.js +113 -0
  82. package/lib/module/utils/mentionSerializer.js.map +1 -0
  83. package/lib/module/utils/mentions/index.js +7 -0
  84. package/lib/module/utils/mentions/index.js.map +1 -0
  85. package/lib/module/utils/mentions/mentionDetector.js +49 -0
  86. package/lib/module/utils/mentions/mentionDetector.js.map +1 -0
  87. package/lib/module/utils/mentions/mentionDiff.js +66 -0
  88. package/lib/module/utils/mentions/mentionDiff.js.map +1 -0
  89. package/lib/module/utils/mentions/mentionRange.js +188 -0
  90. package/lib/module/utils/mentions/mentionRange.js.map +1 -0
  91. package/lib/module/utils/mentions/mentionTokenize.js +50 -0
  92. package/lib/module/utils/mentions/mentionTokenize.js.map +1 -0
  93. package/lib/module/utils/messageUtils.js +16 -3
  94. package/lib/module/utils/messageUtils.js.map +1 -1
  95. package/lib/module/utils/url.js +33 -0
  96. package/lib/module/utils/url.js.map +1 -1
  97. package/lib/typescript/src/components/ThreadCard/MentionBadge.d.ts +7 -0
  98. package/lib/typescript/src/components/ThreadCard/MentionBadge.d.ts.map +1 -0
  99. package/lib/typescript/src/components/ThreadCard/ThreadCard.d.ts.map +1 -1
  100. package/lib/typescript/src/components/messages/linkMessage/LinkPreviewCard.d.ts +16 -0
  101. package/lib/typescript/src/components/messages/linkMessage/LinkPreviewCard.d.ts.map +1 -0
  102. package/lib/typescript/src/components/messages/linkMessage/index.d.ts.map +1 -1
  103. package/lib/typescript/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.d.ts +13 -0
  104. package/lib/typescript/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.d.ts.map +1 -0
  105. package/lib/typescript/src/components/messages/textMessage/index.d.ts +3 -1
  106. package/lib/typescript/src/components/messages/textMessage/index.d.ts.map +1 -1
  107. package/lib/typescript/src/config/api-endpoints.d.ts +1 -0
  108. package/lib/typescript/src/config/api-endpoints.d.ts.map +1 -1
  109. package/lib/typescript/src/hooks/contacts/useSearchContacts.d.ts +221 -0
  110. package/lib/typescript/src/hooks/contacts/useSearchContacts.d.ts.map +1 -0
  111. package/lib/typescript/src/hooks/message/useSendMessage.d.ts +5 -2
  112. package/lib/typescript/src/hooks/message/useSendMessage.d.ts.map +1 -1
  113. package/lib/typescript/src/hooks/query-keys.d.ts +8 -0
  114. package/lib/typescript/src/hooks/query-keys.d.ts.map +1 -1
  115. package/lib/typescript/src/hooks/useChatCompose.d.ts +2 -1
  116. package/lib/typescript/src/hooks/useChatCompose.d.ts.map +1 -1
  117. package/lib/typescript/src/screens/SearchConversation/ContactResultItem.d.ts +9 -0
  118. package/lib/typescript/src/screens/SearchConversation/ContactResultItem.d.ts.map +1 -0
  119. package/lib/typescript/src/screens/SearchConversation/SearchAllResult.d.ts +3 -2
  120. package/lib/typescript/src/screens/SearchConversation/SearchAllResult.d.ts.map +1 -1
  121. package/lib/typescript/src/screens/SearchConversation/SearchCommunityResult.d.ts +7 -0
  122. package/lib/typescript/src/screens/SearchConversation/SearchCommunityResult.d.ts.map +1 -0
  123. package/lib/typescript/src/screens/SearchConversation/SearchContactsResult.d.ts +8 -0
  124. package/lib/typescript/src/screens/SearchConversation/SearchContactsResult.d.ts.map +1 -0
  125. package/lib/typescript/src/screens/SearchConversation/SearchEmpty.d.ts.map +1 -1
  126. package/lib/typescript/src/screens/SearchConversation/SearchMessagesResult.d.ts.map +1 -1
  127. package/lib/typescript/src/screens/SearchConversation/SearchResultItem.d.ts.map +1 -1
  128. package/lib/typescript/src/screens/SearchConversation/TabResult.d.ts +4 -2
  129. package/lib/typescript/src/screens/SearchConversation/TabResult.d.ts.map +1 -1
  130. package/lib/typescript/src/screens/SearchConversation/index.d.ts +4 -2
  131. package/lib/typescript/src/screens/SearchConversation/index.d.ts.map +1 -1
  132. package/lib/typescript/src/screens/SearchConversation/types.d.ts +2 -1
  133. package/lib/typescript/src/screens/SearchConversation/types.d.ts.map +1 -1
  134. package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts.map +1 -1
  135. package/lib/typescript/src/screens/chat-detail/ChatListLegend.d.ts.map +1 -1
  136. package/lib/typescript/src/screens/chat-detail/components/ChatMessageInput.d.ts +10 -2
  137. package/lib/typescript/src/screens/chat-detail/components/ChatMessageInput.d.ts.map +1 -1
  138. package/lib/typescript/src/screens/chat-detail/components/MentionHighlightAdapter.d.ts +29 -0
  139. package/lib/typescript/src/screens/chat-detail/components/MentionHighlightAdapter.d.ts.map +1 -0
  140. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionItem.d.ts +8 -0
  141. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionItem.d.ts.map +1 -0
  142. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionList.d.ts +12 -0
  143. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionList.d.ts.map +1 -0
  144. package/lib/typescript/src/screens/chat-detail/hooks/useChatComposerState.d.ts +1 -1
  145. package/lib/typescript/src/screens/chat-detail/hooks/useChatComposerState.d.ts.map +1 -1
  146. package/lib/typescript/src/screens/chat-detail/hooks/useMentionComposer.d.ts +48 -0
  147. package/lib/typescript/src/screens/chat-detail/hooks/useMentionComposer.d.ts.map +1 -0
  148. package/lib/typescript/src/screens/chat-detail/legend/LegendChatMessage.d.ts.map +1 -1
  149. package/lib/typescript/src/screens/chat-detail/messageToolbox/MessageToolboxWrapper.d.ts.map +1 -1
  150. package/lib/typescript/src/services/endpoints.d.ts +1 -0
  151. package/lib/typescript/src/services/endpoints.d.ts.map +1 -1
  152. package/lib/typescript/src/services/mentionSearch.d.ts +15 -0
  153. package/lib/typescript/src/services/mentionSearch.d.ts.map +1 -0
  154. package/lib/typescript/src/services/message.d.ts +1 -1
  155. package/lib/typescript/src/services/message.d.ts.map +1 -1
  156. package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -1
  157. package/lib/typescript/src/types/chat.d.ts +50 -0
  158. package/lib/typescript/src/types/chat.d.ts.map +1 -1
  159. package/lib/typescript/src/types/mention.d.ts +65 -0
  160. package/lib/typescript/src/types/mention.d.ts.map +1 -0
  161. package/lib/typescript/src/utils/dateTimeUtils.d.ts +2 -0
  162. package/lib/typescript/src/utils/dateTimeUtils.d.ts.map +1 -1
  163. package/lib/typescript/src/utils/highlightSearch.d.ts.map +1 -1
  164. package/lib/typescript/src/utils/mentionSerializer.d.ts +78 -0
  165. package/lib/typescript/src/utils/mentionSerializer.d.ts.map +1 -0
  166. package/lib/typescript/src/utils/mentions/index.d.ts +5 -0
  167. package/lib/typescript/src/utils/mentions/index.d.ts.map +1 -0
  168. package/lib/typescript/src/utils/mentions/mentionDetector.d.ts +18 -0
  169. package/lib/typescript/src/utils/mentions/mentionDetector.d.ts.map +1 -0
  170. package/lib/typescript/src/utils/mentions/mentionDiff.d.ts +20 -0
  171. package/lib/typescript/src/utils/mentions/mentionDiff.d.ts.map +1 -0
  172. package/lib/typescript/src/utils/mentions/mentionRange.d.ts +86 -0
  173. package/lib/typescript/src/utils/mentions/mentionRange.d.ts.map +1 -0
  174. package/lib/typescript/src/utils/mentions/mentionTokenize.d.ts +29 -0
  175. package/lib/typescript/src/utils/mentions/mentionTokenize.d.ts.map +1 -0
  176. package/lib/typescript/src/utils/messageUtils.d.ts.map +1 -1
  177. package/lib/typescript/src/utils/url.d.ts +12 -0
  178. package/lib/typescript/src/utils/url.d.ts.map +1 -1
  179. package/package.json +3 -1
  180. package/src/build-ignore.d.ts +2 -0
  181. package/src/components/ThreadCard/MentionBadge.tsx +28 -0
  182. package/src/components/ThreadCard/ThreadCard.tsx +3 -0
  183. package/src/components/messages/linkMessage/LinkPreviewCard.tsx +92 -0
  184. package/src/components/messages/linkMessage/index.tsx +25 -89
  185. package/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.tsx +168 -0
  186. package/src/components/messages/textMessage/index.tsx +124 -4
  187. package/src/config/api-endpoints.ts +2 -0
  188. package/src/core/useChatListener.ts +1 -1
  189. package/src/hooks/contacts/useSearchContacts.ts +66 -0
  190. package/src/hooks/message/useSendMessage.ts +60 -1
  191. package/src/hooks/query-keys.ts +12 -0
  192. package/src/hooks/useChatCompose.ts +115 -107
  193. package/src/screens/SearchConversation/ContactResultItem.tsx +128 -0
  194. package/src/screens/SearchConversation/SearchAllResult.tsx +38 -24
  195. package/src/screens/SearchConversation/SearchCommunityResult.tsx +96 -0
  196. package/src/screens/SearchConversation/SearchContactsResult.tsx +155 -0
  197. package/src/screens/SearchConversation/SearchEmpty.tsx +2 -0
  198. package/src/screens/SearchConversation/SearchMessagesResult.tsx +1 -6
  199. package/src/screens/SearchConversation/SearchResultItem.tsx +6 -1
  200. package/src/screens/SearchConversation/TabResult.tsx +40 -5
  201. package/src/screens/SearchConversation/index.tsx +10 -2
  202. package/src/screens/SearchConversation/types.tsx +1 -0
  203. package/src/screens/chat-detail/ChatComposer.tsx +201 -67
  204. package/src/screens/chat-detail/ChatListLegend.tsx +1 -0
  205. package/src/screens/chat-detail/components/ChatMessageInput.tsx +35 -2
  206. package/src/screens/chat-detail/components/MentionHighlightAdapter.tsx +57 -0
  207. package/src/screens/chat-detail/components/MentionSuggestionItem.tsx +53 -0
  208. package/src/screens/chat-detail/components/MentionSuggestionList.tsx +133 -0
  209. package/src/screens/chat-detail/hooks/useChatComposerState.ts +7 -1
  210. package/src/screens/chat-detail/hooks/useMentionComposer.ts +344 -0
  211. package/src/screens/chat-detail/legend/LegendChatMessage.tsx +7 -1
  212. package/src/screens/chat-detail/messageToolbox/MessageToolboxWrapper.tsx +22 -4
  213. package/src/services/endpoints.ts +1 -0
  214. package/src/services/mentionSearch.ts +57 -0
  215. package/src/services/message.ts +9 -1
  216. package/src/translation/resources/i18n.ts +12 -0
  217. package/src/types/chat.ts +52 -0
  218. package/src/types/mention.ts +70 -0
  219. package/src/utils/dateTimeUtils.ts +15 -0
  220. package/src/utils/highlightSearch.ts +12 -2
  221. package/src/utils/mentionSerializer.ts +155 -0
  222. package/src/utils/mentions/index.ts +16 -0
  223. package/src/utils/mentions/mentionDetector.ts +58 -0
  224. package/src/utils/mentions/mentionDiff.ts +95 -0
  225. package/src/utils/mentions/mentionRange.ts +207 -0
  226. package/src/utils/mentions/mentionTokenize.ts +53 -0
  227. package/src/utils/messageUtils.ts +21 -10
  228. package/src/utils/url.ts +30 -0
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","memo","View","Platform","useWindowDimensions","useAnimatedStyle","useDerivedValue","useSharedValue","withTiming","messageStyles","Animated","useSafeAreaInsets","jsx","_jsx","jsxs","_jsxs","MENU_GAP","MessageToolboxWrapper","isOutgoing","rect","message","reaction","toolbox","insets","reactionHeight","toolboxHeight","topOffset","OS","top","height","windowHeight","onToolboxLayout","nativeEvent","value","layout","onReactionLayout","translateY","menuGap","overflowBottom","Math","max","y","bottom","min","containerStyles","left","x","width","gap","transform","pointerEvents","style","messageRowRight","messageRowLeft","children","onLayout","displayName"],"sourceRoot":"../../../../../src","sources":["screens/chat-detail/messageToolbox/MessageToolboxWrapper.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","memo","View","Platform","useWindowDimensions","useAnimatedStyle","useDerivedValue","useSharedValue","withTiming","messageStyles","Animated","useSafeAreaInsets","jsx","_jsx","jsxs","_jsxs","MENU_GAP","MessageToolboxWrapper","isOutgoing","rect","message","reaction","toolbox","insets","messageHeight","reactionHeight","toolboxHeight","topOffset","OS","top","height","windowHeight","onMessageCloneLayout","nativeEvent","value","layout","onToolboxLayout","onReactionLayout","translateY","menuGap","overflowBottom","Math","max","y","bottom","min","containerStyles","left","x","width","gap","transform","pointerEvents","style","messageRowRight","messageRowLeft","children","collapsable","onLayout","displayName"],"sourceRoot":"../../../../../src","sources":["screens/chat-detail/messageToolbox/MessageToolboxWrapper.tsx"],"mappings":"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","ignoreList":[]}
@@ -28,7 +28,8 @@ export const ENDPOINTS = {
28
28
  stickerCategories: () => getApiEndpoint('stickerCategories'),
29
29
  stickersByCategoryId: id => `${getApiEndpoint('stickersByCategory')}/${id}/stickers`,
30
30
  stickerHistory: () => getApiEndpoint('stickerHistory'),
31
- searchMessages: () => `${getApiEndpoint('messages')}/search`
31
+ searchMessages: () => `${getApiEndpoint('messages')}/search`,
32
+ searchContacts: () => `${getApiEndpoint('contacts')}/search`
32
33
  },
33
34
  uploaderService: {
34
35
  get uploadImage() {
@@ -1 +1 @@
1
- {"version":3,"names":["getApiEndpoint","setApiEndpoint","getAllApiEndpoints","ENDPOINTS","chatService","urlMetadata","uploadFcmToken","conversationFlow","id","resetConversationFlow","runConversationFlow","getConversationByBotId","botId","conversationFlowMainMenu","closeConversationSession","getConversationStatusByBotId","getConversationTarget","conversationId","stickerCategories","stickersByCategoryId","stickerHistory","searchMessages","uploaderService","uploadImage"],"sourceRoot":"../../../src","sources":["services/endpoints.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,SACEA,cAAc,EACdC,cAAc,EACdC,kBAAkB,QACb,4BAAyB;;AAEhC;AACA,OAAO,MAAMC,SAAS,GAAG;EACvBC,WAAW,EAAE;IACX,IAAIC,WAAWA,CAAA,EAAG;MAChB,OAAOL,cAAc,CAAC,aAAa,CAAC;IACtC,CAAC;IACD,IAAIM,cAAcA,CAAA,EAAG;MACnB,OAAON,cAAc,CAAC,gBAAgB,CAAC;IACzC,CAAC;IACDO,gBAAgB,EAAGC,EAAU,IAAK,GAAGR,cAAc,CAAC,cAAc,CAAC,IAAIQ,EAAE,EAAE;IAC3EC,qBAAqB,EAAGD,EAAU,IAChC,GAAGR,cAAc,CAAC,cAAc,CAAC,IAAIQ,EAAE,kBAAkB;IAC3DE,mBAAmB,EAAGF,EAAU,IAC9B,GAAGR,cAAc,CAAC,cAAc,CAAC,IAAIQ,EAAE,gBAAgB;IACzDG,sBAAsB,EAAGC,KAAa,IACpC,GAAGZ,cAAc,CAAC,KAAK,CAAC,IAAIY,KAAK,eAAe;IAClDC,wBAAwB,EAAGL,EAAU,IACnC,GAAGR,cAAc,CAAC,cAAc,CAAC,IAAIQ,EAAE,sBAAsB;IAC/DM,wBAAwB,EAAGN,EAAU,IACnC,GAAGR,cAAc,CAAC,cAAc,CAAC,IAAIQ,EAAE,gBAAgB;IACzDO,4BAA4B,EAAGH,KAAa,IAC1C,GAAGZ,cAAc,CAAC,KAAK,CAAC,IAAIY,KAAK,EAAE;IACrCI,qBAAqB,EAAGC,cAAsB,IAC5C,GAAGjB,cAAc,CAAC,cAAc,CAAC,IAAIiB,cAAc,SAAS;IAC9DC,iBAAiB,EAAEA,CAAA,KAAMlB,cAAc,CAAC,mBAAmB,CAAC;IAC5DmB,oBAAoB,EAAGX,EAAU,IAC/B,GAAGR,cAAc,CAAC,oBAAoB,CAAC,IAAIQ,EAAE,WAAW;IAC1DY,cAAc,EAAEA,CAAA,KAAMpB,cAAc,CAAC,gBAAgB,CAAC;IACtDqB,cAAc,EAAEA,CAAA,KAAM,GAAGrB,cAAc,CAAC,UAAU,CAAC;EACrD,CAAC;EACDsB,eAAe,EAAE;IACf,IAAIC,WAAWA,CAAA,EAAG;MAChB,OAAOvB,cAAc,CAAC,aAAa,CAAC;IACtC;EACF;AACF,CAAC;;AAED;AACA,SAASA,cAAc,EAAEC,cAAc,EAAEC,kBAAkB","ignoreList":[]}
1
+ {"version":3,"names":["getApiEndpoint","setApiEndpoint","getAllApiEndpoints","ENDPOINTS","chatService","urlMetadata","uploadFcmToken","conversationFlow","id","resetConversationFlow","runConversationFlow","getConversationByBotId","botId","conversationFlowMainMenu","closeConversationSession","getConversationStatusByBotId","getConversationTarget","conversationId","stickerCategories","stickersByCategoryId","stickerHistory","searchMessages","searchContacts","uploaderService","uploadImage"],"sourceRoot":"../../../src","sources":["services/endpoints.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,SACEA,cAAc,EACdC,cAAc,EACdC,kBAAkB,QACb,4BAAyB;;AAEhC;AACA,OAAO,MAAMC,SAAS,GAAG;EACvBC,WAAW,EAAE;IACX,IAAIC,WAAWA,CAAA,EAAG;MAChB,OAAOL,cAAc,CAAC,aAAa,CAAC;IACtC,CAAC;IACD,IAAIM,cAAcA,CAAA,EAAG;MACnB,OAAON,cAAc,CAAC,gBAAgB,CAAC;IACzC,CAAC;IACDO,gBAAgB,EAAGC,EAAU,IAAK,GAAGR,cAAc,CAAC,cAAc,CAAC,IAAIQ,EAAE,EAAE;IAC3EC,qBAAqB,EAAGD,EAAU,IAChC,GAAGR,cAAc,CAAC,cAAc,CAAC,IAAIQ,EAAE,kBAAkB;IAC3DE,mBAAmB,EAAGF,EAAU,IAC9B,GAAGR,cAAc,CAAC,cAAc,CAAC,IAAIQ,EAAE,gBAAgB;IACzDG,sBAAsB,EAAGC,KAAa,IACpC,GAAGZ,cAAc,CAAC,KAAK,CAAC,IAAIY,KAAK,eAAe;IAClDC,wBAAwB,EAAGL,EAAU,IACnC,GAAGR,cAAc,CAAC,cAAc,CAAC,IAAIQ,EAAE,sBAAsB;IAC/DM,wBAAwB,EAAGN,EAAU,IACnC,GAAGR,cAAc,CAAC,cAAc,CAAC,IAAIQ,EAAE,gBAAgB;IACzDO,4BAA4B,EAAGH,KAAa,IAC1C,GAAGZ,cAAc,CAAC,KAAK,CAAC,IAAIY,KAAK,EAAE;IACrCI,qBAAqB,EAAGC,cAAsB,IAC5C,GAAGjB,cAAc,CAAC,cAAc,CAAC,IAAIiB,cAAc,SAAS;IAC9DC,iBAAiB,EAAEA,CAAA,KAAMlB,cAAc,CAAC,mBAAmB,CAAC;IAC5DmB,oBAAoB,EAAGX,EAAU,IAC/B,GAAGR,cAAc,CAAC,oBAAoB,CAAC,IAAIQ,EAAE,WAAW;IAC1DY,cAAc,EAAEA,CAAA,KAAMpB,cAAc,CAAC,gBAAgB,CAAC;IACtDqB,cAAc,EAAEA,CAAA,KAAM,GAAGrB,cAAc,CAAC,UAAU,CAAC,SAAS;IAC5DsB,cAAc,EAAEA,CAAA,KAAM,GAAGtB,cAAc,CAAC,UAAU,CAAC;EACrD,CAAC;EACDuB,eAAe,EAAE;IACf,IAAIC,WAAWA,CAAA,EAAG;MAChB,OAAOxB,cAAc,CAAC,aAAa,CAAC;IACtC;EACF;AACF,CAAC;;AAED;AACA,SAASA,cAAc,EAAEC,cAAc,EAAEC,kBAAkB","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ import OpenIMSDK, { GroupMemberFilter } from '@droppii/openim-rn-client-sdk';
4
+ const toSuggestion = member => ({
5
+ userId: member.userID,
6
+ displayName: member.nickname,
7
+ avatar: member.faceURL
8
+ });
9
+
10
+ /**
11
+ * Concrete MentionSearchSource implementation for Part A's mention
12
+ * composer, wrapping the OpenIM SDK's group-member primitives — 0 call
13
+ * sites anywhere else in this repo before this feature. Empty keyword ->
14
+ * the full/initial member list (getGroupMemberList); non-empty keyword ->
15
+ * server-backed search (searchGroupMembers), purpose-built for this case.
16
+ *
17
+ * Neither SDK call returns a total count, so `hasMore` is inferred from
18
+ * page size (a full page *might* mean there's another one) — the same
19
+ * heuristic every offset/count-paginated list in this codebase already
20
+ * relies on, since OpenIM doesn't expose a cheaper alternative here.
21
+ */
22
+ export function createOpenIMMentionSearchSource(groupID) {
23
+ return {
24
+ async search({
25
+ keyword,
26
+ limit,
27
+ offset
28
+ }) {
29
+ const members = keyword === '' ? await OpenIMSDK.getGroupMemberList({
30
+ groupID,
31
+ filter: GroupMemberFilter.All,
32
+ offset,
33
+ count: limit
34
+ }) : await OpenIMSDK.searchGroupMembers({
35
+ groupID,
36
+ keywordList: [keyword],
37
+ isSearchUserID: false,
38
+ isSearchMemberNickname: true,
39
+ offset,
40
+ count: limit
41
+ });
42
+ return {
43
+ items: members.map(toSuggestion),
44
+ hasMore: members.length === limit
45
+ };
46
+ }
47
+ };
48
+ }
49
+ //# sourceMappingURL=mentionSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["OpenIMSDK","GroupMemberFilter","toSuggestion","member","userId","userID","displayName","nickname","avatar","faceURL","createOpenIMMentionSearchSource","groupID","search","keyword","limit","offset","members","getGroupMemberList","filter","All","count","searchGroupMembers","keywordList","isSearchUserID","isSearchMemberNickname","items","map","hasMore","length"],"sourceRoot":"../../../src","sources":["services/mentionSearch.ts"],"mappings":";;AAAA,OAAOA,SAAS,IACdC,iBAAiB,QAEZ,+BAA+B;AAOtC,MAAMC,YAAY,GAAIC,MAAuB,KAAyB;EACpEC,MAAM,EAAED,MAAM,CAACE,MAAM;EACrBC,WAAW,EAAEH,MAAM,CAACI,QAAQ;EAC5BC,MAAM,EAAEL,MAAM,CAACM;AACjB,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,+BAA+BA,CAC7CC,OAAe,EACM;EACrB,OAAO;IACL,MAAMC,MAAMA,CAAC;MAAEC,OAAO;MAAEC,KAAK;MAAEC;IAAO,CAAC,EAAgC;MACrE,MAAMC,OAAO,GACXH,OAAO,KAAK,EAAE,GACV,MAAMb,SAAS,CAACiB,kBAAkB,CAAC;QACjCN,OAAO;QACPO,MAAM,EAAEjB,iBAAiB,CAACkB,GAAG;QAC7BJ,MAAM;QACNK,KAAK,EAAEN;MACT,CAAC,CAAC,GACF,MAAMd,SAAS,CAACqB,kBAAkB,CAAC;QACjCV,OAAO;QACPW,WAAW,EAAE,CAACT,OAAO,CAAC;QACtBU,cAAc,EAAE,KAAK;QACrBC,sBAAsB,EAAE,IAAI;QAC5BT,MAAM;QACNK,KAAK,EAAEN;MACT,CAAC,CAAC;MAER,OAAO;QACLW,KAAK,EAAET,OAAO,CAACU,GAAG,CAACxB,YAAY,CAAC;QAChCyB,OAAO,EAAEX,OAAO,CAACY,MAAM,KAAKd;MAC9B,CAAC;IACH;EACF,CAAC;AACH","ignoreList":[]}
@@ -37,7 +37,12 @@ export let ChatMessageAPI;
37
37
  }
38
38
  _ChatMessageAPI.searchLocalMessages = searchLocalMessages;
39
39
  async function markConversationAsRead(conversationID) {
40
- return OpenIMSDK.markConversationMessageAsRead(conversationID);
40
+ // resetConversationGroupAtType clears the "@ mention" flag
41
+ // (ConversationItem.groupAtType) — the core SDK never resets it on its
42
+ // own (confirmed: markConversationMessageAsRead only zeroes
43
+ // unreadCount), so it has to be requested explicitly at the same
44
+ // "user is caught up on this conversation" moment as the read marker.
45
+ return Promise.all([OpenIMSDK.markConversationMessageAsRead(conversationID), OpenIMSDK.resetConversationGroupAtType(conversationID)]);
41
46
  }
42
47
  _ChatMessageAPI.markConversationAsRead = markConversationAsRead;
43
48
  async function getCurrentUserId() {
@@ -1 +1 @@
1
- {"version":3,"names":["OpenIMSDK","ViewType","useConversationStore","getReceiverId","DEFAULT_PAGE_SIZE","ChatMessageAPI","_ChatMessageAPI","fetchHistoryMessages","conversationID","options","getAdvancedHistoryMessageListApp","count","startClientMsgID","viewType","History","applicationType","sendTextMessage","params","currentConversation","getState","getCurrentConversation","message","createTextMessage","text","sentMessage","sendMessage","searchLocalMessages","keywordList","messageTypeList","pageIndex","markConversationAsRead","markConversationMessageAsRead","getCurrentUserId","getLoginUserID"],"sourceRoot":"../../../src","sources":["services/message.ts"],"mappings":";;AAAA,OAAOA,SAAS,IACdC,QAAQ,QAGH,+BAA+B;AACtC,SAASC,oBAAoB,QAAQ,mBAAU;AAC/C,SAASC,aAAa,QAAQ,qBAAkB;AAEhD,MAAMC,iBAAiB,GAAG,EAAE;AAAC,WAMZC,cAAc;AAAA,WAAAC,eAAA;EACtB,eAAeC,oBAAoBA,CACxCC,cAAsB,EACtBC,OAKC,EAC8B;IAC/B,OAAOT,SAAS,CAACU,gCAAgC,CAAC;MAChDF,cAAc;MACdG,KAAK,EAAEF,OAAO,EAAEE,KAAK,IAAIP,iBAAiB;MAC1CQ,gBAAgB,EAAEH,OAAO,EAAEG,gBAAgB,IAAI,EAAE;MACjDC,QAAQ,EAAEZ,QAAQ,CAACa,OAAO;MAC1BC,eAAe,EAAEN,OAAO,EAAEM,eAAe,IAAI;IAC/C,CAAC,CAAC;EACJ;EAACT,eAAA,CAAAC,oBAAA,GAAAA,oBAAA;EAEM,eAAeS,eAAeA,CAACC,MAErC,EAAwB;IACvB,MAAMC,mBAAmB,GAAGhB,oBAAoB,CAC7CiB,QAAQ,CAAC,CAAC,CACVC,sBAAsB,CAAC,CAAC;IAE3B,MAAMC,OAAO,GAAG,MAAMrB,SAAS,CAACsB,iBAAiB,CAACL,MAAM,CAACM,IAAI,CAAC;IAE9D,MAAMC,WAAW,GAAG,MAAMxB,SAAS,CAACyB,WAAW,CAAC;MAC9C,GAAGtB,aAAa,CAACe,mBAAmB,CAAC;MACrCG;IACF,CAAC,CAAC;IAEF,OAAOG,WAAW;EACpB;EAAClB,eAAA,CAAAU,eAAA,GAAAA,eAAA;EAEM,eAAeU,mBAAmBA,CACvClB,cAAsB,EACtBC,OAKC,EACD;IACA,OAAOT,SAAS,CAAC0B,mBAAmB,CAAC;MACnClB,cAAc;MACdmB,WAAW,EAAElB,OAAO,EAAEkB,WAAW,IAAI,CAAC,GAAG,CAAC;MAC1CC,eAAe,EAAEnB,OAAO,EAAEmB,eAAe;MACzCC,SAAS,EAAEpB,OAAO,EAAEoB,SAAS,IAAI,CAAC;MAClClB,KAAK,EAAEF,OAAO,EAAEE,KAAK,IAAI;IAC3B,CAAC,CAAC;EACJ;EAACL,eAAA,CAAAoB,mBAAA,GAAAA,mBAAA;EAEM,eAAeI,sBAAsBA,CAACtB,cAAsB,EAAE;IACnE,OAAOR,SAAS,CAAC+B,6BAA6B,CAACvB,cAAc,CAAC;EAChE;EAACF,eAAA,CAAAwB,sBAAA,GAAAA,sBAAA;EAEM,eAAeE,gBAAgBA,CAAA,EAAG;IACvC,OAAOhC,SAAS,CAACiC,cAAc,CAAC,CAAC;EACnC;EAAC3B,eAAA,CAAA0B,gBAAA,GAAAA,gBAAA;AAAA,GA5Dc3B,cAAc,KAAdA,cAAc","ignoreList":[]}
1
+ {"version":3,"names":["OpenIMSDK","ViewType","useConversationStore","getReceiverId","DEFAULT_PAGE_SIZE","ChatMessageAPI","_ChatMessageAPI","fetchHistoryMessages","conversationID","options","getAdvancedHistoryMessageListApp","count","startClientMsgID","viewType","History","applicationType","sendTextMessage","params","currentConversation","getState","getCurrentConversation","message","createTextMessage","text","sentMessage","sendMessage","searchLocalMessages","keywordList","messageTypeList","pageIndex","markConversationAsRead","Promise","all","markConversationMessageAsRead","resetConversationGroupAtType","getCurrentUserId","getLoginUserID"],"sourceRoot":"../../../src","sources":["services/message.ts"],"mappings":";;AAAA,OAAOA,SAAS,IACdC,QAAQ,QAGH,+BAA+B;AACtC,SAASC,oBAAoB,QAAQ,mBAAU;AAC/C,SAASC,aAAa,QAAQ,qBAAkB;AAEhD,MAAMC,iBAAiB,GAAG,EAAE;AAAC,WAMZC,cAAc;AAAA,WAAAC,eAAA;EACtB,eAAeC,oBAAoBA,CACxCC,cAAsB,EACtBC,OAKC,EAC8B;IAC/B,OAAOT,SAAS,CAACU,gCAAgC,CAAC;MAChDF,cAAc;MACdG,KAAK,EAAEF,OAAO,EAAEE,KAAK,IAAIP,iBAAiB;MAC1CQ,gBAAgB,EAAEH,OAAO,EAAEG,gBAAgB,IAAI,EAAE;MACjDC,QAAQ,EAAEZ,QAAQ,CAACa,OAAO;MAC1BC,eAAe,EAAEN,OAAO,EAAEM,eAAe,IAAI;IAC/C,CAAC,CAAC;EACJ;EAACT,eAAA,CAAAC,oBAAA,GAAAA,oBAAA;EAEM,eAAeS,eAAeA,CAACC,MAErC,EAAwB;IACvB,MAAMC,mBAAmB,GAAGhB,oBAAoB,CAC7CiB,QAAQ,CAAC,CAAC,CACVC,sBAAsB,CAAC,CAAC;IAE3B,MAAMC,OAAO,GAAG,MAAMrB,SAAS,CAACsB,iBAAiB,CAACL,MAAM,CAACM,IAAI,CAAC;IAE9D,MAAMC,WAAW,GAAG,MAAMxB,SAAS,CAACyB,WAAW,CAAC;MAC9C,GAAGtB,aAAa,CAACe,mBAAmB,CAAC;MACrCG;IACF,CAAC,CAAC;IAEF,OAAOG,WAAW;EACpB;EAAClB,eAAA,CAAAU,eAAA,GAAAA,eAAA;EAEM,eAAeU,mBAAmBA,CACvClB,cAAsB,EACtBC,OAKC,EACD;IACA,OAAOT,SAAS,CAAC0B,mBAAmB,CAAC;MACnClB,cAAc;MACdmB,WAAW,EAAElB,OAAO,EAAEkB,WAAW,IAAI,CAAC,GAAG,CAAC;MAC1CC,eAAe,EAAEnB,OAAO,EAAEmB,eAAe;MACzCC,SAAS,EAAEpB,OAAO,EAAEoB,SAAS,IAAI,CAAC;MAClClB,KAAK,EAAEF,OAAO,EAAEE,KAAK,IAAI;IAC3B,CAAC,CAAC;EACJ;EAACL,eAAA,CAAAoB,mBAAA,GAAAA,mBAAA;EAEM,eAAeI,sBAAsBA,CAACtB,cAAsB,EAAE;IACnE;IACA;IACA;IACA;IACA;IACA,OAAOuB,OAAO,CAACC,GAAG,CAAC,CACjBhC,SAAS,CAACiC,6BAA6B,CAACzB,cAAc,CAAC,EACvDR,SAAS,CAACkC,4BAA4B,CAAC1B,cAAc,CAAC,CACvD,CAAC;EACJ;EAACF,eAAA,CAAAwB,sBAAA,GAAAA,sBAAA;EAEM,eAAeK,gBAAgBA,CAAA,EAAG;IACvC,OAAOnC,SAAS,CAACoC,cAAc,CAAC,CAAC;EACnC;EAAC9B,eAAA,CAAA6B,gBAAA,GAAAA,gBAAA;AAAA,GApEc9B,cAAc,KAAdA,cAAc","ignoreList":[]}
@@ -172,7 +172,13 @@ const i18nKey = {
172
172
  'search:empty_hint': 'Bạn có thể tìm kiếm theo liên hệ hoặc nội dung tin nhắn',
173
173
  'search_message:empty_hint': 'Bạn có thể tìm kiếm theo nội dung tin nhắn',
174
174
  'search_conversation:empty_hint': 'Bạn có thể tìm kiếm theo liên hệ',
175
+ 'search_community:empty_hint': 'Bạn có thể tìm kiếm theo tên nhóm cộng đồng',
175
176
  'view_all': 'Xem tất cả',
177
+ 'contact_type:customer': 'Khách hàng',
178
+ 'contact_type:pdp': 'PDP',
179
+ 'contact_type:group': 'Nhóm',
180
+ 'contact_type:seller': 'Người bán',
181
+ 'group:no_description': 'Chưa có mô tả nhóm',
176
182
  'search_message:revoked_message': 'Tin nhắn đã được thu hồi',
177
183
  'chat:no_permission': 'Bạn không có quyền này',
178
184
  'chat:no_send_permission': 'Bạn không có quyền gửi tin nhắn',
@@ -191,6 +197,11 @@ const i18nKey = {
191
197
  'group:dismiss_confirm_primary': 'Giải tán',
192
198
  'group:dismiss_confirm_secondary': 'Quay lại',
193
199
  'group:dismiss_toast_success': 'Đã giải tán nhóm',
200
+ 'group:tag_title': 'Nhắc đến',
201
+ 'group:tag_all': 'Tất cả',
202
+ 'group:tag_all_desc': 'Nhắc đến tất cả thành viên',
203
+ 'group:tag_no_member_found': 'Không tìm thấy thành viên nào',
204
+ 'group:tag_limit_exceeded': 'Chỉ {{max}} người được nhắc đến đầu tiên sẽ nhận được thông báo',
194
205
  'group:access_blocked_title': 'Không thể xem cuộc trò chuyện này',
195
206
  'group:access_blocked_desc': 'Bạn hiện không có quyền truy cập vào cuộc trò chuyện hoặc tin nhắn này.',
196
207
  'group:access_blocked_button': 'Đã hiểu'
@@ -1 +1 @@
1
- {"version":3,"names":["i18nKey","vi"],"sourceRoot":"../../../../src","sources":["translation/resources/i18n.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["i18nKey","vi"],"sourceRoot":"../../../../src","sources":["translation/resources/i18n.ts"],"mappings":"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","ignoreList":[]}
@@ -90,4 +90,12 @@ export let DThreadResourceContentType = /*#__PURE__*/function (DThreadResourceCo
90
90
  * (`{ chatLog, isRevoked, tag, displayTag }`), NOT `{ items: [...] }` — corrected
91
91
  * after fetching a real response (initial assumption was wrong).
92
92
  */
93
+
94
+ export let ContactCategory = /*#__PURE__*/function (ContactCategory) {
95
+ ContactCategory["Customer"] = "CUSTOMER";
96
+ ContactCategory["Pdp"] = "PDP_BOT";
97
+ ContactCategory["Group"] = "GROUP";
98
+ ContactCategory["Seller"] = "USER";
99
+ return ContactCategory;
100
+ }({});
93
101
  //# sourceMappingURL=chat.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["EventProvider","ga","appsflyer","netcore","DChatApplicationType","DChatPlatform","DChatProject","DChatCategory","DMemberRole","DFlowState","DBotStatusValue","DBotType","SyncStatus","ConnectStatus","CustomMessageType","Order","Product","DThreadResourceContentType"],"sourceRoot":"../../../src","sources":["types/chat.ts"],"mappings":";;AAkBA,OAAO,MAAMA,aAAa,GAAG;EAC3BC,EAAE,EAAE,IAAI;EACRC,SAAS,EAAE,WAAW;EACtBC,OAAO,EAAE;AACX,CAAU;AAgCV,WAAYC,oBAAoB,0BAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAAA,OAApBA,oBAAoB;AAAA;AAKhC,WAAYC,aAAa,0BAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAMzB,WAAYC,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAKxB,WAAYC,aAAa,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAQzB,WAAYC,WAAW,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;AAKvB,WAAYC,UAAU,0BAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAatB,WAAYC,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAK3B,WAAYC,QAAQ,0BAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA;;AAgBpB;AACA;AACA;AACA;;AASA,WAAYC,UAAU,0BAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAMtB,WAAYC,aAAa,0BAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAwGzB,OAAO,MAAMC,iBAAiB,GAAG;EAC/BC,KAAK,EAAE,OAAO;EACdC,OAAO,EAAE;AACX,CAAU;AAeV,WAAYC,0BAA0B,0BAA1BA,0BAA0B;EAA1BA,0BAA0B,CAA1BA,0BAA0B;EAA1BA,0BAA0B,CAA1BA,0BAA0B;EAA1BA,0BAA0B,CAA1BA,0BAA0B;EAA1BA,0BAA0B,CAA1BA,0BAA0B;EAAA,OAA1BA,0BAA0B;AAAA;;AA0BtC;AACA;AACA;AACA;AACA;AACA;;AAmBA;AACA;AACA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"names":["EventProvider","ga","appsflyer","netcore","DChatApplicationType","DChatPlatform","DChatProject","DChatCategory","DMemberRole","DFlowState","DBotStatusValue","DBotType","SyncStatus","ConnectStatus","CustomMessageType","Order","Product","DThreadResourceContentType","ContactCategory"],"sourceRoot":"../../../src","sources":["types/chat.ts"],"mappings":";;AAkBA,OAAO,MAAMA,aAAa,GAAG;EAC3BC,EAAE,EAAE,IAAI;EACRC,SAAS,EAAE,WAAW;EACtBC,OAAO,EAAE;AACX,CAAU;AAgCV,WAAYC,oBAAoB,0BAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAAA,OAApBA,oBAAoB;AAAA;AAKhC,WAAYC,aAAa,0BAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAMzB,WAAYC,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAKxB,WAAYC,aAAa,0BAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAQzB,WAAYC,WAAW,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;AAKvB,WAAYC,UAAU,0BAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAatB,WAAYC,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAK3B,WAAYC,QAAQ,0BAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA;;AAgBpB;AACA;AACA;AACA;;AASA,WAAYC,UAAU,0BAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAMtB,WAAYC,aAAa,0BAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAbA,aAAa,CAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AA8HzB,OAAO,MAAMC,iBAAiB,GAAG;EAC/BC,KAAK,EAAE,OAAO;EACdC,OAAO,EAAE;AACX,CAAU;AAeV,WAAYC,0BAA0B,0BAA1BA,0BAA0B;EAA1BA,0BAA0B,CAA1BA,0BAA0B;EAA1BA,0BAA0B,CAA1BA,0BAA0B;EAA1BA,0BAA0B,CAA1BA,0BAA0B;EAA1BA,0BAA0B,CAA1BA,0BAA0B;EAAA,OAA1BA,0BAA0B;AAAA;;AA0BtC;AACA;AACA;AACA;AACA;AACA;;AAmBA;AACA;AACA;AACA;AACA;;AAiCA,WAAYC,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=mention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/mention.ts"],"mappings":"","ignoreList":[]}
@@ -4,6 +4,10 @@
4
4
  * Date and time formatting utilities
5
5
  */
6
6
 
7
+ import dayjs from 'dayjs';
8
+ import relativeTime from 'dayjs/plugin/relativeTime';
9
+ import 'dayjs/locale/vi';
10
+ dayjs.extend(relativeTime);
7
11
  export const formatDuration = durationMs => {
8
12
  // Convert milliseconds to seconds
9
13
  const totalSeconds = Math.floor(durationMs / 1000);
@@ -41,4 +45,10 @@ export const formatTimestamp = ts => {
41
45
  return '';
42
46
  }
43
47
  };
48
+ export const formatLastOnlineTime = ts => {
49
+ if (!ts) return '';
50
+ const date = dayjs(ts).locale('vi');
51
+ if (!date.isValid()) return '';
52
+ return date.fromNow();
53
+ };
44
54
  //# sourceMappingURL=dateTimeUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["formatDuration","durationMs","totalSeconds","Math","floor","mins","secs","toString","padStart","formatTimestamp","ts","date","Date","isNaN","getTime","now","today","getFullYear","getMonth","getDate","dateOnly","h","getHours","m","getMinutes","d","mo"],"sourceRoot":"../../../src","sources":["utils/dateTimeUtils.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA,OAAO,MAAMA,cAAc,GAAIC,UAAkB,IAAa;EAC5D;EACA,MAAMC,YAAY,GAAGC,IAAI,CAACC,KAAK,CAACH,UAAU,GAAG,IAAI,CAAC;EAClD,MAAMI,IAAI,GAAGF,IAAI,CAACC,KAAK,CAACF,YAAY,GAAG,EAAE,CAAC;EAC1C,MAAMI,IAAI,GAAGJ,YAAY,GAAG,EAAE;EAC9B,OAAO,GAAGG,IAAI,IAAIC,IAAI,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AACtD,CAAC;AAED,OAAO,MAAMC,eAAe,GAAIC,EAA0B,IAAa;EACrE,IAAI,CAACA,EAAE,EAAE,OAAO,EAAE;EAElB,IAAI;IACF,MAAMC,IAAI,GAAG,IAAIC,IAAI,CAACF,EAAE,CAAC;IACzB,IAAIG,KAAK,CAACF,IAAI,CAACG,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE;IAEpC,MAAMC,GAAG,GAAG,IAAIH,IAAI,CAAC,CAAC;IACtB,MAAMI,KAAK,GAAG,IAAIJ,IAAI,CAACG,GAAG,CAACE,WAAW,CAAC,CAAC,EAAEF,GAAG,CAACG,QAAQ,CAAC,CAAC,EAAEH,GAAG,CAACI,OAAO,CAAC,CAAC,CAAC;IACxE;IACA,MAAMC,QAAQ,GAAG,IAAIR,IAAI,CACvBD,IAAI,CAACM,WAAW,CAAC,CAAC,EAClBN,IAAI,CAACO,QAAQ,CAAC,CAAC,EACfP,IAAI,CAACQ,OAAO,CAAC,CACf,CAAC;;IAED;IACA,IAAIC,QAAQ,CAACN,OAAO,CAAC,CAAC,KAAKE,KAAK,CAACF,OAAO,CAAC,CAAC,EAAE;MAC1C,MAAMO,CAAC,GAAGV,IAAI,CAACW,QAAQ,CAAC,CAAC,CAACf,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;MACrD,MAAMe,CAAC,GAAGZ,IAAI,CAACa,UAAU,CAAC,CAAC,CAACjB,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;MACvD,OAAO,GAAGa,CAAC,IAAIE,CAAC,EAAE;IACpB;;IAEA;IACA;IACA;IACA;;IAEA;IACA,MAAME,CAAC,GAAGd,IAAI,CAACQ,OAAO,CAAC,CAAC,CAACZ,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACpD,MAAMkB,EAAE,GAAG,CAACf,IAAI,CAACO,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAEX,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAC5D,OAAO,GAAGiB,CAAC,IAAIC,EAAE,EAAE;EACrB,CAAC,CAAC,MAAM;IACN,OAAO,EAAE;EACX;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["dayjs","relativeTime","extend","formatDuration","durationMs","totalSeconds","Math","floor","mins","secs","toString","padStart","formatTimestamp","ts","date","Date","isNaN","getTime","now","today","getFullYear","getMonth","getDate","dateOnly","h","getHours","m","getMinutes","d","mo","formatLastOnlineTime","locale","isValid","fromNow"],"sourceRoot":"../../../src","sources":["utils/dateTimeUtils.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,YAAY,MAAM,2BAA2B;AACpD,OAAO,iBAAiB;AAExBD,KAAK,CAACE,MAAM,CAACD,YAAY,CAAC;AAE1B,OAAO,MAAME,cAAc,GAAIC,UAAkB,IAAa;EAC5D;EACA,MAAMC,YAAY,GAAGC,IAAI,CAACC,KAAK,CAACH,UAAU,GAAG,IAAI,CAAC;EAClD,MAAMI,IAAI,GAAGF,IAAI,CAACC,KAAK,CAACF,YAAY,GAAG,EAAE,CAAC;EAC1C,MAAMI,IAAI,GAAGJ,YAAY,GAAG,EAAE;EAC9B,OAAO,GAAGG,IAAI,IAAIC,IAAI,CAACC,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AACtD,CAAC;AAED,OAAO,MAAMC,eAAe,GAAIC,EAA0B,IAAa;EACrE,IAAI,CAACA,EAAE,EAAE,OAAO,EAAE;EAElB,IAAI;IACF,MAAMC,IAAI,GAAG,IAAIC,IAAI,CAACF,EAAE,CAAC;IACzB,IAAIG,KAAK,CAACF,IAAI,CAACG,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE;IAEpC,MAAMC,GAAG,GAAG,IAAIH,IAAI,CAAC,CAAC;IACtB,MAAMI,KAAK,GAAG,IAAIJ,IAAI,CAACG,GAAG,CAACE,WAAW,CAAC,CAAC,EAAEF,GAAG,CAACG,QAAQ,CAAC,CAAC,EAAEH,GAAG,CAACI,OAAO,CAAC,CAAC,CAAC;IACxE;IACA,MAAMC,QAAQ,GAAG,IAAIR,IAAI,CACvBD,IAAI,CAACM,WAAW,CAAC,CAAC,EAClBN,IAAI,CAACO,QAAQ,CAAC,CAAC,EACfP,IAAI,CAACQ,OAAO,CAAC,CACf,CAAC;;IAED;IACA,IAAIC,QAAQ,CAACN,OAAO,CAAC,CAAC,KAAKE,KAAK,CAACF,OAAO,CAAC,CAAC,EAAE;MAC1C,MAAMO,CAAC,GAAGV,IAAI,CAACW,QAAQ,CAAC,CAAC,CAACf,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;MACrD,MAAMe,CAAC,GAAGZ,IAAI,CAACa,UAAU,CAAC,CAAC,CAACjB,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;MACvD,OAAO,GAAGa,CAAC,IAAIE,CAAC,EAAE;IACpB;;IAEA;IACA;IACA;IACA;;IAEA;IACA,MAAME,CAAC,GAAGd,IAAI,CAACQ,OAAO,CAAC,CAAC,CAACZ,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACpD,MAAMkB,EAAE,GAAG,CAACf,IAAI,CAACO,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAEX,QAAQ,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAC5D,OAAO,GAAGiB,CAAC,IAAIC,EAAE,EAAE;EACrB,CAAC,CAAC,MAAM;IACN,OAAO,EAAE;EACX;AACF,CAAC;AAED,OAAO,MAAMC,oBAAoB,GAAIjB,EAA0B,IAAa;EAC1E,IAAI,CAACA,EAAE,EAAE,OAAO,EAAE;EAElB,MAAMC,IAAI,GAAGd,KAAK,CAACa,EAAE,CAAC,CAACkB,MAAM,CAAC,IAAI,CAAC;EACnC,IAAI,CAACjB,IAAI,CAACkB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE;EAE9B,OAAOlB,IAAI,CAACmB,OAAO,CAAC,CAAC;AACvB,CAAC","ignoreList":[]}
@@ -1,9 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ // Strips Vietnamese diacritics one base-character-at-a-time (NFD decomposition +
4
+ // combining-mark removal, plus đ/Đ which NFD doesn't decompose) so the result stays
5
+ // the same length and index-aligned with the input
6
+ const stripDiacritics = input => input.normalize('NFD').replace(/[\u0300-\u036f]/g, '').replace(/đ/g, 'd').replace(/Đ/g, 'D');
3
7
  export const highlightSearch = (text, keyword, maxLength = 30) => {
4
8
  if (!keyword) return null;
5
- const lowerText = text.toLowerCase();
6
- const lowerKeyword = keyword.toLowerCase();
9
+ const lowerText = stripDiacritics(text.toLowerCase());
10
+ const lowerKeyword = stripDiacritics(keyword.toLowerCase());
7
11
  const index = lowerText.indexOf(lowerKeyword);
8
12
  if (index === -1) return null;
9
13
  const before = text.slice(0, index);
@@ -1 +1 @@
1
- {"version":3,"names":["highlightSearch","text","keyword","maxLength","lowerText","toLowerCase","lowerKeyword","index","indexOf","before","slice","match","length","after","remain","left","Math","floor","right","displayedBefore","displayedAfter"],"sourceRoot":"../../../src","sources":["utils/highlightSearch.ts"],"mappings":";;AAMA,OAAO,MAAMA,eAAe,GAAGA,CAC7BC,IAAY,EACZC,OAAe,EACfC,SAAS,GAAG,EAAE,KACa;EAC3B,IAAI,CAACD,OAAO,EAAE,OAAO,IAAI;EAEzB,MAAME,SAAS,GAAGH,IAAI,CAACI,WAAW,CAAC,CAAC;EACpC,MAAMC,YAAY,GAAGJ,OAAO,CAACG,WAAW,CAAC,CAAC;EAC1C,MAAME,KAAK,GAAGH,SAAS,CAACI,OAAO,CAACF,YAAY,CAAC;EAE7C,IAAIC,KAAK,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI;EAE7B,MAAME,MAAM,GAAGR,IAAI,CAACS,KAAK,CAAC,CAAC,EAAEH,KAAK,CAAC;EACnC,MAAMI,KAAK,GAAGV,IAAI,CAACS,KAAK,CAACH,KAAK,EAAEA,KAAK,GAAGL,OAAO,CAACU,MAAM,CAAC;EACvD,MAAMC,KAAK,GAAGZ,IAAI,CAACS,KAAK,CAACH,KAAK,GAAGL,OAAO,CAACU,MAAM,CAAC;EAEhD,IAAIV,OAAO,CAACU,MAAM,IAAIT,SAAS,EAAE;IAC/B,OAAO;MAAEM,MAAM,EAAE,EAAE;MAAEE,KAAK,EAAEA,KAAK,CAACD,KAAK,CAAC,CAAC,EAAEP,SAAS,CAAC;MAAEU,KAAK,EAAE;IAAG,CAAC;EACpE;EAEA,MAAMC,MAAM,GAAGX,SAAS,GAAGQ,KAAK,CAACC,MAAM;EACvC,IAAIG,IAAI,GAAGC,IAAI,CAACC,KAAK,CAACH,MAAM,GAAG,CAAC,CAAC;EACjC,IAAII,KAAK,GAAGJ,MAAM,GAAGC,IAAI;EAEzB,IAAIN,MAAM,CAACG,MAAM,GAAGG,IAAI,EAAE;IACxBG,KAAK,IAAIH,IAAI,GAAGN,MAAM,CAACG,MAAM;IAC7BG,IAAI,GAAGN,MAAM,CAACG,MAAM;EACtB;EAEA,IAAIC,KAAK,CAACD,MAAM,GAAGM,KAAK,EAAE;IACxBH,IAAI,IAAIG,KAAK,GAAGL,KAAK,CAACD,MAAM;IAC5BM,KAAK,GAAGL,KAAK,CAACD,MAAM;EACtB;EAEA,MAAMO,eAAe,GACnBV,MAAM,CAACG,MAAM,GAAGG,IAAI,GAAG,GAAG,GAAGN,MAAM,CAACC,KAAK,CAACD,MAAM,CAACG,MAAM,GAAGG,IAAI,CAAC,GAAGN,MAAM;EAC1E,MAAMW,cAAc,GAClBP,KAAK,CAACD,MAAM,GAAGM,KAAK,GAAGL,KAAK,CAACH,KAAK,CAAC,CAAC,EAAEQ,KAAK,CAAC,GAAG,GAAG,GAAGL,KAAK;EAE5D,OAAO;IAAEJ,MAAM,EAAEU,eAAe;IAAER,KAAK;IAAEE,KAAK,EAAEO;EAAe,CAAC;AAClE,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["stripDiacritics","input","normalize","replace","highlightSearch","text","keyword","maxLength","lowerText","toLowerCase","lowerKeyword","index","indexOf","before","slice","match","length","after","remain","left","Math","floor","right","displayedBefore","displayedAfter"],"sourceRoot":"../../../src","sources":["utils/highlightSearch.ts"],"mappings":";;AAMA;AACA;AACA;AACA,MAAMA,eAAe,GAAIC,KAAa,IACpCA,KAAK,CACFC,SAAS,CAAC,KAAK,CAAC,CAChBC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAC/BA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAClBA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAEvB,OAAO,MAAMC,eAAe,GAAGA,CAC7BC,IAAY,EACZC,OAAe,EACfC,SAAS,GAAG,EAAE,KACa;EAC3B,IAAI,CAACD,OAAO,EAAE,OAAO,IAAI;EAEzB,MAAME,SAAS,GAAGR,eAAe,CAACK,IAAI,CAACI,WAAW,CAAC,CAAC,CAAC;EACrD,MAAMC,YAAY,GAAGV,eAAe,CAACM,OAAO,CAACG,WAAW,CAAC,CAAC,CAAC;EAC3D,MAAME,KAAK,GAAGH,SAAS,CAACI,OAAO,CAACF,YAAY,CAAC;EAE7C,IAAIC,KAAK,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI;EAE7B,MAAME,MAAM,GAAGR,IAAI,CAACS,KAAK,CAAC,CAAC,EAAEH,KAAK,CAAC;EACnC,MAAMI,KAAK,GAAGV,IAAI,CAACS,KAAK,CAACH,KAAK,EAAEA,KAAK,GAAGL,OAAO,CAACU,MAAM,CAAC;EACvD,MAAMC,KAAK,GAAGZ,IAAI,CAACS,KAAK,CAACH,KAAK,GAAGL,OAAO,CAACU,MAAM,CAAC;EAEhD,IAAIV,OAAO,CAACU,MAAM,IAAIT,SAAS,EAAE;IAC/B,OAAO;MAAEM,MAAM,EAAE,EAAE;MAAEE,KAAK,EAAEA,KAAK,CAACD,KAAK,CAAC,CAAC,EAAEP,SAAS,CAAC;MAAEU,KAAK,EAAE;IAAG,CAAC;EACpE;EAEA,MAAMC,MAAM,GAAGX,SAAS,GAAGQ,KAAK,CAACC,MAAM;EACvC,IAAIG,IAAI,GAAGC,IAAI,CAACC,KAAK,CAACH,MAAM,GAAG,CAAC,CAAC;EACjC,IAAII,KAAK,GAAGJ,MAAM,GAAGC,IAAI;EAEzB,IAAIN,MAAM,CAACG,MAAM,GAAGG,IAAI,EAAE;IACxBG,KAAK,IAAIH,IAAI,GAAGN,MAAM,CAACG,MAAM;IAC7BG,IAAI,GAAGN,MAAM,CAACG,MAAM;EACtB;EAEA,IAAIC,KAAK,CAACD,MAAM,GAAGM,KAAK,EAAE;IACxBH,IAAI,IAAIG,KAAK,GAAGL,KAAK,CAACD,MAAM;IAC5BM,KAAK,GAAGL,KAAK,CAACD,MAAM;EACtB;EAEA,MAAMO,eAAe,GACnBV,MAAM,CAACG,MAAM,GAAGG,IAAI,GAAG,GAAG,GAAGN,MAAM,CAACC,KAAK,CAACD,MAAM,CAACG,MAAM,GAAGG,IAAI,CAAC,GAAGN,MAAM;EAC1E,MAAMW,cAAc,GAClBP,KAAK,CAACD,MAAM,GAAGM,KAAK,GAAGL,KAAK,CAACH,KAAK,CAAC,CAAC,EAAEQ,KAAK,CAAC,GAAG,GAAG,GAAGL,KAAK;EAE5D,OAAO;IAAEJ,MAAM,EAAEU,eAAe;IAAER,KAAK;IAAEE,KAAK,EAAEO;EAAe,CAAC;AAClE,CAAC","ignoreList":[]}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+
3
+ /** Composer-internal marker for the "Tất cả" suggestion row / a committed
4
+ * "tag everyone" Mention — never sent on the wire, see AT_ALL_TAG below. */
5
+ export const ALL_MEMBERS_USER_ID = 'ALL';
6
+
7
+ /**
8
+ * OpenIM's own protocol sentinel for "everyone in the group", used inside
9
+ * atUserIDList in place of enumerating every member. Confirmed against
10
+ * openimsdk-core (pkg/constant/constant.go:242 — `AtAllString = "AtAllTag"`,
11
+ * exposed client-side as `GetAtAllTag()`) and openim-server's group-message
12
+ * send path (internal/rpc/msg/send.go's `setConversationAtInfo`), which
13
+ * special-cases exactly this string and does the "who is everyone right
14
+ * now" resolution itself, server-side.
15
+ *
16
+ * This is why "Tất cả" must serialize to this one token instead of
17
+ * expanding to every resolved member's userID client-side (the previous
18
+ * approach): the Go core's CreateTextAtMessage hard-rejects any
19
+ * atUserIDList longer than 10 entries regardless of group size
20
+ * (openimsdk-core/internal/conversation_msg/create_message.go:80-82) — a
21
+ * >10-member group's "Tất cả" silently failed to send at all. Sending just
22
+ * `[AT_ALL_TAG]` keeps atUserIDList small no matter the group size, and is
23
+ * also the behavior the protocol actually expects.
24
+ */
25
+ export const AT_ALL_TAG = 'AtAllTag';
26
+
27
+ /**
28
+ * OpenIM's Go core hard-rejects any AtMsgParams.atUserIDList longer than
29
+ * this (openimsdk-core/internal/conversation_msg/create_message.go:80-82,
30
+ * `if len(userIDList) > 10 { return nil, sdkerrs.ErrArgs }`) — not
31
+ * adjustable client-side. "Tất cả" no longer risks this (see AT_ALL_TAG),
32
+ * but tagging more than 10 *individual* members in one message still
33
+ * would, so serializeMentionsForSend caps atUserIDList/atUsersInfo at this
34
+ * count (keeping the first MAX_AT_USER_COUNT, in mention order) rather
35
+ * than letting the send fail outright the way "Tất cả" used to.
36
+ */
37
+ export const MAX_AT_USER_COUNT = 10;
38
+ /**
39
+ * Translates the composer's Mention[] (client-side ranges) into OpenIM's
40
+ * wire shapes for createTextAtMessage, plus our own ex.mentions channel. No
41
+ * group-member resolution needed here (or by the caller) any more — see
42
+ * AT_ALL_TAG's doc comment for why a "Tất cả" mention maps to that single
43
+ * sentinel rather than a per-member list.
44
+ */
45
+ export function serializeMentionsForSend(mentions) {
46
+ const wireUserId = m => m.userId === ALL_MEMBERS_USER_ID ? AT_ALL_TAG : m.userId;
47
+ const exMentions = mentions.map(m => ({
48
+ userID: wireUserId(m),
49
+ offset: m.start,
50
+ length: m.end - m.start
51
+ }));
52
+
53
+ // Map dedupes by userID — e.g. "Tất cả" and an individually-tagged member
54
+ // both present in the same message only produce one atUserIDList entry
55
+ // each, not duplicates. Insertion order == mention order, which is what
56
+ // makes "keep the first MAX_AT_USER_COUNT" below well-defined.
57
+ const nicknameByUserId = new Map();
58
+ for (const m of mentions) {
59
+ nicknameByUserId.set(wireUserId(m), m.displayName);
60
+ }
61
+ const allEntries = [...nicknameByUserId.entries()];
62
+ const truncated = allEntries.length > MAX_AT_USER_COUNT;
63
+ const cappedEntries = truncated ? allEntries.slice(0, MAX_AT_USER_COUNT) : allEntries;
64
+ return {
65
+ atUserIDList: cappedEntries.map(([atUserID]) => atUserID),
66
+ atUsersInfo: cappedEntries.map(([atUserID, groupNickname]) => ({
67
+ atUserID,
68
+ groupNickname
69
+ })),
70
+ exMentions,
71
+ truncated
72
+ };
73
+ }
74
+ /**
75
+ * Reverse of serializeMentionsForSend, for rendering a received/sent
76
+ * AtTextMessage (Phase B3). Prefers `exMentions` (exact, our own channel);
77
+ * falls back to searching `atTextElem.text` for "@{groupNickname}" per
78
+ * atUsersInfo entry when ex is absent — an interop safety net, not the
79
+ * primary path. The fallback is inherently ambiguous if a member's
80
+ * nickname coincidentally appears elsewhere in the message as plain text;
81
+ * accepted as a known, documented limitation (see the mention plan's
82
+ * finding #3) rather than something client code can fully resolve without
83
+ * position data from the protocol.
84
+ */
85
+ export function deserializeMentionRanges(atTextElem, exMentions) {
86
+ if (exMentions && exMentions.length > 0) {
87
+ return exMentions.map((e, index) => ({
88
+ id: `${e.userID}-${e.offset}-${index}`,
89
+ userId: e.userID,
90
+ displayName: atTextElem.text.slice(e.offset, e.offset + e.length).replace(/^@/, ''),
91
+ start: e.offset,
92
+ end: e.offset + e.length
93
+ }));
94
+ }
95
+ const nicknameByUserId = new Map((atTextElem.atUsersInfo ?? []).map(i => [i.atUserID, i.groupNickname]));
96
+ const mentions = [];
97
+ for (const userId of atTextElem.atUserList) {
98
+ const nickname = nicknameByUserId.get(userId);
99
+ if (!nickname) continue;
100
+ const needle = `@${nickname}`;
101
+ const start = atTextElem.text.indexOf(needle);
102
+ if (start === -1) continue;
103
+ mentions.push({
104
+ id: `${userId}-${start}`,
105
+ userId,
106
+ displayName: nickname,
107
+ start,
108
+ end: start + needle.length
109
+ });
110
+ }
111
+ return mentions;
112
+ }
113
+ //# sourceMappingURL=mentionSerializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ALL_MEMBERS_USER_ID","AT_ALL_TAG","MAX_AT_USER_COUNT","serializeMentionsForSend","mentions","wireUserId","m","userId","exMentions","map","userID","offset","start","length","end","nicknameByUserId","Map","set","displayName","allEntries","entries","truncated","cappedEntries","slice","atUserIDList","atUserID","atUsersInfo","groupNickname","deserializeMentionRanges","atTextElem","e","index","id","text","replace","i","atUserList","nickname","get","needle","indexOf","push"],"sourceRoot":"../../../src","sources":["utils/mentionSerializer.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ export { findActiveMention } from "./mentionDetector.js";
4
+ export { diffTextChange, snapBoundary } from "./mentionDiff.js";
5
+ export { insertMention, reconcileMentions, normalizeDeleteRange, applyTextChange } from "./mentionRange.js";
6
+ export { tokenize } from "./mentionTokenize.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["findActiveMention","diffTextChange","snapBoundary","insertMention","reconcileMentions","normalizeDeleteRange","applyTextChange","tokenize"],"sourceRoot":"../../../../src","sources":["utils/mentions/index.ts"],"mappings":";;AAAA,SAASA,iBAAiB,QAAQ,sBAAmB;AACrD,SACEC,cAAc,EACdC,YAAY,QAEP,kBAAe;AACtB,SACEC,aAAa,EACbC,iBAAiB,EACjBC,oBAAoB,EACpBC,eAAe,QAIV,mBAAgB;AACvB,SAASC,QAAQ,QAAsB,sBAAmB","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ // No realistic @query is longer than this — caps the backward scan so the
4
+ // common case (cursor nowhere near an '@') bails in O(word length), not
5
+ // O(text length).
6
+ const MAX_ACTIVE_MENTION_SCAN = 64;
7
+ const isBoundaryChar = ch => /\s/.test(ch);
8
+
9
+ /**
10
+ * Scans backward from `cursor` for an unclosed "@query" — the in-progress
11
+ * trigger that drives the suggestion list, not a committed mention.
12
+ *
13
+ * Only called for a collapsed cursor (selection.start === selection.end);
14
+ * the caller must resolve a range selection to `null` before calling this —
15
+ * a live "@query" only makes sense at a single insertion point.
16
+ *
17
+ * "@" itself counts as a boundary: the scan stops there whether or not it's
18
+ * a valid trigger, which is what prevents re-scanning back through an
19
+ * already-committed mention's "@Name " when the user starts typing a second
20
+ * "@" right after it (insertMention always appends a trailing space, a
21
+ * boundary char, so the previous mention's "@" is never reachable from the
22
+ * new query).
23
+ */
24
+ export function findActiveMention(text, cursor) {
25
+ if (cursor <= 0 || cursor > text.length) return null;
26
+ let i = cursor;
27
+ let scanned = 0;
28
+ while (i > 0 && scanned < MAX_ACTIVE_MENTION_SCAN) {
29
+ const ch = text[i - 1];
30
+ if (ch === '@') {
31
+ const before = i - 2 >= 0 ? text[i - 2] : undefined;
32
+ if (before === undefined || isBoundaryChar(before)) {
33
+ return {
34
+ trigger: '@',
35
+ start: i - 1,
36
+ end: cursor,
37
+ keyword: text.slice(i, cursor)
38
+ };
39
+ }
40
+ // '@' present but not at a valid boundary (e.g. "user@domain") — not a trigger.
41
+ return null;
42
+ }
43
+ if (isBoundaryChar(ch)) return null;
44
+ i--;
45
+ scanned++;
46
+ }
47
+ return null;
48
+ }
49
+ //# sourceMappingURL=mentionDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MAX_ACTIVE_MENTION_SCAN","isBoundaryChar","ch","test","findActiveMention","text","cursor","length","i","scanned","before","undefined","trigger","start","end","keyword","slice"],"sourceRoot":"../../../../src","sources":["utils/mentions/mentionDetector.ts"],"mappings":";;AAEA;AACA;AACA;AACA,MAAMA,uBAAuB,GAAG,EAAE;AAElC,MAAMC,cAAc,GAAIC,EAAU,IAAK,IAAI,CAACC,IAAI,CAACD,EAAE,CAAC;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,iBAAiBA,CAC/BC,IAAY,EACZC,MAAc,EACQ;EACtB,IAAIA,MAAM,IAAI,CAAC,IAAIA,MAAM,GAAGD,IAAI,CAACE,MAAM,EAAE,OAAO,IAAI;EAEpD,IAAIC,CAAC,GAAGF,MAAM;EACd,IAAIG,OAAO,GAAG,CAAC;EAEf,OAAOD,CAAC,GAAG,CAAC,IAAIC,OAAO,GAAGT,uBAAuB,EAAE;IACjD,MAAME,EAAE,GAAGG,IAAI,CAACG,CAAC,GAAG,CAAC,CAAW;IAEhC,IAAIN,EAAE,KAAK,GAAG,EAAE;MACd,MAAMQ,MAAM,GAAGF,CAAC,GAAG,CAAC,IAAI,CAAC,GAAGH,IAAI,CAACG,CAAC,GAAG,CAAC,CAAC,GAAGG,SAAS;MACnD,IAAID,MAAM,KAAKC,SAAS,IAAIV,cAAc,CAACS,MAAM,CAAC,EAAE;QAClD,OAAO;UACLE,OAAO,EAAE,GAAG;UACZC,KAAK,EAAEL,CAAC,GAAG,CAAC;UACZM,GAAG,EAAER,MAAM;UACXS,OAAO,EAAEV,IAAI,CAACW,KAAK,CAACR,CAAC,EAAEF,MAAM;QAC/B,CAAC;MACH;MACA;MACA,OAAO,IAAI;IACb;IAEA,IAAIL,cAAc,CAACC,EAAE,CAAC,EAAE,OAAO,IAAI;IAEnCM,CAAC,EAAE;IACHC,OAAO,EAAE;EACX;EAEA,OAAO,IAAI;AACb","ignoreList":[]}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ // RN's onChangeText hands over only the new full string — no delta, no
4
+ // info about what was inserted/deleted/replaced. A common-prefix +
5
+ // common-suffix scan is the only viable way to localize the changed region,
6
+ // and it's IME-safe for free: a Vietnamese diacritic recomposition (e.g.
7
+ // "tie" + accent key -> "tiế") is just "two different strings" to this
8
+ // algorithm, not a keystroke sequence it has to track.
9
+ //
10
+ // Assumes exactly one contiguous edit happened between the two strings —
11
+ // true for every realistic single-field mutation (typing, backspace,
12
+ // paste, autocorrect, IME composition). If that assumption is ever wrong
13
+ // (some exotic keyboard rewriting two disjoint spans in one event), the
14
+ // failure mode is safe-by-default: the computed region is a superset of
15
+ // the true edits, so callers may over-invalidate mention ranges but never
16
+ // corrupt them.
17
+
18
+ const isHighSurrogate = code => code >= 0xd800 && code <= 0xdbff;
19
+ const isLowSurrogate = code => code >= 0xdc00 && code <= 0xdfff;
20
+
21
+ /**
22
+ * Snaps `index` so it never sits between a surrogate pair in `str` —
23
+ * without this, diffing e.g. "😀" vs "😁" (which differ only in their low
24
+ * surrogate) would compute a boundary that bisects the emoji. Snapping
25
+ * always shrinks the "common" region (treats one more code point as
26
+ * "changed"), which is always safe: being more conservative about what
27
+ * counts as touched only ever produces more mention-invalidation upstream,
28
+ * never corruption.
29
+ */
30
+ export function snapBoundary(str, index, direction) {
31
+ if (index > 0 && index < str.length && isHighSurrogate(str.charCodeAt(index - 1)) && isLowSurrogate(str.charCodeAt(index))) {
32
+ return index + direction;
33
+ }
34
+ return index;
35
+ }
36
+ export function diffTextChange(previousText, nextText) {
37
+ const prevLen = previousText.length;
38
+ const nextLen = nextText.length;
39
+ const maxCommon = Math.min(prevLen, nextLen);
40
+ let prefixLen = 0;
41
+ while (prefixLen < maxCommon && previousText.charCodeAt(prefixLen) === nextText.charCodeAt(prefixLen)) {
42
+ prefixLen++;
43
+ }
44
+ prefixLen = snapBoundary(previousText, prefixLen, -1);
45
+
46
+ // Clamp the suffix scan budget against what's left after the prefix —
47
+ // without this, a naive independent prefix+suffix scan can overlap on
48
+ // repeated-character edits (e.g. "aaa" -> "aaaa") and produce a
49
+ // negative-length "changed" region.
50
+ const maxSuffix = maxCommon - prefixLen;
51
+ let suffixLen = 0;
52
+ while (suffixLen < maxSuffix && previousText.charCodeAt(prevLen - 1 - suffixLen) === nextText.charCodeAt(nextLen - 1 - suffixLen)) {
53
+ suffixLen++;
54
+ }
55
+ let removedEnd = prevLen - suffixLen;
56
+ let insertedEnd = nextLen - suffixLen;
57
+ removedEnd = snapBoundary(previousText, removedEnd, 1);
58
+ insertedEnd = snapBoundary(nextText, insertedEnd, 1);
59
+ return {
60
+ removedStart: prefixLen,
61
+ removedEnd,
62
+ insertedStart: prefixLen,
63
+ insertedEnd
64
+ };
65
+ }
66
+ //# sourceMappingURL=mentionDiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isHighSurrogate","code","isLowSurrogate","snapBoundary","str","index","direction","length","charCodeAt","diffTextChange","previousText","nextText","prevLen","nextLen","maxCommon","Math","min","prefixLen","maxSuffix","suffixLen","removedEnd","insertedEnd","removedStart","insertedStart"],"sourceRoot":"../../../../src","sources":["utils/mentions/mentionDiff.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,eAAe,GAAIC,IAAY,IAAKA,IAAI,IAAI,MAAM,IAAIA,IAAI,IAAI,MAAM;AAC1E,MAAMC,cAAc,GAAID,IAAY,IAAKA,IAAI,IAAI,MAAM,IAAIA,IAAI,IAAI,MAAM;;AAEzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,YAAYA,CAC1BC,GAAW,EACXC,KAAa,EACbC,SAAiB,EACT;EACR,IACED,KAAK,GAAG,CAAC,IACTA,KAAK,GAAGD,GAAG,CAACG,MAAM,IAClBP,eAAe,CAACI,GAAG,CAACI,UAAU,CAACH,KAAK,GAAG,CAAC,CAAC,CAAC,IAC1CH,cAAc,CAACE,GAAG,CAACI,UAAU,CAACH,KAAK,CAAC,CAAC,EACrC;IACA,OAAOA,KAAK,GAAGC,SAAS;EAC1B;EACA,OAAOD,KAAK;AACd;AAWA,OAAO,SAASI,cAAcA,CAC5BC,YAAoB,EACpBC,QAAgB,EACA;EAChB,MAAMC,OAAO,GAAGF,YAAY,CAACH,MAAM;EACnC,MAAMM,OAAO,GAAGF,QAAQ,CAACJ,MAAM;EAC/B,MAAMO,SAAS,GAAGC,IAAI,CAACC,GAAG,CAACJ,OAAO,EAAEC,OAAO,CAAC;EAE5C,IAAII,SAAS,GAAG,CAAC;EACjB,OACEA,SAAS,GAAGH,SAAS,IACrBJ,YAAY,CAACF,UAAU,CAACS,SAAS,CAAC,KAAKN,QAAQ,CAACH,UAAU,CAACS,SAAS,CAAC,EACrE;IACAA,SAAS,EAAE;EACb;EACAA,SAAS,GAAGd,YAAY,CAACO,YAAY,EAAEO,SAAS,EAAE,CAAC,CAAC,CAAC;;EAErD;EACA;EACA;EACA;EACA,MAAMC,SAAS,GAAGJ,SAAS,GAAGG,SAAS;EACvC,IAAIE,SAAS,GAAG,CAAC;EACjB,OACEA,SAAS,GAAGD,SAAS,IACrBR,YAAY,CAACF,UAAU,CAACI,OAAO,GAAG,CAAC,GAAGO,SAAS,CAAC,KAC9CR,QAAQ,CAACH,UAAU,CAACK,OAAO,GAAG,CAAC,GAAGM,SAAS,CAAC,EAC9C;IACAA,SAAS,EAAE;EACb;EAEA,IAAIC,UAAU,GAAGR,OAAO,GAAGO,SAAS;EACpC,IAAIE,WAAW,GAAGR,OAAO,GAAGM,SAAS;EACrCC,UAAU,GAAGjB,YAAY,CAACO,YAAY,EAAEU,UAAU,EAAE,CAAC,CAAC;EACtDC,WAAW,GAAGlB,YAAY,CAACQ,QAAQ,EAAEU,WAAW,EAAE,CAAC,CAAC;EAEpD,OAAO;IACLC,YAAY,EAAEL,SAAS;IACvBG,UAAU;IACVG,aAAa,EAAEN,SAAS;IACxBI;EACF,CAAC;AACH","ignoreList":[]}