@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.
Files changed (123) hide show
  1. package/build/components/conversation/anchor_not_found_boundary.d.ts +18 -0
  2. package/build/components/conversation/anchor_not_found_boundary.d.ts.map +1 -0
  3. package/build/components/conversation/anchor_not_found_boundary.js +20 -0
  4. package/build/components/conversation/anchor_not_found_boundary.js.map +1 -0
  5. package/build/components/conversation/message_form.d.ts +2 -1
  6. package/build/components/conversation/message_form.d.ts.map +1 -1
  7. package/build/components/conversation/message_form.js +54 -51
  8. package/build/components/conversation/message_form.js.map +1 -1
  9. package/build/components/conversation/message_list.d.ts +3 -2
  10. package/build/components/conversation/message_list.d.ts.map +1 -1
  11. package/build/components/conversation/message_list.js +152 -66
  12. package/build/components/conversation/message_list.js.map +1 -1
  13. package/build/hooks/index.d.ts +1 -0
  14. package/build/hooks/index.d.ts.map +1 -1
  15. package/build/hooks/index.js +1 -0
  16. package/build/hooks/index.js.map +1 -1
  17. package/build/hooks/paginator_meta.d.ts +3 -1
  18. package/build/hooks/paginator_meta.d.ts.map +1 -1
  19. package/build/hooks/paginator_meta.js +25 -8
  20. package/build/hooks/paginator_meta.js.map +1 -1
  21. package/build/hooks/use_api.d.ts.map +1 -1
  22. package/build/hooks/use_api.js +5 -8
  23. package/build/hooks/use_api.js.map +1 -1
  24. package/build/hooks/use_conversation_messages.d.ts +8 -2
  25. package/build/hooks/use_conversation_messages.d.ts.map +1 -1
  26. package/build/hooks/use_conversation_messages.js +77 -45
  27. package/build/hooks/use_conversation_messages.js.map +1 -1
  28. package/build/hooks/use_conversation_messages_jolt_events.d.ts +9 -1
  29. package/build/hooks/use_conversation_messages_jolt_events.d.ts.map +1 -1
  30. package/build/hooks/use_conversation_messages_jolt_events.js +88 -73
  31. package/build/hooks/use_conversation_messages_jolt_events.js.map +1 -1
  32. package/build/hooks/use_direct_message_eligibility.d.ts +14 -0
  33. package/build/hooks/use_direct_message_eligibility.d.ts.map +1 -0
  34. package/build/hooks/use_direct_message_eligibility.js +87 -0
  35. package/build/hooks/use_direct_message_eligibility.js.map +1 -0
  36. package/build/hooks/use_fetch_newer_messages.d.ts +8 -0
  37. package/build/hooks/use_fetch_newer_messages.d.ts.map +1 -0
  38. package/build/hooks/use_fetch_newer_messages.js +56 -0
  39. package/build/hooks/use_fetch_newer_messages.js.map +1 -0
  40. package/build/hooks/use_fetch_newer_on_foreground.d.ts +8 -0
  41. package/build/hooks/use_fetch_newer_on_foreground.d.ts.map +1 -0
  42. package/build/hooks/use_fetch_newer_on_foreground.js +41 -0
  43. package/build/hooks/use_fetch_newer_on_foreground.js.map +1 -0
  44. package/build/hooks/use_mark_latest_message_read.d.ts +2 -1
  45. package/build/hooks/use_mark_latest_message_read.d.ts.map +1 -1
  46. package/build/hooks/use_mark_latest_message_read.js +4 -3
  47. package/build/hooks/use_mark_latest_message_read.js.map +1 -1
  48. package/build/hooks/use_suspense_api.d.ts.map +1 -1
  49. package/build/hooks/use_suspense_api.js +5 -8
  50. package/build/hooks/use_suspense_api.js.map +1 -1
  51. package/build/screens/conversation_new/components/services_form.js +9 -8
  52. package/build/screens/conversation_new/components/services_form.js.map +1 -1
  53. package/build/screens/conversation_screen.d.ts +1 -0
  54. package/build/screens/conversation_screen.d.ts.map +1 -1
  55. package/build/screens/conversation_screen.js +241 -355
  56. package/build/screens/conversation_screen.js.map +1 -1
  57. package/build/types/api_primitives.d.ts +2 -0
  58. package/build/types/api_primitives.d.ts.map +1 -1
  59. package/build/types/api_primitives.js.map +1 -1
  60. package/build/types/resources/member.d.ts +1 -0
  61. package/build/types/resources/member.d.ts.map +1 -1
  62. package/build/types/resources/member.js.map +1 -1
  63. package/build/utils/cache/prepend_newer_page.d.ts +7 -0
  64. package/build/utils/cache/prepend_newer_page.d.ts.map +1 -0
  65. package/build/utils/cache/prepend_newer_page.js +14 -0
  66. package/build/utils/cache/prepend_newer_page.js.map +1 -0
  67. package/build/utils/client/types.d.ts +1 -0
  68. package/build/utils/client/types.d.ts.map +1 -1
  69. package/build/utils/client/types.js.map +1 -1
  70. package/build/utils/gated_message_cache.d.ts +7 -0
  71. package/build/utils/gated_message_cache.d.ts.map +1 -0
  72. package/build/utils/gated_message_cache.js +13 -0
  73. package/build/utils/gated_message_cache.js.map +1 -0
  74. package/build/utils/generate_placeholder_ulid.d.ts +0 -6
  75. package/build/utils/generate_placeholder_ulid.d.ts.map +1 -1
  76. package/build/utils/generate_placeholder_ulid.js +2 -2
  77. package/build/utils/generate_placeholder_ulid.js.map +1 -1
  78. package/build/utils/group_messages.js +4 -1
  79. package/build/utils/group_messages.js.map +1 -1
  80. package/build/utils/request/get_messages.d.ts +18 -6
  81. package/build/utils/request/get_messages.d.ts.map +1 -1
  82. package/build/utils/request/get_messages.js +10 -12
  83. package/build/utils/request/get_messages.js.map +1 -1
  84. package/build/utils/ulid.d.ts +3 -0
  85. package/build/utils/ulid.d.ts.map +1 -0
  86. package/build/utils/ulid.js +7 -0
  87. package/build/utils/ulid.js.map +1 -0
  88. package/package.json +3 -3
  89. package/src/__tests__/hooks/paginator_meta.test.ts +73 -2
  90. package/src/__tests__/hooks/use_conversation_messages_jolt_events.test.ts +36 -0
  91. package/src/__tests__/hooks/use_direct_message_eligibility.test.tsx +83 -0
  92. package/src/__tests__/screens/conversation_new/components/services_form.test.tsx +91 -0
  93. package/src/__tests__/utils/gated_message_cache.test.ts +26 -0
  94. package/src/__tests__/utils/request/get_messages.test.ts +24 -0
  95. package/src/__tests__/utils/ulid.test.ts +15 -0
  96. package/src/components/conversation/__tests__/anchor_not_found_boundary.test.tsx +51 -0
  97. package/src/components/conversation/__tests__/message_list.test.tsx +42 -0
  98. package/src/components/conversation/anchor_not_found_boundary.tsx +21 -0
  99. package/src/components/conversation/message_form.tsx +4 -0
  100. package/src/components/conversation/message_list.tsx +58 -4
  101. package/src/hooks/index.ts +1 -0
  102. package/src/hooks/paginator_meta.ts +29 -5
  103. package/src/hooks/use_api.ts +4 -5
  104. package/src/hooks/use_conversation_messages.ts +43 -11
  105. package/src/hooks/use_conversation_messages_jolt_events.ts +57 -40
  106. package/src/hooks/use_direct_message_eligibility.ts +40 -0
  107. package/src/hooks/use_fetch_newer_messages.ts +37 -0
  108. package/src/hooks/use_fetch_newer_on_foreground.ts +25 -0
  109. package/src/hooks/use_mark_latest_message_read.ts +4 -3
  110. package/src/hooks/use_suspense_api.ts +4 -5
  111. package/src/screens/conversation_new/components/services_form.tsx +5 -5
  112. package/src/screens/conversation_screen.tsx +120 -17
  113. package/src/types/api_primitives.ts +2 -0
  114. package/src/types/resources/member.ts +1 -0
  115. package/src/utils/__tests__/group_messages.test.ts +29 -0
  116. package/src/utils/cache/__tests__/prepend_newer_page.test.ts +35 -0
  117. package/src/utils/cache/prepend_newer_page.ts +22 -0
  118. package/src/utils/client/types.ts +1 -0
  119. package/src/utils/gated_message_cache.ts +19 -0
  120. package/src/utils/generate_placeholder_ulid.ts +2 -2
  121. package/src/utils/group_messages.ts +4 -1
  122. package/src/utils/request/get_messages.ts +12 -14
  123. 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(17);
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] !== conversation_id || $[1] !== reply_root_id) {
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] = conversation_id;
19
- $[1] = reply_root_id;
20
- $[2] = t1;
21
+ $[0] = anchor;
22
+ $[1] = conversation_id;
23
+ $[2] = reply_root_id;
24
+ $[3] = t1;
21
25
  } else {
22
- t1 = $[2];
26
+ t1 = $[3];
23
27
  }
24
28
  let t2;
25
- if ($[3] !== opts) {
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
- $[3] = opts;
31
- $[4] = t2;
47
+ $[6] = opts;
48
+ $[7] = t2;
49
+ $[8] = t3;
32
50
  } else {
33
- t2 = $[4];
51
+ t3 = $[8];
34
52
  }
35
53
  const {
36
54
  data,
37
55
  refetch,
38
56
  isRefetching,
39
57
  fetchNextPage,
40
- hasNextPage
41
- } = useSuspensePaginator(t1, t2);
42
- let t3;
43
- if ($[5] !== conversation_id || $[6] !== reply_root_id) {
44
- t3 = getMessagesQueryKey({
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
- $[5] = conversation_id;
49
- $[6] = reply_root_id;
50
- $[7] = t3;
70
+ $[9] = anchor;
71
+ $[10] = conversation_id;
72
+ $[11] = reply_root_id;
73
+ $[12] = t4;
51
74
  } else {
52
- t3 = $[7];
75
+ t4 = $[12];
53
76
  }
54
- const queryKey = t3;
55
- let t4;
56
- if ($[8] !== data) {
57
- t4 = data.filter(_temp).sort(_temp2);
58
- $[8] = data;
59
- $[9] = t4;
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
- t4 = $[9];
84
+ t5 = $[14];
62
85
  }
63
- const messages = t4;
64
- let t5;
65
- if ($[10] !== fetchNextPage || $[11] !== hasNextPage || $[12] !== isRefetching || $[13] !== messages || $[14] !== queryKey || $[15] !== refetch) {
66
- t5 = {
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
- $[10] = fetchNextPage;
75
- $[11] = hasNextPage;
76
- $[12] = isRefetching;
77
- $[13] = messages;
78
- $[14] = queryKey;
79
- $[15] = refetch;
80
- $[16] = t5;
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
- t5 = $[16];
111
+ t6 = $[24];
83
112
  }
84
- return t5;
113
+ return t6;
85
114
  };
86
- function _temp(message) {
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 _temp2(a, b) {
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","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
+ {"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":"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","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 function useConversationMessagesJoltEvents({ conversationId }: Props): void;
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;CACvB;AAED,wBAAgB,iCAAiC,CAAC,EAAE,cAAc,EAAE,EAAE,KAAK,QAqG1E"}
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(22);
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 t1;
23
- if ($[0] !== conversationId) {
42
+ let t3;
43
+ if ($[2] !== conversationId) {
24
44
  const messagesRequestArgs = getMessagesRequestArgs({
25
45
  conversation_id: conversationId
26
46
  });
27
- t1 = getRequestQueryKey(messagesRequestArgs);
28
- $[0] = conversationId;
29
- $[1] = t1;
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
- t1 = $[1];
61
+ t4 = $[6];
32
62
  }
33
- const messagesQueryKey = t1;
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 t2;
41
- if ($[2] !== apiClient || $[3] !== conversationId || $[4] !== currentPerson.id || $[5] !== messagesQueryKey || $[6] !== queryClient || $[7] !== removeAllTypingEventsByAuthorId) {
42
- t2 = async e => {
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
- updateCacheWithMessage(queryClient, messagesQueryKey, message, e.event);
61
- if (data.reply_root_id) {
62
- const threadedMessagesQueryKey = getThreadedMessagesQueryKey(conversationId, data.reply_root_id);
63
- updateCacheWithMessage(queryClient, threadedMessagesQueryKey, message, e.event);
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
- $[2] = apiClient;
78
- $[3] = conversationId;
79
- $[4] = currentPerson.id;
80
- $[5] = messagesQueryKey;
81
- $[6] = queryClient;
82
- $[7] = removeAllTypingEventsByAuthorId;
83
- $[8] = t2;
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
- t2 = $[8];
112
+ t5 = $[14];
86
113
  }
87
- const handleMessageUpdateOrCreate = t2;
88
- let t3;
89
- if ($[9] !== conversationId || $[10] !== currentPerson.id || $[11] !== messagesQueryKey || $[12] !== queryClient) {
90
- t3 = async e_0 => {
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(messagesQueryKey, prev => deleteRecordInPagesData({
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
- $[9] = conversationId;
111
- $[10] = currentPerson.id;
112
- $[11] = messagesQueryKey;
113
- $[12] = queryClient;
114
- $[13] = t3;
130
+ $[15] = cachesTouchedBy;
131
+ $[16] = currentPerson.id;
132
+ $[17] = messageCaches;
133
+ $[18] = queryClient;
134
+ $[19] = t6;
115
135
  } else {
116
- t3 = $[13];
136
+ t6 = $[19];
117
137
  }
118
- const handleMessageDeleted = t3;
119
- let t4;
120
- if ($[14] !== conversationId || $[15] !== currentPerson.id || $[16] !== messagesQueryKey || $[17] !== queryClient) {
121
- t4 = async e_1 => {
122
- updateCacheWithReaction(queryClient, messagesQueryKey, e_1, currentPerson.id);
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
- $[14] = conversationId;
130
- $[15] = currentPerson.id;
131
- $[16] = messagesQueryKey;
132
- $[17] = queryClient;
133
- $[18] = t4;
144
+ $[20] = cachesTouchedBy;
145
+ $[21] = currentPerson.id;
146
+ $[22] = messageCaches;
147
+ $[23] = queryClient;
148
+ $[24] = t7;
134
149
  } else {
135
- t4 = $[18];
150
+ t7 = $[24];
136
151
  }
137
- const handleReactionJoltEvent = t4;
138
- let t5;
139
- if ($[19] !== addTypingEvent || $[20] !== removeTypingEventById) {
140
- t5 = async e_2 => {
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
- $[19] = addTypingEvent;
148
- $[20] = removeTypingEventById;
149
- $[21] = t5;
162
+ $[25] = addTypingEvent;
163
+ $[26] = removeTypingEventById;
164
+ $[27] = t8;
150
165
  } else {
151
- t5 = $[21];
166
+ t8 = $[27];
152
167
  }
153
- const handleTypingEvent = t5;
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":"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","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"}