@droppii-org/chat-mobile 0.2.109 → 0.2.110

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 (100) hide show
  1. package/lib/module/screens/chat-detail/ChatDetail.js +42 -7
  2. package/lib/module/screens/chat-detail/ChatDetail.js.map +1 -1
  3. package/lib/module/screens/chat-detail/ChatListLegend.js +249 -49
  4. package/lib/module/screens/chat-detail/ChatListLegend.js.map +1 -1
  5. package/lib/module/screens/chat-detail/hooks/createUnreadMarkReadGate.js +32 -0
  6. package/lib/module/screens/chat-detail/hooks/createUnreadMarkReadGate.js.map +1 -0
  7. package/lib/module/screens/chat-detail/hooks/useMarkConversationRead.js +180 -0
  8. package/lib/module/screens/chat-detail/hooks/useMarkConversationRead.js.map +1 -0
  9. package/lib/module/screens/chat-detail/hooks/useUnreadAnchorSeen.js +88 -0
  10. package/lib/module/screens/chat-detail/hooks/useUnreadAnchorSeen.js.map +1 -0
  11. package/lib/module/screens/chat-detail/hooks/useUnreadDeeplinkCheck.js +59 -0
  12. package/lib/module/screens/chat-detail/hooks/useUnreadDeeplinkCheck.js.map +1 -0
  13. package/lib/module/screens/chat-detail/hooks/useUnreadIndicator.js +105 -0
  14. package/lib/module/screens/chat-detail/hooks/useUnreadIndicator.js.map +1 -0
  15. package/lib/module/screens/chat-detail/hooks/useUnreadIndicatorInList.js +157 -0
  16. package/lib/module/screens/chat-detail/hooks/useUnreadIndicatorInList.js.map +1 -0
  17. package/lib/module/screens/chat-detail/legend/LegendChatUnreadButton.js +140 -0
  18. package/lib/module/screens/chat-detail/legend/LegendChatUnreadButton.js.map +1 -0
  19. package/lib/module/screens/chat-detail/legend/LegendChatUnreadDivider.js +51 -0
  20. package/lib/module/screens/chat-detail/legend/LegendChatUnreadDivider.js.map +1 -0
  21. package/lib/module/services/message.js +30 -0
  22. package/lib/module/services/message.js.map +1 -1
  23. package/lib/module/store/message.js +25 -4
  24. package/lib/module/store/message.js.map +1 -1
  25. package/lib/module/store/unreadIndicator.js +26 -0
  26. package/lib/module/store/unreadIndicator.js.map +1 -0
  27. package/lib/module/translation/resources/i18n.js +2 -0
  28. package/lib/module/translation/resources/i18n.js.map +1 -1
  29. package/lib/module/types/chat.js.map +1 -1
  30. package/lib/module/types/unreadIndicator.js +2 -0
  31. package/lib/module/types/unreadIndicator.js.map +1 -0
  32. package/lib/module/utils/markReadPolicy.js +25 -0
  33. package/lib/module/utils/markReadPolicy.js.map +1 -0
  34. package/lib/module/utils/promise.js +16 -0
  35. package/lib/module/utils/promise.js.map +1 -1
  36. package/lib/module/utils/unreadAnchor.js +57 -0
  37. package/lib/module/utils/unreadAnchor.js.map +1 -0
  38. package/lib/module/utils/unreadIndicatorState.js +96 -0
  39. package/lib/module/utils/unreadIndicatorState.js.map +1 -0
  40. package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts.map +1 -1
  41. package/lib/typescript/src/screens/chat-detail/ChatListLegend.d.ts +4 -1
  42. package/lib/typescript/src/screens/chat-detail/ChatListLegend.d.ts.map +1 -1
  43. package/lib/typescript/src/screens/chat-detail/hooks/createUnreadMarkReadGate.d.ts +9 -0
  44. package/lib/typescript/src/screens/chat-detail/hooks/createUnreadMarkReadGate.d.ts.map +1 -0
  45. package/lib/typescript/src/screens/chat-detail/hooks/useMarkConversationRead.d.ts +39 -0
  46. package/lib/typescript/src/screens/chat-detail/hooks/useMarkConversationRead.d.ts.map +1 -0
  47. package/lib/typescript/src/screens/chat-detail/hooks/useUnreadAnchorSeen.d.ts +26 -0
  48. package/lib/typescript/src/screens/chat-detail/hooks/useUnreadAnchorSeen.d.ts.map +1 -0
  49. package/lib/typescript/src/screens/chat-detail/hooks/useUnreadDeeplinkCheck.d.ts +17 -0
  50. package/lib/typescript/src/screens/chat-detail/hooks/useUnreadDeeplinkCheck.d.ts.map +1 -0
  51. package/lib/typescript/src/screens/chat-detail/hooks/useUnreadIndicator.d.ts +21 -0
  52. package/lib/typescript/src/screens/chat-detail/hooks/useUnreadIndicator.d.ts.map +1 -0
  53. package/lib/typescript/src/screens/chat-detail/hooks/useUnreadIndicatorInList.d.ts +35 -0
  54. package/lib/typescript/src/screens/chat-detail/hooks/useUnreadIndicatorInList.d.ts.map +1 -0
  55. package/lib/typescript/src/screens/chat-detail/legend/LegendChatUnreadButton.d.ts +8 -0
  56. package/lib/typescript/src/screens/chat-detail/legend/LegendChatUnreadButton.d.ts.map +1 -0
  57. package/lib/typescript/src/screens/chat-detail/legend/LegendChatUnreadDivider.d.ts +7 -0
  58. package/lib/typescript/src/screens/chat-detail/legend/LegendChatUnreadDivider.d.ts.map +1 -0
  59. package/lib/typescript/src/services/message.d.ts +8 -0
  60. package/lib/typescript/src/services/message.d.ts.map +1 -1
  61. package/lib/typescript/src/store/message.d.ts.map +1 -1
  62. package/lib/typescript/src/store/unreadIndicator.d.ts +10 -0
  63. package/lib/typescript/src/store/unreadIndicator.d.ts.map +1 -0
  64. package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -1
  65. package/lib/typescript/src/types/chat.d.ts +3 -0
  66. package/lib/typescript/src/types/chat.d.ts.map +1 -1
  67. package/lib/typescript/src/types/events.d.ts +17 -1
  68. package/lib/typescript/src/types/events.d.ts.map +1 -1
  69. package/lib/typescript/src/types/unreadIndicator.d.ts +45 -0
  70. package/lib/typescript/src/types/unreadIndicator.d.ts.map +1 -0
  71. package/lib/typescript/src/utils/markReadPolicy.d.ts +27 -0
  72. package/lib/typescript/src/utils/markReadPolicy.d.ts.map +1 -0
  73. package/lib/typescript/src/utils/promise.d.ts +6 -0
  74. package/lib/typescript/src/utils/promise.d.ts.map +1 -1
  75. package/lib/typescript/src/utils/unreadAnchor.d.ts +33 -0
  76. package/lib/typescript/src/utils/unreadAnchor.d.ts.map +1 -0
  77. package/lib/typescript/src/utils/unreadIndicatorState.d.ts +26 -0
  78. package/lib/typescript/src/utils/unreadIndicatorState.d.ts.map +1 -0
  79. package/package.json +2 -2
  80. package/src/screens/chat-detail/ChatDetail.tsx +58 -5
  81. package/src/screens/chat-detail/ChatListLegend.tsx +314 -46
  82. package/src/screens/chat-detail/hooks/createUnreadMarkReadGate.ts +41 -0
  83. package/src/screens/chat-detail/hooks/useMarkConversationRead.ts +197 -0
  84. package/src/screens/chat-detail/hooks/useUnreadAnchorSeen.ts +105 -0
  85. package/src/screens/chat-detail/hooks/useUnreadDeeplinkCheck.ts +68 -0
  86. package/src/screens/chat-detail/hooks/useUnreadIndicator.ts +112 -0
  87. package/src/screens/chat-detail/hooks/useUnreadIndicatorInList.ts +181 -0
  88. package/src/screens/chat-detail/legend/LegendChatUnreadButton.tsx +165 -0
  89. package/src/screens/chat-detail/legend/LegendChatUnreadDivider.tsx +52 -0
  90. package/src/services/message.ts +42 -0
  91. package/src/store/message.ts +23 -5
  92. package/src/store/unreadIndicator.ts +38 -0
  93. package/src/translation/resources/i18n.ts +2 -0
  94. package/src/types/chat.ts +3 -0
  95. package/src/types/events.ts +18 -1
  96. package/src/types/unreadIndicator.ts +49 -0
  97. package/src/utils/markReadPolicy.ts +55 -0
  98. package/src/utils/promise.ts +20 -0
  99. package/src/utils/unreadAnchor.ts +87 -0
  100. package/src/utils/unreadIndicatorState.ts +131 -0
@@ -1 +1 @@
1
- {"version":3,"names":["create","DeviceEventEmitter","OpenIMSDK","MessageType","ViewType","ChatEvent","mergeMessages","isMessageRevoked","useConversationStore","perfMark","PAGE_SIZE","useMessageStore","set","get","messages","hasMoreOld","hasMoreNew","initLoading","moreOldLoading","moreNewLoading","setMessages","hasMore","pushNewMessage","message","state","updateOneMessage","tmpList","idx","findIndex","msg","clientMsgID","deleteOneMessage","filter","getMoreOldMessages","loadMore","applicationType","conversationId","params","count","startClientMsgID","conversationID","viewType","History","loaded","length","res","getAdvancedHistoryMessageListApp","received","messageList","isEnd","getState","currentConversationId","total","error","console","log","getMoreNewMessages","getAdvancedHistoryMessageListReverseApp","Promise","resolve","setTimeout","emit","ScrollToBottom","searchMessages","startClientMsgId","searchPrevParams","Search","searchNextParams","searchCurrentParams","clientMsgIDList","findMessageList","searchPrevRes","searchNextRes","currentMessages","findResultItems","find","item","newMessages","targetMessage","TargetMessageUnavailable","ScrollToMessage","clientMessageId","reset","markMessageRevoked","alreadyRevoked","some","contentType","RevokeMessage","MessageRevoked","revokeQuotedReferences","forEach","quoteElem","quoteMessage","atTextElem"],"sourceRoot":"../../../src","sources":["store/message.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["create","DeviceEventEmitter","OpenIMSDK","MessageType","ViewType","ChatEvent","mergeMessages","isMessageRevoked","useConversationStore","perfMark","PAGE_SIZE","useMessageStore","set","get","messages","hasMoreOld","hasMoreNew","initLoading","moreOldLoading","moreNewLoading","setMessages","hasMore","pushNewMessage","message","state","updateOneMessage","tmpList","idx","findIndex","msg","clientMsgID","deleteOneMessage","filter","getMoreOldMessages","loadMore","applicationType","conversationId","params","count","startClientMsgID","conversationID","viewType","History","loaded","length","res","getAdvancedHistoryMessageListApp","received","messageList","isEnd","getState","currentConversationId","total","error","console","log","getMoreNewMessages","getAdvancedHistoryMessageListReverseApp","Promise","resolve","setTimeout","emit","ScrollToBottom","searchMessages","startClientMsgId","scrollOptions","keepOnUnavailable","exitOnUnavailable","searchPrevParams","Search","searchNextParams","searchCurrentParams","clientMsgIDList","findMessageList","searchPrevRes","searchNextRes","currentMessages","findResultItems","find","item","newMessages","targetMessage","TargetMessageUnavailable","reemitAfterSearch","ScrollToMessage","clientMessageId","fromSearch","reset","markMessageRevoked","alreadyRevoked","some","contentType","RevokeMessage","MessageRevoked","revokeQuotedReferences","forEach","quoteElem","quoteMessage","atTextElem"],"sourceRoot":"../../../src","sources":["store/message.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ import { create } from 'zustand';
4
+ import { INITIAL_UNREAD_INDICATOR_STATE, beginUnreadSession, clearUnreadSession, confirmUnreadDeeplinkCheck, dismissUnreadPill, rearmUnreadDeeplinkCheck, resetUnreadSession, resolveUnreadSession } from "../utils/unreadIndicatorState.js";
5
+
6
+ /**
7
+ * Unread-indicator session for ChatDetail. A dedicated store rather than a
8
+ * slice of `useMessageStore`, whose `reset()` also runs on a deeplink target
9
+ * change. Module scope on purpose: the session outlives remounts of
10
+ * ChatDetail inside the same route (access re-check, SDK reconnect). Internal —
11
+ * not exported from `store/index.ts`.
12
+ */
13
+ export const useUnreadIndicatorStore = create()((set, get) => ({
14
+ ...INITIAL_UNREAD_INDICATOR_STATE,
15
+ begin: options => {
16
+ set(s => beginUnreadSession(s, options, Date.now()));
17
+ return get().token;
18
+ },
19
+ resolve: (token, anchor) => set(s => resolveUnreadSession(s, token, anchor)),
20
+ clear: token => set(s => clearUnreadSession(s, token)),
21
+ dismissPill: token => set(s => dismissUnreadPill(s, token)),
22
+ confirmDeeplinkCheck: (token, hide) => set(s => confirmUnreadDeeplinkCheck(s, token, hide)),
23
+ rearmDeeplinkCheck: token => set(s => rearmUnreadDeeplinkCheck(s, token)),
24
+ reset: () => set(s => resetUnreadSession(s))
25
+ }));
26
+ //# sourceMappingURL=unreadIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["create","INITIAL_UNREAD_INDICATOR_STATE","beginUnreadSession","clearUnreadSession","confirmUnreadDeeplinkCheck","dismissUnreadPill","rearmUnreadDeeplinkCheck","resetUnreadSession","resolveUnreadSession","useUnreadIndicatorStore","set","get","begin","options","s","Date","now","token","resolve","anchor","clear","dismissPill","confirmDeeplinkCheck","hide","rearmDeeplinkCheck","reset"],"sourceRoot":"../../../src","sources":["store/unreadIndicator.ts"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,SAAS;AAEhC,SACEC,8BAA8B,EAC9BC,kBAAkB,EAClBC,kBAAkB,EAClBC,0BAA0B,EAC1BC,iBAAiB,EACjBC,wBAAwB,EACxBC,kBAAkB,EAClBC,oBAAoB,QACf,kCAA+B;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,uBAAuB,GAAGT,MAAM,CAAuB,CAAC,CACnE,CAACU,GAAG,EAAEC,GAAG,MAAM;EACb,GAAGV,8BAA8B;EACjCW,KAAK,EAAGC,OAAO,IAAK;IAClBH,GAAG,CAAEI,CAAC,IAAKZ,kBAAkB,CAACY,CAAC,EAAED,OAAO,EAAEE,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtD,OAAOL,GAAG,CAAC,CAAC,CAACM,KAAK;EACpB,CAAC;EACDC,OAAO,EAAEA,CAACD,KAAK,EAAEE,MAAM,KACrBT,GAAG,CAAEI,CAAC,IAAKN,oBAAoB,CAACM,CAAC,EAAEG,KAAK,EAAEE,MAAM,CAAC,CAAC;EACpDC,KAAK,EAAGH,KAAK,IAAKP,GAAG,CAAEI,CAAC,IAAKX,kBAAkB,CAACW,CAAC,EAAEG,KAAK,CAAC,CAAC;EAC1DI,WAAW,EAAGJ,KAAK,IAAKP,GAAG,CAAEI,CAAC,IAAKT,iBAAiB,CAACS,CAAC,EAAEG,KAAK,CAAC,CAAC;EAC/DK,oBAAoB,EAAEA,CAACL,KAAK,EAAEM,IAAI,KAChCb,GAAG,CAAEI,CAAC,IAAKV,0BAA0B,CAACU,CAAC,EAAEG,KAAK,EAAEM,IAAI,CAAC,CAAC;EACxDC,kBAAkB,EAAGP,KAAK,IACxBP,GAAG,CAAEI,CAAC,IAAKR,wBAAwB,CAACQ,CAAC,EAAEG,KAAK,CAAC,CAAC;EAChDQ,KAAK,EAAEA,CAAA,KAAMf,GAAG,CAAEI,CAAC,IAAKP,kBAAkB,CAACO,CAAC,CAAC;AAC/C,CAAC,CACH,CAAC","ignoreList":[]}
@@ -36,6 +36,8 @@ const i18nKey = {
36
36
  'chat:copy_message_success': 'Sao chép tin nhắn thành công',
37
37
  'chat:copy_message_link_success': 'Sao chép đường dẫn tin nhắn thành công',
38
38
  'chat:target_message_unavailable': 'Tin nhắn có thể đã bị xoá và không còn tồn tại',
39
+ 'chat:unread_divider': 'TIN NHẮN CHƯA ĐỌC',
40
+ 'chat:unread_jump_button': 'Tin chưa đọc',
39
41
  'chat:retry_message': 'Gửi lại',
40
42
  'chat:revoke_message': 'Thu hồi',
41
43
  'chat:pin_message': 'Ghim',
@@ -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":[]}
@@ -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":";;AAoBA,OAAO,MAAMA,aAAa,GAAG;EAC3BC,EAAE,EAAE,IAAI;EACRC,SAAS,EAAE,WAAW;EACtBC,OAAO,EAAE;AACX,CAAU;AAsCV,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;AAgBV,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;;AA8B3B","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":";;AAqBA,OAAO,MAAMA,aAAa,GAAG;EAC3BC,EAAE,EAAE,IAAI;EACRC,SAAS,EAAE,WAAW;EACtBC,OAAO,EAAE;AACX,CAAU;AAsCV,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;AAgIzB,OAAO,MAAMC,iBAAiB,GAAG;EAC/BC,KAAK,EAAE,OAAO;EACdC,OAAO,EAAE;AACX,CAAU;AAgBV,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;;AA8B3B","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=unreadIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/unreadIndicator.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * When ChatDetail may mark the conversation read. Since OpenIM rc43 every
5
+ * call is a server round-trip (two SDK requests), so it's edge-triggered and
6
+ * throttled instead of fired on every scroll event. Pure, for unit tests.
7
+ */
8
+
9
+ /** A list (re)load just landed — not something the user did. */
10
+ export const isListLoadReason = reason => reason === 'list-load' || reason === 'window-reload';
11
+ export const shouldRequestMarkRead = input => {
12
+ const atTrueEnd = input.listLoaded && !input.hasMoreNew && input.atBottom;
13
+ // The user saw it and is leaving: gate and focus no longer matter, but a
14
+ // message that only arrived while blurred must not be marked read.
15
+ if (input.reason === 'leave') return atTrueEnd && input.dirtyWhileFocused;
16
+ if (isListLoadReason(input.reason) && input.isDeeplinkFirstLoad) {
17
+ return false;
18
+ }
19
+ return !input.gateClosed && input.focused && input.appActive && atTrueEnd;
20
+ };
21
+ export const MARK_READ_THROTTLE_MS = 1000;
22
+
23
+ /** 0 → call now; otherwise the delay of the trailing call. */
24
+ export const nextMarkReadDelay = (now, lastCallAt, throttleMs = MARK_READ_THROTTLE_MS) => Math.max(0, lastCallAt + throttleMs - now);
25
+ //# sourceMappingURL=markReadPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isListLoadReason","reason","shouldRequestMarkRead","input","atTrueEnd","listLoaded","hasMoreNew","atBottom","dirtyWhileFocused","isDeeplinkFirstLoad","gateClosed","focused","appActive","MARK_READ_THROTTLE_MS","nextMarkReadDelay","now","lastCallAt","throttleMs","Math","max"],"sourceRoot":"../../../src","sources":["utils/markReadPolicy.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AA4BA;AACA,OAAO,MAAMA,gBAAgB,GAAIC,MAAsB,IACrDA,MAAM,KAAK,WAAW,IAAIA,MAAM,KAAK,eAAe;AAEtD,OAAO,MAAMC,qBAAqB,GAAIC,KAAoB,IAAc;EACtE,MAAMC,SAAS,GAAGD,KAAK,CAACE,UAAU,IAAI,CAACF,KAAK,CAACG,UAAU,IAAIH,KAAK,CAACI,QAAQ;EACzE;EACA;EACA,IAAIJ,KAAK,CAACF,MAAM,KAAK,OAAO,EAAE,OAAOG,SAAS,IAAID,KAAK,CAACK,iBAAiB;EACzE,IAAIR,gBAAgB,CAACG,KAAK,CAACF,MAAM,CAAC,IAAIE,KAAK,CAACM,mBAAmB,EAAE;IAC/D,OAAO,KAAK;EACd;EACA,OAAO,CAACN,KAAK,CAACO,UAAU,IAAIP,KAAK,CAACQ,OAAO,IAAIR,KAAK,CAACS,SAAS,IAAIR,SAAS;AAC3E,CAAC;AAED,OAAO,MAAMS,qBAAqB,GAAG,IAAI;;AAEzC;AACA,OAAO,MAAMC,iBAAiB,GAAGA,CAC/BC,GAAW,EACXC,UAAkB,EAClBC,UAAU,GAAGJ,qBAAqB,KACvBK,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEH,UAAU,GAAGC,UAAU,GAAGF,GAAG,CAAC","ignoreList":[]}
@@ -11,4 +11,20 @@ export const allSettled = promises => Promise.all(promises.map(p => Promise.reso
11
11
  status: 'rejected',
12
12
  reason
13
13
  }))));
14
+
15
+ /**
16
+ * Rejects with `Error('timeout')` if `promise` hasn't settled within `ms`.
17
+ * A settle that lands after the timeout is ignored, and the timer is always
18
+ * cleared on settle so nothing is left pending.
19
+ */
20
+ export const withTimeout = (promise, ms) => new Promise((resolve, reject) => {
21
+ const timer = setTimeout(() => reject(new Error('timeout')), ms);
22
+ promise.then(value => {
23
+ clearTimeout(timer);
24
+ resolve(value);
25
+ }, error => {
26
+ clearTimeout(timer);
27
+ reject(error);
28
+ });
29
+ });
14
30
  //# sourceMappingURL=promise.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["allSettled","promises","Promise","all","map","p","resolve","then","value","status","catch","reason"],"sourceRoot":"../../../src","sources":["utils/promise.ts"],"mappings":";;AAIA;AACA;AACA;AACA;AACA,OAAO,MAAMA,UAAU,GACrBC,QAAyB,IAEzBC,OAAO,CAACC,GAAG,CACTF,QAAQ,CAACG,GAAG,CAAEC,CAAC,IACbH,OAAO,CAACI,OAAO,CAACD,CAAC,CAAC,CACfE,IAAI,CAAEC,KAAK,KAAM;EAAEC,MAAM,EAAE,WAAoB;EAAED;AAAM,CAAC,CAAC,CAAC,CAC1DE,KAAK,CAAEC,MAAM,KAAM;EAAEF,MAAM,EAAE,UAAmB;EAAEE;AAAO,CAAC,CAAC,CAChE,CACF,CAA8D","ignoreList":[]}
1
+ {"version":3,"names":["allSettled","promises","Promise","all","map","p","resolve","then","value","status","catch","reason","withTimeout","promise","ms","reject","timer","setTimeout","Error","clearTimeout","error"],"sourceRoot":"../../../src","sources":["utils/promise.ts"],"mappings":";;AAIA;AACA;AACA;AACA;AACA,OAAO,MAAMA,UAAU,GACrBC,QAAyB,IAEzBC,OAAO,CAACC,GAAG,CACTF,QAAQ,CAACG,GAAG,CAAEC,CAAC,IACbH,OAAO,CAACI,OAAO,CAACD,CAAC,CAAC,CACfE,IAAI,CAAEC,KAAK,KAAM;EAAEC,MAAM,EAAE,WAAoB;EAAED;AAAM,CAAC,CAAC,CAAC,CAC1DE,KAAK,CAAEC,MAAM,KAAM;EAAEF,MAAM,EAAE,UAAmB;EAAEE;AAAO,CAAC,CAAC,CAChE,CACF,CAA8D;;AAEhE;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GAAGA,CAAIC,OAAmB,EAAEC,EAAU,KAC5D,IAAIZ,OAAO,CAAI,CAACI,OAAO,EAAES,MAAM,KAAK;EAClC,MAAMC,KAAK,GAAGC,UAAU,CAAC,MAAMF,MAAM,CAAC,IAAIG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAEJ,EAAE,CAAC;EAChED,OAAO,CAACN,IAAI,CACTC,KAAK,IAAK;IACTW,YAAY,CAACH,KAAK,CAAC;IACnBV,OAAO,CAACE,KAAK,CAAC;EAChB,CAAC,EACAY,KAAK,IAAK;IACTD,YAAY,CAACH,KAAK,CAAC;IACnBD,MAAM,CAACK,KAAK,CAAC;EACf,CACF,CAAC;AACH,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ import { getGroupIdFromConversationId, isConversationParticipant, isSingleConversationId } from "./conversation.js";
4
+
5
+ /** Height of the divider at the top of the anchor row (Figma: 27px). */
6
+ export const UNREAD_DIVIDER_HEIGHT = 27;
7
+ export const messageBelongsToConversation = (message, conversationId) => isSingleConversationId(conversationId) ? isConversationParticipant(conversationId, message.sendID) && isConversationParticipant(conversationId, message.recvID) : !!message.groupID && getGroupIdFromConversationId(conversationId) === message.groupID;
8
+
9
+ /**
10
+ * Validates the server's first-unread message before it's trusted: a finite
11
+ * positive `seq`, a non-empty `clientMsgID`, and a message that belongs to
12
+ * this conversation. Anything else → `null` (no indicator).
13
+ */
14
+ export const toUnreadAnchor = (message, conversationId) => {
15
+ if (!message) return null;
16
+ const {
17
+ clientMsgID,
18
+ seq
19
+ } = message;
20
+ if (typeof clientMsgID !== 'string' || !clientMsgID) return null;
21
+ if (typeof seq !== 'number' || !Number.isFinite(seq) || seq <= 0) {
22
+ return null;
23
+ }
24
+ if (!messageBelongsToConversation(message, conversationId)) return null;
25
+ return {
26
+ clientMsgID,
27
+ seq
28
+ };
29
+ };
30
+
31
+ /**
32
+ * The list row that carries the divider: the first RENDERED message at or
33
+ * after the anchor. The anchor itself may be filtered out of the rendered list
34
+ * (internal / bot notification messages), so the match is by `seq` as well as
35
+ * by id. Only valid when the boundary is inside the loaded window — the raw
36
+ * window's oldest `seq` is at or before the anchor, or there's no older
37
+ * history — otherwise `null` (the anchor is out of window).
38
+ * Returns the row's list key (same as `keyExtractor` for real messages).
39
+ */
40
+ export const resolveUnreadAnchorRowId = (rendered, anchor, window) => {
41
+ if (!anchor || rendered.length === 0) return null;
42
+ const boundaryLoaded = !window.hasMoreOld || window.oldestLoadedSeq > 0 && window.oldestLoadedSeq <= anchor.seq;
43
+ if (!boundaryLoaded) return null;
44
+ const row = rendered.find(m => m.clientMsgID === anchor.clientMsgID || m.seq > 0 && m.seq >= anchor.seq);
45
+ return row ? row.clientMsgID || row.serverMsgID || null : null;
46
+ };
47
+
48
+ /**
49
+ * Whether the top edge of a row (where the divider sits) is inside the
50
+ * viewport with at least `minVisiblePx` of it showing. A tall row clipped at
51
+ * the top — only its bottom part visible — does NOT count.
52
+ */
53
+ export const isRowTopInViewport = (rowTop, scroll, scrollLength, minVisiblePx = UNREAD_DIVIDER_HEIGHT) => rowTop != null && rowTop >= scroll && rowTop + minVisiblePx <= scroll + scrollLength;
54
+
55
+ /** D11: a deeplink to a message older than the first unread hides the indicator. */
56
+ export const isDeeplinkTargetBeforeAnchor = (targetSeq, anchorSeq) => !!targetSeq && !!anchorSeq && targetSeq > 0 && targetSeq < anchorSeq;
57
+ //# sourceMappingURL=unreadAnchor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getGroupIdFromConversationId","isConversationParticipant","isSingleConversationId","UNREAD_DIVIDER_HEIGHT","messageBelongsToConversation","message","conversationId","sendID","recvID","groupID","toUnreadAnchor","clientMsgID","seq","Number","isFinite","resolveUnreadAnchorRowId","rendered","anchor","window","length","boundaryLoaded","hasMoreOld","oldestLoadedSeq","row","find","m","serverMsgID","isRowTopInViewport","rowTop","scroll","scrollLength","minVisiblePx","isDeeplinkTargetBeforeAnchor","targetSeq","anchorSeq"],"sourceRoot":"../../../src","sources":["utils/unreadAnchor.ts"],"mappings":";;AAEA,SACEA,4BAA4B,EAC5BC,yBAAyB,EACzBC,sBAAsB,QACjB,mBAAgB;;AAEvB;AACA,OAAO,MAAMC,qBAAqB,GAAG,EAAE;AAEvC,OAAO,MAAMC,4BAA4B,GAAGA,CAC1CC,OAA2D,EAC3DC,cAAsB,KAEtBJ,sBAAsB,CAACI,cAAc,CAAC,GAClCL,yBAAyB,CAACK,cAAc,EAAED,OAAO,CAACE,MAAM,CAAC,IACzDN,yBAAyB,CAACK,cAAc,EAAED,OAAO,CAACG,MAAM,CAAC,GACzD,CAAC,CAACH,OAAO,CAACI,OAAO,IACjBT,4BAA4B,CAACM,cAAc,CAAC,KAAKD,OAAO,CAACI,OAAO;;AAEtE;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,cAAc,GAAGA,CAC5BL,OAAuC,EACvCC,cAAsB,KACE;EACxB,IAAI,CAACD,OAAO,EAAE,OAAO,IAAI;EACzB,MAAM;IAAEM,WAAW;IAAEC;EAAI,CAAC,GAAGP,OAAO;EACpC,IAAI,OAAOM,WAAW,KAAK,QAAQ,IAAI,CAACA,WAAW,EAAE,OAAO,IAAI;EAChE,IAAI,OAAOC,GAAG,KAAK,QAAQ,IAAI,CAACC,MAAM,CAACC,QAAQ,CAACF,GAAG,CAAC,IAAIA,GAAG,IAAI,CAAC,EAAE;IAChE,OAAO,IAAI;EACb;EACA,IAAI,CAACR,4BAA4B,CAACC,OAAO,EAAEC,cAAc,CAAC,EAAE,OAAO,IAAI;EACvE,OAAO;IAAEK,WAAW;IAAEC;EAAI,CAAC;AAC7B,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMG,wBAAwB,GAAGA,CACtCC,QAAgC,EAChCC,MAA2B,EAC3BC,MAAwD,KACtC;EAClB,IAAI,CAACD,MAAM,IAAID,QAAQ,CAACG,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;EACjD,MAAMC,cAAc,GAClB,CAACF,MAAM,CAACG,UAAU,IACjBH,MAAM,CAACI,eAAe,GAAG,CAAC,IAAIJ,MAAM,CAACI,eAAe,IAAIL,MAAM,CAACL,GAAI;EACtE,IAAI,CAACQ,cAAc,EAAE,OAAO,IAAI;EAChC,MAAMG,GAAG,GAAGP,QAAQ,CAACQ,IAAI,CACtBC,CAAC,IACAA,CAAC,CAACd,WAAW,KAAKM,MAAM,CAACN,WAAW,IAAKc,CAAC,CAACb,GAAG,GAAG,CAAC,IAAIa,CAAC,CAACb,GAAG,IAAIK,MAAM,CAACL,GAC1E,CAAC;EACD,OAAOW,GAAG,GAAGA,GAAG,CAACZ,WAAW,IAAIY,GAAG,CAACG,WAAW,IAAI,IAAI,GAAG,IAAI;AAChE,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,GAAGA,CAChCC,MAA0B,EAC1BC,MAAc,EACdC,YAAoB,EACpBC,YAAY,GAAG5B,qBAAqB,KAEpCyB,MAAM,IAAI,IAAI,IACdA,MAAM,IAAIC,MAAM,IAChBD,MAAM,GAAGG,YAAY,IAAIF,MAAM,GAAGC,YAAY;;AAEhD;AACA,OAAO,MAAME,4BAA4B,GAAGA,CAC1CC,SAAkB,EAClBC,SAAkB,KAElB,CAAC,CAACD,SAAS,IAAI,CAAC,CAACC,SAAS,IAAID,SAAS,GAAG,CAAC,IAAIA,SAAS,GAAGC,SAAS","ignoreList":[]}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Pure transitions behind `useUnreadIndicatorStore` — kept free of React and
5
+ * zustand so they can be unit-tested. Every transition after `begin` is
6
+ * token-scoped: a token that isn't the current session's leaves the state
7
+ * untouched (same reference).
8
+ */
9
+
10
+ // Slack past the lookup timeout before the gate treats itself as open even if
11
+ // `resolve` never ran.
12
+ export const UNREAD_GATE_WATCHDOG_SLACK_MS = 500;
13
+ export const INITIAL_UNREAD_INDICATOR_STATE = {
14
+ token: 0,
15
+ routeKey: undefined,
16
+ conversationId: undefined,
17
+ pending: false,
18
+ pendingSince: 0,
19
+ anchor: null,
20
+ pillDismissed: false,
21
+ awaitingDeeplinkCheck: false,
22
+ settledBy: null
23
+ };
24
+ const isMine = (s, token) => token === s.token;
25
+ export const beginUnreadSession = (s, {
26
+ routeKey,
27
+ conversationId,
28
+ skip,
29
+ awaitDeeplinkCheck
30
+ }, now) => ({
31
+ ...INITIAL_UNREAD_INDICATOR_STATE,
32
+ token: s.token + 1,
33
+ routeKey,
34
+ conversationId,
35
+ pending: !skip,
36
+ pendingSince: skip ? 0 : now,
37
+ awaitingDeeplinkCheck: !skip && awaitDeeplinkCheck
38
+ });
39
+ export const resolveUnreadSession = (s, token, anchor) => !isMine(s, token) || !s.pending ? s : {
40
+ ...s,
41
+ pending: false,
42
+ anchor,
43
+ settledBy: 'resolve'
44
+ };
45
+
46
+ // Doesn't bump the token: a late `resolve` is already ignored because
47
+ // `pending` is false. Only a new `begin` (a new visit) bumps it.
48
+ export const clearUnreadSession = (s, token) => !isMine(s, token) ? s : {
49
+ ...s,
50
+ pending: false,
51
+ anchor: null,
52
+ pillDismissed: true,
53
+ awaitingDeeplinkCheck: false,
54
+ settledBy: 'clear'
55
+ };
56
+ export const dismissUnreadPill = (s, token) => !isMine(s, token) || s.pillDismissed ? s : {
57
+ ...s,
58
+ pillDismissed: true
59
+ };
60
+ export const confirmUnreadDeeplinkCheck = (s, token, hide) => {
61
+ if (!isMine(s, token)) return s;
62
+ // Not a clear: the user is still on the screen, so it must not trigger
63
+ // the leave flush that a blur's clear does.
64
+ if (hide) return {
65
+ ...clearUnreadSession(s, token),
66
+ settledBy: 'hide'
67
+ };
68
+ return s.awaitingDeeplinkCheck ? {
69
+ ...s,
70
+ awaitingDeeplinkCheck: false
71
+ } : s;
72
+ };
73
+ export const rearmUnreadDeeplinkCheck = (s, token) => !isMine(s, token) || !s.anchor || s.awaitingDeeplinkCheck ? s : {
74
+ ...s,
75
+ awaitingDeeplinkCheck: true
76
+ };
77
+ export const resetUnreadSession = s => ({
78
+ ...INITIAL_UNREAD_INDICATOR_STATE,
79
+ token: s.token + 1
80
+ });
81
+
82
+ /** When the watchdog opens a still-pending gate on its own. */
83
+ export const getUnreadGateDeadline = (s, timeoutMs) => s.pendingSince + timeoutMs + UNREAD_GATE_WATCHDOG_SLACK_MS;
84
+
85
+ /**
86
+ * Whether mark-read must wait. Closed only for MY session while its lookup is
87
+ * still pending and within the watchdog deadline. No session yet (not focused,
88
+ * or access not confirmed) is fail-closed; a session superseded by another
89
+ * visit is not this screen's gate.
90
+ */
91
+ export const isUnreadGateClosed = (s, myToken, now, timeoutMs) => {
92
+ if (myToken == null) return true;
93
+ if (!isMine(s, myToken)) return false;
94
+ return s.pending && now <= getUnreadGateDeadline(s, timeoutMs);
95
+ };
96
+ //# sourceMappingURL=unreadIndicatorState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["UNREAD_GATE_WATCHDOG_SLACK_MS","INITIAL_UNREAD_INDICATOR_STATE","token","routeKey","undefined","conversationId","pending","pendingSince","anchor","pillDismissed","awaitingDeeplinkCheck","settledBy","isMine","s","beginUnreadSession","skip","awaitDeeplinkCheck","now","resolveUnreadSession","clearUnreadSession","dismissUnreadPill","confirmUnreadDeeplinkCheck","hide","rearmUnreadDeeplinkCheck","resetUnreadSession","getUnreadGateDeadline","timeoutMs","isUnreadGateClosed","myToken"],"sourceRoot":"../../../src","sources":["utils/unreadIndicatorState.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatDetail.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/ChatDetail.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA2W/C,QAAA,MAAM,YAAY,GAAI,OAAO,eAAe,gCAS3C,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"ChatDetail.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/ChatDetail.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAga/C,QAAA,MAAM,YAAY,GAAI,OAAO,eAAe,gCAS3C,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -14,7 +14,10 @@ interface ChatListLegendInternalProps extends ChatListProps {
14
14
  dismissAreaTouchProps?: DismissAreaTouchProps;
15
15
  isComposerPanelOpen?: boolean;
16
16
  onDismissAreaScrollBeginDrag?: () => void;
17
+ unreadToken?: number | null;
18
+ unreadTokenRef?: RefObject<number | null>;
19
+ deeplinkTargetId?: string;
17
20
  }
18
- export declare const ChatListLegend: import("react").MemoExoticComponent<({ messages, conversationId, customMessageItemFactory, onLoadMoreOld, moreOldLoading, hasMoreOld, onLoadMoreNew, hasMoreNew, onMediaPress: onMediaPressProp, onPressUrl: onPressUrlProp, onLongPress, listRef, freeze, scrollMessageToEnd, keyboardOffset, isLoading, renderConversationViewHeader, dismissAreaTouchProps, isComposerPanelOpen, onDismissAreaScrollBeginDrag, }: ChatListLegendInternalProps) => import("react").JSX.Element>;
21
+ export declare const ChatListLegend: import("react").MemoExoticComponent<({ messages, conversationId, customMessageItemFactory, onLoadMoreOld, moreOldLoading, hasMoreOld, onLoadMoreNew, hasMoreNew, onMediaPress: onMediaPressProp, onPressUrl: onPressUrlProp, onLongPress, listRef, freeze, scrollMessageToEnd, keyboardOffset, isLoading, renderConversationViewHeader, dismissAreaTouchProps, isComposerPanelOpen, onDismissAreaScrollBeginDrag, unreadToken, unreadTokenRef, deeplinkTargetId, }: ChatListLegendInternalProps) => import("react").JSX.Element>;
19
22
  export {};
20
23
  //# sourceMappingURL=ChatListLegend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatListLegend.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/ChatListLegend.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAQf,OAAiB,EAKf,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,8BAA8B,CAAC;AActC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA0B7C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AA+D7E,UAAU,2BAA4B,SAAQ,aAAa;IACzD,OAAO,EAAE,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACzC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,kBAAkB,EAAE,CAAC,IAAI,EAAE;QACzB,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,OAAO,CAAC;KACxB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IAGvB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAE9C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,4BAA4B,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,cAAc,uZAsBtB,2BAA2B,iCAu4B/B,CAAC"}
1
+ {"version":3,"file":"ChatListLegend.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/ChatListLegend.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAQf,OAAiB,EAKf,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,8BAA8B,CAAC;AActC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAyB7C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAyE7E,UAAU,2BAA4B,SAAQ,aAAa;IACzD,OAAO,EAAE,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACzC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,kBAAkB,EAAE,CAAC,IAAI,EAAE;QACzB,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,OAAO,CAAC;KACxB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IAGvB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAE9C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,4BAA4B,CAAC,EAAE,MAAM,IAAI,CAAC;IAG1C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAG1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,scAyBtB,2BAA2B,iCAgoC/B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { RefObject } from 'react';
2
+ import type { MarkReadGate } from './useMarkConversationRead';
3
+ /**
4
+ * Holds mark-read back until this screen's first-unread lookup has answered,
5
+ * so the thread is never marked read before the anchor is captured. Scoped to
6
+ * the token in `tokenRef`: another screen's session never opens or closes it.
7
+ */
8
+ export declare const createUnreadMarkReadGate: (tokenRef: RefObject<number | null>) => MarkReadGate;
9
+ //# sourceMappingURL=createUnreadMarkReadGate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createUnreadMarkReadGate.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/hooks/createUnreadMarkReadGate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GACnC,UAAU,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,KACjC,YAwBD,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { type RefObject } from 'react';
2
+ import { type MarkReadReason } from '../../../utils/markReadPolicy';
3
+ /**
4
+ * Something mark-read has to wait for. Optional, so the edge-triggered
5
+ * mark-read works on its own (gate open) without the unread indicator.
6
+ */
7
+ export interface MarkReadGate {
8
+ isClosed: () => boolean;
9
+ /** When a closed gate opens on its own (epoch ms), or null if it won't. */
10
+ openDeadline: () => number | null;
11
+ /** `onOpen`: the gate opened; `onClear`: the session ended (non-child blur). */
12
+ subscribe: (handlers: {
13
+ onOpen: () => void;
14
+ onClear: () => void;
15
+ }) => () => void;
16
+ }
17
+ /**
18
+ * Edge-triggered, throttled mark-read. A trigger marks the conversation dirty
19
+ * and tries to flush; the flush only calls the SDK when `shouldRequestMarkRead`
20
+ * allows it, at most once per `MARK_READ_THROTTLE_MS` (trailing). The dirty
21
+ * flag is cleared only by a successful call, so a suppressed or failed one is
22
+ * retried by the next trigger. Everything is read through refs, so the
23
+ * returned callbacks are stable.
24
+ *
25
+ * Deeplink entry: the first list load of each deeplink target never marks the
26
+ * thread dirty — the list rests at the window end only until the jump runs.
27
+ */
28
+ export declare const useMarkConversationRead: ({ conversationId, isAtBottomRef, listLoadedRef, hasMoreNew, deeplinkTargetId, gate, }: {
29
+ conversationId?: string;
30
+ isAtBottomRef: RefObject<boolean>;
31
+ listLoadedRef: RefObject<boolean>;
32
+ hasMoreNew: boolean;
33
+ deeplinkTargetId?: string;
34
+ gate?: MarkReadGate;
35
+ }) => {
36
+ requestMarkRead: (reason: MarkReadReason) => void;
37
+ flushMarkRead: (reason: MarkReadReason) => void;
38
+ };
39
+ //# sourceMappingURL=useMarkConversationRead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMarkConversationRead.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/hooks/useMarkConversationRead.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvE,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,+BAA+B,CAAC;AAEvC;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,2EAA2E;IAC3E,YAAY,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAClC,gFAAgF;IAChF,SAAS,EAAE,CAAC,QAAQ,EAAE;QACpB,MAAM,EAAE,MAAM,IAAI,CAAC;QACnB,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,KAAK,MAAM,IAAI,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,GAAI,uFAOrC;IACD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,aAAa,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;8BA+EY,cAAc;4BAakB,cAAc;CAoD1D,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { type RefObject } from 'react';
2
+ import type { LegendListRef, ViewToken, ViewabilityConfig } from '@legendapp/list/react-native';
3
+ /**
4
+ * "The divider has been seen" = the anchor row's TOP edge (where the divider
5
+ * sits) is in the viewport, after initial positioning has settled. Before
6
+ * settle — Old Arch corrects the estimated `initialScrollAtEnd` later — a
7
+ * visible divider only hides the pill (render-time check), it doesn't dismiss
8
+ * it for good.
9
+ */
10
+ export declare const useUnreadAnchorSeen: ({ rowId, unreadToken, isLoading, listRef, }: {
11
+ rowId: string | null;
12
+ unreadToken: number | null;
13
+ isLoading: boolean;
14
+ listRef: RefObject<LegendListRef | null>;
15
+ }) => {
16
+ positionSettled: boolean;
17
+ viewabilityReady: boolean;
18
+ viewabilityConfig: ViewabilityConfig;
19
+ isAnchorTopVisibleNow: () => boolean;
20
+ checkAnchorSeen: () => void;
21
+ handleViewableItemsChanged: ({ viewableItems }: {
22
+ viewableItems: ViewToken[];
23
+ }) => void;
24
+ markPositionSettled: () => void;
25
+ };
26
+ //# sourceMappingURL=useUnreadAnchorSeen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUnreadAnchorSeen.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/hooks/useUnreadAnchorSeen.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;AAStC;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,6CAKjC;IACD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;CAC1C;;;;;;oDA2BuB;QAAE,aAAa,EAAE,SAAS,EAAE,CAAA;KAAE;;CAwCrD,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type RefObject } from 'react';
2
+ /**
3
+ * D11: a deeplink to a message OLDER than the first unread hides the
4
+ * indicator; a deeplink at/after it (or whose target never shows up) shows it.
5
+ * Decided explicitly once the lookup has answered and the window has loaded,
6
+ * and re-decided — against the existing anchor, with no SDK call — when
7
+ * `targetMessageId` changes on the same screen.
8
+ *
9
+ * Must run above `useMessages` in ChatDetail: the re-arm effect has to land
10
+ * before `useMessages`' `reset()` in the same commit.
11
+ */
12
+ export declare const useUnreadDeeplinkCheck: ({ targetMessageId, unreadToken, tokenRef, }: {
13
+ targetMessageId?: string;
14
+ unreadToken: number | null;
15
+ tokenRef: RefObject<number | null>;
16
+ }) => void;
17
+ //# sourceMappingURL=useUnreadDeeplinkCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUnreadDeeplinkCheck.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/hooks/useUnreadDeeplinkCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK1D;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,GAAI,6CAIpC;IACD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACpC,SA4CA,CAAC"}
@@ -0,0 +1,21 @@
1
+ export declare const CHILD_NAV_TTL_MS = 1000;
2
+ /**
3
+ * Owns this screen's unread-indicator session. `getFirstUnreadMessage` records
4
+ * the thread's open time server-side, so it's called exactly once per route
5
+ * visit: on the first focus after access is confirmed. A remount of ChatDetail
6
+ * inside the same route (access re-check, SDK reconnect) adopts the existing
7
+ * session instead of calling again; a new route key is a new visit.
8
+ *
9
+ * Must be called above `useMessages` (see `useUnreadDeeplinkCheck`).
10
+ */
11
+ export declare const useUnreadIndicator: ({ conversationId, isBotConversation, targetMessageId, accessConfirmed, }: {
12
+ conversationId: string;
13
+ isBotConversation: boolean;
14
+ targetMessageId?: string;
15
+ accessConfirmed: boolean;
16
+ }) => {
17
+ unreadToken: number;
18
+ unreadTokenRef: import("react").RefObject<number>;
19
+ markChildNavigation: () => void;
20
+ };
21
+ //# sourceMappingURL=useUnreadIndicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUnreadIndicator.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/hooks/useUnreadIndicator.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAAI,0EAKhC;IACD,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B;;;;CA4EA,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { type RefObject } from 'react';
2
+ import type { MessageItem } from '@droppii/openim-rn-client-sdk';
3
+ import type { LegendListRef } from '@legendapp/list/react-native';
4
+ import { type ScrollToMessageOptions } from '../../../types/events';
5
+ /** Lands the divider ~100px below the list top, no highlight, never exits. */
6
+ export declare const UNREAD_JUMP_OPTIONS: ScrollToMessageOptions;
7
+ /**
8
+ * Wires the unread session into the list: which row carries the divider,
9
+ * whether the pill shows, and the pill's jump. The session is token-scoped —
10
+ * a second ChatDetail of the same thread never reads or dismisses this one's.
11
+ */
12
+ export declare const useUnreadIndicatorInList: ({ messages, unreadToken, isLoading, hasMoreOld, moreOldLoading, onLoadMoreOld, isBotConversation, listRef, jumpInFlightRef, setJumpInFlight, }: {
13
+ messages: MessageItem[];
14
+ unreadToken: number | null;
15
+ isLoading: boolean;
16
+ hasMoreOld: boolean;
17
+ moreOldLoading: boolean;
18
+ onLoadMoreOld?: (loadMore: boolean) => void;
19
+ isBotConversation: boolean;
20
+ listRef: RefObject<LegendListRef | null>;
21
+ jumpInFlightRef: RefObject<boolean>;
22
+ /** Writes the flag (and its safety timeout); `jumpInFlightRef` reads it. */
23
+ setJumpInFlight: (inFlight: boolean) => void;
24
+ }) => {
25
+ unreadAnchorRowId: string;
26
+ isPillVisible: boolean;
27
+ viewabilityConfig: import("@legendapp/list/react-native").ViewabilityConfig;
28
+ handleViewableItemsChanged: ({ viewableItems }: {
29
+ viewableItems: import("@legendapp/list/react-native").ViewToken[];
30
+ }) => void;
31
+ checkAnchorSeen: () => void;
32
+ markPositionSettled: () => void;
33
+ jumpToFirstUnread: () => void;
34
+ };
35
+ //# sourceMappingURL=useUnreadIndicatorInList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUnreadIndicatorInList.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/hooks/useUnreadIndicatorInList.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAGlE,OAAO,EAAa,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAI/E,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,EAAE,sBAKjC,CAAC;AASF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAI,gJAWtC;IACD,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACzC,eAAe,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,4EAA4E;IAC5E,eAAe,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;;;;;;;;;;CA+HA,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface LegendChatUnreadButtonProps {
2
+ visible: boolean;
3
+ onPress?: () => void;
4
+ }
5
+ /** "Tin chưa đọc" half-pill, top-right of the list; jumps to the divider. */
6
+ export declare const LegendChatUnreadButton: import("react").MemoExoticComponent<({ visible, onPress }: LegendChatUnreadButtonProps) => import("react").JSX.Element>;
7
+ export {};
8
+ //# sourceMappingURL=LegendChatUnreadButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LegendChatUnreadButton.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/legend/LegendChatUnreadButton.tsx"],"names":[],"mappings":"AAuFA,UAAU,2BAA2B;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,6EAA6E;AAC7E,eAAO,MAAM,sBAAsB,6DACV,2BAA2B,iCAkCnD,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * "TIN NHẮN CHƯA ĐỌC" row above the first unread message. Figma spacing: the
3
+ * previous row's 8 bottom margin + 8 top margin + 4 padding = 20 above the
4
+ * lines; 4 padding + 12 bottom margin + the time label's 8 = 24 below.
5
+ */
6
+ export declare const LegendChatUnreadDivider: import("react").MemoExoticComponent<() => import("react").JSX.Element>;
7
+ //# sourceMappingURL=LegendChatUnreadDivider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LegendChatUnreadDivider.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/legend/LegendChatUnreadDivider.tsx"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,wEAwBlC,CAAC"}