@planningcenter/chat-react-native 4.1.0 → 4.1.1-qa-staging.1
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/build/components/conversation/message.d.ts +3 -2
- package/build/components/conversation/message.d.ts.map +1 -1
- package/build/components/conversation/message.js +23 -22
- package/build/components/conversation/message.js.map +1 -1
- package/build/components/conversation/message_list.d.ts +21 -0
- package/build/components/conversation/message_list.d.ts.map +1 -0
- package/build/components/conversation/message_list.js +273 -0
- package/build/components/conversation/message_list.js.map +1 -0
- package/build/components/conversation/message_read_receipts.d.ts +2 -4
- package/build/components/conversation/message_read_receipts.d.ts.map +1 -1
- package/build/components/conversation/message_read_receipts.js +2 -3
- package/build/components/conversation/message_read_receipts.js.map +1 -1
- package/build/components/conversation/reply_shadow_message.d.ts +2 -1
- package/build/components/conversation/reply_shadow_message.d.ts.map +1 -1
- package/build/components/conversation/reply_shadow_message.js +47 -46
- package/build/components/conversation/reply_shadow_message.js.map +1 -1
- package/build/contexts/api_provider.d.ts.map +1 -1
- package/build/contexts/api_provider.js +12 -1
- package/build/contexts/api_provider.js.map +1 -1
- package/build/hooks/use_conversation_messages.d.ts.map +1 -1
- package/build/hooks/use_conversation_messages.js +40 -28
- package/build/hooks/use_conversation_messages.js.map +1 -1
- package/build/hooks/use_conversation_messages_jolt_events.d.ts.map +1 -1
- package/build/hooks/use_conversation_messages_jolt_events.js +6 -1
- package/build/hooks/use_conversation_messages_jolt_events.js.map +1 -1
- package/build/hooks/use_features.d.ts +16 -0
- package/build/hooks/use_features.d.ts.map +1 -1
- package/build/hooks/use_features.js +43 -47
- package/build/hooks/use_features.js.map +1 -1
- package/build/hooks/use_message_create_or_update.d.ts +99 -4
- package/build/hooks/use_message_create_or_update.d.ts.map +1 -1
- package/build/hooks/use_message_create_or_update.js +47 -6
- package/build/hooks/use_message_create_or_update.js.map +1 -1
- package/build/screens/conversation_screen.d.ts.map +1 -1
- package/build/screens/conversation_screen.js +184 -365
- package/build/screens/conversation_screen.js.map +1 -1
- package/build/screens/conversations/components/search_list_header_component.d.ts +2 -0
- package/build/screens/conversations/components/search_list_header_component.d.ts.map +1 -0
- package/build/screens/conversations/components/search_list_header_component.js +496 -0
- package/build/screens/conversations/components/search_list_header_component.js.map +1 -0
- package/build/screens/conversations/conversations_screen.d.ts.map +1 -1
- package/build/screens/conversations/conversations_screen.js +28 -16
- package/build/screens/conversations/conversations_screen.js.map +1 -1
- package/build/types/resources/message.d.ts +2 -0
- package/build/types/resources/message.d.ts.map +1 -1
- package/build/types/resources/message.js.map +1 -1
- package/build/utils/cache/messages_cache.d.ts +1 -0
- package/build/utils/cache/messages_cache.d.ts.map +1 -1
- package/build/utils/cache/messages_cache.js +14 -7
- package/build/utils/cache/messages_cache.js.map +1 -1
- package/build/utils/cache/optimistically_create_message.d.ts +2 -1
- package/build/utils/cache/optimistically_create_message.d.ts.map +1 -1
- package/build/utils/cache/optimistically_create_message.js +4 -2
- package/build/utils/cache/optimistically_create_message.js.map +1 -1
- package/build/utils/client/transform_response.d.ts.map +1 -1
- package/build/utils/client/transform_response.js +9 -5
- package/build/utils/client/transform_response.js.map +1 -1
- package/build/utils/group_messages.d.ts +1 -0
- package/build/utils/group_messages.d.ts.map +1 -1
- package/build/utils/group_messages.js +10 -1
- package/build/utils/group_messages.js.map +1 -1
- package/build/utils/jolt/transform_message_event_data_to_message_resource.d.ts.map +1 -1
- package/build/utils/jolt/transform_message_event_data_to_message_resource.js +1 -0
- package/build/utils/jolt/transform_message_event_data_to_message_resource.js.map +1 -1
- package/build/utils/replace_equal_by_id.d.ts +6 -0
- package/build/utils/replace_equal_by_id.d.ts.map +1 -0
- package/build/utils/replace_equal_by_id.js +41 -0
- package/build/utils/replace_equal_by_id.js.map +1 -0
- package/build/utils/request/messages_data_options.d.ts.map +1 -1
- package/build/utils/request/messages_data_options.js +2 -2
- package/build/utils/request/messages_data_options.js.map +1 -1
- package/build/utils/time.d.ts +1 -0
- package/build/utils/time.d.ts.map +1 -1
- package/build/utils/time.js +1 -0
- package/build/utils/time.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/hooks/use_features.test.ts +61 -0
- package/src/components/conversation/__tests__/message_list.test.tsx +271 -0
- package/src/components/conversation/__tests__/reply_shadow_message.test.tsx +119 -0
- package/src/components/conversation/message.tsx +15 -18
- package/src/components/conversation/message_list.tsx +157 -0
- package/src/components/conversation/message_read_receipts.tsx +3 -5
- package/src/components/conversation/reply_shadow_message.tsx +9 -7
- package/src/contexts/api_provider.tsx +4 -0
- package/src/hooks/__tests__/use_message_create_or_update.test.tsx +110 -0
- package/src/hooks/use_conversation_messages.ts +5 -1
- package/src/hooks/use_conversation_messages_jolt_events.ts +7 -0
- package/src/hooks/use_features.ts +26 -14
- package/src/hooks/use_message_create_or_update.ts +29 -16
- package/src/screens/conversation_screen.tsx +11 -104
- package/src/screens/conversations/components/search_list_header_component.tsx +291 -0
- package/src/screens/conversations/conversations_screen.tsx +6 -1
- package/src/types/resources/message.ts +2 -0
- package/src/utils/__tests__/group_messages.test.ts +48 -0
- package/src/utils/__tests__/replace_equal_by_id.test.ts +73 -0
- package/src/utils/cache/__tests__/messages_cache.test.ts +89 -0
- package/src/utils/cache/__tests__/messages_cache_reply_roots.test.ts +70 -0
- package/src/utils/cache/messages_cache.ts +27 -11
- package/src/utils/cache/optimistically_create_message.ts +3 -0
- package/src/utils/client/__tests__/transform_response.test.ts +62 -0
- package/src/utils/client/transform_response.ts +7 -5
- package/src/utils/group_messages.ts +18 -1
- package/src/utils/jolt/transform_message_event_data_to_message_resource.ts +1 -0
- package/src/utils/replace_equal_by_id.ts +42 -0
- package/src/utils/request/messages_data_options.ts +2 -1
- package/src/utils/time.ts +1 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { c as _c } from "react/compiler-runtime";
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
|
+
import { replaceEqualById } from '../utils/replace_equal_by_id';
|
|
3
4
|
import { getMessagesQueryKey, getMessagesRequestArgs } from '../utils/request/get_messages';
|
|
4
5
|
import { useSuspensePaginator } from './use_suspense_api';
|
|
5
6
|
export const useConversationMessages = (t0, opts) => {
|
|
6
|
-
const $ = _c(
|
|
7
|
+
const $ = _c(17);
|
|
7
8
|
const {
|
|
8
9
|
conversation_id,
|
|
9
10
|
reply_root_id
|
|
@@ -20,38 +21,49 @@ export const useConversationMessages = (t0, opts) => {
|
|
|
20
21
|
} else {
|
|
21
22
|
t1 = $[2];
|
|
22
23
|
}
|
|
24
|
+
let t2;
|
|
25
|
+
if ($[3] !== opts) {
|
|
26
|
+
t2 = {
|
|
27
|
+
structuralSharing: replaceEqualById,
|
|
28
|
+
...opts
|
|
29
|
+
};
|
|
30
|
+
$[3] = opts;
|
|
31
|
+
$[4] = t2;
|
|
32
|
+
} else {
|
|
33
|
+
t2 = $[4];
|
|
34
|
+
}
|
|
23
35
|
const {
|
|
24
36
|
data,
|
|
25
37
|
refetch,
|
|
26
38
|
isRefetching,
|
|
27
39
|
fetchNextPage,
|
|
28
40
|
hasNextPage
|
|
29
|
-
} = useSuspensePaginator(t1,
|
|
30
|
-
let
|
|
31
|
-
if ($[
|
|
32
|
-
|
|
41
|
+
} = useSuspensePaginator(t1, t2);
|
|
42
|
+
let t3;
|
|
43
|
+
if ($[5] !== conversation_id || $[6] !== reply_root_id) {
|
|
44
|
+
t3 = getMessagesQueryKey({
|
|
33
45
|
conversation_id,
|
|
34
46
|
reply_root_id
|
|
35
47
|
});
|
|
36
|
-
$[
|
|
37
|
-
$[
|
|
38
|
-
$[5] = t2;
|
|
39
|
-
} else {
|
|
40
|
-
t2 = $[5];
|
|
41
|
-
}
|
|
42
|
-
const queryKey = t2;
|
|
43
|
-
let t3;
|
|
44
|
-
if ($[6] !== data) {
|
|
45
|
-
t3 = data.filter(_temp).sort(_temp2);
|
|
46
|
-
$[6] = data;
|
|
48
|
+
$[5] = conversation_id;
|
|
49
|
+
$[6] = reply_root_id;
|
|
47
50
|
$[7] = t3;
|
|
48
51
|
} else {
|
|
49
52
|
t3 = $[7];
|
|
50
53
|
}
|
|
51
|
-
const
|
|
54
|
+
const queryKey = t3;
|
|
52
55
|
let t4;
|
|
53
|
-
if ($[8] !==
|
|
54
|
-
t4 =
|
|
56
|
+
if ($[8] !== data) {
|
|
57
|
+
t4 = data.filter(_temp).sort(_temp2);
|
|
58
|
+
$[8] = data;
|
|
59
|
+
$[9] = t4;
|
|
60
|
+
} else {
|
|
61
|
+
t4 = $[9];
|
|
62
|
+
}
|
|
63
|
+
const messages = t4;
|
|
64
|
+
let t5;
|
|
65
|
+
if ($[10] !== fetchNextPage || $[11] !== hasNextPage || $[12] !== isRefetching || $[13] !== messages || $[14] !== queryKey || $[15] !== refetch) {
|
|
66
|
+
t5 = {
|
|
55
67
|
messages,
|
|
56
68
|
refetch,
|
|
57
69
|
isRefetching,
|
|
@@ -59,17 +71,17 @@ export const useConversationMessages = (t0, opts) => {
|
|
|
59
71
|
hasNextPage,
|
|
60
72
|
queryKey
|
|
61
73
|
};
|
|
62
|
-
$[
|
|
63
|
-
$[
|
|
64
|
-
$[
|
|
65
|
-
$[
|
|
66
|
-
$[
|
|
67
|
-
$[
|
|
68
|
-
$[
|
|
74
|
+
$[10] = fetchNextPage;
|
|
75
|
+
$[11] = hasNextPage;
|
|
76
|
+
$[12] = isRefetching;
|
|
77
|
+
$[13] = messages;
|
|
78
|
+
$[14] = queryKey;
|
|
79
|
+
$[15] = refetch;
|
|
80
|
+
$[16] = t5;
|
|
69
81
|
} else {
|
|
70
|
-
|
|
82
|
+
t5 = $[16];
|
|
71
83
|
}
|
|
72
|
-
return
|
|
84
|
+
return t5;
|
|
73
85
|
};
|
|
74
86
|
function _temp(message) {
|
|
75
87
|
return (!message.deletedAt || message.replyRootId) && (message.attachments?.length || message.text?.length);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_conversation_messages.js","names":["useMemo","getMessagesQueryKey","getMessagesRequestArgs","useSuspensePaginator","useConversationMessages","t0","opts","$","_c","conversation_id","reply_root_id","t1","data","refetch","isRefetching","fetchNextPage","hasNextPage","
|
|
1
|
+
{"version":3,"file":"use_conversation_messages.js","names":["useMemo","replaceEqualById","getMessagesQueryKey","getMessagesRequestArgs","useSuspensePaginator","useConversationMessages","t0","opts","$","_c","conversation_id","reply_root_id","t1","t2","structuralSharing","data","refetch","isRefetching","fetchNextPage","hasNextPage","t3","queryKey","t4","filter","_temp","sort","_temp2","messages","t5","message","deletedAt","replyRootId","attachments","length","text","a","b","id","localeCompare"],"sources":["../../src/hooks/use_conversation_messages.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { MessageResource } from '../types'\nimport { replaceEqualById } from '../utils/replace_equal_by_id'\nimport { getMessagesQueryKey, getMessagesRequestArgs } from '../utils/request/get_messages'\nimport { SuspensePaginatorOptions, useSuspensePaginator } from './use_suspense_api'\n\nexport const useConversationMessages = (\n { conversation_id, reply_root_id }: { conversation_id: number; reply_root_id?: string | null },\n opts?: SuspensePaginatorOptions\n) => {\n const { data, refetch, isRefetching, fetchNextPage, hasNextPage } =\n useSuspensePaginator<MessageResource>(\n getMessagesRequestArgs({ conversation_id, reply_root_id }),\n {\n structuralSharing: replaceEqualById,\n ...opts,\n }\n )\n const queryKey = getMessagesQueryKey({ conversation_id, reply_root_id })\n const messages = useMemo(\n () =>\n data\n .filter(\n message =>\n (!message.deletedAt || message.replyRootId) &&\n (message.attachments?.length || message.text?.length)\n )\n .sort((a, b) => -a.id.localeCompare(b.id)),\n [data]\n )\n\n return { messages, refetch, isRefetching, fetchNextPage, hasNextPage, queryKey }\n}\n"],"mappings":";AAAA,SAASA,OAAO,QAAQ,OAAO;AAE/B,SAASC,gBAAgB,QAAQ,8BAA8B;AAC/D,SAASC,mBAAmB,EAAEC,sBAAsB,QAAQ,+BAA+B;AAC3F,SAAmCC,oBAAoB,QAAQ,oBAAoB;AAEnF,OAAO,MAAMC,uBAAuB,GAAGA,CAAAC,EAAA,EAAAC,IAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EACrC;IAAAC,eAAA;IAAAC;EAAA,IAAAL,EAA8F;EAAA,IAAAM,EAAA;EAAA,IAAAJ,CAAA,QAAAE,eAAA,IAAAF,CAAA,QAAAG,aAAA;IAK1FC,EAAA,GAAAT,sBAAsB,CAAC;MAAAO,eAAA;MAAAC;IAAiC,CAAC,CAAC;IAAAH,CAAA,MAAAE,eAAA;IAAAF,CAAA,MAAAG,aAAA;IAAAH,CAAA,MAAAI,EAAA;EAAA;IAAAA,EAAA,GAAAJ,CAAA;EAAA;EAAA,IAAAK,EAAA;EAAA,IAAAL,CAAA,QAAAD,IAAA;IAC1DM,EAAA;MAAAC,iBAAA,EACqBb,gBAAgB;MAAA,GAChCM;IACL,CAAC;IAAAC,CAAA,MAAAD,IAAA;IAAAC,CAAA,MAAAK,EAAA;EAAA;IAAAA,EAAA,GAAAL,CAAA;EAAA;EANL;IAAAO,IAAA;IAAAC,OAAA;IAAAC,YAAA;IAAAC,aAAA;IAAAC;EAAA,IACEf,oBAAoB,CAClBQ,EAA0D,EAC1DC,EAIF,CAAC;EAAA,IAAAO,EAAA;EAAA,IAAAZ,CAAA,QAAAE,eAAA,IAAAF,CAAA,QAAAG,aAAA;IACcS,EAAA,GAAAlB,mBAAmB,CAAC;MAAAQ,eAAA;MAAAC;IAAiC,CAAC,CAAC;IAAAH,CAAA,MAAAE,eAAA;IAAAF,CAAA,MAAAG,aAAA;IAAAH,CAAA,MAAAY,EAAA;EAAA;IAAAA,EAAA,GAAAZ,CAAA;EAAA;EAAxE,MAAAa,QAAA,GAAiBD,EAAuD;EAAA,IAAAE,EAAA;EAAA,IAAAd,CAAA,QAAAO,IAAA;IAGpEO,EAAA,GAAAP,IAAI,CAAAQ,MACK,CACLC,KAGF,CAAC,CAAAC,IACI,CAACC,MAAmC,CAAC;IAAAlB,CAAA,MAAAO,IAAA;IAAAP,CAAA,MAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EARhD,MAAAmB,QAAA,GAEIL,EAM4C;EAE/C,IAAAM,EAAA;EAAA,IAAApB,CAAA,SAAAU,aAAA,IAAAV,CAAA,SAAAW,WAAA,IAAAX,CAAA,SAAAS,YAAA,IAAAT,CAAA,SAAAmB,QAAA,IAAAnB,CAAA,SAAAa,QAAA,IAAAb,CAAA,SAAAQ,OAAA;IAEMY,EAAA;MAAAD,QAAA;MAAAX,OAAA;MAAAC,YAAA;MAAAC,aAAA;MAAAC,WAAA;MAAAE;IAAwE,CAAC;IAAAb,CAAA,OAAAU,aAAA;IAAAV,CAAA,OAAAW,WAAA;IAAAX,CAAA,OAAAS,YAAA;IAAAT,CAAA,OAAAmB,QAAA;IAAAnB,CAAA,OAAAa,QAAA;IAAAb,CAAA,OAAAQ,OAAA;IAAAR,CAAA,OAAAoB,EAAA;EAAA;IAAAA,EAAA,GAAApB,CAAA;EAAA;EAAA,OAAzEoB,EAAyE;AAAA,CACjF;AA1BsC,SAAAJ,MAAAK,OAAA;EAAA,OAkB3B,CAAC,CAACA,OAAO,CAAAC,SAAiC,IAAnBD,OAAO,CAAAE,WACuB,MAApDF,OAAO,CAAAG,WAAoB,EAAAC,MAAwB,IAApBJ,OAAO,CAAAK,IAAa,EAAAD,MAAC;AAAA;AAnB1B,SAAAP,OAAAS,CAAA,EAAAC,CAAA;EAAA,OAqBf,CAACD,CAAC,CAAAE,EAAG,CAAAC,aAAc,CAACF,CAAC,CAAAC,EAAG,CAAC;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_conversation_messages_jolt_events.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation_messages_jolt_events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use_conversation_messages_jolt_events.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation_messages_jolt_events.ts"],"names":[],"mappings":"AA0BA,UAAU,KAAK;IACb,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,wBAAgB,iCAAiC,CAAC,EAAE,cAAc,EAAE,EAAE,KAAK,QAqG1E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { c as _c } from "react/compiler-runtime";
|
|
2
2
|
import { useQueryClient } from '@tanstack/react-query';
|
|
3
3
|
import { deleteRecordInPagesData } from '../utils';
|
|
4
|
-
import { updateCacheWithMessage, updateCacheWithIndividualMessage, updateCacheWithReaction, getThreadedMessagesQueryKey } from '../utils/cache/messages_cache';
|
|
4
|
+
import { updateCacheWithMessage, updateCacheWithIndividualMessage, updateCacheWithReaction, updateCacheReplyRoots, getThreadedMessagesQueryKey } from '../utils/cache/messages_cache';
|
|
5
5
|
import { transformMessageEventDataToMessageResource } from '../utils/jolt/transform_message_event_data_to_message_resource';
|
|
6
6
|
import { completeMessageCreationTracking } from '../utils/performance_tracking';
|
|
7
7
|
import { getMessageQueryKey } from '../utils/request/get_message';
|
|
@@ -47,6 +47,7 @@ export function useConversationMessagesJoltEvents(t0) {
|
|
|
47
47
|
data,
|
|
48
48
|
currentPersonId: currentPerson.id
|
|
49
49
|
});
|
|
50
|
+
const isReplyRootUpdate = e.event === "message.updated" && data.reply_root_id === data.sort_key;
|
|
50
51
|
if (e.event === "message.created" && data.author_id) {
|
|
51
52
|
removeAllTypingEventsByAuthorId(data.author_id);
|
|
52
53
|
if (data.idempotent_key && data.author_id === currentPerson.id) {
|
|
@@ -60,6 +61,10 @@ export function useConversationMessagesJoltEvents(t0) {
|
|
|
60
61
|
if (data.reply_root_id) {
|
|
61
62
|
const threadedMessagesQueryKey = getThreadedMessagesQueryKey(conversationId, data.reply_root_id);
|
|
62
63
|
updateCacheWithMessage(queryClient, threadedMessagesQueryKey, message, e.event);
|
|
64
|
+
if (isReplyRootUpdate) {
|
|
65
|
+
updateCacheReplyRoots(queryClient, messagesQueryKey, message);
|
|
66
|
+
updateCacheReplyRoots(queryClient, threadedMessagesQueryKey, message);
|
|
67
|
+
}
|
|
63
68
|
}
|
|
64
69
|
if (e.event === "message.updated") {
|
|
65
70
|
const individualMessageQueryKey = getMessageQueryKey({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_conversation_messages_jolt_events.js","names":["useQueryClient","deleteRecordInPagesData","updateCacheWithMessage","updateCacheWithIndividualMessage","updateCacheWithReaction","getThreadedMessagesQueryKey","transformMessageEventDataToMessageResource","completeMessageCreationTracking","getMessageQueryKey","getMessagesRequestArgs","useApiClient","useCurrentPerson","useJoltChannel","useJoltEvent","getRequestQueryKey","TYPING_TIMEOUT_INTERVAL","useTypingStatusCache","useConversationMessagesJoltEvents","t0","$","_c","conversationId","queryClient","currentPerson","joltChannel","t1","messagesRequestArgs","conversation_id","messagesQueryKey","apiClient","addTypingEvent","removeTypingEventById","removeAllTypingEventsByAuthorId","t2","id","e","data","message","currentPersonId","event","author_id","idempotent_key","idempotentKey","reply_root_id","threadedMessagesQueryKey","individualMessageQueryKey","messageId","sort_key","handleMessageUpdateOrCreate","t3","e_0","data_0","message_0","setQueryData","prev","record","threadedMessagesQueryKey_0","prev_0","handleMessageDeleted","t4","e_1","replyRootId","threadedMessagesQueryKey_1","handleReactionJoltEvent","t5","e_2","data_1","setTimeout","handleTypingEvent"],"sources":["../../src/hooks/use_conversation_messages_jolt_events.ts"],"sourcesContent":["import { InfiniteData, useQueryClient } from '@tanstack/react-query'\nimport { ApiCollection, MessageResource } from '../types'\nimport { JoltReactionEvent, JoltTypingEvent } from '../types/jolt_events'\nimport {\n MessageCreatedEvent,\n MessageUpdatedEvent,\n MessageDeletedEvent,\n} from '../types/jolt_events/message_events'\nimport { deleteRecordInPagesData } from '../utils'\nimport {\n updateCacheWithMessage,\n updateCacheWithIndividualMessage,\n updateCacheWithReaction,\n getThreadedMessagesQueryKey,\n} from '../utils/cache/messages_cache'\nimport { transformMessageEventDataToMessageResource } from '../utils/jolt/transform_message_event_data_to_message_resource'\nimport { completeMessageCreationTracking } from '../utils/performance_tracking'\nimport { getMessageQueryKey } from '../utils/request/get_message'\nimport { getMessagesRequestArgs } from '../utils/request/get_messages'\nimport { useApiClient } from './use_api_client'\nimport { useCurrentPerson } from './use_current_person'\nimport { useJoltChannel, useJoltEvent } from './use_jolt'\nimport { getRequestQueryKey } from './use_suspense_api'\nimport { TYPING_TIMEOUT_INTERVAL, useTypingStatusCache } from './use_typing_status_cache'\n\ninterface Props {\n conversationId: number\n}\n\nexport function useConversationMessagesJoltEvents({ conversationId }: Props) {\n const queryClient = useQueryClient()\n const currentPerson = useCurrentPerson()\n const joltChannel = useJoltChannel(`chat.conversations.${conversationId}`)\n const messagesRequestArgs = getMessagesRequestArgs({ conversation_id: conversationId })\n const messagesQueryKey = getRequestQueryKey(messagesRequestArgs)\n const apiClient = useApiClient()\n\n const { addTypingEvent, removeTypingEventById, removeAllTypingEventsByAuthorId } =\n useTypingStatusCache(conversationId)\n\n const handleMessageUpdateOrCreate = async (e: MessageCreatedEvent | MessageUpdatedEvent) => {\n const { data } = e.data\n const message = transformMessageEventDataToMessageResource({\n data,\n currentPersonId: currentPerson.id,\n })\n\n if (e.event === 'message.created' && data.author_id) {\n removeAllTypingEventsByAuthorId(data.author_id)\n if (data.idempotent_key && data.author_id === currentPerson.id) {\n completeMessageCreationTracking({ apiClient, idempotentKey: data.idempotent_key })\n }\n }\n\n // Update the main conversation cache\n updateCacheWithMessage(queryClient, messagesQueryKey, message, e.event)\n\n // If message has a reply_root_id, also update the threaded cache\n if (data.reply_root_id) {\n const threadedMessagesQueryKey = getThreadedMessagesQueryKey(\n conversationId,\n data.reply_root_id\n )\n updateCacheWithMessage(queryClient, threadedMessagesQueryKey, message, e.event)\n }\n\n // Update individual message query cache so reply shadow messages update immediately\n if (e.event === 'message.updated') {\n const individualMessageQueryKey = getMessageQueryKey({\n conversation_id: conversationId,\n messageId: data.sort_key,\n })\n updateCacheWithIndividualMessage(queryClient, individualMessageQueryKey, message)\n }\n }\n\n const handleMessageDeleted = async (e: MessageDeletedEvent) => {\n const { data } = e.data\n const message = transformMessageEventDataToMessageResource({\n data,\n currentPersonId: currentPerson.id,\n })\n\n // Update the main conversation cache\n queryClient.setQueryData<QueryData>(messagesQueryKey, prev =>\n deleteRecordInPagesData({ data: prev, record: message })\n )\n\n // If message has a reply_root_id, also update the threaded cache\n if (data.reply_root_id) {\n const threadedMessagesQueryKey = getThreadedMessagesQueryKey(\n conversationId,\n data.reply_root_id\n )\n queryClient.setQueryData<QueryData>(threadedMessagesQueryKey, prev =>\n deleteRecordInPagesData({ data: prev, record: message })\n )\n }\n }\n\n const handleReactionJoltEvent = async (e: JoltReactionEvent) => {\n // Update the main conversation cache and capture the reply_root_id if present\n updateCacheWithReaction(queryClient, messagesQueryKey, e, currentPerson.id)\n\n const replyRootId = e.data.data.reply_root_id\n\n // If the message has a reply_root_id, also update the threaded cache\n if (replyRootId) {\n const threadedMessagesQueryKey = getThreadedMessagesQueryKey(conversationId, replyRootId)\n updateCacheWithReaction(queryClient, threadedMessagesQueryKey, e, currentPerson.id)\n }\n }\n\n const handleTypingEvent = async (e: JoltTypingEvent) => {\n const { data } = e.data\n addTypingEvent(data)\n setTimeout(() => removeTypingEventById(data.id), TYPING_TIMEOUT_INTERVAL)\n }\n\n useJoltEvent(joltChannel, 'message.created', handleMessageUpdateOrCreate)\n useJoltEvent(joltChannel, 'message.updated', handleMessageUpdateOrCreate)\n useJoltEvent(joltChannel, 'message.destroyed', handleMessageDeleted)\n useJoltEvent(joltChannel, 'reaction.*', handleReactionJoltEvent)\n useJoltEvent(joltChannel, 'typing.broadcast', handleTypingEvent)\n}\n\ntype QueryData = InfiniteData<ApiCollection<MessageResource>>\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"use_conversation_messages_jolt_events.js","names":["useQueryClient","deleteRecordInPagesData","updateCacheWithMessage","updateCacheWithIndividualMessage","updateCacheWithReaction","updateCacheReplyRoots","getThreadedMessagesQueryKey","transformMessageEventDataToMessageResource","completeMessageCreationTracking","getMessageQueryKey","getMessagesRequestArgs","useApiClient","useCurrentPerson","useJoltChannel","useJoltEvent","getRequestQueryKey","TYPING_TIMEOUT_INTERVAL","useTypingStatusCache","useConversationMessagesJoltEvents","t0","$","_c","conversationId","queryClient","currentPerson","joltChannel","t1","messagesRequestArgs","conversation_id","messagesQueryKey","apiClient","addTypingEvent","removeTypingEventById","removeAllTypingEventsByAuthorId","t2","id","e","data","message","currentPersonId","isReplyRootUpdate","event","reply_root_id","sort_key","author_id","idempotent_key","idempotentKey","threadedMessagesQueryKey","individualMessageQueryKey","messageId","handleMessageUpdateOrCreate","t3","e_0","data_0","message_0","setQueryData","prev","record","threadedMessagesQueryKey_0","prev_0","handleMessageDeleted","t4","e_1","replyRootId","threadedMessagesQueryKey_1","handleReactionJoltEvent","t5","e_2","data_1","setTimeout","handleTypingEvent"],"sources":["../../src/hooks/use_conversation_messages_jolt_events.ts"],"sourcesContent":["import { InfiniteData, useQueryClient } from '@tanstack/react-query'\nimport { ApiCollection, MessageResource } from '../types'\nimport { JoltReactionEvent, JoltTypingEvent } from '../types/jolt_events'\nimport {\n MessageCreatedEvent,\n MessageUpdatedEvent,\n MessageDeletedEvent,\n} from '../types/jolt_events/message_events'\nimport { deleteRecordInPagesData } from '../utils'\nimport {\n updateCacheWithMessage,\n updateCacheWithIndividualMessage,\n updateCacheWithReaction,\n updateCacheReplyRoots,\n getThreadedMessagesQueryKey,\n} from '../utils/cache/messages_cache'\nimport { transformMessageEventDataToMessageResource } from '../utils/jolt/transform_message_event_data_to_message_resource'\nimport { completeMessageCreationTracking } from '../utils/performance_tracking'\nimport { getMessageQueryKey } from '../utils/request/get_message'\nimport { getMessagesRequestArgs } from '../utils/request/get_messages'\nimport { useApiClient } from './use_api_client'\nimport { useCurrentPerson } from './use_current_person'\nimport { useJoltChannel, useJoltEvent } from './use_jolt'\nimport { getRequestQueryKey } from './use_suspense_api'\nimport { TYPING_TIMEOUT_INTERVAL, useTypingStatusCache } from './use_typing_status_cache'\n\ninterface Props {\n conversationId: number\n}\n\nexport function useConversationMessagesJoltEvents({ conversationId }: Props) {\n const queryClient = useQueryClient()\n const currentPerson = useCurrentPerson()\n const joltChannel = useJoltChannel(`chat.conversations.${conversationId}`)\n const messagesRequestArgs = getMessagesRequestArgs({ conversation_id: conversationId })\n const messagesQueryKey = getRequestQueryKey(messagesRequestArgs)\n const apiClient = useApiClient()\n\n const { addTypingEvent, removeTypingEventById, removeAllTypingEventsByAuthorId } =\n useTypingStatusCache(conversationId)\n\n const handleMessageUpdateOrCreate = async (e: MessageCreatedEvent | MessageUpdatedEvent) => {\n const { data } = e.data\n const message = transformMessageEventDataToMessageResource({\n data,\n currentPersonId: currentPerson.id,\n })\n const isReplyRootUpdate = e.event === 'message.updated' && data.reply_root_id === data.sort_key\n\n if (e.event === 'message.created' && data.author_id) {\n removeAllTypingEventsByAuthorId(data.author_id)\n if (data.idempotent_key && data.author_id === currentPerson.id) {\n completeMessageCreationTracking({ apiClient, idempotentKey: data.idempotent_key })\n }\n }\n\n // Update the main conversation cache\n updateCacheWithMessage(queryClient, messagesQueryKey, message, e.event)\n\n // If message has a reply_root_id, also update the threaded cache\n if (data.reply_root_id) {\n const threadedMessagesQueryKey = getThreadedMessagesQueryKey(\n conversationId,\n data.reply_root_id\n )\n updateCacheWithMessage(queryClient, threadedMessagesQueryKey, message, e.event)\n\n if (isReplyRootUpdate) {\n updateCacheReplyRoots(queryClient, messagesQueryKey, message)\n updateCacheReplyRoots(queryClient, threadedMessagesQueryKey, message)\n }\n }\n\n // Update individual message query cache so reply shadow messages update immediately\n if (e.event === 'message.updated') {\n const individualMessageQueryKey = getMessageQueryKey({\n conversation_id: conversationId,\n messageId: data.sort_key,\n })\n updateCacheWithIndividualMessage(queryClient, individualMessageQueryKey, message)\n }\n }\n\n const handleMessageDeleted = async (e: MessageDeletedEvent) => {\n const { data } = e.data\n const message = transformMessageEventDataToMessageResource({\n data,\n currentPersonId: currentPerson.id,\n })\n\n // Update the main conversation cache\n queryClient.setQueryData<QueryData>(messagesQueryKey, prev =>\n deleteRecordInPagesData({ data: prev, record: message })\n )\n\n // If message has a reply_root_id, also update the threaded cache\n if (data.reply_root_id) {\n const threadedMessagesQueryKey = getThreadedMessagesQueryKey(\n conversationId,\n data.reply_root_id\n )\n queryClient.setQueryData<QueryData>(threadedMessagesQueryKey, prev =>\n deleteRecordInPagesData({ data: prev, record: message })\n )\n }\n }\n\n const handleReactionJoltEvent = async (e: JoltReactionEvent) => {\n // Update the main conversation cache and capture the reply_root_id if present\n updateCacheWithReaction(queryClient, messagesQueryKey, e, currentPerson.id)\n\n const replyRootId = e.data.data.reply_root_id\n\n // If the message has a reply_root_id, also update the threaded cache\n if (replyRootId) {\n const threadedMessagesQueryKey = getThreadedMessagesQueryKey(conversationId, replyRootId)\n updateCacheWithReaction(queryClient, threadedMessagesQueryKey, e, currentPerson.id)\n }\n }\n\n const handleTypingEvent = async (e: JoltTypingEvent) => {\n const { data } = e.data\n addTypingEvent(data)\n setTimeout(() => removeTypingEventById(data.id), TYPING_TIMEOUT_INTERVAL)\n }\n\n useJoltEvent(joltChannel, 'message.created', handleMessageUpdateOrCreate)\n useJoltEvent(joltChannel, 'message.updated', handleMessageUpdateOrCreate)\n useJoltEvent(joltChannel, 'message.destroyed', handleMessageDeleted)\n useJoltEvent(joltChannel, 'reaction.*', handleReactionJoltEvent)\n useJoltEvent(joltChannel, 'typing.broadcast', handleTypingEvent)\n}\n\ntype QueryData = InfiniteData<ApiCollection<MessageResource>>\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,9 +1,24 @@
|
|
|
1
|
+
import { ApiCollection } from '../types';
|
|
1
2
|
import type { FeatureResource } from '../types/resources/feature_resource';
|
|
3
|
+
import { ApiClient } from './use_api_client';
|
|
2
4
|
type FeatureName = (typeof availableFeatures)[keyof typeof availableFeatures];
|
|
5
|
+
type FeaturesCollection = ApiCollection<FeatureResource> & {
|
|
6
|
+
failure?: {
|
|
7
|
+
status?: number;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
3
10
|
export declare function useFeatures(): {
|
|
4
11
|
features: FeatureResource[];
|
|
5
12
|
featureEnabled: (featureName: FeatureName) => boolean;
|
|
6
13
|
};
|
|
14
|
+
export declare const featuresQueryOptions: (apiClient: ApiClient) => import("@tanstack/query-core").OmitKeyof<import("@tanstack/react-query").UseQueryOptions<FeaturesCollection, Error, FeaturesCollection, import("./use_suspense_api").RequestQueryKey>, "queryFn"> & {
|
|
15
|
+
queryFn?: import("@tanstack/query-core").QueryFunction<FeaturesCollection, import("./use_suspense_api").RequestQueryKey, never> | undefined;
|
|
16
|
+
} & {
|
|
17
|
+
queryKey: import("./use_suspense_api").RequestQueryKey & {
|
|
18
|
+
[dataTagSymbol]: FeaturesCollection;
|
|
19
|
+
[dataTagErrorSymbol]: Error;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
7
22
|
export declare const availableFeatures: {
|
|
8
23
|
readonly gender_specific_conversations: "ROLLOUT_gender_specific_conversations";
|
|
9
24
|
readonly message_reporting: "ROLLOUT_MOBILE_message_reporting";
|
|
@@ -12,6 +27,7 @@ export declare const availableFeatures: {
|
|
|
12
27
|
readonly conversation_safety_lock: "ROLLOUT_conversation_safety_lock";
|
|
13
28
|
readonly video_moderation: "ROLLOUT_MOBILE_video_moderation";
|
|
14
29
|
readonly dm_search_clear_fix: "ROLLOUT_MOBILE_dm_search_clear_fix";
|
|
30
|
+
readonly search: "ROLLOUT_search";
|
|
15
31
|
};
|
|
16
32
|
export {};
|
|
17
33
|
//# sourceMappingURL=use_features.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_features.d.ts","sourceRoot":"","sources":["../../src/hooks/use_features.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use_features.d.ts","sourceRoot":"","sources":["../../src/hooks/use_features.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAG1E,OAAO,EAAE,SAAS,EAAgB,MAAM,kBAAkB,CAAA;AAE1D,KAAK,WAAW,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAA;AAE7E,KAAK,kBAAkB,GAAG,aAAa,CAAC,eAAe,CAAC,GAAG;IACzD,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9B,CAAA;AAED,wBAAgB,WAAW;;kCAOT,WAAW;EAS5B;AAED,eAAO,MAAM,oBAAoB,GAAI,WAAW,SAAS;;;;;;;CAerD,CAAA;AAEJ,eAAO,MAAM,iBAAiB;;;;;;;;;CAS0B,CAAA"}
|
|
@@ -1,69 +1,64 @@
|
|
|
1
1
|
import { c as _c } from "react/compiler-runtime";
|
|
2
|
-
import { useSuspenseQuery } from '@tanstack/react-query';
|
|
2
|
+
import { queryOptions, useSuspenseQuery } from '@tanstack/react-query';
|
|
3
3
|
import { useCallback } from 'react';
|
|
4
4
|
import { getFeaturesRequestArgs, getFeaturesQueryKey } from '../utils/request/get_features';
|
|
5
|
-
import { FIVE_MINUTES } from '../utils/time';
|
|
5
|
+
import { FIVE_MINUTES, ONE_MINUTE } from '../utils/time';
|
|
6
6
|
import { useApiClient } from './use_api_client';
|
|
7
7
|
export function useFeatures() {
|
|
8
|
-
const $ = _c(
|
|
8
|
+
const $ = _c(7);
|
|
9
9
|
const apiClient = useApiClient();
|
|
10
10
|
let t0;
|
|
11
|
-
if ($[0]
|
|
12
|
-
t0 =
|
|
13
|
-
$[0] =
|
|
11
|
+
if ($[0] !== apiClient) {
|
|
12
|
+
t0 = featuresQueryOptions(apiClient);
|
|
13
|
+
$[0] = apiClient;
|
|
14
|
+
$[1] = t0;
|
|
14
15
|
} else {
|
|
15
|
-
t0 = $[
|
|
16
|
-
}
|
|
17
|
-
const requestArgs = t0;
|
|
18
|
-
let t1;
|
|
19
|
-
if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
|
|
20
|
-
t1 = getFeaturesQueryKey();
|
|
21
|
-
$[1] = t1;
|
|
22
|
-
} else {
|
|
23
|
-
t1 = $[1];
|
|
24
|
-
}
|
|
25
|
-
let t2;
|
|
26
|
-
if ($[2] !== apiClient) {
|
|
27
|
-
t2 = {
|
|
28
|
-
queryKey: t1,
|
|
29
|
-
queryFn: () => apiClient.chat.get(requestArgs).catch(_temp),
|
|
30
|
-
staleTime: FIVE_MINUTES
|
|
31
|
-
};
|
|
32
|
-
$[2] = apiClient;
|
|
33
|
-
$[3] = t2;
|
|
34
|
-
} else {
|
|
35
|
-
t2 = $[3];
|
|
16
|
+
t0 = $[1];
|
|
36
17
|
}
|
|
37
18
|
const {
|
|
38
19
|
data
|
|
39
|
-
} = useSuspenseQuery(
|
|
20
|
+
} = useSuspenseQuery(t0);
|
|
40
21
|
const features = data.data;
|
|
41
|
-
let
|
|
42
|
-
if ($[
|
|
43
|
-
|
|
44
|
-
$[
|
|
45
|
-
$[
|
|
22
|
+
let t1;
|
|
23
|
+
if ($[2] !== features) {
|
|
24
|
+
t1 = featureName => features.some(feature => feature.name === featureName && feature.enabled);
|
|
25
|
+
$[2] = features;
|
|
26
|
+
$[3] = t1;
|
|
46
27
|
} else {
|
|
47
|
-
|
|
28
|
+
t1 = $[3];
|
|
48
29
|
}
|
|
49
|
-
const featureEnabled =
|
|
50
|
-
let
|
|
51
|
-
if ($[
|
|
52
|
-
|
|
30
|
+
const featureEnabled = t1;
|
|
31
|
+
let t2;
|
|
32
|
+
if ($[4] !== featureEnabled || $[5] !== features) {
|
|
33
|
+
t2 = {
|
|
53
34
|
features,
|
|
54
35
|
featureEnabled
|
|
55
36
|
};
|
|
56
|
-
$[
|
|
57
|
-
$[
|
|
58
|
-
$[
|
|
37
|
+
$[4] = featureEnabled;
|
|
38
|
+
$[5] = features;
|
|
39
|
+
$[6] = t2;
|
|
59
40
|
} else {
|
|
60
|
-
|
|
41
|
+
t2 = $[6];
|
|
61
42
|
}
|
|
62
|
-
return
|
|
63
|
-
}
|
|
64
|
-
function _temp() {
|
|
65
|
-
return stableEmptyFeatures;
|
|
43
|
+
return t2;
|
|
66
44
|
}
|
|
45
|
+
export const featuresQueryOptions = apiClient => queryOptions({
|
|
46
|
+
queryKey: getFeaturesQueryKey(),
|
|
47
|
+
queryFn: () => {
|
|
48
|
+
return apiClient.chat.get(getFeaturesRequestArgs()).catch(error => ({
|
|
49
|
+
...stableEmptyFeatures,
|
|
50
|
+
failure: {
|
|
51
|
+
status: error?.status
|
|
52
|
+
}
|
|
53
|
+
}));
|
|
54
|
+
},
|
|
55
|
+
staleTime: query => {
|
|
56
|
+
const failure = query.state.data?.failure;
|
|
57
|
+
if (!failure) return FIVE_MINUTES;
|
|
58
|
+
return failure.status === 429 ? ONE_MINUTE : 0;
|
|
59
|
+
},
|
|
60
|
+
gcTime: Infinity
|
|
61
|
+
});
|
|
67
62
|
export const availableFeatures = {
|
|
68
63
|
gender_specific_conversations: 'ROLLOUT_gender_specific_conversations',
|
|
69
64
|
message_reporting: 'ROLLOUT_MOBILE_message_reporting',
|
|
@@ -71,7 +66,8 @@ export const availableFeatures = {
|
|
|
71
66
|
custom_conversation_avatars: 'ROLLOUT_custom_conversation_avatars',
|
|
72
67
|
conversation_safety_lock: 'ROLLOUT_conversation_safety_lock',
|
|
73
68
|
video_moderation: 'ROLLOUT_MOBILE_video_moderation',
|
|
74
|
-
dm_search_clear_fix: 'ROLLOUT_MOBILE_dm_search_clear_fix'
|
|
69
|
+
dm_search_clear_fix: 'ROLLOUT_MOBILE_dm_search_clear_fix',
|
|
70
|
+
search: 'ROLLOUT_search'
|
|
75
71
|
};
|
|
76
72
|
const stableEmptyFeatures = {
|
|
77
73
|
data: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_features.js","names":["useSuspenseQuery","useCallback","getFeaturesRequestArgs","getFeaturesQueryKey","FIVE_MINUTES","useApiClient","useFeatures","$","_c","apiClient","t0","
|
|
1
|
+
{"version":3,"file":"use_features.js","names":["queryOptions","useSuspenseQuery","useCallback","getFeaturesRequestArgs","getFeaturesQueryKey","FIVE_MINUTES","ONE_MINUTE","useApiClient","useFeatures","$","_c","apiClient","t0","featuresQueryOptions","data","features","t1","featureName","some","feature","name","enabled","featureEnabled","t2","queryKey","queryFn","chat","get","catch","error","stableEmptyFeatures","failure","status","staleTime","query","state","gcTime","Infinity","availableFeatures","gender_specific_conversations","message_reporting","granular_notifications_ui","custom_conversation_avatars","conversation_safety_lock","video_moderation","dm_search_clear_fix","search","links","meta","count","totalCount"],"sources":["../../src/hooks/use_features.ts"],"sourcesContent":["import { queryOptions, useSuspenseQuery } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { ApiCollection } from '../types'\nimport type { FeatureResource } from '../types/resources/feature_resource'\nimport { getFeaturesRequestArgs, getFeaturesQueryKey } from '../utils/request/get_features'\nimport { FIVE_MINUTES, ONE_MINUTE } from '../utils/time'\nimport { ApiClient, useApiClient } from './use_api_client'\n\ntype FeatureName = (typeof availableFeatures)[keyof typeof availableFeatures]\n\ntype FeaturesCollection = ApiCollection<FeatureResource> & {\n failure?: { status?: number }\n}\n\nexport function useFeatures() {\n const apiClient = useApiClient()\n const { data } = useSuspenseQuery(featuresQueryOptions(apiClient))\n\n const features = data.data\n\n const featureEnabled = useCallback(\n (featureName: FeatureName) =>\n features.some(feature => feature.name === featureName && feature.enabled),\n [features]\n )\n\n return {\n features,\n featureEnabled,\n }\n}\n\nexport const featuresQueryOptions = (apiClient: ApiClient) =>\n queryOptions({\n queryKey: getFeaturesQueryKey(),\n queryFn: (): Promise<FeaturesCollection> => {\n return apiClient.chat\n .get<ApiCollection<FeatureResource>>(getFeaturesRequestArgs())\n .catch(error => ({ ...stableEmptyFeatures, failure: { status: error?.status } }))\n },\n staleTime: query => {\n const failure = query.state.data?.failure\n if (!failure) return FIVE_MINUTES\n\n return failure.status === 429 ? ONE_MINUTE : 0\n },\n gcTime: Infinity,\n })\n\nexport const availableFeatures = {\n gender_specific_conversations: 'ROLLOUT_gender_specific_conversations',\n message_reporting: 'ROLLOUT_MOBILE_message_reporting',\n granular_notifications_ui: 'ROLLOUT_granular_notification_preferences_ui',\n custom_conversation_avatars: 'ROLLOUT_custom_conversation_avatars',\n conversation_safety_lock: 'ROLLOUT_conversation_safety_lock',\n video_moderation: 'ROLLOUT_MOBILE_video_moderation',\n dm_search_clear_fix: 'ROLLOUT_MOBILE_dm_search_clear_fix',\n search: 'ROLLOUT_search',\n} as const satisfies Record<string, `ROLLOUT_${string}`>\n\nconst stableEmptyFeatures: ApiCollection<FeatureResource> = {\n data: [],\n links: {},\n meta: {\n count: 0,\n totalCount: 0,\n },\n}\n"],"mappings":";AAAA,SAASA,YAAY,EAAEC,gBAAgB,QAAQ,uBAAuB;AACtE,SAASC,WAAW,QAAQ,OAAO;AAGnC,SAASC,sBAAsB,EAAEC,mBAAmB,QAAQ,+BAA+B;AAC3F,SAASC,YAAY,EAAEC,UAAU,QAAQ,eAAe;AACxD,SAAoBC,YAAY,QAAQ,kBAAkB;AAQ1D,OAAO,SAAAC,YAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EACL,MAAAC,SAAA,GAAkBJ,YAAY,CAAC,CAAC;EAAA,IAAAK,EAAA;EAAA,IAAAH,CAAA,QAAAE,SAAA;IACEC,EAAA,GAAAC,oBAAoB,CAACF,SAAS,CAAC;IAAAF,CAAA,MAAAE,SAAA;IAAAF,CAAA,MAAAG,EAAA;EAAA;IAAAA,EAAA,GAAAH,CAAA;EAAA;EAAjE;IAAAK;EAAA,IAAiBb,gBAAgB,CAACW,EAA+B,CAAC;EAElE,MAAAG,QAAA,GAAiBD,IAAI,CAAAA,IAAK;EAAA,IAAAE,EAAA;EAAA,IAAAP,CAAA,QAAAM,QAAA;IAGxBC,EAAA,GAAAC,WAAA,IACEF,QAAQ,CAAAG,IAAK,CAACC,OAAA,IAAWA,OAAO,CAAAC,IAAK,KAAKH,WAA8B,IAAfE,OAAO,CAAAE,OAAQ,CAAC;IAAAZ,CAAA,MAAAM,QAAA;IAAAN,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAF7E,MAAAa,cAAA,GAAuBN,EAItB;EAAA,IAAAO,EAAA;EAAA,IAAAd,CAAA,QAAAa,cAAA,IAAAb,CAAA,QAAAM,QAAA;IAEMQ,EAAA;MAAAR,QAAA;MAAAO;IAGP,CAAC;IAAAb,CAAA,MAAAa,cAAA;IAAAb,CAAA,MAAAM,QAAA;IAAAN,CAAA,MAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EAAA,OAHMc,EAGN;AAAA;AAGH,OAAO,MAAMV,oBAAoB,GAAIF,SAAoB,IACvDX,YAAY,CAAC;EACXwB,QAAQ,EAAEpB,mBAAmB,CAAC,CAAC;EAC/BqB,OAAO,EAAEA,CAAA,KAAmC;IAC1C,OAAOd,SAAS,CAACe,IAAI,CAClBC,GAAG,CAAiCxB,sBAAsB,CAAC,CAAC,CAAC,CAC7DyB,KAAK,CAACC,KAAK,KAAK;MAAE,GAAGC,mBAAmB;MAAEC,OAAO,EAAE;QAAEC,MAAM,EAAEH,KAAK,EAAEG;MAAO;IAAE,CAAC,CAAC,CAAC;EACrF,CAAC;EACDC,SAAS,EAAEC,KAAK,IAAI;IAClB,MAAMH,OAAO,GAAGG,KAAK,CAACC,KAAK,CAACrB,IAAI,EAAEiB,OAAO;IACzC,IAAI,CAACA,OAAO,EAAE,OAAO1B,YAAY;IAEjC,OAAO0B,OAAO,CAACC,MAAM,KAAK,GAAG,GAAG1B,UAAU,GAAG,CAAC;EAChD,CAAC;EACD8B,MAAM,EAAEC;AACV,CAAC,CAAC;AAEJ,OAAO,MAAMC,iBAAiB,GAAG;EAC/BC,6BAA6B,EAAE,uCAAuC;EACtEC,iBAAiB,EAAE,kCAAkC;EACrDC,yBAAyB,EAAE,8CAA8C;EACzEC,2BAA2B,EAAE,qCAAqC;EAClEC,wBAAwB,EAAE,kCAAkC;EAC5DC,gBAAgB,EAAE,iCAAiC;EACnDC,mBAAmB,EAAE,oCAAoC;EACzDC,MAAM,EAAE;AACV,CAAwD;AAExD,MAAMhB,mBAAmD,GAAG;EAC1DhB,IAAI,EAAE,EAAE;EACRiC,KAAK,EAAE,CAAC,CAAC;EACTC,IAAI,EAAE;IACJC,KAAK,EAAE,CAAC;IACRC,UAAU,EAAE;EACd;AACF,CAAC","ignoreList":[]}
|
|
@@ -5,11 +5,106 @@ interface Props {
|
|
|
5
5
|
message?: MessageResource;
|
|
6
6
|
replyRootId?: string | null;
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
interface MessageMutationVariables {
|
|
9
9
|
text: string;
|
|
10
10
|
attachments?: DenormalizedAttachmentResourceForCreate[];
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
idempotentKey?: string;
|
|
12
|
+
}
|
|
13
|
+
type ResolvedMessageMutationVariables = MessageMutationVariables & {
|
|
14
|
+
idempotentKey: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function useMessageCreateOrUpdate({ conversationId, message, replyRootId }: Props): {
|
|
17
|
+
mutate: (variables: MessageMutationVariables, options?: Parameters<import("@tanstack/react-query").UseMutateFunction<ApiResource<MessageResource>, Error, ResolvedMessageMutationVariables, {
|
|
18
|
+
message: MessageResource;
|
|
19
|
+
}>>[1]) => void;
|
|
20
|
+
mutateAsync: (variables: MessageMutationVariables, options?: Parameters<import("@tanstack/react-query").UseMutateAsyncFunction<ApiResource<MessageResource>, Error, ResolvedMessageMutationVariables, {
|
|
21
|
+
message: MessageResource;
|
|
22
|
+
}>>[1]) => Promise<ApiResource<MessageResource>>;
|
|
23
|
+
data: undefined;
|
|
24
|
+
variables: undefined;
|
|
25
|
+
error: null;
|
|
26
|
+
isError: false;
|
|
27
|
+
isIdle: true;
|
|
28
|
+
isPending: false;
|
|
29
|
+
isSuccess: false;
|
|
30
|
+
status: "idle";
|
|
31
|
+
reset: () => void;
|
|
32
|
+
context: {
|
|
33
|
+
message: MessageResource;
|
|
34
|
+
} | undefined;
|
|
35
|
+
failureCount: number;
|
|
36
|
+
failureReason: Error | null;
|
|
37
|
+
isPaused: boolean;
|
|
38
|
+
submittedAt: number;
|
|
39
|
+
} | {
|
|
40
|
+
mutate: (variables: MessageMutationVariables, options?: Parameters<import("@tanstack/react-query").UseMutateFunction<ApiResource<MessageResource>, Error, ResolvedMessageMutationVariables, {
|
|
41
|
+
message: MessageResource;
|
|
42
|
+
}>>[1]) => void;
|
|
43
|
+
mutateAsync: (variables: MessageMutationVariables, options?: Parameters<import("@tanstack/react-query").UseMutateAsyncFunction<ApiResource<MessageResource>, Error, ResolvedMessageMutationVariables, {
|
|
44
|
+
message: MessageResource;
|
|
45
|
+
}>>[1]) => Promise<ApiResource<MessageResource>>;
|
|
46
|
+
data: undefined;
|
|
47
|
+
variables: ResolvedMessageMutationVariables;
|
|
48
|
+
error: null;
|
|
49
|
+
isError: false;
|
|
50
|
+
isIdle: false;
|
|
51
|
+
isPending: true;
|
|
52
|
+
isSuccess: false;
|
|
53
|
+
status: "pending";
|
|
54
|
+
reset: () => void;
|
|
55
|
+
context: {
|
|
56
|
+
message: MessageResource;
|
|
57
|
+
} | undefined;
|
|
58
|
+
failureCount: number;
|
|
59
|
+
failureReason: Error | null;
|
|
60
|
+
isPaused: boolean;
|
|
61
|
+
submittedAt: number;
|
|
62
|
+
} | {
|
|
63
|
+
mutate: (variables: MessageMutationVariables, options?: Parameters<import("@tanstack/react-query").UseMutateFunction<ApiResource<MessageResource>, Error, ResolvedMessageMutationVariables, {
|
|
64
|
+
message: MessageResource;
|
|
65
|
+
}>>[1]) => void;
|
|
66
|
+
mutateAsync: (variables: MessageMutationVariables, options?: Parameters<import("@tanstack/react-query").UseMutateAsyncFunction<ApiResource<MessageResource>, Error, ResolvedMessageMutationVariables, {
|
|
67
|
+
message: MessageResource;
|
|
68
|
+
}>>[1]) => Promise<ApiResource<MessageResource>>;
|
|
69
|
+
data: undefined;
|
|
70
|
+
error: Error;
|
|
71
|
+
variables: ResolvedMessageMutationVariables;
|
|
72
|
+
isError: true;
|
|
73
|
+
isIdle: false;
|
|
74
|
+
isPending: false;
|
|
75
|
+
isSuccess: false;
|
|
76
|
+
status: "error";
|
|
77
|
+
reset: () => void;
|
|
78
|
+
context: {
|
|
79
|
+
message: MessageResource;
|
|
80
|
+
} | undefined;
|
|
81
|
+
failureCount: number;
|
|
82
|
+
failureReason: Error | null;
|
|
83
|
+
isPaused: boolean;
|
|
84
|
+
submittedAt: number;
|
|
85
|
+
} | {
|
|
86
|
+
mutate: (variables: MessageMutationVariables, options?: Parameters<import("@tanstack/react-query").UseMutateFunction<ApiResource<MessageResource>, Error, ResolvedMessageMutationVariables, {
|
|
87
|
+
message: MessageResource;
|
|
88
|
+
}>>[1]) => void;
|
|
89
|
+
mutateAsync: (variables: MessageMutationVariables, options?: Parameters<import("@tanstack/react-query").UseMutateAsyncFunction<ApiResource<MessageResource>, Error, ResolvedMessageMutationVariables, {
|
|
90
|
+
message: MessageResource;
|
|
91
|
+
}>>[1]) => Promise<ApiResource<MessageResource>>;
|
|
92
|
+
data: ApiResource<MessageResource>;
|
|
93
|
+
error: null;
|
|
94
|
+
variables: ResolvedMessageMutationVariables;
|
|
95
|
+
isError: false;
|
|
96
|
+
isIdle: false;
|
|
97
|
+
isPending: false;
|
|
98
|
+
isSuccess: true;
|
|
99
|
+
status: "success";
|
|
100
|
+
reset: () => void;
|
|
101
|
+
context: {
|
|
102
|
+
message: MessageResource;
|
|
103
|
+
} | undefined;
|
|
104
|
+
failureCount: number;
|
|
105
|
+
failureReason: Error | null;
|
|
106
|
+
isPaused: boolean;
|
|
107
|
+
submittedAt: number;
|
|
108
|
+
};
|
|
14
109
|
export {};
|
|
15
110
|
//# sourceMappingURL=use_message_create_or_update.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_message_create_or_update.d.ts","sourceRoot":"","sources":["../../src/hooks/use_message_create_or_update.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACtE,OAAO,EAAE,uCAAuC,EAAE,MAAM,gEAAgE,CAAA;AAexH,UAAU,KAAK;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,wBAAgB,wBAAwB,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"use_message_create_or_update.d.ts","sourceRoot":"","sources":["../../src/hooks/use_message_create_or_update.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACtE,OAAO,EAAE,uCAAuC,EAAE,MAAM,gEAAgE,CAAA;AAexH,UAAU,KAAK;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,UAAU,wBAAwB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,uCAAuC,EAAE,CAAA;IACvD,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,KAAK,gCAAgC,GAAG,wBAAwB,GAAG;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5F,wBAAgB,wBAAwB,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,KAAK;wBAiIzE,wBAAwB,YACzB,UAAU;;OAAwB,CAAC,CAAC,CAAC;6BAIpC,wBAAwB,YACzB,UAAU;;OAA6B,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;wBANzC,wBAAwB,YACzB,UAAU;;OAAwB,CAAC,CAAC,CAAC;6BAIpC,wBAAwB,YACzB,UAAU;;OAA6B,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;wBANzC,wBAAwB,YACzB,UAAU;;OAAwB,CAAC,CAAC,CAAC;6BAIpC,wBAAwB,YACzB,UAAU;;OAA6B,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;wBANzC,wBAAwB,YACzB,UAAU;;OAAwB,CAAC,CAAC,CAAC;6BAIpC,wBAAwB,YACzB,UAAU;;OAA6B,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;EAIvD"}
|
|
@@ -10,7 +10,7 @@ import { getMessagesQueryKey, getMessagesRequestArgs } from '../utils/request/ge
|
|
|
10
10
|
import { useApiClient } from './use_api_client';
|
|
11
11
|
import { useCurrentPerson } from './use_current_person';
|
|
12
12
|
export function useMessageCreateOrUpdate(t0) {
|
|
13
|
-
const $ = _c(
|
|
13
|
+
const $ = _c(33);
|
|
14
14
|
const {
|
|
15
15
|
conversationId,
|
|
16
16
|
message,
|
|
@@ -33,7 +33,8 @@ export function useMessageCreateOrUpdate(t0) {
|
|
|
33
33
|
t2 = t3 => {
|
|
34
34
|
const {
|
|
35
35
|
text,
|
|
36
|
-
attachments
|
|
36
|
+
attachments,
|
|
37
|
+
idempotentKey
|
|
37
38
|
} = t3;
|
|
38
39
|
const requestParams = getMessagesRequestArgs({
|
|
39
40
|
conversation_id: conversationId
|
|
@@ -51,7 +52,6 @@ export function useMessageCreateOrUpdate(t0) {
|
|
|
51
52
|
} : {})
|
|
52
53
|
};
|
|
53
54
|
if (!isEditing) {
|
|
54
|
-
const idempotentKey = insecureUUID();
|
|
55
55
|
attributes.idempotent_key = idempotentKey;
|
|
56
56
|
startMessageCreationTracking(idempotentKey);
|
|
57
57
|
}
|
|
@@ -89,7 +89,8 @@ export function useMessageCreateOrUpdate(t0) {
|
|
|
89
89
|
t3 = async t4 => {
|
|
90
90
|
const {
|
|
91
91
|
text: text_0,
|
|
92
|
-
attachments: attachments_0
|
|
92
|
+
attachments: attachments_0,
|
|
93
|
+
idempotentKey: idempotentKey_0
|
|
93
94
|
} = t4;
|
|
94
95
|
if (message && isEditing) {
|
|
95
96
|
const optimisticMessage = optimisticallyUpdateMessage({
|
|
@@ -108,7 +109,8 @@ export function useMessageCreateOrUpdate(t0) {
|
|
|
108
109
|
text: text_0,
|
|
109
110
|
attachments: attachments_0,
|
|
110
111
|
currentPerson,
|
|
111
|
-
replyRootId
|
|
112
|
+
replyRootId,
|
|
113
|
+
idempotentKey: idempotentKey_0
|
|
112
114
|
});
|
|
113
115
|
return {
|
|
114
116
|
message: optimisticMessage_0
|
|
@@ -193,7 +195,46 @@ export function useMessageCreateOrUpdate(t0) {
|
|
|
193
195
|
t6 = $[22];
|
|
194
196
|
}
|
|
195
197
|
const mutation = useMutation(t6);
|
|
196
|
-
|
|
198
|
+
let t7;
|
|
199
|
+
if ($[23] !== message?.idempotentKey) {
|
|
200
|
+
t7 = variables_1 => ({
|
|
201
|
+
...variables_1,
|
|
202
|
+
idempotentKey: variables_1.idempotentKey ?? message?.idempotentKey ?? insecureUUID()
|
|
203
|
+
});
|
|
204
|
+
$[23] = message?.idempotentKey;
|
|
205
|
+
$[24] = t7;
|
|
206
|
+
} else {
|
|
207
|
+
t7 = $[24];
|
|
208
|
+
}
|
|
209
|
+
const resolveVariables = t7;
|
|
210
|
+
let mutate;
|
|
211
|
+
let mutateAsync;
|
|
212
|
+
if ($[25] !== mutation || $[26] !== resolveVariables) {
|
|
213
|
+
mutate = (variables_2, options) => mutation.mutate(resolveVariables(variables_2), options);
|
|
214
|
+
mutateAsync = (variables_3, options_0) => mutation.mutateAsync(resolveVariables(variables_3), options_0);
|
|
215
|
+
$[25] = mutation;
|
|
216
|
+
$[26] = resolveVariables;
|
|
217
|
+
$[27] = mutate;
|
|
218
|
+
$[28] = mutateAsync;
|
|
219
|
+
} else {
|
|
220
|
+
mutate = $[27];
|
|
221
|
+
mutateAsync = $[28];
|
|
222
|
+
}
|
|
223
|
+
let t8;
|
|
224
|
+
if ($[29] !== mutate || $[30] !== mutateAsync || $[31] !== mutation) {
|
|
225
|
+
t8 = {
|
|
226
|
+
...mutation,
|
|
227
|
+
mutate,
|
|
228
|
+
mutateAsync
|
|
229
|
+
};
|
|
230
|
+
$[29] = mutate;
|
|
231
|
+
$[30] = mutateAsync;
|
|
232
|
+
$[31] = mutation;
|
|
233
|
+
$[32] = t8;
|
|
234
|
+
} else {
|
|
235
|
+
t8 = $[32];
|
|
236
|
+
}
|
|
237
|
+
return t8;
|
|
197
238
|
}
|
|
198
239
|
|
|
199
240
|
/**
|