@planningcenter/chat-react-native 4.2.1-qa-staging.1 → 4.2.1-qa-staging.4

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 (93) hide show
  1. package/build/components/conversation/message_form.d.ts.map +1 -1
  2. package/build/components/conversation/message_form.js +1 -1
  3. package/build/components/conversation/message_form.js.map +1 -1
  4. package/build/contexts/conversation_context.d.ts +3 -1
  5. package/build/contexts/conversation_context.d.ts.map +1 -1
  6. package/build/contexts/conversation_context.js +23 -18
  7. package/build/contexts/conversation_context.js.map +1 -1
  8. package/build/hooks/use_conversation_message_lookup.d.ts +7 -0
  9. package/build/hooks/use_conversation_message_lookup.d.ts.map +1 -0
  10. package/build/hooks/use_conversation_message_lookup.js +52 -0
  11. package/build/hooks/use_conversation_message_lookup.js.map +1 -0
  12. package/build/hooks/use_conversation_messages.d.ts +1 -0
  13. package/build/hooks/use_conversation_messages.d.ts.map +1 -1
  14. package/build/hooks/use_conversation_messages.js +8 -1
  15. package/build/hooks/use_conversation_messages.js.map +1 -1
  16. package/build/hooks/use_conversation_messages_jolt_events.d.ts +12 -4
  17. package/build/hooks/use_conversation_messages_jolt_events.d.ts.map +1 -1
  18. package/build/hooks/use_conversation_messages_jolt_events.js +82 -88
  19. package/build/hooks/use_conversation_messages_jolt_events.js.map +1 -1
  20. package/build/hooks/use_fetch_newer_messages.d.ts.map +1 -1
  21. package/build/hooks/use_fetch_newer_messages.js +27 -21
  22. package/build/hooks/use_fetch_newer_messages.js.map +1 -1
  23. package/build/hooks/use_fetch_newer_on_foreground.d.ts +1 -1
  24. package/build/hooks/use_fetch_newer_on_foreground.d.ts.map +1 -1
  25. package/build/hooks/use_fetch_newer_on_foreground.js +2 -1
  26. package/build/hooks/use_fetch_newer_on_foreground.js.map +1 -1
  27. package/build/hooks/use_held_back_messages.d.ts +11 -0
  28. package/build/hooks/use_held_back_messages.d.ts.map +1 -0
  29. package/build/hooks/use_held_back_messages.js +24 -0
  30. package/build/hooks/use_held_back_messages.js.map +1 -0
  31. package/build/hooks/use_message_create_or_update.d.ts.map +1 -1
  32. package/build/hooks/use_message_create_or_update.js +91 -80
  33. package/build/hooks/use_message_create_or_update.js.map +1 -1
  34. package/build/hooks/use_message_reaction_toggle.d.ts.map +1 -1
  35. package/build/hooks/use_message_reaction_toggle.js +45 -40
  36. package/build/hooks/use_message_reaction_toggle.js.map +1 -1
  37. package/build/screens/conversation_new/components/services_form.js.map +1 -1
  38. package/build/screens/conversation_screen.d.ts.map +1 -1
  39. package/build/screens/conversation_screen.js +495 -157
  40. package/build/screens/conversation_screen.js.map +1 -1
  41. package/build/screens/message_actions_screen.d.ts.map +1 -1
  42. package/build/screens/message_actions_screen.js +21 -26
  43. package/build/screens/message_actions_screen.js.map +1 -1
  44. package/build/screens/message_report_screen.d.ts.map +1 -1
  45. package/build/screens/message_report_screen.js +17 -44
  46. package/build/screens/message_report_screen.js.map +1 -1
  47. package/build/screens/reactions_screen.d.ts.map +1 -1
  48. package/build/screens/reactions_screen.js +70 -88
  49. package/build/screens/reactions_screen.js.map +1 -1
  50. package/build/utils/cache/find_message_in_caches.d.ts +4 -0
  51. package/build/utils/cache/find_message_in_caches.d.ts.map +1 -0
  52. package/build/utils/cache/find_message_in_caches.js +16 -0
  53. package/build/utils/cache/find_message_in_caches.js.map +1 -0
  54. package/build/utils/cache/messages_cache.d.ts +1 -0
  55. package/build/utils/cache/messages_cache.d.ts.map +1 -1
  56. package/build/utils/cache/messages_cache.js +3 -0
  57. package/build/utils/cache/messages_cache.js.map +1 -1
  58. package/build/utils/cache/optimistically_update_message.d.ts +2 -1
  59. package/build/utils/cache/optimistically_update_message.d.ts.map +1 -1
  60. package/build/utils/cache/optimistically_update_message.js +4 -4
  61. package/build/utils/cache/optimistically_update_message.js.map +1 -1
  62. package/build/utils/cache/prepend_newer_page.d.ts +1 -1
  63. package/build/utils/cache/prepend_newer_page.d.ts.map +1 -1
  64. package/build/utils/cache/prepend_newer_page.js +10 -9
  65. package/build/utils/cache/prepend_newer_page.js.map +1 -1
  66. package/package.json +3 -3
  67. package/src/__tests__/hooks/use_conversation_messages.test.ts +22 -0
  68. package/src/__tests__/hooks/use_conversation_messages_jolt_events.test.ts +22 -25
  69. package/src/components/conversation/message_form.tsx +1 -2
  70. package/src/contexts/conversation_context.tsx +6 -1
  71. package/src/hooks/__tests__/use_fetch_newer_messages.test.tsx +68 -0
  72. package/src/hooks/__tests__/use_held_back_messages.test.tsx +60 -0
  73. package/src/hooks/__tests__/use_message_reaction_toggle.test.tsx +73 -0
  74. package/src/hooks/use_conversation_message_lookup.ts +29 -0
  75. package/src/hooks/use_conversation_messages.ts +9 -0
  76. package/src/hooks/use_conversation_messages_jolt_events.ts +43 -41
  77. package/src/hooks/use_fetch_newer_messages.ts +19 -12
  78. package/src/hooks/use_fetch_newer_on_foreground.ts +2 -2
  79. package/src/hooks/use_held_back_messages.ts +33 -0
  80. package/src/hooks/use_message_create_or_update.ts +8 -8
  81. package/src/hooks/use_message_reaction_toggle.ts +3 -1
  82. package/src/screens/conversation_new/components/services_form.tsx +1 -1
  83. package/src/screens/conversation_screen.tsx +21 -20
  84. package/src/screens/message_actions_screen.tsx +3 -5
  85. package/src/screens/message_report_screen.tsx +2 -3
  86. package/src/screens/reactions_screen.tsx +2 -4
  87. package/src/utils/cache/__tests__/find_message_in_caches.test.ts +37 -0
  88. package/src/utils/cache/__tests__/messages_cache.test.ts +14 -1
  89. package/src/utils/cache/__tests__/prepend_newer_page.test.ts +13 -14
  90. package/src/utils/cache/find_message_in_caches.ts +20 -0
  91. package/src/utils/cache/messages_cache.ts +3 -0
  92. package/src/utils/cache/optimistically_update_message.ts +2 -5
  93. package/src/utils/cache/prepend_newer_page.ts +7 -10
@@ -1 +1 @@
1
- {"version":3,"file":"use_conversation_messages.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation_messages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAI1C,OAAO,EAAE,wBAAwB,EAAwB,MAAM,oBAAoB,CAAA;AAEnF,KAAK,OAAO,GAAG;IACb,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,4CAA4C,OAAO,EACnD,OAAO,wBAAwB;;;;;;;;;;CAiDhC,CAAA"}
1
+ {"version":3,"file":"use_conversation_messages.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation_messages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAK1C,OAAO,EAAE,wBAAwB,EAAwB,MAAM,oBAAoB,CAAA;AAEnF,KAAK,OAAO,GAAG;IACb,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,cAAc,MAAM,EAAE,OAAO,OAAO,YAKjE,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,4CAA4C,OAAO,EACnD,OAAO,wBAAwB;;;;;;;;;;CAkDhC,CAAA"}
@@ -2,8 +2,14 @@ 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 { ResponseError } from '../utils/response_error';
5
6
  import { getNewerPageParam } from './paginator_meta';
6
7
  import { useSuspensePaginator } from './use_suspense_api';
8
+ export const anchoredRetry = (failureCount, error) => {
9
+ const status = error instanceof ResponseError ? error.status : undefined;
10
+ if (status === 404 || status === 429) return false;
11
+ return failureCount < 3;
12
+ };
7
13
  export const useConversationMessages = (t0, opts) => {
8
14
  const $ = _c(25);
9
15
  const {
@@ -30,7 +36,8 @@ export const useConversationMessages = (t0, opts) => {
30
36
  t2 = anchor ? {
31
37
  getPreviousPageParam: _temp,
32
38
  gcTime: 0,
33
- staleTime: Infinity
39
+ staleTime: Infinity,
40
+ retry: anchoredRetry
34
41
  } : {};
35
42
  $[4] = anchor;
36
43
  $[5] = t2;
@@ -1 +1 @@
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
+ {"version":3,"file":"use_conversation_messages.js","names":["useMemo","replaceEqualById","getMessagesQueryKey","getMessagesRequestArgs","ResponseError","getNewerPageParam","useSuspensePaginator","anchoredRetry","failureCount","error","status","undefined","useConversationMessages","t0","opts","$","_c","conversation_id","reply_root_id","anchor","t1","t2","getPreviousPageParam","_temp","gcTime","staleTime","Infinity","retry","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 { ResponseError } from '../utils/response_error'\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 anchoredRetry = (failureCount: number, error: unknown) => {\n const status = error instanceof ResponseError ? error.status : undefined\n if (status === 404 || status === 429) return false\n\n return failureCount < 3\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 retry: anchoredRetry,\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":[]}
@@ -3,12 +3,20 @@ export interface MessagesCache {
3
3
  queryKey: unknown[];
4
4
  canUpdate?: (event: MessagesJoltEvent) => boolean;
5
5
  }
6
+ export interface MessagesView {
7
+ replyRootId: string | null;
8
+ cache: MessagesCache;
9
+ }
10
+ type MessageEventData = {
11
+ sort_key: string;
12
+ reply_root_id?: string | null;
13
+ };
6
14
  interface Props {
7
15
  conversationId: number;
8
- messageCaches?: MessagesCache[];
16
+ replyRootId?: string | null;
17
+ messageCache?: MessagesCache;
9
18
  }
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;
19
+ export declare const queryKeysForEvent: (event: MessagesJoltEvent, view: MessagesView, data: MessageEventData) => unknown[][];
20
+ export declare function useConversationMessagesJoltEvents({ conversationId, replyRootId, messageCache, }: Props): void;
13
21
  export {};
14
22
  //# 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,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
+ {"version":3,"file":"use_conversation_messages_jolt_events.d.ts","sourceRoot":"","sources":["../../src/hooks/use_conversation_messages_jolt_events.ts"],"names":[],"mappings":"AAwBA,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,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,EAAE,aAAa,CAAA;CACrB;AAED,KAAK,gBAAgB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAA;AAE3E,UAAU,KAAK;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,YAAY,CAAC,EAAE,aAAa,CAAA;CAC7B;AAKD,eAAO,MAAM,iBAAiB,GAC5B,OAAO,iBAAiB,EACxB,MAAM,YAAY,EAClB,MAAM,gBAAgB,gBAIvB,CAAA;AAED,wBAAgB,iCAAiC,CAAC,EAChD,cAAc,EACd,WAAkB,EAClB,YAAY,GACb,EAAE,KAAK,QAsFP"}
@@ -1,75 +1,68 @@
1
1
  import { c as _c } from "react/compiler-runtime";
2
- import { hashKey, useQueryClient } from '@tanstack/react-query';
2
+ import { useQueryClient } from '@tanstack/react-query';
3
3
  import { deleteRecordInPagesData } from '../utils';
4
- import { updateCacheWithMessage, updateCacheWithIndividualMessage, updateCacheWithReaction, updateCacheReplyRoots, getThreadedMessagesQueryKey } from '../utils/cache/messages_cache';
4
+ import { updateCacheWithMessage, updateCacheWithIndividualMessage, updateCacheWithReaction, updateCacheReplyRoots } from '../utils/cache/messages_cache';
5
5
  import { transformMessageEventDataToMessageResource } from '../utils/jolt/transform_message_event_data_to_message_resource';
6
6
  import { completeMessageCreationTracking } from '../utils/performance_tracking';
7
7
  import { getMessageQueryKey } from '../utils/request/get_message';
8
- import { getMessagesRequestArgs } from '../utils/request/get_messages';
8
+ import { getMessagesQueryKey } from '../utils/request/get_messages';
9
9
  import { useApiClient } from './use_api_client';
10
10
  import { useCurrentPerson } from './use_current_person';
11
11
  import { useJoltChannel, useJoltEvent } from './use_jolt';
12
- import { getRequestQueryKey } from './use_suspense_api';
13
12
  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];
13
+ const belongsToView = (replyRootId, data) => replyRootId === null || data.reply_root_id === replyRootId || data.sort_key === replyRootId;
14
+ export const queryKeysForEvent = (event, view, data) => {
15
+ const accepted = !view.cache.canUpdate || view.cache.canUpdate(event);
16
+ return belongsToView(view.replyRootId, data) && accepted ? [view.cache.queryKey] : [];
22
17
  };
23
- export const queryKeysForEvent = (event, defaults, overrides) => resolveMessageCaches(defaults, overrides).filter(cache => !cache.canUpdate || cache.canUpdate(event)).map(cache => cache.queryKey);
24
18
  export function useConversationMessagesJoltEvents(t0) {
25
- const $ = _c(28);
19
+ const $ = _c(25);
26
20
  const {
27
21
  conversationId,
28
- messageCaches: t1
22
+ replyRootId: t1,
23
+ messageCache
29
24
  } = 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;
25
+ const replyRootId = t1 === undefined ? null : t1;
39
26
  const queryClient = useQueryClient();
40
27
  const currentPerson = useCurrentPerson();
41
28
  const joltChannel = useJoltChannel(`chat.conversations.${conversationId}`);
42
- let t3;
43
- if ($[2] !== conversationId) {
44
- const messagesRequestArgs = getMessagesRequestArgs({
45
- conversation_id: conversationId
46
- });
47
- t3 = getRequestQueryKey(messagesRequestArgs);
48
- $[2] = conversationId;
49
- $[3] = t3;
29
+ let t2;
30
+ if ($[0] !== conversationId || $[1] !== messageCache || $[2] !== replyRootId) {
31
+ t2 = messageCache ?? {
32
+ queryKey: getMessagesQueryKey({
33
+ conversation_id: conversationId,
34
+ reply_root_id: replyRootId
35
+ })
36
+ };
37
+ $[0] = conversationId;
38
+ $[1] = messageCache;
39
+ $[2] = replyRootId;
40
+ $[3] = t2;
50
41
  } else {
51
- t3 = $[3];
42
+ t2 = $[3];
52
43
  }
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;
44
+ let t3;
45
+ if ($[4] !== replyRootId || $[5] !== t2) {
46
+ t3 = {
47
+ replyRootId,
48
+ cache: t2
49
+ };
50
+ $[4] = replyRootId;
51
+ $[5] = t2;
52
+ $[6] = t3;
60
53
  } else {
61
- t4 = $[6];
54
+ t3 = $[6];
62
55
  }
63
- const cachesTouchedBy = t4;
56
+ const view = t3;
64
57
  const apiClient = useApiClient();
65
58
  const {
66
59
  addTypingEvent,
67
60
  removeTypingEventById,
68
61
  removeAllTypingEventsByAuthorId
69
62
  } = useTypingStatusCache(conversationId);
70
- let t5;
71
- if ($[7] !== apiClient || $[8] !== cachesTouchedBy || $[9] !== conversationId || $[10] !== currentPerson.id || $[11] !== messageCaches || $[12] !== queryClient || $[13] !== removeAllTypingEventsByAuthorId) {
72
- t5 = async e => {
63
+ let t4;
64
+ if ($[7] !== apiClient || $[8] !== conversationId || $[9] !== currentPerson.id || $[10] !== queryClient || $[11] !== removeAllTypingEventsByAuthorId || $[12] !== view) {
65
+ t4 = async e => {
73
66
  const {
74
67
  data
75
68
  } = e.data;
@@ -87,7 +80,7 @@ export function useConversationMessagesJoltEvents(t0) {
87
80
  });
88
81
  }
89
82
  }
90
- const targetQueryKeys = queryKeysForEvent(e.event, cachesTouchedBy(data.reply_root_id), messageCaches);
83
+ const targetQueryKeys = queryKeysForEvent(e.event, view, data);
91
84
  targetQueryKeys.forEach(queryKey => updateCacheWithMessage(queryClient, queryKey, message, e.event));
92
85
  if (isReplyRootUpdate) {
93
86
  targetQueryKeys.forEach(queryKey_0 => updateCacheReplyRoots(queryClient, queryKey_0, message));
@@ -101,20 +94,19 @@ export function useConversationMessagesJoltEvents(t0) {
101
94
  }
102
95
  };
103
96
  $[7] = apiClient;
104
- $[8] = cachesTouchedBy;
105
- $[9] = conversationId;
106
- $[10] = currentPerson.id;
107
- $[11] = messageCaches;
108
- $[12] = queryClient;
109
- $[13] = removeAllTypingEventsByAuthorId;
110
- $[14] = t5;
97
+ $[8] = conversationId;
98
+ $[9] = currentPerson.id;
99
+ $[10] = queryClient;
100
+ $[11] = removeAllTypingEventsByAuthorId;
101
+ $[12] = view;
102
+ $[13] = t4;
111
103
  } else {
112
- t5 = $[14];
104
+ t4 = $[13];
113
105
  }
114
- const handleMessageUpdateOrCreate = t5;
115
- let t6;
116
- if ($[15] !== cachesTouchedBy || $[16] !== currentPerson.id || $[17] !== messageCaches || $[18] !== queryClient) {
117
- t6 = async e_0 => {
106
+ const handleMessageUpdateOrCreate = t4;
107
+ let t5;
108
+ if ($[14] !== currentPerson.id || $[15] !== queryClient || $[16] !== view) {
109
+ t5 = async e_0 => {
118
110
  const {
119
111
  data: data_0
120
112
  } = e_0.data;
@@ -122,50 +114,52 @@ export function useConversationMessagesJoltEvents(t0) {
122
114
  data: data_0,
123
115
  currentPersonId: currentPerson.id
124
116
  });
125
- queryKeysForEvent("message.destroyed", cachesTouchedBy(data_0.reply_root_id), messageCaches).forEach(queryKey_1 => queryClient.setQueryData(queryKey_1, prev => deleteRecordInPagesData({
117
+ queryKeysForEvent("message.destroyed", view, data_0).forEach(queryKey_1 => queryClient.setQueryData(queryKey_1, prev => deleteRecordInPagesData({
126
118
  data: prev,
127
119
  record: message_0
128
120
  })));
129
121
  };
130
- $[15] = cachesTouchedBy;
131
- $[16] = currentPerson.id;
132
- $[17] = messageCaches;
133
- $[18] = queryClient;
134
- $[19] = t6;
122
+ $[14] = currentPerson.id;
123
+ $[15] = queryClient;
124
+ $[16] = view;
125
+ $[17] = t5;
135
126
  } else {
136
- t6 = $[19];
127
+ t5 = $[17];
137
128
  }
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));
129
+ const handleMessageDeleted = t5;
130
+ let t6;
131
+ if ($[18] !== currentPerson.id || $[19] !== queryClient || $[20] !== view) {
132
+ t6 = async e_1 => {
133
+ const data_1 = {
134
+ sort_key: e_1.data.data.message_sort_key,
135
+ reply_root_id: e_1.data.data.reply_root_id
136
+ };
137
+ queryKeysForEvent("reaction", view, data_1).forEach(queryKey_2 => updateCacheWithReaction(queryClient, queryKey_2, e_1, currentPerson.id));
143
138
  };
144
- $[20] = cachesTouchedBy;
145
- $[21] = currentPerson.id;
146
- $[22] = messageCaches;
147
- $[23] = queryClient;
148
- $[24] = t7;
139
+ $[18] = currentPerson.id;
140
+ $[19] = queryClient;
141
+ $[20] = view;
142
+ $[21] = t6;
149
143
  } else {
150
- t7 = $[24];
144
+ t6 = $[21];
151
145
  }
152
- const handleReactionJoltEvent = t7;
153
- let t8;
154
- if ($[25] !== addTypingEvent || $[26] !== removeTypingEventById) {
155
- t8 = async e_2 => {
146
+ const handleReactionJoltEvent = t6;
147
+ let t7;
148
+ if ($[22] !== addTypingEvent || $[23] !== removeTypingEventById) {
149
+ t7 = async e_2 => {
156
150
  const {
157
- data: data_1
151
+ data: data_2
158
152
  } = e_2.data;
159
- addTypingEvent(data_1);
160
- setTimeout(() => removeTypingEventById(data_1.id), TYPING_TIMEOUT_INTERVAL);
153
+ addTypingEvent(data_2);
154
+ setTimeout(() => removeTypingEventById(data_2.id), TYPING_TIMEOUT_INTERVAL);
161
155
  };
162
- $[25] = addTypingEvent;
163
- $[26] = removeTypingEventById;
164
- $[27] = t8;
156
+ $[22] = addTypingEvent;
157
+ $[23] = removeTypingEventById;
158
+ $[24] = t7;
165
159
  } else {
166
- t8 = $[27];
160
+ t7 = $[24];
167
161
  }
168
- const handleTypingEvent = t8;
162
+ const handleTypingEvent = t7;
169
163
  useJoltEvent(joltChannel, "message.created", handleMessageUpdateOrCreate);
170
164
  useJoltEvent(joltChannel, "message.updated", handleMessageUpdateOrCreate);
171
165
  useJoltEvent(joltChannel, "message.destroyed", handleMessageDeleted);
@@ -1 +1 @@
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":[]}
1
+ {"version":3,"file":"use_conversation_messages_jolt_events.js","names":["useQueryClient","deleteRecordInPagesData","updateCacheWithMessage","updateCacheWithIndividualMessage","updateCacheWithReaction","updateCacheReplyRoots","transformMessageEventDataToMessageResource","completeMessageCreationTracking","getMessageQueryKey","getMessagesQueryKey","useApiClient","useCurrentPerson","useJoltChannel","useJoltEvent","TYPING_TIMEOUT_INTERVAL","useTypingStatusCache","belongsToView","replyRootId","data","reply_root_id","sort_key","queryKeysForEvent","event","view","accepted","cache","canUpdate","queryKey","useConversationMessagesJoltEvents","t0","$","_c","conversationId","t1","messageCache","undefined","queryClient","currentPerson","joltChannel","t2","conversation_id","t3","apiClient","addTypingEvent","removeTypingEventById","removeAllTypingEventsByAuthorId","t4","id","e","message","currentPersonId","isReplyRootUpdate","author_id","idempotent_key","idempotentKey","targetQueryKeys","forEach","queryKey_0","individualMessageQueryKey","messageId","handleMessageUpdateOrCreate","t5","e_0","data_0","message_0","queryKey_1","setQueryData","prev","record","handleMessageDeleted","t6","e_1","data_1","message_sort_key","queryKey_2","handleReactionJoltEvent","t7","e_2","data_2","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} 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 { getMessagesQueryKey } from '../utils/request/get_messages'\nimport { useApiClient } from './use_api_client'\nimport { useCurrentPerson } from './use_current_person'\nimport { useJoltChannel, useJoltEvent } from './use_jolt'\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\nexport interface MessagesView {\n replyRootId: string | null\n cache: MessagesCache\n}\n\ntype MessageEventData = { sort_key: string; reply_root_id?: string | null }\n\ninterface Props {\n conversationId: number\n replyRootId?: string | null\n messageCache?: MessagesCache\n}\n\nconst belongsToView = (replyRootId: string | null, data: MessageEventData) =>\n replyRootId === null || data.reply_root_id === replyRootId || data.sort_key === replyRootId\n\nexport const queryKeysForEvent = (\n event: MessagesJoltEvent,\n view: MessagesView,\n data: MessageEventData\n) => {\n const accepted = !view.cache.canUpdate || view.cache.canUpdate(event)\n return belongsToView(view.replyRootId, data) && accepted ? [view.cache.queryKey] : []\n}\n\nexport function useConversationMessagesJoltEvents({\n conversationId,\n replyRootId = null,\n messageCache,\n}: Props) {\n const queryClient = useQueryClient()\n const currentPerson = useCurrentPerson()\n const joltChannel = useJoltChannel(`chat.conversations.${conversationId}`)\n const view: MessagesView = {\n replyRootId,\n cache: messageCache ?? {\n queryKey: getMessagesQueryKey({\n conversation_id: conversationId,\n reply_root_id: replyRootId,\n }),\n },\n }\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(e.event, view, data)\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('message.destroyed', view, data).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 const data = {\n sort_key: e.data.data.message_sort_key,\n reply_root_id: e.data.data.reply_root_id,\n }\n queryKeysForEvent('reaction', view, data).forEach(queryKey =>\n updateCacheWithReaction(queryClient, queryKey, 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 +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"}
1
+ {"version":3,"file":"use_fetch_newer_messages.d.ts","sourceRoot":"","sources":["../../src/hooks/use_fetch_newer_messages.ts"],"names":[],"mappings":"AASA,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,uBAK/D,MAAM,kBAuBjC,CAAA"}
@@ -4,6 +4,7 @@ import { useCallback } from 'react';
4
4
  import { prependNewerPage } from '../utils/cache/prepend_newer_page';
5
5
  import { getMessagesRequestArgs } from '../utils/request/get_messages';
6
6
  import { useApiClient } from './use_api_client';
7
+ const MAX_PAGES = 5;
7
8
  export const useFetchNewerMessages = t0 => {
8
9
  const $ = _c(6);
9
10
  const {
@@ -14,8 +15,8 @@ export const useFetchNewerMessages = t0 => {
14
15
  const queryClient = useQueryClient();
15
16
  const apiClient = useApiClient();
16
17
  let t1;
17
- if ($[0] !== apiClient.chat || $[1] !== conversation_id || $[2] !== queryClient || $[3] !== queryKey || $[4] !== reply_root_id) {
18
- t1 = newestMessageId => {
18
+ if ($[0] !== apiClient || $[1] !== conversation_id || $[2] !== queryClient || $[3] !== queryKey || $[4] !== reply_root_id) {
19
+ t1 = async newestMessageId => {
19
20
  const {
20
21
  url,
21
22
  data
@@ -23,25 +24,31 @@ export const useFetchNewerMessages = t0 => {
23
24
  conversation_id,
24
25
  reply_root_id
25
26
  });
26
- const where = {
27
- id_gt: newestMessageId
28
- };
29
- const pageParam = {
30
- where,
31
- order: "asc"
32
- };
33
- return apiClient.chat.get({
34
- url,
35
- data: {
36
- ...data,
37
- where,
38
- order: "asc"
39
- }
40
- }).then(page => {
41
- queryClient.setQueryData(queryKey, prev => prependNewerPage(prev, page, pageParam));
42
- }).catch(_temp);
27
+ const pages = [];
28
+ let cursor = newestMessageId;
29
+ while (cursor && pages.length < MAX_PAGES) {
30
+ const page = await apiClient.chat.get({
31
+ url,
32
+ data: {
33
+ ...data,
34
+ where: {
35
+ id_gt: cursor
36
+ },
37
+ order: "asc"
38
+ }
39
+ });
40
+ pages.push(page);
41
+ cursor = page.meta?.next?.idGt;
42
+ }
43
+ queryClient.setQueryData(queryKey, prev => prependNewerPage(prev, pages));
44
+ const moreThanWeFetched = !!cursor;
45
+ if (moreThanWeFetched) {
46
+ await queryClient.invalidateQueries({
47
+ queryKey
48
+ });
49
+ }
43
50
  };
44
- $[0] = apiClient.chat;
51
+ $[0] = apiClient;
45
52
  $[1] = conversation_id;
46
53
  $[2] = queryClient;
47
54
  $[3] = queryKey;
@@ -52,5 +59,4 @@ export const useFetchNewerMessages = t0 => {
52
59
  }
53
60
  return t1;
54
61
  };
55
- function _temp() {}
56
62
  //# sourceMappingURL=use_fetch_newer_messages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_fetch_newer_messages.js","names":["useQueryClient","useCallback","prependNewerPage","getMessagesRequestArgs","useApiClient","useFetchNewerMessages","t0","$","_c","conversation_id","reply_root_id","queryKey","queryClient","apiClient","t1","chat","newestMessageId","url","data","where","id_gt","pageParam","order","get","then","page","setQueryData","prev","catch","_temp"],"sources":["../../src/hooks/use_fetch_newer_messages.ts"],"sourcesContent":["import { useQueryClient } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { ApiCollection, MessageResource } from '../types'\nimport { prependNewerPage } from '../utils/cache/prepend_newer_page'\nimport { RequestData } from '../utils/client'\nimport { getMessagesRequestArgs } from '../utils/request/get_messages'\nimport { useApiClient } from './use_api_client'\n\ntype Options = {\n conversation_id: number\n reply_root_id?: string | null\n queryKey: unknown[]\n}\n\nexport const useFetchNewerMessages = ({ conversation_id, reply_root_id, queryKey }: Options) => {\n const queryClient = useQueryClient()\n const apiClient = useApiClient()\n\n return useCallback(\n (newestMessageId: string) => {\n const { url, data } = getMessagesRequestArgs({ conversation_id, reply_root_id })\n const where = { id_gt: newestMessageId }\n const pageParam: Partial<RequestData> = { where, order: 'asc' }\n\n return apiClient.chat\n .get<ApiCollection<MessageResource>>({ url, data: { ...data, where, order: 'asc' } })\n .then(page => {\n queryClient.setQueryData<Parameters<typeof prependNewerPage<MessageResource>>[0]>(\n queryKey,\n prev => prependNewerPage(prev, page, pageParam)\n )\n })\n .catch(() => {})\n },\n [apiClient, conversation_id, queryClient, queryKey, reply_root_id]\n )\n}\n"],"mappings":";AAAA,SAASA,cAAc,QAAQ,uBAAuB;AACtD,SAASC,WAAW,QAAQ,OAAO;AAEnC,SAASC,gBAAgB,QAAQ,mCAAmC;AAEpE,SAASC,sBAAsB,QAAQ,+BAA+B;AACtE,SAASC,YAAY,QAAQ,kBAAkB;AAQ/C,OAAO,MAAMC,qBAAqB,GAAGC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAC;IAAAC,eAAA;IAAAC,aAAA;IAAAC;EAAA,IAAAL,EAAqD;EACzF,MAAAM,WAAA,GAAoBZ,cAAc,CAAC,CAAC;EACpC,MAAAa,SAAA,GAAkBT,YAAY,CAAC,CAAC;EAAA,IAAAU,EAAA;EAAA,IAAAP,CAAA,QAAAM,SAAA,CAAAE,IAAA,IAAAR,CAAA,QAAAE,eAAA,IAAAF,CAAA,QAAAK,WAAA,IAAAL,CAAA,QAAAI,QAAA,IAAAJ,CAAA,QAAAG,aAAA;IAG9BI,EAAA,GAAAE,eAAA;MACE;QAAAC,GAAA;QAAAC;MAAA,IAAsBf,sBAAsB,CAAC;QAAAM,eAAA;QAAAC;MAAiC,CAAC,CAAC;MAChF,MAAAS,KAAA,GAAc;QAAAC,KAAA,EAASJ;MAAgB,CAAC;MACxC,MAAAK,SAAA,GAAwC;QAAAF,KAAA;QAAAG,KAAA,EAAgB;MAAM,CAAC;MAAA,OAExDT,SAAS,CAAAE,IAAK,CAAAQ,GACf,CAAiC;QAAAN,GAAA;QAAAC,IAAA,EAAa;UAAA,GAAKA,IAAI;UAAAC,KAAA;UAAAG,KAAA,EAAgB;QAAM;MAAE,CAAC,CAAC,CAAAE,IAChF,CAACC,IAAA;QACJb,WAAW,CAAAc,YAAa,CACtBf,QAAQ,EACRgB,IAAA,IAAQzB,gBAAgB,CAACyB,IAAI,EAAEF,IAAI,EAAEJ,SAAS,CAChD,CAAC;MAAA,CACF,CAAC,CAAAO,KACI,CAACC,KAAQ,CAAC;IAAA,CACnB;IAAAtB,CAAA,MAAAM,SAAA,CAAAE,IAAA;IAAAR,CAAA,MAAAE,eAAA;IAAAF,CAAA,MAAAK,WAAA;IAAAL,CAAA,MAAAI,QAAA;IAAAJ,CAAA,MAAAG,aAAA;IAAAH,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAAA,OAfIO,EAiBN;AAAA,CACF;AAtBoC,SAAAe,MAAA","ignoreList":[]}
1
+ {"version":3,"file":"use_fetch_newer_messages.js","names":["useQueryClient","useCallback","prependNewerPage","getMessagesRequestArgs","useApiClient","MAX_PAGES","useFetchNewerMessages","t0","$","_c","conversation_id","reply_root_id","queryKey","queryClient","apiClient","t1","newestMessageId","url","data","pages","cursor","length","page","chat","get","where","id_gt","order","push","meta","next","idGt","setQueryData","prev","moreThanWeFetched","invalidateQueries"],"sources":["../../src/hooks/use_fetch_newer_messages.ts"],"sourcesContent":["import { useQueryClient } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { ApiCollection, MessageResource } from '../types'\nimport { prependNewerPage } from '../utils/cache/prepend_newer_page'\nimport { getMessagesRequestArgs } from '../utils/request/get_messages'\nimport { useApiClient } from './use_api_client'\n\nconst MAX_PAGES = 5\n\ntype Options = {\n conversation_id: number\n reply_root_id?: string | null\n queryKey: unknown[]\n}\n\nexport const useFetchNewerMessages = ({ conversation_id, reply_root_id, queryKey }: Options) => {\n const queryClient = useQueryClient()\n const apiClient = useApiClient()\n\n return useCallback(\n async (newestMessageId: string) => {\n const { url, data } = getMessagesRequestArgs({ conversation_id, reply_root_id })\n const pages: ApiCollection<MessageResource>[] = []\n let cursor: string | undefined = newestMessageId\n\n while (cursor && pages.length < MAX_PAGES) {\n const page: ApiCollection<MessageResource> = await apiClient.chat.get({\n url,\n data: { ...data, where: { id_gt: cursor }, order: 'asc' },\n })\n pages.push(page)\n cursor = page.meta?.next?.idGt\n }\n\n queryClient.setQueryData<Parameters<typeof prependNewerPage<MessageResource>>[0]>(\n queryKey,\n prev => prependNewerPage(prev, pages)\n )\n const moreThanWeFetched = !!cursor\n if (moreThanWeFetched) await queryClient.invalidateQueries({ queryKey })\n },\n [apiClient, conversation_id, queryClient, queryKey, reply_root_id]\n )\n}\n"],"mappings":";AAAA,SAASA,cAAc,QAAQ,uBAAuB;AACtD,SAASC,WAAW,QAAQ,OAAO;AAEnC,SAASC,gBAAgB,QAAQ,mCAAmC;AACpE,SAASC,sBAAsB,QAAQ,+BAA+B;AACtE,SAASC,YAAY,QAAQ,kBAAkB;AAE/C,MAAMC,SAAS,GAAG,CAAC;AAQnB,OAAO,MAAMC,qBAAqB,GAAGC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAC;IAAAC,eAAA;IAAAC,aAAA;IAAAC;EAAA,IAAAL,EAAqD;EACzF,MAAAM,WAAA,GAAoBb,cAAc,CAAC,CAAC;EACpC,MAAAc,SAAA,GAAkBV,YAAY,CAAC,CAAC;EAAA,IAAAW,EAAA;EAAA,IAAAP,CAAA,QAAAM,SAAA,IAAAN,CAAA,QAAAE,eAAA,IAAAF,CAAA,QAAAK,WAAA,IAAAL,CAAA,QAAAI,QAAA,IAAAJ,CAAA,QAAAG,aAAA;IAG9BI,EAAA,SAAAC,eAAA;MACE;QAAAC,GAAA;QAAAC;MAAA,IAAsBf,sBAAsB,CAAC;QAAAO,eAAA;QAAAC;MAAiC,CAAC,CAAC;MAChF,MAAAQ,KAAA,GAAgD,EAAE;MAClD,IAAAC,MAAA,GAAiCJ,eAAe;MAEhD,OAAOI,MAAkC,IAAxBD,KAAK,CAAAE,MAAO,GAAGhB,SAO/B;QANC,MAAAiB,IAAA,GAA6C,MAAMR,SAAS,CAAAS,IAAK,CAAAC,GAAI,CAAC;UAAAP,GAAA;UAAAC,IAAA,EAE9D;YAAA,GAAKA,IAAI;YAAAO,KAAA,EAAS;cAAAC,KAAA,EAASN;YAAO,CAAC;YAAAO,KAAA,EAAS;UAAM;QAC1D,CAAC,CAAC;QACFR,KAAK,CAAAS,IAAK,CAACN,IAAI,CAAC;QAChBF,MAAA,CAAAA,CAAA,CAASE,IAAI,CAAAO,IAAW,EAAAC,IAAM,EAAAC,IAAA;MAAxB;MAGRlB,WAAW,CAAAmB,YAAa,CACtBpB,QAAQ,EACRqB,IAAA,IAAQ/B,gBAAgB,CAAC+B,IAAI,EAAEd,KAAK,CACtC,CAAC;MACD,MAAAe,iBAAA,GAA0B,CAAC,CAACd,MAAM;MAClC,IAAIc,iBAAiB;QAAE,MAAMrB,WAAW,CAAAsB,iBAAkB,CAAC;UAAAvB;QAAW,CAAC,CAAC;MAAA;IAAA,CACzE;IAAAJ,CAAA,MAAAM,SAAA;IAAAN,CAAA,MAAAE,eAAA;IAAAF,CAAA,MAAAK,WAAA;IAAAL,CAAA,MAAAI,QAAA;IAAAJ,CAAA,MAAAG,aAAA;IAAAH,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAAA,OArBIO,EAuBN;AAAA,CACF","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  type Options = {
2
- fetchNewer: (newestMessageId: string) => void;
2
+ fetchNewer: (newestMessageId: string) => Promise<void>;
3
3
  newestMessageId?: string;
4
4
  enabled: boolean;
5
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"use_fetch_newer_on_foreground.d.ts","sourceRoot":"","sources":["../../src/hooks/use_fetch_newer_on_foreground.ts"],"names":[],"mappings":"AAGA,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,0CAA0C,OAAO,SAe1F,CAAA"}
1
+ {"version":3,"file":"use_fetch_newer_on_foreground.d.ts","sourceRoot":"","sources":["../../src/hooks/use_fetch_newer_on_foreground.ts"],"names":[],"mappings":"AAGA,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,0CAA0C,OAAO,SAe1F,CAAA"}
@@ -23,7 +23,7 @@ export const useFetchNewerOnForeground = t0 => {
23
23
  if (!returnedToForeground || !enabled || !newestMessageId) {
24
24
  return;
25
25
  }
26
- fetchNewer(newestMessageId);
26
+ fetchNewer(newestMessageId).catch(_temp);
27
27
  };
28
28
  t2 = [appState, enabled, fetchNewer, newestMessageId];
29
29
  $[0] = appState;
@@ -38,4 +38,5 @@ export const useFetchNewerOnForeground = t0 => {
38
38
  }
39
39
  useEffect(t1, t2);
40
40
  };
41
+ function _temp() {}
41
42
  //# sourceMappingURL=use_fetch_newer_on_foreground.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use_fetch_newer_on_foreground.js","names":["useEffect","useRef","useAppState","useFetchNewerOnForeground","t0","$","_c","fetchNewer","newestMessageId","enabled","appState","wasInBackground","t1","t2","current","returnedToForeground"],"sources":["../../src/hooks/use_fetch_newer_on_foreground.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { useAppState } from './use_app_state'\n\ntype Options = {\n fetchNewer: (newestMessageId: string) => void\n newestMessageId?: string\n enabled: boolean\n}\n\nexport const useFetchNewerOnForeground = ({ fetchNewer, newestMessageId, enabled }: Options) => {\n const appState = useAppState()\n const wasInBackground = useRef(false)\n\n useEffect(() => {\n if (appState !== 'active') {\n wasInBackground.current = true\n return\n }\n const returnedToForeground = wasInBackground.current\n wasInBackground.current = false\n if (!returnedToForeground || !enabled || !newestMessageId) return\n\n fetchNewer(newestMessageId)\n }, [appState, enabled, fetchNewer, newestMessageId])\n}\n"],"mappings":";AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SAASC,WAAW,QAAQ,iBAAiB;AAQ7C,OAAO,MAAMC,yBAAyB,GAAGC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAC;IAAAC,UAAA;IAAAC,eAAA;IAAAC;EAAA,IAAAL,EAAiD;EACzF,MAAAM,QAAA,GAAiBR,WAAW,CAAC,CAAC;EAC9B,MAAAS,eAAA,GAAwBV,MAAM,CAAC,KAAK,CAAC;EAAA,IAAAW,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAR,CAAA,QAAAK,QAAA,IAAAL,CAAA,QAAAI,OAAA,IAAAJ,CAAA,QAAAE,UAAA,IAAAF,CAAA,QAAAG,eAAA;IAE3BI,EAAA,GAAAA,CAAA;MACR,IAAIF,QAAQ,KAAK,QAAQ;QACvBC,eAAe,CAAAG,OAAA,GAAW,IAAH;QAAA;MAAA;MAGzB,MAAAC,oBAAA,GAA6BJ,eAAe,CAAAG,OAAQ;MACpDH,eAAe,CAAAG,OAAA,GAAW,KAAH;MACvB,IAAI,CAACC,oBAAgC,IAAjC,CAA0BN,OAA2B,IAArD,CAAsCD,eAAe;QAAA;MAAA;MAEzDD,UAAU,CAACC,eAAe,CAAC;IAAA,CAC5B;IAAEK,EAAA,IAACH,QAAQ,EAAED,OAAO,EAAEF,UAAU,EAAEC,eAAe,CAAC;IAAAH,CAAA,MAAAK,QAAA;IAAAL,CAAA,MAAAI,OAAA;IAAAJ,CAAA,MAAAE,UAAA;IAAAF,CAAA,MAAAG,eAAA;IAAAH,CAAA,MAAAO,EAAA;IAAAP,CAAA,MAAAQ,EAAA;EAAA;IAAAD,EAAA,GAAAP,CAAA;IAAAQ,EAAA,GAAAR,CAAA;EAAA;EAVnDL,SAAS,CAACY,EAUT,EAAEC,EAAgD,CAAC;AAAA,CACrD","ignoreList":[]}
1
+ {"version":3,"file":"use_fetch_newer_on_foreground.js","names":["useEffect","useRef","useAppState","useFetchNewerOnForeground","t0","$","_c","fetchNewer","newestMessageId","enabled","appState","wasInBackground","t1","t2","current","returnedToForeground","catch","_temp"],"sources":["../../src/hooks/use_fetch_newer_on_foreground.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { useAppState } from './use_app_state'\n\ntype Options = {\n fetchNewer: (newestMessageId: string) => Promise<void>\n newestMessageId?: string\n enabled: boolean\n}\n\nexport const useFetchNewerOnForeground = ({ fetchNewer, newestMessageId, enabled }: Options) => {\n const appState = useAppState()\n const wasInBackground = useRef(false)\n\n useEffect(() => {\n if (appState !== 'active') {\n wasInBackground.current = true\n return\n }\n const returnedToForeground = wasInBackground.current\n wasInBackground.current = false\n if (!returnedToForeground || !enabled || !newestMessageId) return\n\n fetchNewer(newestMessageId).catch(() => {})\n }, [appState, enabled, fetchNewer, newestMessageId])\n}\n"],"mappings":";AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SAASC,WAAW,QAAQ,iBAAiB;AAQ7C,OAAO,MAAMC,yBAAyB,GAAGC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAAC;IAAAC,UAAA;IAAAC,eAAA;IAAAC;EAAA,IAAAL,EAAiD;EACzF,MAAAM,QAAA,GAAiBR,WAAW,CAAC,CAAC;EAC9B,MAAAS,eAAA,GAAwBV,MAAM,CAAC,KAAK,CAAC;EAAA,IAAAW,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAR,CAAA,QAAAK,QAAA,IAAAL,CAAA,QAAAI,OAAA,IAAAJ,CAAA,QAAAE,UAAA,IAAAF,CAAA,QAAAG,eAAA;IAE3BI,EAAA,GAAAA,CAAA;MACR,IAAIF,QAAQ,KAAK,QAAQ;QACvBC,eAAe,CAAAG,OAAA,GAAW,IAAH;QAAA;MAAA;MAGzB,MAAAC,oBAAA,GAA6BJ,eAAe,CAAAG,OAAQ;MACpDH,eAAe,CAAAG,OAAA,GAAW,KAAH;MACvB,IAAI,CAACC,oBAAgC,IAAjC,CAA0BN,OAA2B,IAArD,CAAsCD,eAAe;QAAA;MAAA;MAEzDD,UAAU,CAACC,eAAe,CAAC,CAAAQ,KAAM,CAACC,KAAQ,CAAC;IAAA,CAC5C;IAAEJ,EAAA,IAACH,QAAQ,EAAED,OAAO,EAAEF,UAAU,EAAEC,eAAe,CAAC;IAAAH,CAAA,MAAAK,QAAA;IAAAL,CAAA,MAAAI,OAAA;IAAAJ,CAAA,MAAAE,UAAA;IAAAF,CAAA,MAAAG,eAAA;IAAAH,CAAA,MAAAO,EAAA;IAAAP,CAAA,MAAAQ,EAAA;EAAA;IAAAD,EAAA,GAAAP,CAAA;IAAAQ,EAAA,GAAAR,CAAA;EAAA;EAVnDL,SAAS,CAACY,EAUT,EAAEC,EAAgD,CAAC;AAAA,CACrD;AAfwC,SAAAI,MAAA","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ type Options = {
2
+ fetchNewer: (newestMessageId: string) => Promise<void>;
3
+ newestMessageId?: string;
4
+ readingHistory: boolean;
5
+ caughtUp: boolean;
6
+ };
7
+ export declare const useHeldBackMessages: ({ fetchNewer, newestMessageId, readingHistory, caughtUp, }: Options) => {
8
+ onSkippedNewMessage: () => void;
9
+ };
10
+ export {};
11
+ //# sourceMappingURL=use_held_back_messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_held_back_messages.d.ts","sourceRoot":"","sources":["../../src/hooks/use_held_back_messages.ts"],"names":[],"mappings":"AAEA,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,OAAO,CAAA;IACvB,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,4DAKjC,OAAO;;CAkBT,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { useCallback, useEffect, useRef } from 'react';
2
+ export const useHeldBackMessages = ({
3
+ fetchNewer,
4
+ newestMessageId,
5
+ readingHistory,
6
+ caughtUp
7
+ }) => {
8
+ const heldBackSince = useRef(null);
9
+ const onSkippedNewMessage = useCallback(() => {
10
+ heldBackSince.current ??= newestMessageId ?? null;
11
+ }, [newestMessageId]);
12
+ useEffect(() => {
13
+ const since = heldBackSince.current;
14
+ if (readingHistory || !caughtUp || !since) return;
15
+ heldBackSince.current = null;
16
+ fetchNewer(since).catch(() => {
17
+ heldBackSince.current ??= since;
18
+ });
19
+ }, [caughtUp, fetchNewer, readingHistory]);
20
+ return {
21
+ onSkippedNewMessage
22
+ };
23
+ };
24
+ //# sourceMappingURL=use_held_back_messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_held_back_messages.js","names":["useCallback","useEffect","useRef","useHeldBackMessages","fetchNewer","newestMessageId","readingHistory","caughtUp","heldBackSince","onSkippedNewMessage","current","since","catch"],"sources":["../../src/hooks/use_held_back_messages.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react'\n\ntype Options = {\n fetchNewer: (newestMessageId: string) => Promise<void>\n newestMessageId?: string\n readingHistory: boolean\n caughtUp: boolean\n}\n\nexport const useHeldBackMessages = ({\n fetchNewer,\n newestMessageId,\n readingHistory,\n caughtUp,\n}: Options) => {\n const heldBackSince = useRef<string | null>(null)\n\n const onSkippedNewMessage = useCallback(() => {\n heldBackSince.current ??= newestMessageId ?? null\n }, [newestMessageId])\n\n useEffect(() => {\n const since = heldBackSince.current\n if (readingHistory || !caughtUp || !since) return\n\n heldBackSince.current = null\n fetchNewer(since).catch(() => {\n heldBackSince.current ??= since\n })\n }, [caughtUp, fetchNewer, readingHistory])\n\n return { onSkippedNewMessage }\n}\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAStD,OAAO,MAAMC,mBAAmB,GAAGA,CAAC;EAClCC,UAAU;EACVC,eAAe;EACfC,cAAc;EACdC;AACO,CAAC,KAAK;EACb,MAAMC,aAAa,GAAGN,MAAM,CAAgB,IAAI,CAAC;EAEjD,MAAMO,mBAAmB,GAAGT,WAAW,CAAC,MAAM;IAC5CQ,aAAa,CAACE,OAAO,KAAKL,eAAe,IAAI,IAAI;EACnD,CAAC,EAAE,CAACA,eAAe,CAAC,CAAC;EAErBJ,SAAS,CAAC,MAAM;IACd,MAAMU,KAAK,GAAGH,aAAa,CAACE,OAAO;IACnC,IAAIJ,cAAc,IAAI,CAACC,QAAQ,IAAI,CAACI,KAAK,EAAE;IAE3CH,aAAa,CAACE,OAAO,GAAG,IAAI;IAC5BN,UAAU,CAACO,KAAK,CAAC,CAACC,KAAK,CAAC,MAAM;MAC5BJ,aAAa,CAACE,OAAO,KAAKC,KAAK;IACjC,CAAC,CAAC;EACJ,CAAC,EAAE,CAACJ,QAAQ,EAAEH,UAAU,EAAEE,cAAc,CAAC,CAAC;EAE1C,OAAO;IAAEG;EAAoB,CAAC;AAChC,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"use_message_create_or_update.d.ts","sourceRoot":"","sources":["../../src/hooks/use_message_create_or_update.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACtE,OAAO,EAAE,uCAAuC,EAAE,MAAM,gEAAgE,CAAA;AAexH,UAAU,KAAK;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,UAAU,wBAAwB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,uCAAuC,EAAE,CAAA;IACvD,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,KAAK,gCAAgC,GAAG,wBAAwB,GAAG;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5F,wBAAgB,wBAAwB,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,KAAK;wBAiIzE,wBAAwB,YACzB,UAAU;;OAAwB,CAAC,CAAC,CAAC;6BAIpC,wBAAwB,YACzB,UAAU;;OAA6B,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;wBANzC,wBAAwB,YACzB,UAAU;;OAAwB,CAAC,CAAC,CAAC;6BAIpC,wBAAwB,YACzB,UAAU;;OAA6B,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;wBANzC,wBAAwB,YACzB,UAAU;;OAAwB,CAAC,CAAC,CAAC;6BAIpC,wBAAwB,YACzB,UAAU;;OAA6B,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;wBANzC,wBAAwB,YACzB,UAAU;;OAAwB,CAAC,CAAC,CAAC;6BAIpC,wBAAwB,YACzB,UAAU;;OAA6B,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;EAIvD"}
1
+ {"version":3,"file":"use_message_create_or_update.d.ts","sourceRoot":"","sources":["../../src/hooks/use_message_create_or_update.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACtE,OAAO,EAAE,uCAAuC,EAAE,MAAM,gEAAgE,CAAA;AAexH,UAAU,KAAK;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,UAAU,wBAAwB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,uCAAuC,EAAE,CAAA;IACvD,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,KAAK,gCAAgC,GAAG,wBAAwB,GAAG;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5F,wBAAgB,wBAAwB,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,KAAK;wBAgIzE,wBAAwB,YACzB,UAAU;;OAAwB,CAAC,CAAC,CAAC;6BAIpC,wBAAwB,YACzB,UAAU;;OAA6B,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;wBANzC,wBAAwB,YACzB,UAAU;;OAAwB,CAAC,CAAC,CAAC;6BAIpC,wBAAwB,YACzB,UAAU;;OAA6B,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;wBANzC,wBAAwB,YACzB,UAAU;;OAAwB,CAAC,CAAC,CAAC;6BAIpC,wBAAwB,YACzB,UAAU;;OAA6B,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;wBANzC,wBAAwB,YACzB,UAAU;;OAAwB,CAAC,CAAC,CAAC;6BAIpC,wBAAwB,YACzB,UAAU;;OAA6B,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;EAIvD"}