@planningcenter/chat-react-native 4.2.0 → 4.2.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/anchor_not_found_boundary.d.ts +18 -0
- package/build/components/conversation/anchor_not_found_boundary.d.ts.map +1 -0
- package/build/components/conversation/anchor_not_found_boundary.js +20 -0
- package/build/components/conversation/anchor_not_found_boundary.js.map +1 -0
- package/build/components/conversation/message_form.d.ts +2 -1
- package/build/components/conversation/message_form.d.ts.map +1 -1
- package/build/components/conversation/message_form.js +54 -51
- package/build/components/conversation/message_form.js.map +1 -1
- package/build/components/conversation/message_list.d.ts +3 -2
- package/build/components/conversation/message_list.d.ts.map +1 -1
- package/build/components/conversation/message_list.js +152 -66
- package/build/components/conversation/message_list.js.map +1 -1
- package/build/hooks/index.d.ts +1 -0
- package/build/hooks/index.d.ts.map +1 -1
- package/build/hooks/index.js +1 -0
- package/build/hooks/index.js.map +1 -1
- package/build/hooks/paginator_meta.d.ts +3 -1
- package/build/hooks/paginator_meta.d.ts.map +1 -1
- package/build/hooks/paginator_meta.js +25 -8
- package/build/hooks/paginator_meta.js.map +1 -1
- package/build/hooks/use_api.d.ts.map +1 -1
- package/build/hooks/use_api.js +5 -8
- package/build/hooks/use_api.js.map +1 -1
- package/build/hooks/use_conversation_messages.d.ts +8 -2
- package/build/hooks/use_conversation_messages.d.ts.map +1 -1
- package/build/hooks/use_conversation_messages.js +77 -45
- package/build/hooks/use_conversation_messages.js.map +1 -1
- package/build/hooks/use_conversation_messages_jolt_events.d.ts +9 -1
- package/build/hooks/use_conversation_messages_jolt_events.d.ts.map +1 -1
- package/build/hooks/use_conversation_messages_jolt_events.js +88 -73
- package/build/hooks/use_conversation_messages_jolt_events.js.map +1 -1
- package/build/hooks/use_direct_message_eligibility.d.ts +14 -0
- package/build/hooks/use_direct_message_eligibility.d.ts.map +1 -0
- package/build/hooks/use_direct_message_eligibility.js +87 -0
- package/build/hooks/use_direct_message_eligibility.js.map +1 -0
- package/build/hooks/use_fetch_newer_messages.d.ts +8 -0
- package/build/hooks/use_fetch_newer_messages.d.ts.map +1 -0
- package/build/hooks/use_fetch_newer_messages.js +56 -0
- package/build/hooks/use_fetch_newer_messages.js.map +1 -0
- package/build/hooks/use_fetch_newer_on_foreground.d.ts +8 -0
- package/build/hooks/use_fetch_newer_on_foreground.d.ts.map +1 -0
- package/build/hooks/use_fetch_newer_on_foreground.js +41 -0
- package/build/hooks/use_fetch_newer_on_foreground.js.map +1 -0
- package/build/hooks/use_mark_latest_message_read.d.ts +2 -1
- package/build/hooks/use_mark_latest_message_read.d.ts.map +1 -1
- package/build/hooks/use_mark_latest_message_read.js +4 -3
- package/build/hooks/use_mark_latest_message_read.js.map +1 -1
- package/build/hooks/use_suspense_api.d.ts.map +1 -1
- package/build/hooks/use_suspense_api.js +5 -8
- package/build/hooks/use_suspense_api.js.map +1 -1
- package/build/screens/conversation_new/components/services_form.js +9 -8
- package/build/screens/conversation_new/components/services_form.js.map +1 -1
- package/build/screens/conversation_screen.d.ts +1 -0
- package/build/screens/conversation_screen.d.ts.map +1 -1
- package/build/screens/conversation_screen.js +241 -355
- package/build/screens/conversation_screen.js.map +1 -1
- package/build/types/api_primitives.d.ts +2 -0
- package/build/types/api_primitives.d.ts.map +1 -1
- package/build/types/api_primitives.js.map +1 -1
- package/build/types/resources/member.d.ts +1 -0
- package/build/types/resources/member.d.ts.map +1 -1
- package/build/types/resources/member.js.map +1 -1
- package/build/utils/cache/prepend_newer_page.d.ts +7 -0
- package/build/utils/cache/prepend_newer_page.d.ts.map +1 -0
- package/build/utils/cache/prepend_newer_page.js +14 -0
- package/build/utils/cache/prepend_newer_page.js.map +1 -0
- package/build/utils/client/types.d.ts +1 -0
- package/build/utils/client/types.d.ts.map +1 -1
- package/build/utils/client/types.js.map +1 -1
- package/build/utils/gated_message_cache.d.ts +7 -0
- package/build/utils/gated_message_cache.d.ts.map +1 -0
- package/build/utils/gated_message_cache.js +13 -0
- package/build/utils/gated_message_cache.js.map +1 -0
- package/build/utils/generate_placeholder_ulid.d.ts +0 -6
- package/build/utils/generate_placeholder_ulid.d.ts.map +1 -1
- package/build/utils/generate_placeholder_ulid.js +2 -2
- package/build/utils/generate_placeholder_ulid.js.map +1 -1
- package/build/utils/group_messages.js +4 -1
- package/build/utils/group_messages.js.map +1 -1
- package/build/utils/request/get_messages.d.ts +18 -6
- package/build/utils/request/get_messages.d.ts.map +1 -1
- package/build/utils/request/get_messages.js +10 -12
- package/build/utils/request/get_messages.js.map +1 -1
- package/build/utils/ulid.d.ts +3 -0
- package/build/utils/ulid.d.ts.map +1 -0
- package/build/utils/ulid.js +7 -0
- package/build/utils/ulid.js.map +1 -0
- package/package.json +3 -3
- package/src/__tests__/hooks/paginator_meta.test.ts +73 -2
- package/src/__tests__/hooks/use_conversation_messages_jolt_events.test.ts +36 -0
- package/src/__tests__/hooks/use_direct_message_eligibility.test.tsx +83 -0
- package/src/__tests__/screens/conversation_new/components/services_form.test.tsx +91 -0
- package/src/__tests__/utils/gated_message_cache.test.ts +26 -0
- package/src/__tests__/utils/request/get_messages.test.ts +24 -0
- package/src/__tests__/utils/ulid.test.ts +15 -0
- package/src/components/conversation/__tests__/anchor_not_found_boundary.test.tsx +51 -0
- package/src/components/conversation/__tests__/message_list.test.tsx +42 -0
- package/src/components/conversation/anchor_not_found_boundary.tsx +21 -0
- package/src/components/conversation/message_form.tsx +4 -0
- package/src/components/conversation/message_list.tsx +58 -4
- package/src/hooks/index.ts +1 -0
- package/src/hooks/paginator_meta.ts +29 -5
- package/src/hooks/use_api.ts +4 -5
- package/src/hooks/use_conversation_messages.ts +43 -11
- package/src/hooks/use_conversation_messages_jolt_events.ts +57 -40
- package/src/hooks/use_direct_message_eligibility.ts +40 -0
- package/src/hooks/use_fetch_newer_messages.ts +37 -0
- package/src/hooks/use_fetch_newer_on_foreground.ts +25 -0
- package/src/hooks/use_mark_latest_message_read.ts +4 -3
- package/src/hooks/use_suspense_api.ts +4 -5
- package/src/screens/conversation_new/components/services_form.tsx +5 -5
- package/src/screens/conversation_screen.tsx +120 -17
- package/src/types/api_primitives.ts +2 -0
- package/src/types/resources/member.ts +1 -0
- package/src/utils/__tests__/group_messages.test.ts +29 -0
- package/src/utils/cache/__tests__/prepend_newer_page.test.ts +35 -0
- package/src/utils/cache/prepend_newer_page.ts +22 -0
- package/src/utils/client/types.ts +1 -0
- package/src/utils/gated_message_cache.ts +19 -0
- package/src/utils/generate_placeholder_ulid.ts +2 -2
- package/src/utils/group_messages.ts +4 -1
- package/src/utils/request/get_messages.ts +12 -14
- package/src/utils/ulid.ts +11 -0
|
@@ -2,91 +2,123 @@ import { c as _c } from "react/compiler-runtime";
|
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
import { replaceEqualById } from '../utils/replace_equal_by_id';
|
|
4
4
|
import { getMessagesQueryKey, getMessagesRequestArgs } from '../utils/request/get_messages';
|
|
5
|
+
import { getNewerPageParam } from './paginator_meta';
|
|
5
6
|
import { useSuspensePaginator } from './use_suspense_api';
|
|
6
7
|
export const useConversationMessages = (t0, opts) => {
|
|
7
|
-
const $ = _c(
|
|
8
|
+
const $ = _c(25);
|
|
8
9
|
const {
|
|
9
10
|
conversation_id,
|
|
10
|
-
reply_root_id
|
|
11
|
+
reply_root_id,
|
|
12
|
+
anchor
|
|
11
13
|
} = t0;
|
|
12
14
|
let t1;
|
|
13
|
-
if ($[0] !==
|
|
15
|
+
if ($[0] !== anchor || $[1] !== conversation_id || $[2] !== reply_root_id) {
|
|
14
16
|
t1 = getMessagesRequestArgs({
|
|
15
17
|
conversation_id,
|
|
16
|
-
reply_root_id
|
|
18
|
+
reply_root_id,
|
|
19
|
+
anchor
|
|
17
20
|
});
|
|
18
|
-
$[0] =
|
|
19
|
-
$[1] =
|
|
20
|
-
$[2] =
|
|
21
|
+
$[0] = anchor;
|
|
22
|
+
$[1] = conversation_id;
|
|
23
|
+
$[2] = reply_root_id;
|
|
24
|
+
$[3] = t1;
|
|
21
25
|
} else {
|
|
22
|
-
t1 = $[
|
|
26
|
+
t1 = $[3];
|
|
23
27
|
}
|
|
24
28
|
let t2;
|
|
25
|
-
if ($[
|
|
26
|
-
t2 = {
|
|
29
|
+
if ($[4] !== anchor) {
|
|
30
|
+
t2 = anchor ? {
|
|
31
|
+
getPreviousPageParam: _temp,
|
|
32
|
+
gcTime: 0,
|
|
33
|
+
staleTime: Infinity
|
|
34
|
+
} : {};
|
|
35
|
+
$[4] = anchor;
|
|
36
|
+
$[5] = t2;
|
|
37
|
+
} else {
|
|
38
|
+
t2 = $[5];
|
|
39
|
+
}
|
|
40
|
+
let t3;
|
|
41
|
+
if ($[6] !== opts || $[7] !== t2) {
|
|
42
|
+
t3 = {
|
|
27
43
|
structuralSharing: replaceEqualById,
|
|
44
|
+
...t2,
|
|
28
45
|
...opts
|
|
29
46
|
};
|
|
30
|
-
$[
|
|
31
|
-
$[
|
|
47
|
+
$[6] = opts;
|
|
48
|
+
$[7] = t2;
|
|
49
|
+
$[8] = t3;
|
|
32
50
|
} else {
|
|
33
|
-
|
|
51
|
+
t3 = $[8];
|
|
34
52
|
}
|
|
35
53
|
const {
|
|
36
54
|
data,
|
|
37
55
|
refetch,
|
|
38
56
|
isRefetching,
|
|
39
57
|
fetchNextPage,
|
|
40
|
-
hasNextPage
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
58
|
+
hasNextPage,
|
|
59
|
+
fetchPreviousPage,
|
|
60
|
+
hasPreviousPage,
|
|
61
|
+
isFetchingPreviousPage
|
|
62
|
+
} = useSuspensePaginator(t1, t3);
|
|
63
|
+
let t4;
|
|
64
|
+
if ($[9] !== anchor || $[10] !== conversation_id || $[11] !== reply_root_id) {
|
|
65
|
+
t4 = getMessagesQueryKey({
|
|
45
66
|
conversation_id,
|
|
46
|
-
reply_root_id
|
|
67
|
+
reply_root_id,
|
|
68
|
+
anchor
|
|
47
69
|
});
|
|
48
|
-
$[
|
|
49
|
-
$[
|
|
50
|
-
$[
|
|
70
|
+
$[9] = anchor;
|
|
71
|
+
$[10] = conversation_id;
|
|
72
|
+
$[11] = reply_root_id;
|
|
73
|
+
$[12] = t4;
|
|
51
74
|
} else {
|
|
52
|
-
|
|
75
|
+
t4 = $[12];
|
|
53
76
|
}
|
|
54
|
-
const queryKey =
|
|
55
|
-
let
|
|
56
|
-
if ($[
|
|
57
|
-
|
|
58
|
-
$[
|
|
59
|
-
$[
|
|
77
|
+
const queryKey = t4;
|
|
78
|
+
let t5;
|
|
79
|
+
if ($[13] !== data) {
|
|
80
|
+
t5 = data.filter(_temp2).sort(_temp3);
|
|
81
|
+
$[13] = data;
|
|
82
|
+
$[14] = t5;
|
|
60
83
|
} else {
|
|
61
|
-
|
|
84
|
+
t5 = $[14];
|
|
62
85
|
}
|
|
63
|
-
const messages =
|
|
64
|
-
let
|
|
65
|
-
if ($[
|
|
66
|
-
|
|
86
|
+
const messages = t5;
|
|
87
|
+
let t6;
|
|
88
|
+
if ($[15] !== fetchNextPage || $[16] !== fetchPreviousPage || $[17] !== hasNextPage || $[18] !== hasPreviousPage || $[19] !== isFetchingPreviousPage || $[20] !== isRefetching || $[21] !== messages || $[22] !== queryKey || $[23] !== refetch) {
|
|
89
|
+
t6 = {
|
|
67
90
|
messages,
|
|
68
91
|
refetch,
|
|
69
92
|
isRefetching,
|
|
70
93
|
fetchNextPage,
|
|
71
94
|
hasNextPage,
|
|
95
|
+
fetchPreviousPage,
|
|
96
|
+
hasPreviousPage,
|
|
97
|
+
isFetchingPreviousPage,
|
|
72
98
|
queryKey
|
|
73
99
|
};
|
|
74
|
-
$[
|
|
75
|
-
$[
|
|
76
|
-
$[
|
|
77
|
-
$[
|
|
78
|
-
$[
|
|
79
|
-
$[
|
|
80
|
-
$[
|
|
100
|
+
$[15] = fetchNextPage;
|
|
101
|
+
$[16] = fetchPreviousPage;
|
|
102
|
+
$[17] = hasNextPage;
|
|
103
|
+
$[18] = hasPreviousPage;
|
|
104
|
+
$[19] = isFetchingPreviousPage;
|
|
105
|
+
$[20] = isRefetching;
|
|
106
|
+
$[21] = messages;
|
|
107
|
+
$[22] = queryKey;
|
|
108
|
+
$[23] = refetch;
|
|
109
|
+
$[24] = t6;
|
|
81
110
|
} else {
|
|
82
|
-
|
|
111
|
+
t6 = $[24];
|
|
83
112
|
}
|
|
84
|
-
return
|
|
113
|
+
return t6;
|
|
85
114
|
};
|
|
86
|
-
function _temp(
|
|
115
|
+
function _temp(page, _pages, pageParam) {
|
|
116
|
+
return getNewerPageParam(page, pageParam);
|
|
117
|
+
}
|
|
118
|
+
function _temp2(message) {
|
|
87
119
|
return (!message.deletedAt || message.replyRootId) && (message.attachments?.length || message.text?.length);
|
|
88
120
|
}
|
|
89
|
-
function
|
|
121
|
+
function _temp3(a, b) {
|
|
90
122
|
return -a.id.localeCompare(b.id);
|
|
91
123
|
}
|
|
92
124
|
//# sourceMappingURL=use_conversation_messages.js.map
|
|
@@ -1 +1 @@
|
|
|
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","
|
|
1
|
+
{"version":3,"file":"use_conversation_messages.js","names":["useMemo","replaceEqualById","getMessagesQueryKey","getMessagesRequestArgs","getNewerPageParam","useSuspensePaginator","useConversationMessages","t0","opts","$","_c","conversation_id","reply_root_id","anchor","t1","t2","getPreviousPageParam","_temp","gcTime","staleTime","Infinity","t3","structuralSharing","data","refetch","isRefetching","fetchNextPage","hasNextPage","fetchPreviousPage","hasPreviousPage","isFetchingPreviousPage","t4","queryKey","t5","filter","_temp2","sort","_temp3","messages","t6","page","_pages","pageParam","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 { getNewerPageParam } from './paginator_meta'\nimport { SuspensePaginatorOptions, useSuspensePaginator } from './use_suspense_api'\n\ntype Options = {\n conversation_id: number\n reply_root_id?: string | null\n anchor?: string | null\n}\n\nexport const useConversationMessages = (\n { conversation_id, reply_root_id, anchor }: Options,\n opts?: SuspensePaginatorOptions\n) => {\n const {\n data,\n refetch,\n isRefetching,\n fetchNextPage,\n hasNextPage,\n fetchPreviousPage,\n hasPreviousPage,\n isFetchingPreviousPage,\n } = useSuspensePaginator<MessageResource>(\n getMessagesRequestArgs({ conversation_id, reply_root_id, anchor }),\n {\n structuralSharing: replaceEqualById,\n ...(anchor\n ? {\n getPreviousPageParam: (page, _pages, pageParam) => getNewerPageParam(page, pageParam),\n gcTime: 0,\n staleTime: Infinity,\n }\n : {}),\n ...opts,\n }\n )\n const queryKey = getMessagesQueryKey({ conversation_id, reply_root_id, anchor })\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 {\n messages,\n refetch,\n isRefetching,\n fetchNextPage,\n hasNextPage,\n fetchPreviousPage,\n hasPreviousPage,\n isFetchingPreviousPage,\n queryKey,\n }\n}\n"],"mappings":";AAAA,SAASA,OAAO,QAAQ,OAAO;AAE/B,SAASC,gBAAgB,QAAQ,8BAA8B;AAC/D,SAASC,mBAAmB,EAAEC,sBAAsB,QAAQ,+BAA+B;AAC3F,SAASC,iBAAiB,QAAQ,kBAAkB;AACpD,SAAmCC,oBAAoB,QAAQ,oBAAoB;AAQnF,OAAO,MAAMC,uBAAuB,GAAGA,CAAAC,EAAA,EAAAC,IAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EACrC;IAAAC,eAAA;IAAAC,aAAA;IAAAC;EAAA,IAAAN,EAAmD;EAAA,IAAAO,EAAA;EAAA,IAAAL,CAAA,QAAAI,MAAA,IAAAJ,CAAA,QAAAE,eAAA,IAAAF,CAAA,QAAAG,aAAA;IAajDE,EAAA,GAAAX,sBAAsB,CAAC;MAAAQ,eAAA;MAAAC,aAAA;MAAAC;IAAyC,CAAC,CAAC;IAAAJ,CAAA,MAAAI,MAAA;IAAAJ,CAAA,MAAAE,eAAA;IAAAF,CAAA,MAAAG,aAAA;IAAAH,CAAA,MAAAK,EAAA;EAAA;IAAAA,EAAA,GAAAL,CAAA;EAAA;EAAA,IAAAM,EAAA;EAAA,IAAAN,CAAA,QAAAI,MAAA;IAG5DE,EAAA,GAAAF,MAAM,GAAN;MAAAG,oBAAA,EAEwBC,KAA+D;MAAAC,MAAA,EAC7E,CAAC;MAAAC,SAAA,EACEC;IAEZ,CAAC,GANF,CAMC,CAAC;IAAAX,CAAA,MAAAI,MAAA;IAAAJ,CAAA,MAAAM,EAAA;EAAA;IAAAA,EAAA,GAAAN,CAAA;EAAA;EAAA,IAAAY,EAAA;EAAA,IAAAZ,CAAA,QAAAD,IAAA,IAAAC,CAAA,QAAAM,EAAA;IARRM,EAAA;MAAAC,iBAAA,EACqBrB,gBAAgB;MAAA,GAC/Bc,EAME;MAAA,GACHP;IACL,CAAC;IAAAC,CAAA,MAAAD,IAAA;IAAAC,CAAA,MAAAM,EAAA;IAAAN,CAAA,MAAAY,EAAA;EAAA;IAAAA,EAAA,GAAAZ,CAAA;EAAA;EArBH;IAAAc,IAAA;IAAAC,OAAA;IAAAC,YAAA;IAAAC,aAAA;IAAAC,WAAA;IAAAC,iBAAA;IAAAC,eAAA;IAAAC;EAAA,IASIzB,oBAAoB,CACtBS,EAAkE,EAClEO,EAWF,CAAC;EAAA,IAAAU,EAAA;EAAA,IAAAtB,CAAA,QAAAI,MAAA,IAAAJ,CAAA,SAAAE,eAAA,IAAAF,CAAA,SAAAG,aAAA;IACgBmB,EAAA,GAAA7B,mBAAmB,CAAC;MAAAS,eAAA;MAAAC,aAAA;MAAAC;IAAyC,CAAC,CAAC;IAAAJ,CAAA,MAAAI,MAAA;IAAAJ,CAAA,OAAAE,eAAA;IAAAF,CAAA,OAAAG,aAAA;IAAAH,CAAA,OAAAsB,EAAA;EAAA;IAAAA,EAAA,GAAAtB,CAAA;EAAA;EAAhF,MAAAuB,QAAA,GAAiBD,EAA+D;EAAA,IAAAE,EAAA;EAAA,IAAAxB,CAAA,SAAAc,IAAA;IAG5EU,EAAA,GAAAV,IAAI,CAAAW,MACK,CACLC,MAGF,CAAC,CAAAC,IACI,CAACC,MAAmC,CAAC;IAAA5B,CAAA,OAAAc,IAAA;IAAAd,CAAA,OAAAwB,EAAA;EAAA;IAAAA,EAAA,GAAAxB,CAAA;EAAA;EARhD,MAAA6B,QAAA,GAEIL,EAM4C;EAE/C,IAAAM,EAAA;EAAA,IAAA9B,CAAA,SAAAiB,aAAA,IAAAjB,CAAA,SAAAmB,iBAAA,IAAAnB,CAAA,SAAAkB,WAAA,IAAAlB,CAAA,SAAAoB,eAAA,IAAApB,CAAA,SAAAqB,sBAAA,IAAArB,CAAA,SAAAgB,YAAA,IAAAhB,CAAA,SAAA6B,QAAA,IAAA7B,CAAA,SAAAuB,QAAA,IAAAvB,CAAA,SAAAe,OAAA;IAEMe,EAAA;MAAAD,QAAA;MAAAd,OAAA;MAAAC,YAAA;MAAAC,aAAA;MAAAC,WAAA;MAAAC,iBAAA;MAAAC,eAAA;MAAAC,sBAAA;MAAAE;IAUP,CAAC;IAAAvB,CAAA,OAAAiB,aAAA;IAAAjB,CAAA,OAAAmB,iBAAA;IAAAnB,CAAA,OAAAkB,WAAA;IAAAlB,CAAA,OAAAoB,eAAA;IAAApB,CAAA,OAAAqB,sBAAA;IAAArB,CAAA,OAAAgB,YAAA;IAAAhB,CAAA,OAAA6B,QAAA;IAAA7B,CAAA,OAAAuB,QAAA;IAAAvB,CAAA,OAAAe,OAAA;IAAAf,CAAA,OAAA8B,EAAA;EAAA;IAAAA,EAAA,GAAA9B,CAAA;EAAA;EAAA,OAVM8B,EAUN;AAAA,CACF;AAnDsC,SAAAtB,MAAAuB,IAAA,EAAAC,MAAA,EAAAC,SAAA;EAAA,OAmBwBtC,iBAAiB,CAACoC,IAAI,EAAEE,SAAS,CAAC;AAAA;AAnB1D,SAAAP,OAAAQ,OAAA;EAAA,OAiC3B,CAAC,CAACA,OAAO,CAAAC,SAAiC,IAAnBD,OAAO,CAAAE,WACuB,MAApDF,OAAO,CAAAG,WAAoB,EAAAC,MAAwB,IAApBJ,OAAO,CAAAK,IAAa,EAAAD,MAAC;AAAA;AAlC1B,SAAAV,OAAAY,CAAA,EAAAC,CAAA;EAAA,OAoCf,CAACD,CAAC,CAAAE,EAAG,CAAAC,aAAc,CAACF,CAAC,CAAAC,EAAG,CAAC;AAAA","ignoreList":[]}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
+
export type MessagesJoltEvent = 'message.created' | 'message.updated' | 'message.destroyed' | 'reaction';
|
|
2
|
+
export interface MessagesCache {
|
|
3
|
+
queryKey: unknown[];
|
|
4
|
+
canUpdate?: (event: MessagesJoltEvent) => boolean;
|
|
5
|
+
}
|
|
1
6
|
interface Props {
|
|
2
7
|
conversationId: number;
|
|
8
|
+
messageCaches?: MessagesCache[];
|
|
3
9
|
}
|
|
4
|
-
export declare
|
|
10
|
+
export declare const resolveMessageCaches: (defaults: unknown[][], overrides: MessagesCache[]) => MessagesCache[];
|
|
11
|
+
export declare const queryKeysForEvent: (event: MessagesJoltEvent, defaults: unknown[][], overrides: MessagesCache[]) => unknown[][];
|
|
12
|
+
export declare function useConversationMessagesJoltEvents({ conversationId, messageCaches }: Props): void;
|
|
5
13
|
export {};
|
|
6
14
|
//# sourceMappingURL=use_conversation_messages_jolt_events.d.ts.map
|
|
@@ -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":"AA0BA,UAAU,KAAK;IACb,cAAc,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"use_conversation_messages_jolt_events.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation_messages_jolt_events.ts"],"names":[],"mappings":"AA0BA,MAAM,MAAM,iBAAiB,GACzB,iBAAiB,GACjB,iBAAiB,GACjB,mBAAmB,GACnB,UAAU,CAAA;AAEd,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAA;CAClD;AAED,UAAU,KAAK;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAA;CAChC;AAED,eAAO,MAAM,oBAAoB,GAAI,UAAU,OAAO,EAAE,EAAE,EAAE,WAAW,aAAa,EAAE,oBAMrF,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,OAAO,iBAAiB,EACxB,UAAU,OAAO,EAAE,EAAE,EACrB,WAAW,aAAa,EAAE,gBAIK,CAAA;AAEjC,wBAAgB,iCAAiC,CAAC,EAAE,cAAc,EAAE,aAAkB,EAAE,EAAE,KAAK,QAyF9F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as _c } from "react/compiler-runtime";
|
|
2
|
-
import { useQueryClient } from '@tanstack/react-query';
|
|
2
|
+
import { hashKey, useQueryClient } from '@tanstack/react-query';
|
|
3
3
|
import { deleteRecordInPagesData } from '../utils';
|
|
4
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';
|
|
@@ -11,35 +11,65 @@ import { useCurrentPerson } from './use_current_person';
|
|
|
11
11
|
import { useJoltChannel, useJoltEvent } from './use_jolt';
|
|
12
12
|
import { getRequestQueryKey } from './use_suspense_api';
|
|
13
13
|
import { TYPING_TIMEOUT_INTERVAL, useTypingStatusCache } from './use_typing_status_cache';
|
|
14
|
+
export const resolveMessageCaches = (defaults, overrides) => {
|
|
15
|
+
const overrideByHash = new Map(overrides.map(cache => [hashKey(cache.queryKey), cache]));
|
|
16
|
+
const defaultHashes = new Set(defaults.map(hashKey));
|
|
17
|
+
const resolved = defaults.map(queryKey => overrideByHash.get(hashKey(queryKey)) ?? {
|
|
18
|
+
queryKey
|
|
19
|
+
});
|
|
20
|
+
const extras = overrides.filter(cache => !defaultHashes.has(hashKey(cache.queryKey)));
|
|
21
|
+
return [...resolved, ...extras];
|
|
22
|
+
};
|
|
23
|
+
export const queryKeysForEvent = (event, defaults, overrides) => resolveMessageCaches(defaults, overrides).filter(cache => !cache.canUpdate || cache.canUpdate(event)).map(cache => cache.queryKey);
|
|
14
24
|
export function useConversationMessagesJoltEvents(t0) {
|
|
15
|
-
const $ = _c(
|
|
25
|
+
const $ = _c(28);
|
|
16
26
|
const {
|
|
17
|
-
conversationId
|
|
27
|
+
conversationId,
|
|
28
|
+
messageCaches: t1
|
|
18
29
|
} = t0;
|
|
30
|
+
let t2;
|
|
31
|
+
if ($[0] !== t1) {
|
|
32
|
+
t2 = t1 === undefined ? [] : t1;
|
|
33
|
+
$[0] = t1;
|
|
34
|
+
$[1] = t2;
|
|
35
|
+
} else {
|
|
36
|
+
t2 = $[1];
|
|
37
|
+
}
|
|
38
|
+
const messageCaches = t2;
|
|
19
39
|
const queryClient = useQueryClient();
|
|
20
40
|
const currentPerson = useCurrentPerson();
|
|
21
41
|
const joltChannel = useJoltChannel(`chat.conversations.${conversationId}`);
|
|
22
|
-
let
|
|
23
|
-
if ($[
|
|
42
|
+
let t3;
|
|
43
|
+
if ($[2] !== conversationId) {
|
|
24
44
|
const messagesRequestArgs = getMessagesRequestArgs({
|
|
25
45
|
conversation_id: conversationId
|
|
26
46
|
});
|
|
27
|
-
|
|
28
|
-
$[
|
|
29
|
-
$[
|
|
47
|
+
t3 = getRequestQueryKey(messagesRequestArgs);
|
|
48
|
+
$[2] = conversationId;
|
|
49
|
+
$[3] = t3;
|
|
50
|
+
} else {
|
|
51
|
+
t3 = $[3];
|
|
52
|
+
}
|
|
53
|
+
const messagesQueryKey = t3;
|
|
54
|
+
let t4;
|
|
55
|
+
if ($[4] !== conversationId || $[5] !== messagesQueryKey) {
|
|
56
|
+
t4 = replyRootId => replyRootId ? [messagesQueryKey, getThreadedMessagesQueryKey(conversationId, replyRootId)] : [messagesQueryKey];
|
|
57
|
+
$[4] = conversationId;
|
|
58
|
+
$[5] = messagesQueryKey;
|
|
59
|
+
$[6] = t4;
|
|
30
60
|
} else {
|
|
31
|
-
|
|
61
|
+
t4 = $[6];
|
|
32
62
|
}
|
|
33
|
-
const
|
|
63
|
+
const cachesTouchedBy = t4;
|
|
34
64
|
const apiClient = useApiClient();
|
|
35
65
|
const {
|
|
36
66
|
addTypingEvent,
|
|
37
67
|
removeTypingEventById,
|
|
38
68
|
removeAllTypingEventsByAuthorId
|
|
39
69
|
} = useTypingStatusCache(conversationId);
|
|
40
|
-
let
|
|
41
|
-
if ($[
|
|
42
|
-
|
|
70
|
+
let t5;
|
|
71
|
+
if ($[7] !== apiClient || $[8] !== cachesTouchedBy || $[9] !== conversationId || $[10] !== currentPerson.id || $[11] !== messageCaches || $[12] !== queryClient || $[13] !== removeAllTypingEventsByAuthorId) {
|
|
72
|
+
t5 = async e => {
|
|
43
73
|
const {
|
|
44
74
|
data
|
|
45
75
|
} = e.data;
|
|
@@ -57,14 +87,10 @@ export function useConversationMessagesJoltEvents(t0) {
|
|
|
57
87
|
});
|
|
58
88
|
}
|
|
59
89
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
if (isReplyRootUpdate) {
|
|
65
|
-
updateCacheReplyRoots(queryClient, messagesQueryKey, message);
|
|
66
|
-
updateCacheReplyRoots(queryClient, threadedMessagesQueryKey, message);
|
|
67
|
-
}
|
|
90
|
+
const targetQueryKeys = queryKeysForEvent(e.event, cachesTouchedBy(data.reply_root_id), messageCaches);
|
|
91
|
+
targetQueryKeys.forEach(queryKey => updateCacheWithMessage(queryClient, queryKey, message, e.event));
|
|
92
|
+
if (isReplyRootUpdate) {
|
|
93
|
+
targetQueryKeys.forEach(queryKey_0 => updateCacheReplyRoots(queryClient, queryKey_0, message));
|
|
68
94
|
}
|
|
69
95
|
if (e.event === "message.updated") {
|
|
70
96
|
const individualMessageQueryKey = getMessageQueryKey({
|
|
@@ -74,20 +100,21 @@ export function useConversationMessagesJoltEvents(t0) {
|
|
|
74
100
|
updateCacheWithIndividualMessage(queryClient, individualMessageQueryKey, message);
|
|
75
101
|
}
|
|
76
102
|
};
|
|
77
|
-
$[
|
|
78
|
-
$[
|
|
79
|
-
$[
|
|
80
|
-
$[
|
|
81
|
-
$[
|
|
82
|
-
$[
|
|
83
|
-
$[
|
|
103
|
+
$[7] = apiClient;
|
|
104
|
+
$[8] = cachesTouchedBy;
|
|
105
|
+
$[9] = conversationId;
|
|
106
|
+
$[10] = currentPerson.id;
|
|
107
|
+
$[11] = messageCaches;
|
|
108
|
+
$[12] = queryClient;
|
|
109
|
+
$[13] = removeAllTypingEventsByAuthorId;
|
|
110
|
+
$[14] = t5;
|
|
84
111
|
} else {
|
|
85
|
-
|
|
112
|
+
t5 = $[14];
|
|
86
113
|
}
|
|
87
|
-
const handleMessageUpdateOrCreate =
|
|
88
|
-
let
|
|
89
|
-
if ($[
|
|
90
|
-
|
|
114
|
+
const handleMessageUpdateOrCreate = t5;
|
|
115
|
+
let t6;
|
|
116
|
+
if ($[15] !== cachesTouchedBy || $[16] !== currentPerson.id || $[17] !== messageCaches || $[18] !== queryClient) {
|
|
117
|
+
t6 = async e_0 => {
|
|
91
118
|
const {
|
|
92
119
|
data: data_0
|
|
93
120
|
} = e_0.data;
|
|
@@ -95,62 +122,50 @@ export function useConversationMessagesJoltEvents(t0) {
|
|
|
95
122
|
data: data_0,
|
|
96
123
|
currentPersonId: currentPerson.id
|
|
97
124
|
});
|
|
98
|
-
queryClient.setQueryData(
|
|
125
|
+
queryKeysForEvent("message.destroyed", cachesTouchedBy(data_0.reply_root_id), messageCaches).forEach(queryKey_1 => queryClient.setQueryData(queryKey_1, prev => deleteRecordInPagesData({
|
|
99
126
|
data: prev,
|
|
100
127
|
record: message_0
|
|
101
|
-
}));
|
|
102
|
-
if (data_0.reply_root_id) {
|
|
103
|
-
const threadedMessagesQueryKey_0 = getThreadedMessagesQueryKey(conversationId, data_0.reply_root_id);
|
|
104
|
-
queryClient.setQueryData(threadedMessagesQueryKey_0, prev_0 => deleteRecordInPagesData({
|
|
105
|
-
data: prev_0,
|
|
106
|
-
record: message_0
|
|
107
|
-
}));
|
|
108
|
-
}
|
|
128
|
+
})));
|
|
109
129
|
};
|
|
110
|
-
$[
|
|
111
|
-
$[
|
|
112
|
-
$[
|
|
113
|
-
$[
|
|
114
|
-
$[
|
|
130
|
+
$[15] = cachesTouchedBy;
|
|
131
|
+
$[16] = currentPerson.id;
|
|
132
|
+
$[17] = messageCaches;
|
|
133
|
+
$[18] = queryClient;
|
|
134
|
+
$[19] = t6;
|
|
115
135
|
} else {
|
|
116
|
-
|
|
136
|
+
t6 = $[19];
|
|
117
137
|
}
|
|
118
|
-
const handleMessageDeleted =
|
|
119
|
-
let
|
|
120
|
-
if ($[
|
|
121
|
-
|
|
122
|
-
updateCacheWithReaction(queryClient,
|
|
123
|
-
const replyRootId = e_1.data.data.reply_root_id;
|
|
124
|
-
if (replyRootId) {
|
|
125
|
-
const threadedMessagesQueryKey_1 = getThreadedMessagesQueryKey(conversationId, replyRootId);
|
|
126
|
-
updateCacheWithReaction(queryClient, threadedMessagesQueryKey_1, e_1, currentPerson.id);
|
|
127
|
-
}
|
|
138
|
+
const handleMessageDeleted = t6;
|
|
139
|
+
let t7;
|
|
140
|
+
if ($[20] !== cachesTouchedBy || $[21] !== currentPerson.id || $[22] !== messageCaches || $[23] !== queryClient) {
|
|
141
|
+
t7 = async e_1 => {
|
|
142
|
+
queryKeysForEvent("reaction", cachesTouchedBy(e_1.data.data.reply_root_id), messageCaches).forEach(queryKey_2 => updateCacheWithReaction(queryClient, queryKey_2, e_1, currentPerson.id));
|
|
128
143
|
};
|
|
129
|
-
$[
|
|
130
|
-
$[
|
|
131
|
-
$[
|
|
132
|
-
$[
|
|
133
|
-
$[
|
|
144
|
+
$[20] = cachesTouchedBy;
|
|
145
|
+
$[21] = currentPerson.id;
|
|
146
|
+
$[22] = messageCaches;
|
|
147
|
+
$[23] = queryClient;
|
|
148
|
+
$[24] = t7;
|
|
134
149
|
} else {
|
|
135
|
-
|
|
150
|
+
t7 = $[24];
|
|
136
151
|
}
|
|
137
|
-
const handleReactionJoltEvent =
|
|
138
|
-
let
|
|
139
|
-
if ($[
|
|
140
|
-
|
|
152
|
+
const handleReactionJoltEvent = t7;
|
|
153
|
+
let t8;
|
|
154
|
+
if ($[25] !== addTypingEvent || $[26] !== removeTypingEventById) {
|
|
155
|
+
t8 = async e_2 => {
|
|
141
156
|
const {
|
|
142
157
|
data: data_1
|
|
143
158
|
} = e_2.data;
|
|
144
159
|
addTypingEvent(data_1);
|
|
145
160
|
setTimeout(() => removeTypingEventById(data_1.id), TYPING_TIMEOUT_INTERVAL);
|
|
146
161
|
};
|
|
147
|
-
$[
|
|
148
|
-
$[
|
|
149
|
-
$[
|
|
162
|
+
$[25] = addTypingEvent;
|
|
163
|
+
$[26] = removeTypingEventById;
|
|
164
|
+
$[27] = t8;
|
|
150
165
|
} else {
|
|
151
|
-
|
|
166
|
+
t8 = $[27];
|
|
152
167
|
}
|
|
153
|
-
const handleTypingEvent =
|
|
168
|
+
const handleTypingEvent = t8;
|
|
154
169
|
useJoltEvent(joltChannel, "message.created", handleMessageUpdateOrCreate);
|
|
155
170
|
useJoltEvent(joltChannel, "message.updated", handleMessageUpdateOrCreate);
|
|
156
171
|
useJoltEvent(joltChannel, "message.destroyed", handleMessageDeleted);
|
|
@@ -1 +1 @@
|
|
|
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":";AAAA,SAAuBA,cAAc,QAAQ,uBAAuB;AAQpE,SAASC,uBAAuB,QAAQ,UAAU;AAClD,SACEC,sBAAsB,EACtBC,gCAAgC,EAChCC,uBAAuB,EACvBC,qBAAqB,EACrBC,2BAA2B,QACtB,+BAA+B;AACtC,SAASC,0CAA0C,QAAQ,gEAAgE;AAC3H,SAASC,+BAA+B,QAAQ,+BAA+B;AAC/E,SAASC,kBAAkB,QAAQ,8BAA8B;AACjE,SAASC,sBAAsB,QAAQ,+BAA+B;AACtE,SAASC,YAAY,QAAQ,kBAAkB;AAC/C,SAASC,gBAAgB,QAAQ,sBAAsB;AACvD,SAASC,cAAc,EAAEC,YAAY,QAAQ,YAAY;AACzD,SAASC,kBAAkB,QAAQ,oBAAoB;AACvD,SAASC,uBAAuB,EAAEC,oBAAoB,QAAQ,2BAA2B;AAMzF,OAAO,SAAAC,kCAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAA2C;IAAAC;EAAA,IAAAH,EAAyB;EACzE,MAAAI,WAAA,GAAoBvB,cAAc,CAAC,CAAC;EACpC,MAAAwB,aAAA,GAAsBZ,gBAAgB,CAAC,CAAC;EACxC,MAAAa,WAAA,GAAoBZ,cAAc,CAAC,sBAAsBS,cAAc,EAAE,CAAC;EAAA,IAAAI,EAAA;EAAA,IAAAN,CAAA,QAAAE,cAAA;IAC1E,MAAAK,mBAAA,GAA4BjB,sBAAsB,CAAC;MAAAkB,eAAA,EAAmBN;IAAe,CAAC,CAAC;IAC9DI,EAAA,GAAAX,kBAAkB,CAACY,mBAAmB,CAAC;IAAAP,CAAA,MAAAE,cAAA;IAAAF,CAAA,MAAAM,EAAA;EAAA;IAAAA,EAAA,GAAAN,CAAA;EAAA;EAAhE,MAAAS,gBAAA,GAAyBH,EAAuC;EAChE,MAAAI,SAAA,GAAkBnB,YAAY,CAAC,CAAC;EAEhC;IAAAoB,cAAA;IAAAC,qBAAA;IAAAC;EAAA,IACEhB,oBAAoB,CAACK,cAAc,CAAC;EAAA,IAAAY,EAAA;EAAA,IAAAd,CAAA,QAAAU,SAAA,IAAAV,CAAA,QAAAE,cAAA,IAAAF,CAAA,QAAAI,aAAA,CAAAW,EAAA,IAAAf,CAAA,QAAAS,gBAAA,IAAAT,CAAA,QAAAG,WAAA,IAAAH,CAAA,QAAAa,+BAAA;IAEFC,EAAA,SAAAE,CAAA;MAClC;QAAAC;MAAA,IAAiBD,CAAC,CAAAC,IAAK;MACvB,MAAAC,OAAA,GAAgB/B,0CAA0C,CAAC;QAAA8B,IAAA;QAAAE,eAAA,EAExCf,aAAa,CAAAW;MAChC,CAAC,CAAC;MACF,MAAAK,iBAAA,GAA0BJ,CAAC,CAAAK,KAAM,KAAK,iBAAyD,IAApCJ,IAAI,CAAAK,aAAc,KAAKL,IAAI,CAAAM,QAAS;MAE/F,IAAIP,CAAC,CAAAK,KAAM,KAAK,iBAAmC,IAAdJ,IAAI,CAAAO,SAAU;QACjDX,+BAA+B,CAACI,IAAI,CAAAO,SAAU,CAAC;QAC/C,IAAIP,IAAI,CAAAQ,cAAsD,IAAnCR,IAAI,CAAAO,SAAU,KAAKpB,aAAa,CAAAW,EAAG;UAC5D3B,+BAA+B,CAAC;YAAAsB,SAAA;YAAAgB,aAAA,EAA4BT,IAAI,CAAAQ;UAAgB,CAAC,CAAC;QAAA;MACnF;MAIH3C,sBAAsB,CAACqB,WAAW,EAAEM,gBAAgB,EAAES,OAAO,EAAEF,CAAC,CAAAK,KAAM,CAAC;MAGvE,IAAIJ,IAAI,CAAAK,aAAc;QACpB,MAAAK,wBAAA,GAAiCzC,2BAA2B,CAC1DgB,cAAc,EACde,IAAI,CAAAK,aACN,CAAC;QACDxC,sBAAsB,CAACqB,WAAW,EAAEwB,wBAAwB,EAAET,OAAO,EAAEF,CAAC,CAAAK,KAAM,CAAC;QAE/E,IAAID,iBAAiB;UACnBnC,qBAAqB,CAACkB,WAAW,EAAEM,gBAAgB,EAAES,OAAO,CAAC;UAC7DjC,qBAAqB,CAACkB,WAAW,EAAEwB,wBAAwB,EAAET,OAAO,CAAC;QAAA;MACtE;MAIH,IAAIF,CAAC,CAAAK,KAAM,KAAK,iBAAiB;QAC/B,MAAAO,yBAAA,GAAkCvC,kBAAkB,CAAC;UAAAmB,eAAA,EAClCN,cAAc;UAAA2B,SAAA,EACpBZ,IAAI,CAAAM;QACjB,CAAC,CAAC;QACFxC,gCAAgC,CAACoB,WAAW,EAAEyB,yBAAyB,EAAEV,OAAO,CAAC;MAAA;IAClF,CACF;IAAAlB,CAAA,MAAAU,SAAA;IAAAV,CAAA,MAAAE,cAAA;IAAAF,CAAA,MAAAI,aAAA,CAAAW,EAAA;IAAAf,CAAA,MAAAS,gBAAA;IAAAT,CAAA,MAAAG,WAAA;IAAAH,CAAA,MAAAa,+BAAA;IAAAb,CAAA,MAAAc,EAAA;EAAA;IAAAA,EAAA,GAAAd,CAAA;EAAA;EAxCD,MAAA8B,2BAAA,GAAoChB,EAwCnC;EAAA,IAAAiB,EAAA;EAAA,IAAA/B,CAAA,QAAAE,cAAA,IAAAF,CAAA,SAAAI,aAAA,CAAAW,EAAA,IAAAf,CAAA,SAAAS,gBAAA,IAAAT,CAAA,SAAAG,WAAA;IAE4B4B,EAAA,SAAAC,GAAA;MAC3B;QAAAf,IAAA,EAAAgB;MAAA,IAAiBjB,GAAC,CAAAC,IAAK;MACvB,MAAAiB,SAAA,GAAgB/C,0CAA0C,CAAC;QAAA8B,IAAA,EACzDA,MAAI;QAAAE,eAAA,EACaf,aAAa,CAAAW;MAChC,CAAC,CAAC;MAGFZ,WAAW,CAAAgC,YAAa,CAAY1B,gBAAgB,EAAE2B,IAAA,IACpDvD,uBAAuB,CAAC;QAAAoC,IAAA,EAAQmB,IAAI;QAAAC,MAAA,EAAUnB;MAAQ,CAAC,CACzD,CAAC;MAGD,IAAID,MAAI,CAAAK,aAAc;QACpB,MAAAgB,0BAAA,GAAiCpD,2BAA2B,CAC1DgB,cAAc,EACde,MAAI,CAAAK,aACN,CAAC;QACDnB,WAAW,CAAAgC,YAAa,CAAYR,0BAAwB,EAAEY,MAAA,IAC5D1D,uBAAuB,CAAC;UAAAoC,IAAA,EAAQmB,MAAI;UAAAC,MAAA,EAAUnB;QAAQ,CAAC,CACzD,CAAC;MAAA;IACF,CACF;IAAAlB,CAAA,MAAAE,cAAA;IAAAF,CAAA,OAAAI,aAAA,CAAAW,EAAA;IAAAf,CAAA,OAAAS,gBAAA;IAAAT,CAAA,OAAAG,WAAA;IAAAH,CAAA,OAAA+B,EAAA;EAAA;IAAAA,EAAA,GAAA/B,CAAA;EAAA;EAtBD,MAAAwC,oBAAA,GAA6BT,EAsB5B;EAAA,IAAAU,EAAA;EAAA,IAAAzC,CAAA,SAAAE,cAAA,IAAAF,CAAA,SAAAI,aAAA,CAAAW,EAAA,IAAAf,CAAA,SAAAS,gBAAA,IAAAT,CAAA,SAAAG,WAAA;IAE+BsC,EAAA,SAAAC,GAAA;MAE9B1D,uBAAuB,CAACmB,WAAW,EAAEM,gBAAgB,EAAEO,GAAC,EAAEZ,aAAa,CAAAW,EAAG,CAAC;MAE3E,MAAA4B,WAAA,GAAoB3B,GAAC,CAAAC,IAAK,CAAAA,IAAK,CAAAK,aAAc;MAG7C,IAAIqB,WAAW;QACb,MAAAC,0BAAA,GAAiC1D,2BAA2B,CAACgB,cAAc,EAAEyC,WAAW,CAAC;QACzF3D,uBAAuB,CAACmB,WAAW,EAAEwB,0BAAwB,EAAEX,GAAC,EAAEZ,aAAa,CAAAW,EAAG,CAAC;MAAA;IACpF,CACF;IAAAf,CAAA,OAAAE,cAAA;IAAAF,CAAA,OAAAI,aAAA,CAAAW,EAAA;IAAAf,CAAA,OAAAS,gBAAA;IAAAT,CAAA,OAAAG,WAAA;IAAAH,CAAA,OAAAyC,EAAA;EAAA;IAAAA,EAAA,GAAAzC,CAAA;EAAA;EAXD,MAAA6C,uBAAA,GAAgCJ,EAW/B;EAAA,IAAAK,EAAA;EAAA,IAAA9C,CAAA,SAAAW,cAAA,IAAAX,CAAA,SAAAY,qBAAA;IAEyBkC,EAAA,SAAAC,GAAA;MACxB;QAAA9B,IAAA,EAAA+B;MAAA,IAAiBhC,GAAC,CAAAC,IAAK;MACvBN,cAAc,CAACM,MAAI,CAAC;MACpBgC,UAAU,CAAC,MAAMrC,qBAAqB,CAACK,MAAI,CAAAF,EAAG,CAAC,EAAEnB,uBAAuB,CAAC;IAAA,CAC1E;IAAAI,CAAA,OAAAW,cAAA;IAAAX,CAAA,OAAAY,qBAAA;IAAAZ,CAAA,OAAA8C,EAAA;EAAA;IAAAA,EAAA,GAAA9C,CAAA;EAAA;EAJD,MAAAkD,iBAAA,GAA0BJ,EAIzB;EAEDpD,YAAY,CAACW,WAAW,EAAE,iBAAiB,EAAEyB,2BAA2B,CAAC;EACzEpC,YAAY,CAACW,WAAW,EAAE,iBAAiB,EAAEyB,2BAA2B,CAAC;EACzEpC,YAAY,CAACW,WAAW,EAAE,mBAAmB,EAAEmC,oBAAoB,CAAC;EACpE9C,YAAY,CAACW,WAAW,EAAE,YAAY,EAAEwC,uBAAuB,CAAC;EAChEnD,YAAY,CAACW,WAAW,EAAE,kBAAkB,EAAE6C,iBAAiB,CAAC;AAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"use_conversation_messages_jolt_events.js","names":["hashKey","useQueryClient","deleteRecordInPagesData","updateCacheWithMessage","updateCacheWithIndividualMessage","updateCacheWithReaction","updateCacheReplyRoots","getThreadedMessagesQueryKey","transformMessageEventDataToMessageResource","completeMessageCreationTracking","getMessageQueryKey","getMessagesRequestArgs","useApiClient","useCurrentPerson","useJoltChannel","useJoltEvent","getRequestQueryKey","TYPING_TIMEOUT_INTERVAL","useTypingStatusCache","resolveMessageCaches","defaults","overrides","overrideByHash","Map","map","cache","queryKey","defaultHashes","Set","resolved","get","extras","filter","has","queryKeysForEvent","event","canUpdate","useConversationMessagesJoltEvents","t0","$","_c","conversationId","messageCaches","t1","t2","undefined","queryClient","currentPerson","joltChannel","t3","messagesRequestArgs","conversation_id","messagesQueryKey","t4","replyRootId","cachesTouchedBy","apiClient","addTypingEvent","removeTypingEventById","removeAllTypingEventsByAuthorId","t5","id","e","data","message","currentPersonId","isReplyRootUpdate","reply_root_id","sort_key","author_id","idempotent_key","idempotentKey","targetQueryKeys","forEach","queryKey_0","individualMessageQueryKey","messageId","handleMessageUpdateOrCreate","t6","e_0","data_0","message_0","queryKey_1","setQueryData","prev","record","handleMessageDeleted","t7","e_1","queryKey_2","handleReactionJoltEvent","t8","e_2","data_1","setTimeout","handleTypingEvent"],"sources":["../../src/hooks/use_conversation_messages_jolt_events.ts"],"sourcesContent":["import { hashKey, 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\nexport type MessagesJoltEvent =\n | 'message.created'\n | 'message.updated'\n | 'message.destroyed'\n | 'reaction'\n\nexport interface MessagesCache {\n queryKey: unknown[]\n canUpdate?: (event: MessagesJoltEvent) => boolean\n}\n\ninterface Props {\n conversationId: number\n messageCaches?: MessagesCache[]\n}\n\nexport const resolveMessageCaches = (defaults: unknown[][], overrides: MessagesCache[]) => {\n const overrideByHash = new Map(overrides.map(cache => [hashKey(cache.queryKey), cache]))\n const defaultHashes = new Set(defaults.map(hashKey))\n const resolved = defaults.map(queryKey => overrideByHash.get(hashKey(queryKey)) ?? { queryKey })\n const extras = overrides.filter(cache => !defaultHashes.has(hashKey(cache.queryKey)))\n return [...resolved, ...extras]\n}\n\nexport const queryKeysForEvent = (\n event: MessagesJoltEvent,\n defaults: unknown[][],\n overrides: MessagesCache[]\n) =>\n resolveMessageCaches(defaults, overrides)\n .filter(cache => !cache.canUpdate || cache.canUpdate(event))\n .map(cache => cache.queryKey)\n\nexport function useConversationMessagesJoltEvents({ conversationId, messageCaches = [] }: 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 cachesTouchedBy = (replyRootId?: string | null): unknown[][] =>\n replyRootId\n ? [messagesQueryKey, getThreadedMessagesQueryKey(conversationId, replyRootId)]\n : [messagesQueryKey]\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 const targetQueryKeys = queryKeysForEvent(\n e.event,\n cachesTouchedBy(data.reply_root_id),\n messageCaches\n )\n targetQueryKeys.forEach(queryKey =>\n updateCacheWithMessage(queryClient, queryKey, message, e.event)\n )\n if (isReplyRootUpdate) {\n targetQueryKeys.forEach(queryKey => updateCacheReplyRoots(queryClient, queryKey, message))\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 queryKeysForEvent(\n 'message.destroyed',\n cachesTouchedBy(data.reply_root_id),\n messageCaches\n ).forEach(queryKey =>\n queryClient.setQueryData<QueryData>(queryKey, prev =>\n deleteRecordInPagesData({ data: prev, record: message })\n )\n )\n }\n\n const handleReactionJoltEvent = async (e: JoltReactionEvent) => {\n queryKeysForEvent(\n 'reaction',\n cachesTouchedBy(e.data.data.reply_root_id),\n messageCaches\n ).forEach(queryKey => updateCacheWithReaction(queryClient, queryKey, e, currentPerson.id))\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":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface DirectMessageEligibility {
|
|
2
|
+
canDirectMessage: boolean;
|
|
3
|
+
directMessagesDisabled: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function useDirectMessageEligibility({ groupId, personId, enabled, }: {
|
|
6
|
+
groupId: string;
|
|
7
|
+
personId: number;
|
|
8
|
+
enabled?: boolean;
|
|
9
|
+
}): {
|
|
10
|
+
eligibility: DirectMessageEligibility | undefined;
|
|
11
|
+
isLoading: boolean;
|
|
12
|
+
isError: boolean;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=use_direct_message_eligibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_direct_message_eligibility.d.ts","sourceRoot":"","sources":["../../src/hooks/use_direct_message_eligibility.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,EAAE,OAAO,CAAA;IACzB,sBAAsB,EAAE,OAAO,CAAA;CAChC;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,OAAO,EACP,QAAQ,EACR,OAAc,GACf,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;;;;EAsBA"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { c as _c } from "react/compiler-runtime";
|
|
2
|
+
import { useQuery } from '@tanstack/react-query';
|
|
3
|
+
import { useApiClient } from './use_api_client';
|
|
4
|
+
export function useDirectMessageEligibility(t0) {
|
|
5
|
+
const $ = _c(15);
|
|
6
|
+
const {
|
|
7
|
+
groupId,
|
|
8
|
+
personId,
|
|
9
|
+
enabled: t1
|
|
10
|
+
} = t0;
|
|
11
|
+
const enabled = t1 === undefined ? true : t1;
|
|
12
|
+
const apiClient = useApiClient();
|
|
13
|
+
const url = `/me/groups/${groupId}/members/${personId}`;
|
|
14
|
+
let t2;
|
|
15
|
+
if ($[0] !== url) {
|
|
16
|
+
t2 = ["chat", url, "direct_message_eligibility"];
|
|
17
|
+
$[0] = url;
|
|
18
|
+
$[1] = t2;
|
|
19
|
+
} else {
|
|
20
|
+
t2 = $[1];
|
|
21
|
+
}
|
|
22
|
+
let t3;
|
|
23
|
+
if ($[2] !== apiClient || $[3] !== url) {
|
|
24
|
+
t3 = () => apiClient.chat.get({
|
|
25
|
+
url,
|
|
26
|
+
data: {
|
|
27
|
+
fields: {
|
|
28
|
+
Member: ["can_direct_message", "direct_messages_disabled"]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
$[2] = apiClient;
|
|
33
|
+
$[3] = url;
|
|
34
|
+
$[4] = t3;
|
|
35
|
+
} else {
|
|
36
|
+
t3 = $[4];
|
|
37
|
+
}
|
|
38
|
+
let t4;
|
|
39
|
+
if ($[5] !== enabled || $[6] !== t2 || $[7] !== t3) {
|
|
40
|
+
t4 = {
|
|
41
|
+
queryKey: t2,
|
|
42
|
+
queryFn: t3,
|
|
43
|
+
enabled,
|
|
44
|
+
retry: false
|
|
45
|
+
};
|
|
46
|
+
$[5] = enabled;
|
|
47
|
+
$[6] = t2;
|
|
48
|
+
$[7] = t3;
|
|
49
|
+
$[8] = t4;
|
|
50
|
+
} else {
|
|
51
|
+
t4 = $[8];
|
|
52
|
+
}
|
|
53
|
+
const {
|
|
54
|
+
data,
|
|
55
|
+
isLoading,
|
|
56
|
+
isError
|
|
57
|
+
} = useQuery(t4);
|
|
58
|
+
const member = data?.data;
|
|
59
|
+
let t5;
|
|
60
|
+
if ($[9] !== member) {
|
|
61
|
+
t5 = member && {
|
|
62
|
+
canDirectMessage: member.canDirectMessage ?? false,
|
|
63
|
+
directMessagesDisabled: member.directMessagesDisabled ?? false
|
|
64
|
+
};
|
|
65
|
+
$[9] = member;
|
|
66
|
+
$[10] = t5;
|
|
67
|
+
} else {
|
|
68
|
+
t5 = $[10];
|
|
69
|
+
}
|
|
70
|
+
const eligibility = t5;
|
|
71
|
+
let t6;
|
|
72
|
+
if ($[11] !== eligibility || $[12] !== isError || $[13] !== isLoading) {
|
|
73
|
+
t6 = {
|
|
74
|
+
eligibility,
|
|
75
|
+
isLoading,
|
|
76
|
+
isError
|
|
77
|
+
};
|
|
78
|
+
$[11] = eligibility;
|
|
79
|
+
$[12] = isError;
|
|
80
|
+
$[13] = isLoading;
|
|
81
|
+
$[14] = t6;
|
|
82
|
+
} else {
|
|
83
|
+
t6 = $[14];
|
|
84
|
+
}
|
|
85
|
+
return t6;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=use_direct_message_eligibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_direct_message_eligibility.js","names":["useQuery","useApiClient","useDirectMessageEligibility","t0","$","_c","groupId","personId","enabled","t1","undefined","apiClient","url","t2","t3","chat","get","data","fields","Member","t4","queryKey","queryFn","retry","isLoading","isError","member","t5","canDirectMessage","directMessagesDisabled","eligibility","t6"],"sources":["../../src/hooks/use_direct_message_eligibility.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { ApiResource, MemberResource } from '../types'\nimport { useApiClient } from './use_api_client'\n\nexport interface DirectMessageEligibility {\n canDirectMessage: boolean\n directMessagesDisabled: boolean\n}\n\nexport function useDirectMessageEligibility({\n groupId,\n personId,\n enabled = true,\n}: {\n groupId: string\n personId: number\n enabled?: boolean\n}) {\n const apiClient = useApiClient()\n const url = `/me/groups/${groupId}/members/${personId}`\n\n const { data, isLoading, isError } = useQuery({\n queryKey: ['chat', url, 'direct_message_eligibility'],\n queryFn: () =>\n apiClient.chat.get({\n url,\n data: { fields: { Member: ['can_direct_message', 'direct_messages_disabled'] } },\n }) as Promise<ApiResource<MemberResource>>,\n enabled,\n retry: false,\n })\n\n const member = data?.data\n const eligibility: DirectMessageEligibility | undefined = member && {\n canDirectMessage: member.canDirectMessage ?? false,\n directMessagesDisabled: member.directMessagesDisabled ?? false,\n }\n\n return { eligibility, isLoading, isError }\n}\n"],"mappings":";AAAA,SAASA,QAAQ,QAAQ,uBAAuB;AAEhD,SAASC,YAAY,QAAQ,kBAAkB;AAO/C,OAAO,SAAAC,4BAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAqC;IAAAC,OAAA;IAAAC,QAAA;IAAAC,OAAA,EAAAC;EAAA,IAAAN,EAQ3C;EALC,MAAAK,OAAA,GAAAC,EAAc,KAAdC,SAAc,GAAd,IAAc,GAAdD,EAAc;EAMd,MAAAE,SAAA,GAAkBV,YAAY,CAAC,CAAC;EAChC,MAAAW,GAAA,GAAY,cAAcN,OAAO,YAAYC,QAAQ,EAAE;EAAA,IAAAM,EAAA;EAAA,IAAAT,CAAA,QAAAQ,GAAA;IAG3CC,EAAA,IAAC,MAAM,EAAED,GAAG,EAAE,4BAA4B,CAAC;IAAAR,CAAA,MAAAQ,GAAA;IAAAR,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAA,IAAAU,EAAA;EAAA,IAAAV,CAAA,QAAAO,SAAA,IAAAP,CAAA,QAAAQ,GAAA;IAC5CE,EAAA,GAAAA,CAAA,KACPH,SAAS,CAAAI,IAAK,CAAAC,GAAI,CAAC;MAAAJ,GAAA;MAAAK,IAAA,EAEX;QAAAC,MAAA,EAAU;UAAAC,MAAA,EAAU,CAAC,oBAAoB,EAAE,0BAA0B;QAAE;MAAE;IACjF,CAAC,CAAyC;IAAAf,CAAA,MAAAO,SAAA;IAAAP,CAAA,MAAAQ,GAAA;IAAAR,CAAA,MAAAU,EAAA;EAAA;IAAAA,EAAA,GAAAV,CAAA;EAAA;EAAA,IAAAgB,EAAA;EAAA,IAAAhB,CAAA,QAAAI,OAAA,IAAAJ,CAAA,QAAAS,EAAA,IAAAT,CAAA,QAAAU,EAAA;IANAM,EAAA;MAAAC,QAAA,EAClCR,EAA2C;MAAAS,OAAA,EAC5CR,EAImC;MAAAN,OAAA;MAAAe,KAAA,EAErC;IACT,CAAC;IAAAnB,CAAA,MAAAI,OAAA;IAAAJ,CAAA,MAAAS,EAAA;IAAAT,CAAA,MAAAU,EAAA;IAAAV,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EATD;IAAAa,IAAA;IAAAO,SAAA;IAAAC;EAAA,IAAqCzB,QAAQ,CAACoB,EAS7C,CAAC;EAEF,MAAAM,MAAA,GAAeT,IAAI,EAAAA,IAAM;EAAA,IAAAU,EAAA;EAAA,IAAAvB,CAAA,QAAAsB,MAAA;IACiCC,EAAA,GAAAD,MAGzD,IAHyD;MAAAE,gBAAA,EACtCF,MAAM,CAAAE,gBAA0B,IAAhC,KAAgC;MAAAC,sBAAA,EAC1BH,MAAM,CAAAG,sBAAgC,IAAtC;IAC1B,CAAC;IAAAzB,CAAA,MAAAsB,MAAA;IAAAtB,CAAA,OAAAuB,EAAA;EAAA;IAAAA,EAAA,GAAAvB,CAAA;EAAA;EAHD,MAAA0B,WAAA,GAA0DH,EAGzD;EAAA,IAAAI,EAAA;EAAA,IAAA3B,CAAA,SAAA0B,WAAA,IAAA1B,CAAA,SAAAqB,OAAA,IAAArB,CAAA,SAAAoB,SAAA;IAEMO,EAAA;MAAAD,WAAA;MAAAN,SAAA;MAAAC;IAAkC,CAAC;IAAArB,CAAA,OAAA0B,WAAA;IAAA1B,CAAA,OAAAqB,OAAA;IAAArB,CAAA,OAAAoB,SAAA;IAAApB,CAAA,OAAA2B,EAAA;EAAA;IAAAA,EAAA,GAAA3B,CAAA;EAAA;EAAA,OAAnC2B,EAAmC;AAAA","ignoreList":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type Options = {
|
|
2
|
+
conversation_id: number;
|
|
3
|
+
reply_root_id?: string | null;
|
|
4
|
+
queryKey: unknown[];
|
|
5
|
+
};
|
|
6
|
+
export declare const useFetchNewerMessages: ({ conversation_id, reply_root_id, queryKey }: Options) => (newestMessageId: string) => Promise<void>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=use_fetch_newer_messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_fetch_newer_messages.d.ts","sourceRoot":"","sources":["../../src/hooks/use_fetch_newer_messages.ts"],"names":[],"mappings":"AAQA,KAAK,OAAO,GAAG;IACb,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,8CAA8C,OAAO,uBAKrE,MAAM,kBAiB3B,CAAA"}
|