@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.
- package/lib/module/screens/chat-detail/ChatDetail.js +42 -7
- package/lib/module/screens/chat-detail/ChatDetail.js.map +1 -1
- package/lib/module/screens/chat-detail/ChatListLegend.js +249 -49
- package/lib/module/screens/chat-detail/ChatListLegend.js.map +1 -1
- package/lib/module/screens/chat-detail/hooks/createUnreadMarkReadGate.js +32 -0
- package/lib/module/screens/chat-detail/hooks/createUnreadMarkReadGate.js.map +1 -0
- package/lib/module/screens/chat-detail/hooks/useMarkConversationRead.js +180 -0
- package/lib/module/screens/chat-detail/hooks/useMarkConversationRead.js.map +1 -0
- package/lib/module/screens/chat-detail/hooks/useUnreadAnchorSeen.js +88 -0
- package/lib/module/screens/chat-detail/hooks/useUnreadAnchorSeen.js.map +1 -0
- package/lib/module/screens/chat-detail/hooks/useUnreadDeeplinkCheck.js +59 -0
- package/lib/module/screens/chat-detail/hooks/useUnreadDeeplinkCheck.js.map +1 -0
- package/lib/module/screens/chat-detail/hooks/useUnreadIndicator.js +105 -0
- package/lib/module/screens/chat-detail/hooks/useUnreadIndicator.js.map +1 -0
- package/lib/module/screens/chat-detail/hooks/useUnreadIndicatorInList.js +157 -0
- package/lib/module/screens/chat-detail/hooks/useUnreadIndicatorInList.js.map +1 -0
- package/lib/module/screens/chat-detail/legend/LegendChatUnreadButton.js +140 -0
- package/lib/module/screens/chat-detail/legend/LegendChatUnreadButton.js.map +1 -0
- package/lib/module/screens/chat-detail/legend/LegendChatUnreadDivider.js +51 -0
- package/lib/module/screens/chat-detail/legend/LegendChatUnreadDivider.js.map +1 -0
- package/lib/module/services/message.js +30 -0
- package/lib/module/services/message.js.map +1 -1
- package/lib/module/store/message.js +25 -4
- package/lib/module/store/message.js.map +1 -1
- package/lib/module/store/unreadIndicator.js +26 -0
- package/lib/module/store/unreadIndicator.js.map +1 -0
- package/lib/module/translation/resources/i18n.js +2 -0
- package/lib/module/translation/resources/i18n.js.map +1 -1
- package/lib/module/types/chat.js.map +1 -1
- package/lib/module/types/unreadIndicator.js +2 -0
- package/lib/module/types/unreadIndicator.js.map +1 -0
- package/lib/module/utils/markReadPolicy.js +25 -0
- package/lib/module/utils/markReadPolicy.js.map +1 -0
- package/lib/module/utils/promise.js +16 -0
- package/lib/module/utils/promise.js.map +1 -1
- package/lib/module/utils/unreadAnchor.js +57 -0
- package/lib/module/utils/unreadAnchor.js.map +1 -0
- package/lib/module/utils/unreadIndicatorState.js +96 -0
- package/lib/module/utils/unreadIndicatorState.js.map +1 -0
- package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/ChatListLegend.d.ts +4 -1
- package/lib/typescript/src/screens/chat-detail/ChatListLegend.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/hooks/createUnreadMarkReadGate.d.ts +9 -0
- package/lib/typescript/src/screens/chat-detail/hooks/createUnreadMarkReadGate.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/hooks/useMarkConversationRead.d.ts +39 -0
- package/lib/typescript/src/screens/chat-detail/hooks/useMarkConversationRead.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/hooks/useUnreadAnchorSeen.d.ts +26 -0
- package/lib/typescript/src/screens/chat-detail/hooks/useUnreadAnchorSeen.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/hooks/useUnreadDeeplinkCheck.d.ts +17 -0
- package/lib/typescript/src/screens/chat-detail/hooks/useUnreadDeeplinkCheck.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/hooks/useUnreadIndicator.d.ts +21 -0
- package/lib/typescript/src/screens/chat-detail/hooks/useUnreadIndicator.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/hooks/useUnreadIndicatorInList.d.ts +35 -0
- package/lib/typescript/src/screens/chat-detail/hooks/useUnreadIndicatorInList.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/legend/LegendChatUnreadButton.d.ts +8 -0
- package/lib/typescript/src/screens/chat-detail/legend/LegendChatUnreadButton.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/legend/LegendChatUnreadDivider.d.ts +7 -0
- package/lib/typescript/src/screens/chat-detail/legend/LegendChatUnreadDivider.d.ts.map +1 -0
- package/lib/typescript/src/services/message.d.ts +8 -0
- package/lib/typescript/src/services/message.d.ts.map +1 -1
- package/lib/typescript/src/store/message.d.ts.map +1 -1
- package/lib/typescript/src/store/unreadIndicator.d.ts +10 -0
- package/lib/typescript/src/store/unreadIndicator.d.ts.map +1 -0
- package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -1
- package/lib/typescript/src/types/chat.d.ts +3 -0
- package/lib/typescript/src/types/chat.d.ts.map +1 -1
- package/lib/typescript/src/types/events.d.ts +17 -1
- package/lib/typescript/src/types/events.d.ts.map +1 -1
- package/lib/typescript/src/types/unreadIndicator.d.ts +45 -0
- package/lib/typescript/src/types/unreadIndicator.d.ts.map +1 -0
- package/lib/typescript/src/utils/markReadPolicy.d.ts +27 -0
- package/lib/typescript/src/utils/markReadPolicy.d.ts.map +1 -0
- package/lib/typescript/src/utils/promise.d.ts +6 -0
- package/lib/typescript/src/utils/promise.d.ts.map +1 -1
- package/lib/typescript/src/utils/unreadAnchor.d.ts +33 -0
- package/lib/typescript/src/utils/unreadAnchor.d.ts.map +1 -0
- package/lib/typescript/src/utils/unreadIndicatorState.d.ts +26 -0
- package/lib/typescript/src/utils/unreadIndicatorState.d.ts.map +1 -0
- package/package.json +2 -2
- package/src/screens/chat-detail/ChatDetail.tsx +58 -5
- package/src/screens/chat-detail/ChatListLegend.tsx +314 -46
- package/src/screens/chat-detail/hooks/createUnreadMarkReadGate.ts +41 -0
- package/src/screens/chat-detail/hooks/useMarkConversationRead.ts +197 -0
- package/src/screens/chat-detail/hooks/useUnreadAnchorSeen.ts +105 -0
- package/src/screens/chat-detail/hooks/useUnreadDeeplinkCheck.ts +68 -0
- package/src/screens/chat-detail/hooks/useUnreadIndicator.ts +112 -0
- package/src/screens/chat-detail/hooks/useUnreadIndicatorInList.ts +181 -0
- package/src/screens/chat-detail/legend/LegendChatUnreadButton.tsx +165 -0
- package/src/screens/chat-detail/legend/LegendChatUnreadDivider.tsx +52 -0
- package/src/services/message.ts +42 -0
- package/src/store/message.ts +23 -5
- package/src/store/unreadIndicator.ts +38 -0
- package/src/translation/resources/i18n.ts +2 -0
- package/src/types/chat.ts +3 -0
- package/src/types/events.ts +18 -1
- package/src/types/unreadIndicator.ts +49 -0
- package/src/utils/markReadPolicy.ts +55 -0
- package/src/utils/promise.ts +20 -0
- package/src/utils/unreadAnchor.ts +87 -0
- 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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
|
|
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":";;
|
|
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 @@
|
|
|
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;
|
|
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;
|
|
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"}
|