@droppii-org/chat-mobile 0.2.81 → 0.2.83

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 (175) 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 +49 -92
  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/quotedMessage/index.js +79 -55
  12. package/lib/module/components/messages/quotedMessage/index.js.map +1 -1
  13. package/lib/module/components/messages/stickerMessage/index.js +38 -13
  14. package/lib/module/components/messages/stickerMessage/index.js.map +1 -1
  15. package/lib/module/components/messages/textMessage/index.js +126 -13
  16. package/lib/module/components/messages/textMessage/index.js.map +1 -1
  17. package/lib/module/components/messages/types.js.map +1 -1
  18. package/lib/module/core/useChatListener.js +1 -1
  19. package/lib/module/core/useChatListener.js.map +1 -1
  20. package/lib/module/hooks/message/useSendMessage.js +64 -3
  21. package/lib/module/hooks/message/useSendMessage.js.map +1 -1
  22. package/lib/module/hooks/query-keys.js +4 -0
  23. package/lib/module/hooks/query-keys.js.map +1 -1
  24. package/lib/module/hooks/useChatCompose.js +3 -2
  25. package/lib/module/hooks/useChatCompose.js.map +1 -1
  26. package/lib/module/screens/chat-detail/ChatComposer.js +170 -48
  27. package/lib/module/screens/chat-detail/ChatComposer.js.map +1 -1
  28. package/lib/module/screens/chat-detail/ChatListLegend.js +16 -7
  29. package/lib/module/screens/chat-detail/ChatListLegend.js.map +1 -1
  30. package/lib/module/screens/chat-detail/components/ChatMessageInput.js +23 -2
  31. package/lib/module/screens/chat-detail/components/ChatMessageInput.js.map +1 -1
  32. package/lib/module/screens/chat-detail/components/MentionHighlightAdapter.js +51 -0
  33. package/lib/module/screens/chat-detail/components/MentionHighlightAdapter.js.map +1 -0
  34. package/lib/module/screens/chat-detail/components/MentionSuggestionItem.js +49 -0
  35. package/lib/module/screens/chat-detail/components/MentionSuggestionItem.js.map +1 -0
  36. package/lib/module/screens/chat-detail/components/MentionSuggestionList.js +114 -0
  37. package/lib/module/screens/chat-detail/components/MentionSuggestionList.js.map +1 -0
  38. package/lib/module/screens/chat-detail/hooks/useChatComposerState.js +8 -0
  39. package/lib/module/screens/chat-detail/hooks/useChatComposerState.js.map +1 -1
  40. package/lib/module/screens/chat-detail/hooks/useMentionComposer.js +251 -0
  41. package/lib/module/screens/chat-detail/hooks/useMentionComposer.js.map +1 -0
  42. package/lib/module/screens/chat-detail/legend/LegendChatDay.js +4 -9
  43. package/lib/module/screens/chat-detail/legend/LegendChatDay.js.map +1 -1
  44. package/lib/module/screens/chat-detail/legend/LegendChatMessage.js +14 -2
  45. package/lib/module/screens/chat-detail/legend/LegendChatMessage.js.map +1 -1
  46. package/lib/module/services/mentionSearch.js +49 -0
  47. package/lib/module/services/mentionSearch.js.map +1 -0
  48. package/lib/module/services/message.js +6 -1
  49. package/lib/module/services/message.js.map +1 -1
  50. package/lib/module/translation/resources/i18n.js +5 -0
  51. package/lib/module/translation/resources/i18n.js.map +1 -1
  52. package/lib/module/types/chat.js.map +1 -1
  53. package/lib/module/types/mention.js +2 -0
  54. package/lib/module/types/mention.js.map +1 -0
  55. package/lib/module/utils/legendListMessage.js +9 -1
  56. package/lib/module/utils/legendListMessage.js.map +1 -1
  57. package/lib/module/utils/mentionSerializer.js +113 -0
  58. package/lib/module/utils/mentionSerializer.js.map +1 -0
  59. package/lib/module/utils/mentions/index.js +7 -0
  60. package/lib/module/utils/mentions/index.js.map +1 -0
  61. package/lib/module/utils/mentions/mentionDetector.js +49 -0
  62. package/lib/module/utils/mentions/mentionDetector.js.map +1 -0
  63. package/lib/module/utils/mentions/mentionDiff.js +66 -0
  64. package/lib/module/utils/mentions/mentionDiff.js.map +1 -0
  65. package/lib/module/utils/mentions/mentionRange.js +188 -0
  66. package/lib/module/utils/mentions/mentionRange.js.map +1 -0
  67. package/lib/module/utils/mentions/mentionTokenize.js +50 -0
  68. package/lib/module/utils/mentions/mentionTokenize.js.map +1 -0
  69. package/lib/module/utils/messageUtils.js +6 -1
  70. package/lib/module/utils/messageUtils.js.map +1 -1
  71. package/lib/module/utils/url.js +33 -0
  72. package/lib/module/utils/url.js.map +1 -1
  73. package/lib/typescript/src/components/ThreadCard/MentionBadge.d.ts +7 -0
  74. package/lib/typescript/src/components/ThreadCard/MentionBadge.d.ts.map +1 -0
  75. package/lib/typescript/src/components/ThreadCard/ThreadCard.d.ts.map +1 -1
  76. package/lib/typescript/src/components/messages/linkMessage/LinkPreviewCard.d.ts +16 -0
  77. package/lib/typescript/src/components/messages/linkMessage/LinkPreviewCard.d.ts.map +1 -0
  78. package/lib/typescript/src/components/messages/linkMessage/index.d.ts +2 -2
  79. package/lib/typescript/src/components/messages/linkMessage/index.d.ts.map +1 -1
  80. package/lib/typescript/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.d.ts +13 -0
  81. package/lib/typescript/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.d.ts.map +1 -0
  82. package/lib/typescript/src/components/messages/quotedMessage/index.d.ts.map +1 -1
  83. package/lib/typescript/src/components/messages/stickerMessage/index.d.ts +2 -2
  84. package/lib/typescript/src/components/messages/stickerMessage/index.d.ts.map +1 -1
  85. package/lib/typescript/src/components/messages/textMessage/index.d.ts +4 -2
  86. package/lib/typescript/src/components/messages/textMessage/index.d.ts.map +1 -1
  87. package/lib/typescript/src/components/messages/types.d.ts +1 -0
  88. package/lib/typescript/src/components/messages/types.d.ts.map +1 -1
  89. package/lib/typescript/src/hooks/message/useSendMessage.d.ts +5 -2
  90. package/lib/typescript/src/hooks/message/useSendMessage.d.ts.map +1 -1
  91. package/lib/typescript/src/hooks/query-keys.d.ts +4 -0
  92. package/lib/typescript/src/hooks/query-keys.d.ts.map +1 -1
  93. package/lib/typescript/src/hooks/useChatCompose.d.ts +2 -1
  94. package/lib/typescript/src/hooks/useChatCompose.d.ts.map +1 -1
  95. package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts.map +1 -1
  96. package/lib/typescript/src/screens/chat-detail/ChatListLegend.d.ts.map +1 -1
  97. package/lib/typescript/src/screens/chat-detail/components/ChatMessageInput.d.ts +10 -2
  98. package/lib/typescript/src/screens/chat-detail/components/ChatMessageInput.d.ts.map +1 -1
  99. package/lib/typescript/src/screens/chat-detail/components/MentionHighlightAdapter.d.ts +29 -0
  100. package/lib/typescript/src/screens/chat-detail/components/MentionHighlightAdapter.d.ts.map +1 -0
  101. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionItem.d.ts +8 -0
  102. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionItem.d.ts.map +1 -0
  103. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionList.d.ts +12 -0
  104. package/lib/typescript/src/screens/chat-detail/components/MentionSuggestionList.d.ts.map +1 -0
  105. package/lib/typescript/src/screens/chat-detail/hooks/useChatComposerState.d.ts +1 -1
  106. package/lib/typescript/src/screens/chat-detail/hooks/useChatComposerState.d.ts.map +1 -1
  107. package/lib/typescript/src/screens/chat-detail/hooks/useMentionComposer.d.ts +48 -0
  108. package/lib/typescript/src/screens/chat-detail/hooks/useMentionComposer.d.ts.map +1 -0
  109. package/lib/typescript/src/screens/chat-detail/legend/LegendChatDay.d.ts.map +1 -1
  110. package/lib/typescript/src/screens/chat-detail/legend/LegendChatMessage.d.ts +2 -1
  111. package/lib/typescript/src/screens/chat-detail/legend/LegendChatMessage.d.ts.map +1 -1
  112. package/lib/typescript/src/services/mentionSearch.d.ts +15 -0
  113. package/lib/typescript/src/services/mentionSearch.d.ts.map +1 -0
  114. package/lib/typescript/src/services/message.d.ts +1 -1
  115. package/lib/typescript/src/services/message.d.ts.map +1 -1
  116. package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -1
  117. package/lib/typescript/src/types/chat.d.ts +23 -0
  118. package/lib/typescript/src/types/chat.d.ts.map +1 -1
  119. package/lib/typescript/src/types/mention.d.ts +65 -0
  120. package/lib/typescript/src/types/mention.d.ts.map +1 -0
  121. package/lib/typescript/src/utils/legendListMessage.d.ts +4 -3
  122. package/lib/typescript/src/utils/legendListMessage.d.ts.map +1 -1
  123. package/lib/typescript/src/utils/mentionSerializer.d.ts +78 -0
  124. package/lib/typescript/src/utils/mentionSerializer.d.ts.map +1 -0
  125. package/lib/typescript/src/utils/mentions/index.d.ts +5 -0
  126. package/lib/typescript/src/utils/mentions/index.d.ts.map +1 -0
  127. package/lib/typescript/src/utils/mentions/mentionDetector.d.ts +18 -0
  128. package/lib/typescript/src/utils/mentions/mentionDetector.d.ts.map +1 -0
  129. package/lib/typescript/src/utils/mentions/mentionDiff.d.ts +20 -0
  130. package/lib/typescript/src/utils/mentions/mentionDiff.d.ts.map +1 -0
  131. package/lib/typescript/src/utils/mentions/mentionRange.d.ts +86 -0
  132. package/lib/typescript/src/utils/mentions/mentionRange.d.ts.map +1 -0
  133. package/lib/typescript/src/utils/mentions/mentionTokenize.d.ts +29 -0
  134. package/lib/typescript/src/utils/mentions/mentionTokenize.d.ts.map +1 -0
  135. package/lib/typescript/src/utils/messageUtils.d.ts.map +1 -1
  136. package/lib/typescript/src/utils/url.d.ts +12 -0
  137. package/lib/typescript/src/utils/url.d.ts.map +1 -1
  138. package/package.json +1 -1
  139. package/src/components/ThreadCard/MentionBadge.tsx +28 -0
  140. package/src/components/ThreadCard/ThreadCard.tsx +3 -0
  141. package/src/components/messages/linkMessage/LinkPreviewCard.tsx +92 -0
  142. package/src/components/messages/linkMessage/index.tsx +64 -121
  143. package/src/components/messages/quotedMessage/QuotedMessagePreviewStrip.tsx +168 -0
  144. package/src/components/messages/quotedMessage/index.tsx +95 -64
  145. package/src/components/messages/stickerMessage/index.tsx +40 -11
  146. package/src/components/messages/textMessage/index.tsx +159 -17
  147. package/src/components/messages/types.ts +1 -0
  148. package/src/core/useChatListener.ts +1 -1
  149. package/src/hooks/message/useSendMessage.ts +60 -1
  150. package/src/hooks/query-keys.ts +6 -0
  151. package/src/hooks/useChatCompose.ts +115 -107
  152. package/src/screens/chat-detail/ChatComposer.tsx +201 -67
  153. package/src/screens/chat-detail/ChatListLegend.tsx +19 -4
  154. package/src/screens/chat-detail/components/ChatMessageInput.tsx +35 -2
  155. package/src/screens/chat-detail/components/MentionHighlightAdapter.tsx +57 -0
  156. package/src/screens/chat-detail/components/MentionSuggestionItem.tsx +53 -0
  157. package/src/screens/chat-detail/components/MentionSuggestionList.tsx +133 -0
  158. package/src/screens/chat-detail/hooks/useChatComposerState.ts +7 -1
  159. package/src/screens/chat-detail/hooks/useMentionComposer.ts +344 -0
  160. package/src/screens/chat-detail/legend/LegendChatDay.tsx +6 -9
  161. package/src/screens/chat-detail/legend/LegendChatMessage.tsx +25 -2
  162. package/src/services/mentionSearch.ts +57 -0
  163. package/src/services/message.ts +9 -1
  164. package/src/translation/resources/i18n.ts +6 -0
  165. package/src/types/chat.ts +22 -0
  166. package/src/types/mention.ts +70 -0
  167. package/src/utils/legendListMessage.ts +13 -4
  168. package/src/utils/mentionSerializer.ts +155 -0
  169. package/src/utils/mentions/index.ts +16 -0
  170. package/src/utils/mentions/mentionDetector.ts +58 -0
  171. package/src/utils/mentions/mentionDiff.ts +95 -0
  172. package/src/utils/mentions/mentionRange.ts +207 -0
  173. package/src/utils/mentions/mentionTokenize.ts +53 -0
  174. package/src/utils/messageUtils.ts +6 -1
  175. package/src/utils/url.ts +30 -0
@@ -1,6 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  import { useState, useMemo, useRef } from 'react';
4
+
5
+ // 'mention' is used only for mutual-exclusion (closing attachment/sticker
6
+ // when the mention picker opens) — the mention picker itself renders as its
7
+ // own absolutely-positioned sibling in ChatComposer, not through this
8
+ // state's render slot, since it must float above the input while the
9
+ // keyboard stays open (attachment/sticker intentionally take over the
10
+ // keyboard area, which the mention picker must not do).
11
+
4
12
  export const useChatComposerState = value => {
5
13
  const [activePanelType, setActivePanelType] = useState(null);
6
14
  const [isAttachmentOpen, setIsAttachmentOpen] = useState(false);
@@ -1 +1 @@
1
- {"version":3,"names":["useState","useMemo","useRef","useChatComposerState","value","activePanelType","setActivePanelType","isAttachmentOpen","setIsAttachmentOpen","isInputFocused","setIsInputFocused","isInputWrapped","setIsInputWrapped","inputRef","isMultilineInput","includes"],"sourceRoot":"../../../../../src","sources":["screens/chat-detail/hooks/useChatComposerState.ts"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,OAAO,EAAEC,MAAM,QAAQ,OAAO;AAiBjD,OAAO,MAAMC,oBAAoB,GAC/BC,KAAa,IACkB;EAC/B,MAAM,CAACC,eAAe,EAAEC,kBAAkB,CAAC,GAAGN,QAAQ,CAAkB,IAAI,CAAC;EAC7E,MAAM,CAACO,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGR,QAAQ,CAAC,KAAK,CAAC;EAC/D,MAAM,CAACS,cAAc,EAAEC,iBAAiB,CAAC,GAAGV,QAAQ,CAAC,KAAK,CAAC;EAC3D,MAAM,CAACW,cAAc,EAAEC,iBAAiB,CAAC,GAAGZ,QAAQ,CAAC,KAAK,CAAC;EAC3D,MAAMa,QAAQ,GAAGX,MAAM,CAAM,IAAI,CAAC;EAElC,MAAMY,gBAAgB,GAAGb,OAAO,CAAC,MAAM;IACrC,IAAI,CAACG,KAAK,EAAE;MACV,OAAO,KAAK;IACd;IAEA,OAAOA,KAAK,CAACW,QAAQ,CAAC,IAAI,CAAC,IAAIJ,cAAc;EAC/C,CAAC,EAAE,CAACA,cAAc,EAAEP,KAAK,CAAC,CAAC;EAE3B,OAAO;IACLC,eAAe;IACfC,kBAAkB;IAClBC,gBAAgB;IAChBC,mBAAmB;IACnBC,cAAc;IACdC,iBAAiB;IACjBC,cAAc;IACdC,iBAAiB;IACjBE,gBAAgB;IAChBD;EACF,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useState","useMemo","useRef","useChatComposerState","value","activePanelType","setActivePanelType","isAttachmentOpen","setIsAttachmentOpen","isInputFocused","setIsInputFocused","isInputWrapped","setIsInputWrapped","inputRef","isMultilineInput","includes"],"sourceRoot":"../../../../../src","sources":["screens/chat-detail/hooks/useChatComposerState.ts"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,OAAO,EAAEC,MAAM,QAAQ,OAAO;;AAEjD;AACA;AACA;AACA;AACA;AACA;;AAgBA,OAAO,MAAMC,oBAAoB,GAC/BC,KAAa,IACkB;EAC/B,MAAM,CAACC,eAAe,EAAEC,kBAAkB,CAAC,GAAGN,QAAQ,CAAkB,IAAI,CAAC;EAC7E,MAAM,CAACO,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGR,QAAQ,CAAC,KAAK,CAAC;EAC/D,MAAM,CAACS,cAAc,EAAEC,iBAAiB,CAAC,GAAGV,QAAQ,CAAC,KAAK,CAAC;EAC3D,MAAM,CAACW,cAAc,EAAEC,iBAAiB,CAAC,GAAGZ,QAAQ,CAAC,KAAK,CAAC;EAC3D,MAAMa,QAAQ,GAAGX,MAAM,CAAM,IAAI,CAAC;EAElC,MAAMY,gBAAgB,GAAGb,OAAO,CAAC,MAAM;IACrC,IAAI,CAACG,KAAK,EAAE;MACV,OAAO,KAAK;IACd;IAEA,OAAOA,KAAK,CAACW,QAAQ,CAAC,IAAI,CAAC,IAAIJ,cAAc;EAC/C,CAAC,EAAE,CAACA,cAAc,EAAEP,KAAK,CAAC,CAAC;EAE3B,OAAO;IACLC,eAAe;IACfC,kBAAkB;IAClBC,gBAAgB;IAChBC,mBAAmB;IACnBC,cAAc;IACdC,iBAAiB;IACjBC,cAAc;IACdC,iBAAiB;IACjBE,gBAAgB;IAChBD;EACF,CAAC;AACH,CAAC","ignoreList":[]}
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
+ import { useInfiniteQuery } from '@tanstack/react-query';
5
+ import debounce from 'lodash/debounce';
6
+ import { applyTextChange, findActiveMention, insertMention } from "../../../utils/mentions/index.js";
7
+ import { trans } from "../../../translation/index.js";
8
+ import { mentionQueryKeys } from "../../../hooks/query-keys.js";
9
+ const SEARCH_DEBOUNCE_MS = 200;
10
+ // Matches MentionSuggestionList's MAX_VISIBLE_ROWS — one page fills exactly
11
+ // one screenful of the panel, so scrolling further triggers loadMore instead
12
+ // of over-fetching members the user hasn't scrolled to yet.
13
+ const SEARCH_LIMIT = 4;
14
+ const ALL_MEMBERS_USER_ID = 'ALL';
15
+ const allMembersSuggestion = () => ({
16
+ userId: ALL_MEMBERS_USER_ID,
17
+ displayName: trans('group:tag_all')
18
+ });
19
+ /**
20
+ * Orchestrates the @mention composer: wires the pure Phase A1 logic
21
+ * (findActiveMention / applyTextChange / insertMention) and an injected
22
+ * MentionSearchSource into the live TextInput event loop.
23
+ *
24
+ * `text` stays owned by useChatCompose (the existing composer state) — this
25
+ * hook doesn't duplicate it, only mirrors it into a ref for synchronous
26
+ * access within its own event handlers (see textRef below).
27
+ */
28
+ export function useMentionComposer({
29
+ text,
30
+ setText,
31
+ searchSource,
32
+ groupID,
33
+ enabled = true,
34
+ inputRef
35
+ }) {
36
+ const [mentions, setMentions] = useState([]);
37
+ const [activeMention, setActiveMention] = useState(null);
38
+ // The keyword actually being searched for — distinct from
39
+ // activeMention.keyword, which updates on every keystroke. This only
40
+ // changes 200ms after typing pauses (see debouncedSetKeywordRef below),
41
+ // and IS the react-query key: typing further characters within the debounce
42
+ // window never touches the query at all, so the previous page's results
43
+ // stay on screen with zero flicker until the debounce actually fires.
44
+ // null means "no active search" (panel closed) — distinct from '' (an
45
+ // active search for the empty keyword, which also lists all members).
46
+ const [debouncedKeyword, setDebouncedKeyword] = useState(null);
47
+
48
+ // Synchronous mirrors of the externally-owned `text` and internally-owned
49
+ // `mentions` state. React state updates aren't visible until the next
50
+ // render, but applyTextChange needs the *actual* latest committed values
51
+ // within the same tick a keystroke is processed — these refs are updated
52
+ // in lockstep with every setText/setMentions call below so they never lag.
53
+ const textRef = useRef(text);
54
+ const mentionsRef = useRef([]);
55
+ const activeMentionRef = useRef(null);
56
+ const searchSourceRef = useRef(searchSource);
57
+ searchSourceRef.current = searchSource;
58
+ const enabledRef = useRef(enabled);
59
+ enabledRef.current = enabled;
60
+ useEffect(() => {
61
+ // External text changes not driven by this hook (e.g. clearing the
62
+ // composer after send) — keep the mirror and mention state in sync.
63
+ if (text !== textRef.current) {
64
+ textRef.current = text;
65
+ if (text === '') {
66
+ mentionsRef.current = [];
67
+ setMentions([]);
68
+ }
69
+ }
70
+ }, [text]);
71
+ const debouncedSetKeywordRef = useRef(debounce(keyword => setDebouncedKeyword(keyword), SEARCH_DEBOUNCE_MS, {
72
+ leading: false,
73
+ trailing: true
74
+ }));
75
+ useEffect(() => () => debouncedSetKeywordRef.current.cancel(), []);
76
+ const isActiveSearch = debouncedKeyword !== null;
77
+ const {
78
+ data,
79
+ isFetching,
80
+ isFetchingNextPage,
81
+ hasNextPage,
82
+ fetchNextPage
83
+ } = useInfiniteQuery({
84
+ queryKey: mentionQueryKeys.search(groupID ?? '', debouncedKeyword ?? ''),
85
+ queryFn: ({
86
+ pageParam
87
+ }) => searchSourceRef.current.search({
88
+ keyword: debouncedKeyword ?? '',
89
+ limit: SEARCH_LIMIT,
90
+ offset: pageParam
91
+ }),
92
+ // Neither getGroupMemberList nor searchGroupMembers returns a total, so
93
+ // "is there a next page" is inferred from page size (see
94
+ // MentionSearchResult.hasMore's doc comment) instead of an exact count.
95
+ getNextPageParam: (lastPage, allPages) => lastPage.hasMore ? allPages.reduce((sum, p) => sum + p.items.length, 0) : undefined,
96
+ initialPageParam: 0,
97
+ enabled: isActiveSearch
98
+ // Deliberately no maxPages cap — this is a scrolling picker, not a
99
+ // one-shot search; capping pages would drop already-loaded members as
100
+ // the user scrolls further, which is a worse experience than the memory
101
+ // cost of keeping them.
102
+ });
103
+ const includeAll = debouncedKeyword === '';
104
+ const suggestions = useMemo(() => {
105
+ const items = data?.pages.flatMap(page => page.items) ?? [];
106
+ return includeAll ? [allMembersSuggestion(), ...items] : items;
107
+ }, [data, includeAll]);
108
+ const loadMore = useCallback(() => {
109
+ if (!isActiveSearch || !hasNextPage || isFetchingNextPage) return;
110
+ fetchNextPage();
111
+ }, [isActiveSearch, hasNextPage, isFetchingNextPage, fetchNextPage]);
112
+ const updateActiveMentionAndSearch = useCallback((currentText, cursor) => {
113
+ // Non-group conversation — "@" is a plain character, never a trigger.
114
+ // Checked here (not just left to the search source returning empty)
115
+ // so the picker UI never opens at all in this case.
116
+ const active = enabledRef.current ? findActiveMention(currentText, cursor) : null;
117
+ activeMentionRef.current = active;
118
+ setActiveMention(active);
119
+ if (!active) {
120
+ debouncedSetKeywordRef.current.cancel();
121
+ // Functional updater so an already-null value doesn't force a
122
+ // render on every ordinary keystroke (the common case).
123
+ setDebouncedKeyword(prev => prev === null ? prev : null);
124
+ return;
125
+ }
126
+ debouncedSetKeywordRef.current(active.keyword);
127
+ }, []);
128
+
129
+ // Simplified from an earlier microtask-buffered design (see git history /
130
+ // plan doc for why that existed) after it caused a real, reproduced
131
+ // "Maximum update depth exceeded" loop in production testing. Root cause
132
+ // wasn't fully isolated without device logs, but the buffering added a
133
+ // second, redundant path (onSelectionChange re-running mention detection
134
+ // with native selection data that could be stale relative to the edit
135
+ // onChangeText had just processed) that could set state back and forth.
136
+ // applyTextChange already derives an authoritative cursor from the text
137
+ // diff itself — it never needed to wait for onSelectionChange for the
138
+ // edit case, so handling each event directly, synchronously, removes an
139
+ // entire dimension of timing uncertainty instead of trying to patch it.
140
+ const handleChangeText = useCallback(nextText => {
141
+ const nextTextRaw = nextText ?? '';
142
+ const previousText = textRef.current;
143
+ if (nextTextRaw === previousText) return;
144
+ const result = applyTextChange(previousText, mentionsRef.current, nextTextRaw);
145
+ textRef.current = result.text;
146
+ mentionsRef.current = result.mentions;
147
+ setText(result.text);
148
+ setMentions(result.mentions);
149
+ if (result.mentionRemoved) {
150
+ // The native buffer currently shows nextTextRaw, not our corrected
151
+ // result.text — force the cursor back to a position that's valid
152
+ // once React re-renders the controlled value.
153
+ requestAnimationFrame(() => {
154
+ inputRef.current?.setSelection(result.cursor, result.cursor);
155
+ });
156
+ }
157
+ updateActiveMentionAndSearch(result.text, result.cursor);
158
+ }, [inputRef, setText, updateActiveMentionAndSearch]);
159
+
160
+ // Only meaningful for a pure cursor move with NO accompanying text change
161
+ // (tap elsewhere in the draft, arrow keys) — an edit's cursor is already
162
+ // handled authoritatively inside handleChangeText above. Deliberately
163
+ // does not re-run search/active-mention detection here to avoid the
164
+ // redundant double-handling that caused the loop this replaced.
165
+ const handleSelectionChange = useCallback(event => {
166
+ const selection = event.nativeEvent.selection;
167
+ if (selection.start !== selection.end) return;
168
+ if (selection.start === textRef.current.length) return; // typical post-edit echo, already handled
169
+
170
+ updateActiveMentionAndSearch(textRef.current, selection.start);
171
+ }, [updateActiveMentionAndSearch]);
172
+ const selectSuggestion = useCallback(item => {
173
+ const active = activeMentionRef.current;
174
+ if (!active) return;
175
+ const result = insertMention(textRef.current, mentionsRef.current, active, {
176
+ userId: item.userId,
177
+ displayName: item.displayName
178
+ });
179
+ textRef.current = result.text;
180
+ mentionsRef.current = result.mentions;
181
+ setText(result.text);
182
+ setMentions(result.mentions);
183
+ activeMentionRef.current = null;
184
+ setActiveMention(null);
185
+ debouncedSetKeywordRef.current.cancel();
186
+ setDebouncedKeyword(null);
187
+ requestAnimationFrame(() => {
188
+ inputRef.current?.setSelection(result.cursor, result.cursor);
189
+ });
190
+ }, [inputRef, setText]);
191
+
192
+ // Called by ChatComposer when the user explicitly opens the
193
+ // attachment/sticker panel while a mention query is active — the mutual
194
+ // exclusion works both directions: opening mention closes attachment/
195
+ // sticker (ChatComposer's own handlers already do that reactively, see
196
+ // the effect wired there), and this closes mention when the user
197
+ // deliberately switches to a different panel.
198
+ const closeMentionPanel = useCallback(() => {
199
+ activeMentionRef.current = null;
200
+ setActiveMention(null);
201
+ debouncedSetKeywordRef.current.cancel();
202
+ setDebouncedKeyword(null);
203
+ }, []);
204
+
205
+ // Defensive: if `enabled` ever flips false while a mention query happens
206
+ // to be open (e.g. conversation type resolves after mount), close it
207
+ // immediately rather than leaving a stale picker for a thread that
208
+ // shouldn't have one at all.
209
+ useEffect(() => {
210
+ if (!enabled) closeMentionPanel();
211
+ // closeMentionPanel is stable ([] deps) — listing it here doesn't cause
212
+ // extra runs, it just keeps the deps array honest instead of suppressing
213
+ // the lint rule.
214
+ }, [enabled, closeMentionPanel]);
215
+
216
+ // Called explicitly by ChatComposer right when it clears the composer
217
+ // after send. The existing `useEffect` watching the `text` prop *would*
218
+ // eventually sync mentions to [] once `compose.setText('')` propagates
219
+ // down as a new `text` prop — but that's a render later, and in between
220
+ // there's a real transient bug: `value` is already '' while `mentions`
221
+ // still holds the old (now-stale) entries, and tokenize('', oldMentions)
222
+ // happily emits a mention segment anchored past the end of an empty
223
+ // string — a "ghost" mention with no surrounding text. Clearing
224
+ // synchronously here, in the same tick as setText(''), removes that
225
+ // window entirely instead of just shrinking it.
226
+ const clear = useCallback(() => {
227
+ textRef.current = '';
228
+ mentionsRef.current = [];
229
+ activeMentionRef.current = null;
230
+ setMentions([]);
231
+ setActiveMention(null);
232
+ debouncedSetKeywordRef.current.cancel();
233
+ setDebouncedKeyword(null);
234
+ }, []);
235
+ return {
236
+ mentions,
237
+ activeMention,
238
+ suggestions,
239
+ isSearching: isActiveSearch && isFetching && !isFetchingNextPage,
240
+ isLoadingMore: isFetchingNextPage,
241
+ hasMore: !!hasNextPage,
242
+ loadMore,
243
+ isPanelOpen: activeMention !== null,
244
+ handleChangeText,
245
+ handleSelectionChange,
246
+ selectSuggestion,
247
+ closeMentionPanel,
248
+ clear
249
+ };
250
+ }
251
+ //# sourceMappingURL=useMentionComposer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","useInfiniteQuery","debounce","applyTextChange","findActiveMention","insertMention","trans","mentionQueryKeys","SEARCH_DEBOUNCE_MS","SEARCH_LIMIT","ALL_MEMBERS_USER_ID","allMembersSuggestion","userId","displayName","useMentionComposer","text","setText","searchSource","groupID","enabled","inputRef","mentions","setMentions","activeMention","setActiveMention","debouncedKeyword","setDebouncedKeyword","textRef","mentionsRef","activeMentionRef","searchSourceRef","current","enabledRef","debouncedSetKeywordRef","keyword","leading","trailing","cancel","isActiveSearch","data","isFetching","isFetchingNextPage","hasNextPage","fetchNextPage","queryKey","search","queryFn","pageParam","limit","offset","getNextPageParam","lastPage","allPages","hasMore","reduce","sum","p","items","length","undefined","initialPageParam","includeAll","suggestions","pages","flatMap","page","loadMore","updateActiveMentionAndSearch","currentText","cursor","active","prev","handleChangeText","nextText","nextTextRaw","previousText","result","mentionRemoved","requestAnimationFrame","setSelection","handleSelectionChange","event","selection","nativeEvent","start","end","selectSuggestion","item","closeMentionPanel","clear","isSearching","isLoadingMore","isPanelOpen"],"sourceRoot":"../../../../../src","sources":["screens/chat-detail/hooks/useMentionComposer.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAGzE,SAASC,gBAAgB,QAAQ,uBAAuB;AACxD,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,SACEC,eAAe,EACfC,iBAAiB,EACjBC,aAAa,QACR,kCAAyB;AAChC,SAASC,KAAK,QAAQ,+BAAsB;AAC5C,SAASC,gBAAgB,QAAQ,8BAA2B;AAQ5D,MAAMC,kBAAkB,GAAG,GAAG;AAC9B;AACA;AACA;AACA,MAAMC,YAAY,GAAG,CAAC;AACtB,MAAMC,mBAAmB,GAAG,KAAK;AAEjC,MAAMC,oBAAoB,GAAGA,CAAA,MAA0B;EACrDC,MAAM,EAAEF,mBAAmB;EAC3BG,WAAW,EAAEP,KAAK,CAAC,eAAe;AACpC,CAAC,CAAC;AAuCF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASQ,kBAAkBA,CAAC;EACjCC,IAAI;EACJC,OAAO;EACPC,YAAY;EACZC,OAAO;EACPC,OAAO,GAAG,IAAI;EACdC;AACwB,CAAC,EAA4B;EACrD,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGtB,QAAQ,CAAY,EAAE,CAAC;EACvD,MAAM,CAACuB,aAAa,EAAEC,gBAAgB,CAAC,GAAGxB,QAAQ,CAChD,IACF,CAAC;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAM,CAACyB,gBAAgB,EAAEC,mBAAmB,CAAC,GAAG1B,QAAQ,CAAgB,IAAI,CAAC;;EAE7E;EACA;EACA;EACA;EACA;EACA,MAAM2B,OAAO,GAAG5B,MAAM,CAACgB,IAAI,CAAC;EAC5B,MAAMa,WAAW,GAAG7B,MAAM,CAAY,EAAE,CAAC;EACzC,MAAM8B,gBAAgB,GAAG9B,MAAM,CAAuB,IAAI,CAAC;EAE3D,MAAM+B,eAAe,GAAG/B,MAAM,CAACkB,YAAY,CAAC;EAC5Ca,eAAe,CAACC,OAAO,GAAGd,YAAY;EAEtC,MAAMe,UAAU,GAAGjC,MAAM,CAACoB,OAAO,CAAC;EAClCa,UAAU,CAACD,OAAO,GAAGZ,OAAO;EAE5BtB,SAAS,CAAC,MAAM;IACd;IACA;IACA,IAAIkB,IAAI,KAAKY,OAAO,CAACI,OAAO,EAAE;MAC5BJ,OAAO,CAACI,OAAO,GAAGhB,IAAI;MACtB,IAAIA,IAAI,KAAK,EAAE,EAAE;QACfa,WAAW,CAACG,OAAO,GAAG,EAAE;QACxBT,WAAW,CAAC,EAAE,CAAC;MACjB;IACF;EACF,CAAC,EAAE,CAACP,IAAI,CAAC,CAAC;EAEV,MAAMkB,sBAAsB,GAAGlC,MAAM,CACnCG,QAAQ,CACLgC,OAAe,IAAKR,mBAAmB,CAACQ,OAAO,CAAC,EACjD1B,kBAAkB,EAClB;IAAE2B,OAAO,EAAE,KAAK;IAAEC,QAAQ,EAAE;EAAK,CACnC,CACF,CAAC;EACDvC,SAAS,CAAC,MAAM,MAAMoC,sBAAsB,CAACF,OAAO,CAACM,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;EAElE,MAAMC,cAAc,GAAGb,gBAAgB,KAAK,IAAI;EAEhD,MAAM;IAAEc,IAAI;IAAEC,UAAU;IAAEC,kBAAkB;IAAEC,WAAW;IAAEC;EAAc,CAAC,GACxE1C,gBAAgB,CAAC;IACf2C,QAAQ,EAAErC,gBAAgB,CAACsC,MAAM,CAAC3B,OAAO,IAAI,EAAE,EAAEO,gBAAgB,IAAI,EAAE,CAAC;IACxEqB,OAAO,EAAEA,CAAC;MAAEC;IAAU,CAAC,KACrBjB,eAAe,CAACC,OAAO,CAACc,MAAM,CAAC;MAC7BX,OAAO,EAAET,gBAAgB,IAAI,EAAE;MAC/BuB,KAAK,EAAEvC,YAAY;MACnBwC,MAAM,EAAEF;IACV,CAAC,CAAC;IACJ;IACA;IACA;IACAG,gBAAgB,EAAEA,CAACC,QAAQ,EAAEC,QAAQ,KACnCD,QAAQ,CAACE,OAAO,GACZD,QAAQ,CAACE,MAAM,CAAC,CAACC,GAAG,EAAEC,CAAC,KAAKD,GAAG,GAAGC,CAAC,CAACC,KAAK,CAACC,MAAM,EAAE,CAAC,CAAC,GACpDC,SAAS;IACfC,gBAAgB,EAAE,CAAC;IACnBzC,OAAO,EAAEmB;IACT;IACA;IACA;IACA;EACF,CAAC,CAAC;EAEJ,MAAMuB,UAAU,GAAGpC,gBAAgB,KAAK,EAAE;EAC1C,MAAMqC,WAAW,GAAGhE,OAAO,CAAC,MAAM;IAChC,MAAM2D,KAAK,GAAGlB,IAAI,EAAEwB,KAAK,CAACC,OAAO,CAAEC,IAAI,IAAKA,IAAI,CAACR,KAAK,CAAC,IAAI,EAAE;IAC7D,OAAOI,UAAU,GAAG,CAAClD,oBAAoB,CAAC,CAAC,EAAE,GAAG8C,KAAK,CAAC,GAAGA,KAAK;EAChE,CAAC,EAAE,CAAClB,IAAI,EAAEsB,UAAU,CAAC,CAAC;EAEtB,MAAMK,QAAQ,GAAGtE,WAAW,CAAC,MAAM;IACjC,IAAI,CAAC0C,cAAc,IAAI,CAACI,WAAW,IAAID,kBAAkB,EAAE;IAC3DE,aAAa,CAAC,CAAC;EACjB,CAAC,EAAE,CAACL,cAAc,EAAEI,WAAW,EAAED,kBAAkB,EAAEE,aAAa,CAAC,CAAC;EAEpE,MAAMwB,4BAA4B,GAAGvE,WAAW,CAC9C,CAACwE,WAAmB,EAAEC,MAAc,KAAK;IACvC;IACA;IACA;IACA,MAAMC,MAAM,GAAGtC,UAAU,CAACD,OAAO,GAC7B3B,iBAAiB,CAACgE,WAAW,EAAEC,MAAM,CAAC,GACtC,IAAI;IACRxC,gBAAgB,CAACE,OAAO,GAAGuC,MAAM;IACjC9C,gBAAgB,CAAC8C,MAAM,CAAC;IAExB,IAAI,CAACA,MAAM,EAAE;MACXrC,sBAAsB,CAACF,OAAO,CAACM,MAAM,CAAC,CAAC;MACvC;MACA;MACAX,mBAAmB,CAAE6C,IAAI,IAAMA,IAAI,KAAK,IAAI,GAAGA,IAAI,GAAG,IAAK,CAAC;MAC5D;IACF;IAEAtC,sBAAsB,CAACF,OAAO,CAACuC,MAAM,CAACpC,OAAO,CAAC;EAChD,CAAC,EACD,EACF,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMsC,gBAAgB,GAAG5E,WAAW,CACjC6E,QAAiB,IAAK;IACrB,MAAMC,WAAW,GAAGD,QAAQ,IAAI,EAAE;IAClC,MAAME,YAAY,GAAGhD,OAAO,CAACI,OAAO;IACpC,IAAI2C,WAAW,KAAKC,YAAY,EAAE;IAElC,MAAMC,MAAM,GAAGzE,eAAe,CAC5BwE,YAAY,EACZ/C,WAAW,CAACG,OAAO,EACnB2C,WACF,CAAC;IACD/C,OAAO,CAACI,OAAO,GAAG6C,MAAM,CAAC7D,IAAI;IAC7Ba,WAAW,CAACG,OAAO,GAAG6C,MAAM,CAACvD,QAAQ;IACrCL,OAAO,CAAC4D,MAAM,CAAC7D,IAAI,CAAC;IACpBO,WAAW,CAACsD,MAAM,CAACvD,QAAQ,CAAC;IAE5B,IAAIuD,MAAM,CAACC,cAAc,EAAE;MACzB;MACA;MACA;MACAC,qBAAqB,CAAC,MAAM;QAC1B1D,QAAQ,CAACW,OAAO,EAAEgD,YAAY,CAACH,MAAM,CAACP,MAAM,EAAEO,MAAM,CAACP,MAAM,CAAC;MAC9D,CAAC,CAAC;IACJ;IAEAF,4BAA4B,CAACS,MAAM,CAAC7D,IAAI,EAAE6D,MAAM,CAACP,MAAM,CAAC;EAC1D,CAAC,EACD,CAACjD,QAAQ,EAAEJ,OAAO,EAAEmD,4BAA4B,CAClD,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA,MAAMa,qBAAqB,GAAGpF,WAAW,CACtCqF,KAA8D,IAAK;IAClE,MAAMC,SAAS,GAAGD,KAAK,CAACE,WAAW,CAACD,SAAS;IAC7C,IAAIA,SAAS,CAACE,KAAK,KAAKF,SAAS,CAACG,GAAG,EAAE;IACvC,IAAIH,SAAS,CAACE,KAAK,KAAKzD,OAAO,CAACI,OAAO,CAAC2B,MAAM,EAAE,OAAO,CAAC;;IAExDS,4BAA4B,CAACxC,OAAO,CAACI,OAAO,EAAEmD,SAAS,CAACE,KAAK,CAAC;EAChE,CAAC,EACD,CAACjB,4BAA4B,CAC/B,CAAC;EAED,MAAMmB,gBAAgB,GAAG1F,WAAW,CACjC2F,IAAuB,IAAK;IAC3B,MAAMjB,MAAM,GAAGzC,gBAAgB,CAACE,OAAO;IACvC,IAAI,CAACuC,MAAM,EAAE;IAEb,MAAMM,MAAM,GAAGvE,aAAa,CAC1BsB,OAAO,CAACI,OAAO,EACfH,WAAW,CAACG,OAAO,EACnBuC,MAAM,EACN;MACE1D,MAAM,EAAE2E,IAAI,CAAC3E,MAAM;MACnBC,WAAW,EAAE0E,IAAI,CAAC1E;IACpB,CACF,CAAC;IAEDc,OAAO,CAACI,OAAO,GAAG6C,MAAM,CAAC7D,IAAI;IAC7Ba,WAAW,CAACG,OAAO,GAAG6C,MAAM,CAACvD,QAAQ;IACrCL,OAAO,CAAC4D,MAAM,CAAC7D,IAAI,CAAC;IACpBO,WAAW,CAACsD,MAAM,CAACvD,QAAQ,CAAC;IAC5BQ,gBAAgB,CAACE,OAAO,GAAG,IAAI;IAC/BP,gBAAgB,CAAC,IAAI,CAAC;IACtBS,sBAAsB,CAACF,OAAO,CAACM,MAAM,CAAC,CAAC;IACvCX,mBAAmB,CAAC,IAAI,CAAC;IAEzBoD,qBAAqB,CAAC,MAAM;MAC1B1D,QAAQ,CAACW,OAAO,EAAEgD,YAAY,CAACH,MAAM,CAACP,MAAM,EAAEO,MAAM,CAACP,MAAM,CAAC;IAC9D,CAAC,CAAC;EACJ,CAAC,EACD,CAACjD,QAAQ,EAAEJ,OAAO,CACpB,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA,MAAMwE,iBAAiB,GAAG5F,WAAW,CAAC,MAAM;IAC1CiC,gBAAgB,CAACE,OAAO,GAAG,IAAI;IAC/BP,gBAAgB,CAAC,IAAI,CAAC;IACtBS,sBAAsB,CAACF,OAAO,CAACM,MAAM,CAAC,CAAC;IACvCX,mBAAmB,CAAC,IAAI,CAAC;EAC3B,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA;EACA;EACA;EACA7B,SAAS,CAAC,MAAM;IACd,IAAI,CAACsB,OAAO,EAAEqE,iBAAiB,CAAC,CAAC;IACjC;IACA;IACA;EACF,CAAC,EAAE,CAACrE,OAAO,EAAEqE,iBAAiB,CAAC,CAAC;;EAEhC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMC,KAAK,GAAG7F,WAAW,CAAC,MAAM;IAC9B+B,OAAO,CAACI,OAAO,GAAG,EAAE;IACpBH,WAAW,CAACG,OAAO,GAAG,EAAE;IACxBF,gBAAgB,CAACE,OAAO,GAAG,IAAI;IAC/BT,WAAW,CAAC,EAAE,CAAC;IACfE,gBAAgB,CAAC,IAAI,CAAC;IACtBS,sBAAsB,CAACF,OAAO,CAACM,MAAM,CAAC,CAAC;IACvCX,mBAAmB,CAAC,IAAI,CAAC;EAC3B,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLL,QAAQ;IACRE,aAAa;IACbuC,WAAW;IACX4B,WAAW,EAAEpD,cAAc,IAAIE,UAAU,IAAI,CAACC,kBAAkB;IAChEkD,aAAa,EAAElD,kBAAkB;IACjCY,OAAO,EAAE,CAAC,CAACX,WAAW;IACtBwB,QAAQ;IACR0B,WAAW,EAAErE,aAAa,KAAK,IAAI;IACnCiD,gBAAgB;IAChBQ,qBAAqB;IACrBM,gBAAgB;IAChBE,iBAAiB;IACjBC;EACF,CAAC;AACH","ignoreList":[]}
@@ -9,6 +9,7 @@ const formatTime = date => date.toLocaleTimeString('vi-VN', {
9
9
  minute: '2-digit',
10
10
  hour12: false
11
11
  });
12
+ const pad2 = value => String(value).padStart(2, '0');
12
13
  const formatDayLabel = createdAt => {
13
14
  const date = new Date(createdAt);
14
15
  if (Number.isNaN(date.getTime())) return null;
@@ -24,17 +25,11 @@ const formatDayLabel = createdAt => {
24
25
  if (messageDay.getTime() === yesterday.getTime()) {
25
26
  return `${formatTime(date)} Hôm qua`;
26
27
  }
28
+ const dayMonth = `${pad2(date.getDate())}/${pad2(date.getMonth() + 1)}`;
27
29
  if (messageDay.getFullYear() === today.getFullYear()) {
28
- return `${formatTime(date)} ${date.toLocaleDateString('vi-VN', {
29
- day: 'numeric',
30
- month: 'long'
31
- })}`;
30
+ return `${formatTime(date)} ${dayMonth}`;
32
31
  }
33
- return `${formatTime(date)} ${date.toLocaleDateString('vi-VN', {
34
- day: 'numeric',
35
- month: 'long',
36
- year: 'numeric'
37
- })}`;
32
+ return `${formatTime(date)} ${dayMonth}/${date.getFullYear()}`;
38
33
  };
39
34
  export const LegendChatDay = /*#__PURE__*/memo(({
40
35
  createdAt,
@@ -1 +1 @@
1
- {"version":3,"names":["memo","useMemo","KContainer","KLabel","CHAT_BUBBLE_COLORS","jsx","_jsx","formatTime","date","toLocaleTimeString","hour","minute","hour12","formatDayLabel","createdAt","Date","Number","isNaN","getTime","today","setHours","messageDay","yesterday","setDate","getDate","getFullYear","toLocaleDateString","day","month","year","LegendChatDay","timeOnly","dateStr","View","center","marginV","children","Text","typo","color","dayLabel","displayName"],"sourceRoot":"../../../../../src","sources":["screens/chat-detail/legend/LegendChatDay.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["memo","useMemo","KContainer","KLabel","CHAT_BUBBLE_COLORS","jsx","_jsx","formatTime","date","toLocaleTimeString","hour","minute","hour12","pad2","value","String","padStart","formatDayLabel","createdAt","Date","Number","isNaN","getTime","today","setHours","messageDay","yesterday","setDate","getDate","dayMonth","getMonth","getFullYear","LegendChatDay","timeOnly","dateStr","View","center","marginV","children","Text","typo","color","dayLabel","displayName"],"sourceRoot":"../../../../../src","sources":["screens/chat-detail/legend/LegendChatDay.tsx"],"mappings":"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","ignoreList":[]}
@@ -37,6 +37,11 @@ const messageComponentMap = {
37
37
  };
38
38
  const MEDIA_TYPES = [MessageType.PictureMessage, MessageType.VideoMessage, MessageType.MergeMessage];
39
39
  const SYSTEM_MESSAGE_TYPES = GROUP_NOTIFICATION_TYPES;
40
+
41
+ // Tapping these types must keep opening the media/file as today — they never
42
+ // participate in tap-to-reveal-time, so no Tap gesture is attached at all for
43
+ // them (avoids racing their own internal touchables for the same tap).
44
+ const TIME_REVEAL_EXCLUDED_TYPES = [...MEDIA_TYPES, MessageType.FileMessage];
40
45
  export const LegendChatMessage = /*#__PURE__*/memo(({
41
46
  message,
42
47
  isOutgoing,
@@ -48,6 +53,7 @@ export const LegendChatMessage = /*#__PURE__*/memo(({
48
53
  onLongPress,
49
54
  customMessageItemFactory,
50
55
  isHighlighted,
56
+ isTimeRevealed,
51
57
  showName = false,
52
58
  showAvatar = false,
53
59
  showSenderGutter = false,
@@ -77,7 +83,12 @@ export const LegendChatMessage = /*#__PURE__*/memo(({
77
83
  }
78
84
  const MessageComponent = messageComponentMap[message?.contentType] ?? TextMessage;
79
85
  const hasMediaPress = MEDIA_TYPES.includes(message?.contentType) && onMediaPress;
80
- const hasUrlPress = onPressUrl && message?.contentType === MessageType.UrlTextMessage;
86
+ // AtTextMessage included: mention+URL combo attaches its link-preview
87
+ // card via ex.urlMetadata on an AtTextMessage (see TextMessage's doc
88
+ // comment) instead of a dedicated UrlTextMessage — the card still needs
89
+ // a tap handler.
90
+ const hasUrlPress = onPressUrl && (message?.contentType === MessageType.UrlTextMessage || message?.contentType === MessageType.AtTextMessage);
91
+ const canRevealTime = !TIME_REVEAL_EXCLUDED_TYPES.includes(message?.contentType);
81
92
  return /*#__PURE__*/_jsxs(KContainer.View, {
82
93
  style: messageStyles.wrapper,
83
94
  row: true,
@@ -103,7 +114,7 @@ export const LegendChatMessage = /*#__PURE__*/memo(({
103
114
  style: styles.senderName,
104
115
  children: message.senderNickname
105
116
  }), /*#__PURE__*/_jsx(LongPressWrapper, {
106
- onPress: handlePress,
117
+ onPress: canRevealTime ? handlePress : undefined,
107
118
  onLongPress: handleLongPress,
108
119
  children: /*#__PURE__*/_jsx(MessageComponent, {
109
120
  message: message,
@@ -112,6 +123,7 @@ export const LegendChatMessage = /*#__PURE__*/memo(({
112
123
  onMediaPress: hasMediaPress ? onMediaPress : undefined,
113
124
  onPressUrl: hasUrlPress ? onPressUrl : undefined,
114
125
  isHighlighted: isHighlighted,
126
+ isTimeRevealed: canRevealTime && isTimeRevealed,
115
127
  groupPosition: groupPosition
116
128
  })
117
129
  }), message?.isPinned && /*#__PURE__*/_jsx(KContainer.View, {
@@ -1 +1 @@
1
- {"version":3,"names":["KContainer","KImage","KColors","KLabel","KSpacingValue","StyleSheet","memo","useCallback","useMemo","MessageType","Gesture","GestureDetector","runOnJS","TextMessage","ImageMessage","VideoMessage","FileMessage","LinkMessage","MergedMessage","RevokedMessage","GroupNotificationMessage","MessageStatusIndicator","messageStyles","QuotedMessage","StickerMessage","GROUP_NOTIFICATION_TYPES","Avatar","TAIL_WIDTH","jsx","_jsx","jsxs","_jsxs","messageComponentMap","AtTextMessage","QuoteMessage","UrlTextMessage","PictureMessage","MergeMessage","RevokeMessage","Object","fromEntries","map","type","MEDIA_TYPES","SYSTEM_MESSAGE_TYPES","LegendChatMessage","message","isOutgoing","createdAtTime","onMediaPress","onPressUrl","onRetry","onPress","onLongPress","customMessageItemFactory","isHighlighted","showName","showAvatar","showSenderGutter","groupPosition","handlePress","handleLongPress","customNode","includes","contentType","SystemMessageComponent","View","center","style","styles","systemMessageWrapper","children","MessageComponent","hasMediaPress","hasUrlPress","wrapper","row","alignItems","avatarGutter","size","source","senderFaceUrl","fullName","senderNickname","content","Text","typo","color","gray","normal","numberOfLines","marginB","senderName","LongPressWrapper","undefined","isPinned","pinBadge","VectorIcons","name","primary","displayName","AVATAR_SIZE","create","position","marginLeft","width","marginRight","alignSelf","marginVertical","top","right","height","borderRadius","justifyContent","backgroundColor","pageBackground","shadowColor","black","shadowOffset","shadowOpacity","shadowRadius","elevation","borderWidth","borderColor","white","zIndex","Number","MAX_SAFE_INTEGER","gesture","gestures","LongPress","onStart","Tap","filter","Boolean","length","Race"],"sourceRoot":"../../../../../src","sources":["screens/chat-detail/legend/LegendChatMessage.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["KContainer","KImage","KColors","KLabel","KSpacingValue","StyleSheet","memo","useCallback","useMemo","MessageType","Gesture","GestureDetector","runOnJS","TextMessage","ImageMessage","VideoMessage","FileMessage","LinkMessage","MergedMessage","RevokedMessage","GroupNotificationMessage","MessageStatusIndicator","messageStyles","QuotedMessage","StickerMessage","GROUP_NOTIFICATION_TYPES","Avatar","TAIL_WIDTH","jsx","_jsx","jsxs","_jsxs","messageComponentMap","AtTextMessage","QuoteMessage","UrlTextMessage","PictureMessage","MergeMessage","RevokeMessage","Object","fromEntries","map","type","MEDIA_TYPES","SYSTEM_MESSAGE_TYPES","TIME_REVEAL_EXCLUDED_TYPES","LegendChatMessage","message","isOutgoing","createdAtTime","onMediaPress","onPressUrl","onRetry","onPress","onLongPress","customMessageItemFactory","isHighlighted","isTimeRevealed","showName","showAvatar","showSenderGutter","groupPosition","handlePress","handleLongPress","customNode","includes","contentType","SystemMessageComponent","View","center","style","styles","systemMessageWrapper","children","MessageComponent","hasMediaPress","hasUrlPress","canRevealTime","wrapper","row","alignItems","avatarGutter","size","source","senderFaceUrl","fullName","senderNickname","content","Text","typo","color","gray","normal","numberOfLines","marginB","senderName","LongPressWrapper","undefined","isPinned","pinBadge","VectorIcons","name","primary","displayName","AVATAR_SIZE","create","position","marginLeft","width","marginRight","alignSelf","marginVertical","top","right","height","borderRadius","justifyContent","backgroundColor","pageBackground","shadowColor","black","shadowOffset","shadowOpacity","shadowRadius","elevation","borderWidth","borderColor","white","zIndex","Number","MAX_SAFE_INTEGER","gesture","gestures","LongPress","onStart","Tap","filter","Boolean","length","Race"],"sourceRoot":"../../../../../src","sources":["screens/chat-detail/legend/LegendChatMessage.tsx"],"mappings":"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","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":[]}
@@ -197,6 +197,11 @@ const i18nKey = {
197
197
  'group:dismiss_confirm_primary': 'Giải tán',
198
198
  'group:dismiss_confirm_secondary': 'Quay lại',
199
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',
200
205
  'group:access_blocked_title': 'Không thể xem cuộc trò chuyện này',
201
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.',
202
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":";;AAAA,MAAMA,OAA+B,GAAG;EACtC,0BAA0B,EAAE,gBAAgB;EAC5C,2BAA2B,EAAE,YAAY;EACzC,qBAAqB,EACnB,4EAA4E;EAC9E,qBAAqB,EAAE,kCAAkC;EACzD,uBAAuB,EAAE,oBAAoB;EAC7C,yBAAyB,EAAE,iBAAiB;EAC5C,+BAA+B,EAAE,6BAA6B;EAC9D,uBAAuB,EAAE,oCAAoC;EAC7D,8BAA8B,EAAE,gCAAgC;EAChE,2BAA2B,EAAE,kBAAkB;EAC/C,uBAAuB,EAAE,sBAAsB;EAC/C,oBAAoB,EAAE,eAAe;EACrC,sBAAsB,EACpB,sFAAsF;EACxF,sBAAsB,EACpB,gFAAgF;EAClF,iBAAiB,EAAE,YAAY;EAC/B,0BAA0B,EAAE,gCAAgC;EAC5D,oBAAoB,EAAE,gCAAgC;EACtD,6BAA6B,EAAE,kCAAkC;EACjE,uCAAuC,EACrC,qCAAqC;EACvC,eAAe,EAAE,SAAS;EAC1B,gBAAgB,EAAE,YAAY;EAC9B,iBAAiB,EAAE,SAAS;EAC5B,WAAW,EAAE,KAAK;EAClB,YAAY,EAAE,SAAS;EACvB,2BAA2B,EAAE,6BAA6B;EAC1D,mBAAmB,EAAE,kBAAkB;EACvC,yBAAyB,EAAE,kBAAkB;EAC7C,qBAAqB,EAAE,0BAA0B;EACjD,mBAAmB,EAAE,mBAAmB;EACxC,wBAAwB,EAAE,6BAA6B;EACvD,2BAA2B,EAAE,8BAA8B;EAC3D,gCAAgC,EAAE,wCAAwC;EAC1E,oBAAoB,EAAE,SAAS;EAC/B,qBAAqB,EAAE,SAAS;EAChC,kBAAkB,EAAE,MAAM;EAC1B,oBAAoB,EAAE,SAAS;EAC/B,0BAA0B,EAAE,kBAAkB;EAC9C,4BAA4B,EAAE,qBAAqB;EACnD,8BAA8B,EAAE,wBAAwB;EACxD,4BAA4B,EAAE,wBAAwB;EACtD,4BAA4B,EAAE,qBAAqB;EACnD,2BAA2B,EAAE,wBAAwB;EACrD,2BAA2B,EAAE,eAAe;EAC5C,sBAAsB,EAAE,8BAA8B;EACtD,qBAAqB,EACnB,gHAAgH;EAClH,wBAAwB,EAAE,SAAS;EACnC,4BAA4B,EAAE,kBAAkB;EAChD,2BAA2B,EACzB,uEAAuE;EACzE,iBAAiB,EAAE,MAAM;EACzB,mBAAmB,EAAE,SAAS;EAC9B,yBAAyB,EAAE,8BAA8B;EACzD,2BAA2B,EAAE,iCAAiC;EAC9D,6BAA6B,EAAE,0BAA0B;EACzD,4BAA4B,EAC1B,qGAAqG;EACvG,8BAA8B,EAAE,IAAI;EACpC,4BAA4B,EAAE,kBAAkB;EAChD,6BAA6B,EAC3B,2DAA2D;EAC7D,gBAAgB,EAAE,YAAY;EAC9B,gBAAgB,EAAE,kBAAkB;EACpC,gBAAgB,EAAE,SAAS;EAC3B,eAAe,EAAE,iBAAiB;EAClC,eAAe,EAAE,YAAY;EAC7B,iBAAiB,EAAE,qBAAqB;EACxC,wBAAwB,EAAE,gCAAgC;EAC1D,wBAAwB,EAAE,aAAa;EACvC,uBAAuB,EAAE,wBAAwB;EACjD,6BAA6B,EAAE,iBAAiB;EAChD,4BAA4B,EAAE,4BAA4B;EAC1D,kCAAkC,EAChC,mDAAmD;EACrD,6BAA6B,EAAE,4BAA4B;EAC3D,4BAA4B,EAAE,uCAAuC;EACrE,sBAAsB,EAAE,kBAAkB;EAC1C,qBAAqB,EAAE,wBAAwB;EAC/C,kCAAkC,EAAE,6BAA6B;EACjE,iCAAiC,EAAE,wCAAwC;EAC3E,uCAAuC,EACrC,2DAA2D;EAC7D,wBAAwB,EAAE,6BAA6B;EACvD,uBAAuB,EAAE,wCAAwC;EACjE,6BAA6B,EAAE,uCAAuC;EACtE,yBAAyB,EAAE,6BAA6B;EACxD,wBAAwB,EAAE,wCAAwC;EAClE,8BAA8B,EAAE,uCAAuC;EACvE,iCAAiC,EAAE,+BAA+B;EAClE,gCAAgC,EAC9B,oDAAoD;EACtD,wCAAwC,EACtC,oDAAoD;EACtD,yBAAyB,EAAE,sBAAsB;EACjD,8BAA8B,EAAE,iCAAiC;EACjE,2BAA2B,EAAE,yBAAyB;EACtD,gCAAgC,EAAE,oCAAoC;EACtE,uBAAuB,EAAE,kBAAkB;EAC3C,sBAAsB,EAAE,6BAA6B;EACrD,0BAA0B,EAAE,qBAAqB;EACjD,yBAAyB,EAAE,6BAA6B;EACxD,6BAA6B,EAAE,yBAAyB;EACxD,4BAA4B,EAAE,oCAAoC;EAClE,oCAAoC,EAAE,yBAAyB;EAC/D,mCAAmC,EAAE,oCAAoC;EACzE,sBAAsB,EAAE,sBAAsB;EAC9C,qBAAqB,EAAE,iCAAiC;EACxD,6BAA6B,EAAE,sBAAsB;EACrD,4BAA4B,EAAE,iCAAiC;EAC/D,qCAAqC,EAAE,4BAA4B;EACnE,oCAAoC,EAAE,uCAAuC;EAC7E,uBAAuB,EAAE,qBAAqB;EAC9C,0BAA0B,EAAE,eAAe;EAC3C,8BAA8B,EAAE,qCAAqC;EACrE,kBAAkB,EAAE,eAAe;EACnC,oBAAoB,EAAE,eAAe;EACrC,yBAAyB,EAAE,eAAe;EAC1C,wBAAwB,EACtB,qGAAqG;EACvG,2BAA2B,EAAE,eAAe;EAC5C,6BAA6B,EAAE,UAAU;EACzC,yBAAyB,EAAE,kBAAkB;EAC7C,2BAA2B,EAAE,kBAAkB;EAC/C,iBAAiB,EAAE,UAAU;EAC7B,yBAAyB,EAAE,cAAc;EACzC,uBAAuB,EAAE,KAAK;EAC9B,uBAAuB,EAAE,OAAO;EAChC,sBAAsB,EAAE,SAAS;EACjC,sBAAsB,EAAE,UAAU;EAClC,kBAAkB,EAAE,8BAA8B;EAClD,wBAAwB,EAAE,kCAAkC;EAC5D,wBAAwB,EAAE,eAAe;EACzC,uBAAuB,EAAE,iBAAiB;EAC1C,yBAAyB,EAAE,oBAAoB;EAC/C,0BAA0B,EAAE,wBAAwB;EACpD,uBAAuB,EAAE,UAAU;EACnC,gCAAgC,EAAE,WAAW;EAC7C,uCAAuC,EACrC,kHAAkH;EACpH,sCAAsC,EACpC,iIAAiI;EACnI,kCAAkC,EAAE,UAAU;EAC9C,oCAAoC,EAAE,YAAY;EAClD,gCAAgC,EAAE,oBAAoB;EACtD,+BAA+B,EAC7B,6GAA6G;EAC/G,iCAAiC,EAAE,SAAS;EAC5C,oBAAoB,EAAE,eAAe;EACrC,qBAAqB,EAAE,UAAU;EACjC,8BAA8B,EAAE,YAAY;EAC5C,OAAO,EAAE,SAAS;EAClB,SAAS,EAAE,aAAa;EACxB,SAAS,EAAE,WAAW;EACtB,QAAQ,EAAE,UAAU;EACpB,WAAW,EAAE,UAAU;EACvB,YAAY,EAAE,cAAc;EAC5B,cAAc,EAAE,cAAc;EAC9B,oBAAoB,EAAE,cAAc;EACpC,oBAAoB,EAAE,SAAS;EAC/B,eAAe,EAAE,kBAAkB;EACnC,UAAU,EAAE,YAAY;EACxB,KAAK,EAAE,KAAK;EACZ,QAAQ,EAAE,SAAS;EACnB,4BAA4B,EAAE,qBAAqB;EACnD,gCAAgC,EAAE,KAAK;EACvC,gCAAgC,EAAE,OAAO;EACzC,+BAA+B,EAAE,SAAS;EAC1C,+BAA+B,EAAE,UAAU;EAC3C,oCAAoC,EAAE,4BAA4B;EAClE,iCAAiC,EAAE,6BAA6B;EAChE,qBAAqB,EAAE,OAAO;EAC9B,gCAAgC,EAAE,uBAAuB;EACzD,+BAA+B,EAC7B,2GAA2G;EAC7G,kCAAkC,EAAE,UAAU;EAC9C,oCAAoC,EAAE,UAAU;EAChD,QAAQ,EAAE,UAAU;EACpB,KAAK,EAAE,QAAQ;EACf,UAAU,EAAE,SAAS;EACrB,UAAU,EAAE,UAAU;EACtB,0BAA0B,EAAE,4BAA4B;EACxD,mBAAmB,EACjB,yDAAyD;EAC3D,2BAA2B,EAAE,4CAA4C;EACzE,gCAAgC,EAAE,kCAAkC;EACpE,6BAA6B,EAAE,6CAA6C;EAC5E,UAAU,EAAE,YAAY;EACxB,uBAAuB,EAAE,YAAY;EACrC,kBAAkB,EAAE,KAAK;EACzB,oBAAoB,EAAE,MAAM;EAC5B,qBAAqB,EAAE,WAAW;EAClC,sBAAsB,EAAE,oBAAoB;EAC5C,gCAAgC,EAAE,0BAA0B;EAC5D,oBAAoB,EAAE,wBAAwB;EAC9C,yBAAyB,EAAE,iCAAiC;EAC5D,WAAW,EAAE,WAAW;EACxB,oBAAoB,EAAE,sBAAsB;EAC5C,cAAc,EAAE,UAAU;EAC1B,YAAY,EAAE,UAAU;EACxB,oBAAoB,EAAE,uCAAuC;EAC7D,2BAA2B,EAAE,yCAAyC;EACtE,gCAAgC,EAC9B,sDAAsD;EACxD,oBAAoB,EAAE,gCAAgC;EACtD,oBAAoB,EAAE,gBAAgB;EACtC,qBAAqB,EAAE,eAAe;EACtC,6BAA6B,EAAE,gBAAgB;EAC/C,4BAA4B,EAC1B,+EAA+E;EACjF,+BAA+B,EAAE,UAAU;EAC3C,iCAAiC,EAAE,UAAU;EAC7C,6BAA6B,EAAE,kBAAkB;EACjD,iBAAiB,EAAE,UAAU;EAC7B,eAAe,EAAE,QAAQ;EACzB,oBAAoB,EAAE,4BAA4B;EAClD,2BAA2B,EAAE,+BAA+B;EAC5D,0BAA0B,EACxB,iEAAiE;EACnE,4BAA4B,EAAE,mCAAmC;EACjE,2BAA2B,EACzB,yEAAyE;EAC3E,6BAA6B,EAAE;AACjC,CAAC;AAED,eAAe;EACbC,EAAE,EAAED;AACN,CAAC","ignoreList":[]}
@@ -1 +1 @@
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;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;;AAiCA,WAAYC,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA","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":[]}
@@ -48,6 +48,14 @@ export const getMessageText = message => {
48
48
  /** Two messages further apart than this never share a cluster. */
49
49
  const GROUP_TIME_GAP = 300_000; // 5 minutes
50
50
 
51
+ /**
52
+ * Same-day gap that earns a standalone time divider (BR: 30 minutes) —
53
+ * intentionally separate from GROUP_TIME_GAP: a cluster can visually break on
54
+ * the shorter gap without a divider explaining it, since the spec's divider
55
+ * threshold and the grouping threshold are independent rules.
56
+ */
57
+ const DIVIDER_TIME_GAP = 1_800_000; // 30 minutes
58
+
51
59
  /** Virtual sender for bot conversations — see getGroupKey. */
52
60
  const BOT_GROUP_KEY = '__bot__';
53
61
  const startOfDay = timestamp => {
@@ -114,7 +122,7 @@ export const precomputeLegendListData = (messages, {
114
122
  dataMap.set(messageId, {
115
123
  messageId,
116
124
  dayStart: dayStarts[index],
117
- timeBreak: prevTimestamp !== undefined && createdAt - prevTimestamp > GROUP_TIME_GAP,
125
+ timeBreak: prevTimestamp !== undefined && createdAt - prevTimestamp > DIVIDER_TIME_GAP,
118
126
  createdAt,
119
127
  groupPosition: 'solo'
120
128
  });