@planningcenter/chat-react-native 4.2.1-qa-staging.2 → 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.
- package/build/components/conversation/message_form.d.ts.map +1 -1
- package/build/components/conversation/message_form.js +1 -1
- package/build/components/conversation/message_form.js.map +1 -1
- package/build/contexts/conversation_context.d.ts +3 -1
- package/build/contexts/conversation_context.d.ts.map +1 -1
- package/build/contexts/conversation_context.js +23 -18
- package/build/contexts/conversation_context.js.map +1 -1
- package/build/hooks/use_conversation_message_lookup.d.ts +7 -0
- package/build/hooks/use_conversation_message_lookup.d.ts.map +1 -0
- package/build/hooks/use_conversation_message_lookup.js +52 -0
- package/build/hooks/use_conversation_message_lookup.js.map +1 -0
- package/build/hooks/use_conversation_messages.d.ts +1 -0
- package/build/hooks/use_conversation_messages.d.ts.map +1 -1
- package/build/hooks/use_conversation_messages.js +8 -1
- package/build/hooks/use_conversation_messages.js.map +1 -1
- package/build/hooks/use_conversation_messages_jolt_events.d.ts +12 -4
- package/build/hooks/use_conversation_messages_jolt_events.d.ts.map +1 -1
- package/build/hooks/use_conversation_messages_jolt_events.js +82 -88
- package/build/hooks/use_conversation_messages_jolt_events.js.map +1 -1
- package/build/hooks/use_fetch_newer_messages.d.ts.map +1 -1
- package/build/hooks/use_fetch_newer_messages.js +27 -21
- package/build/hooks/use_fetch_newer_messages.js.map +1 -1
- package/build/hooks/use_fetch_newer_on_foreground.d.ts +1 -1
- package/build/hooks/use_fetch_newer_on_foreground.d.ts.map +1 -1
- package/build/hooks/use_fetch_newer_on_foreground.js +2 -1
- package/build/hooks/use_fetch_newer_on_foreground.js.map +1 -1
- package/build/hooks/use_held_back_messages.d.ts +11 -0
- package/build/hooks/use_held_back_messages.d.ts.map +1 -0
- package/build/hooks/use_held_back_messages.js +24 -0
- package/build/hooks/use_held_back_messages.js.map +1 -0
- package/build/hooks/use_message_create_or_update.d.ts.map +1 -1
- package/build/hooks/use_message_create_or_update.js +91 -80
- package/build/hooks/use_message_create_or_update.js.map +1 -1
- package/build/hooks/use_message_reaction_toggle.d.ts.map +1 -1
- package/build/hooks/use_message_reaction_toggle.js +45 -40
- package/build/hooks/use_message_reaction_toggle.js.map +1 -1
- package/build/screens/conversation_new/components/services_form.js.map +1 -1
- package/build/screens/conversation_screen.d.ts.map +1 -1
- package/build/screens/conversation_screen.js +495 -157
- package/build/screens/conversation_screen.js.map +1 -1
- package/build/screens/message_actions_screen.d.ts.map +1 -1
- package/build/screens/message_actions_screen.js +21 -26
- package/build/screens/message_actions_screen.js.map +1 -1
- package/build/screens/message_report_screen.d.ts.map +1 -1
- package/build/screens/message_report_screen.js +17 -44
- package/build/screens/message_report_screen.js.map +1 -1
- package/build/screens/reactions_screen.d.ts.map +1 -1
- package/build/screens/reactions_screen.js +70 -88
- package/build/screens/reactions_screen.js.map +1 -1
- package/build/utils/cache/find_message_in_caches.d.ts +4 -0
- package/build/utils/cache/find_message_in_caches.d.ts.map +1 -0
- package/build/utils/cache/find_message_in_caches.js +16 -0
- package/build/utils/cache/find_message_in_caches.js.map +1 -0
- package/build/utils/cache/messages_cache.d.ts +1 -0
- package/build/utils/cache/messages_cache.d.ts.map +1 -1
- package/build/utils/cache/messages_cache.js +3 -0
- package/build/utils/cache/messages_cache.js.map +1 -1
- package/build/utils/cache/optimistically_update_message.d.ts +2 -1
- package/build/utils/cache/optimistically_update_message.d.ts.map +1 -1
- package/build/utils/cache/optimistically_update_message.js +4 -4
- package/build/utils/cache/optimistically_update_message.js.map +1 -1
- package/build/utils/cache/prepend_newer_page.d.ts +1 -1
- package/build/utils/cache/prepend_newer_page.d.ts.map +1 -1
- package/build/utils/cache/prepend_newer_page.js +10 -9
- package/build/utils/cache/prepend_newer_page.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/hooks/use_conversation_messages.test.ts +22 -0
- package/src/__tests__/hooks/use_conversation_messages_jolt_events.test.ts +22 -25
- package/src/components/conversation/message_form.tsx +1 -2
- package/src/contexts/conversation_context.tsx +6 -1
- package/src/hooks/__tests__/use_fetch_newer_messages.test.tsx +68 -0
- package/src/hooks/__tests__/use_held_back_messages.test.tsx +60 -0
- package/src/hooks/__tests__/use_message_reaction_toggle.test.tsx +73 -0
- package/src/hooks/use_conversation_message_lookup.ts +29 -0
- package/src/hooks/use_conversation_messages.ts +9 -0
- package/src/hooks/use_conversation_messages_jolt_events.ts +43 -41
- package/src/hooks/use_fetch_newer_messages.ts +19 -12
- package/src/hooks/use_fetch_newer_on_foreground.ts +2 -2
- package/src/hooks/use_held_back_messages.ts +33 -0
- package/src/hooks/use_message_create_or_update.ts +8 -8
- package/src/hooks/use_message_reaction_toggle.ts +3 -1
- package/src/screens/conversation_new/components/services_form.tsx +1 -1
- package/src/screens/conversation_screen.tsx +21 -20
- package/src/screens/message_actions_screen.tsx +3 -5
- package/src/screens/message_report_screen.tsx +2 -3
- package/src/screens/reactions_screen.tsx +2 -4
- package/src/utils/cache/__tests__/find_message_in_caches.test.ts +37 -0
- package/src/utils/cache/__tests__/messages_cache.test.ts +14 -1
- package/src/utils/cache/__tests__/prepend_newer_page.test.ts +13 -14
- package/src/utils/cache/find_message_in_caches.ts +20 -0
- package/src/utils/cache/messages_cache.ts +3 -0
- package/src/utils/cache/optimistically_update_message.ts +2 -5
- 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;
|
|
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":";AAAA,SAASA,OAAO,QAAQ,OAAO;AAE/B,SAASC,gBAAgB,QAAQ,8BAA8B;AAC/D,SAASC,mBAAmB,EAAEC,sBAAsB,QAAQ,+BAA+B;AAC3F,SAASC,iBAAiB,QAAQ,kBAAkB;AACpD,SAAmCC,oBAAoB,QAAQ,oBAAoB;AAQnF,OAAO,MAAMC,uBAAuB,GAAGA,CAAAC,EAAA,EAAAC,IAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EACrC;IAAAC,eAAA;IAAAC,aAAA;IAAAC;EAAA,IAAAN,EAAmD;EAAA,IAAAO,EAAA;EAAA,IAAAL,CAAA,QAAAI,MAAA,IAAAJ,CAAA,QAAAE,eAAA,IAAAF,CAAA,QAAAG,aAAA;IAajDE,EAAA,
|
|
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
|
-
|
|
16
|
+
replyRootId?: string | null;
|
|
17
|
+
messageCache?: MessagesCache;
|
|
9
18
|
}
|
|
10
|
-
export declare const
|
|
11
|
-
export declare
|
|
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":"
|
|
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 {
|
|
2
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
3
3
|
import { deleteRecordInPagesData } from '../utils';
|
|
4
|
-
import { updateCacheWithMessage, updateCacheWithIndividualMessage, updateCacheWithReaction, updateCacheReplyRoots
|
|
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 {
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
|
|
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(
|
|
19
|
+
const $ = _c(25);
|
|
26
20
|
const {
|
|
27
21
|
conversationId,
|
|
28
|
-
|
|
22
|
+
replyRootId: t1,
|
|
23
|
+
messageCache
|
|
29
24
|
} = t0;
|
|
30
|
-
|
|
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
|
|
43
|
-
if ($[2] !==
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
42
|
+
t2 = $[3];
|
|
52
43
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
$[
|
|
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
|
-
|
|
54
|
+
t3 = $[6];
|
|
62
55
|
}
|
|
63
|
-
const
|
|
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
|
|
71
|
-
if ($[7] !== apiClient || $[8] !==
|
|
72
|
-
|
|
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,
|
|
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] =
|
|
105
|
-
$[9] =
|
|
106
|
-
$[10] =
|
|
107
|
-
$[11] =
|
|
108
|
-
$[12] =
|
|
109
|
-
$[13] =
|
|
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
|
-
|
|
104
|
+
t4 = $[13];
|
|
113
105
|
}
|
|
114
|
-
const handleMessageUpdateOrCreate =
|
|
115
|
-
let
|
|
116
|
-
if ($[
|
|
117
|
-
|
|
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",
|
|
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
|
-
$[
|
|
131
|
-
$[
|
|
132
|
-
$[
|
|
133
|
-
$[
|
|
134
|
-
$[19] = t6;
|
|
122
|
+
$[14] = currentPerson.id;
|
|
123
|
+
$[15] = queryClient;
|
|
124
|
+
$[16] = view;
|
|
125
|
+
$[17] = t5;
|
|
135
126
|
} else {
|
|
136
|
-
|
|
127
|
+
t5 = $[17];
|
|
137
128
|
}
|
|
138
|
-
const handleMessageDeleted =
|
|
139
|
-
let
|
|
140
|
-
if ($[
|
|
141
|
-
|
|
142
|
-
|
|
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
|
-
$[
|
|
145
|
-
$[
|
|
146
|
-
$[
|
|
147
|
-
$[
|
|
148
|
-
$[24] = t7;
|
|
139
|
+
$[18] = currentPerson.id;
|
|
140
|
+
$[19] = queryClient;
|
|
141
|
+
$[20] = view;
|
|
142
|
+
$[21] = t6;
|
|
149
143
|
} else {
|
|
150
|
-
|
|
144
|
+
t6 = $[21];
|
|
151
145
|
}
|
|
152
|
-
const handleReactionJoltEvent =
|
|
153
|
-
let
|
|
154
|
-
if ($[
|
|
155
|
-
|
|
146
|
+
const handleReactionJoltEvent = t6;
|
|
147
|
+
let t7;
|
|
148
|
+
if ($[22] !== addTypingEvent || $[23] !== removeTypingEventById) {
|
|
149
|
+
t7 = async e_2 => {
|
|
156
150
|
const {
|
|
157
|
-
data:
|
|
151
|
+
data: data_2
|
|
158
152
|
} = e_2.data;
|
|
159
|
-
addTypingEvent(
|
|
160
|
-
setTimeout(() => removeTypingEventById(
|
|
153
|
+
addTypingEvent(data_2);
|
|
154
|
+
setTimeout(() => removeTypingEventById(data_2.id), TYPING_TIMEOUT_INTERVAL);
|
|
161
155
|
};
|
|
162
|
-
$[
|
|
163
|
-
$[
|
|
164
|
-
$[
|
|
156
|
+
$[22] = addTypingEvent;
|
|
157
|
+
$[23] = removeTypingEventById;
|
|
158
|
+
$[24] = t7;
|
|
165
159
|
} else {
|
|
166
|
-
|
|
160
|
+
t7 = $[24];
|
|
167
161
|
}
|
|
168
|
-
const handleTypingEvent =
|
|
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":";AAAA,SAAuBA,cAAc,QAAQ,uBAAuB;AAQpE,SAASC,uBAAuB,QAAQ,UAAU;AAClD,SACEC,sBAAsB,EACtBC,gCAAgC,EAChCC,uBAAuB,EACvBC,qBAAqB,QAChB,+BAA+B;AACtC,SAASC,0CAA0C,QAAQ,gEAAgE;AAC3H,SAASC,+BAA+B,QAAQ,+BAA+B;AAC/E,SAASC,kBAAkB,QAAQ,8BAA8B;AACjE,SAASC,mBAAmB,QAAQ,+BAA+B;AACnE,SAASC,YAAY,QAAQ,kBAAkB;AAC/C,SAASC,gBAAgB,QAAQ,sBAAsB;AACvD,SAASC,cAAc,EAAEC,YAAY,QAAQ,YAAY;AACzD,SAASC,uBAAuB,EAAEC,oBAAoB,QAAQ,2BAA2B;AA0BzF,MAAMC,aAAa,GAAGA,CAACC,WAA0B,EAAEC,IAAsB,KACvED,WAAW,KAAK,IAAI,IAAIC,IAAI,CAACC,aAAa,KAAKF,WAAW,IAAIC,IAAI,CAACE,QAAQ,KAAKH,WAAW;AAE7F,OAAO,MAAMI,iBAAiB,GAAGA,CAC/BC,KAAwB,EACxBC,IAAkB,EAClBL,IAAsB,KACnB;EACH,MAAMM,QAAQ,GAAG,CAACD,IAAI,CAACE,KAAK,CAACC,SAAS,IAAIH,IAAI,CAACE,KAAK,CAACC,SAAS,CAACJ,KAAK,CAAC;EACrE,OAAON,aAAa,CAACO,IAAI,CAACN,WAAW,EAAEC,IAAI,CAAC,IAAIM,QAAQ,GAAG,CAACD,IAAI,CAACE,KAAK,CAACE,QAAQ,CAAC,GAAG,EAAE;AACvF,CAAC;AAED,OAAO,SAAAC,kCAAAC,EAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EAA2C;IAAAC,cAAA;IAAAf,WAAA,EAAAgB,EAAA;IAAAC;EAAA,IAAAL,EAI1C;EAFN,MAAAZ,WAAA,GAAAgB,EAAkB,KAAlBE,SAAkB,GAAlB,IAAkB,GAAlBF,EAAkB;EAGlB,MAAAG,WAAA,GAAoBpC,cAAc,CAAC,CAAC;EACpC,MAAAqC,aAAA,GAAsB1B,gBAAgB,CAAC,CAAC;EACxC,MAAA2B,WAAA,GAAoB1B,cAAc,CAAC,sBAAsBoB,cAAc,EAAE,CAAC;EAAA,IAAAO,EAAA;EAAA,IAAAT,CAAA,QAAAE,cAAA,IAAAF,CAAA,QAAAI,YAAA,IAAAJ,CAAA,QAAAb,WAAA;IAGjEsB,EAAA,GAAAL,YAKN,IALM;MAAAP,QAAA,EACKlB,mBAAmB,CAAC;QAAA+B,eAAA,EACXR,cAAc;QAAAb,aAAA,EAChBF;MACjB,CAAC;IACH,CAAC;IAAAa,CAAA,MAAAE,cAAA;IAAAF,CAAA,MAAAI,YAAA;IAAAJ,CAAA,MAAAb,WAAA;IAAAa,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAA,IAAAW,EAAA;EAAA,IAAAX,CAAA,QAAAb,WAAA,IAAAa,CAAA,QAAAS,EAAA;IAPwBE,EAAA;MAAAxB,WAAA;MAAAQ,KAAA,EAElBc;IAMT,CAAC;IAAAT,CAAA,MAAAb,WAAA;IAAAa,CAAA,MAAAS,EAAA;IAAAT,CAAA,MAAAW,EAAA;EAAA;IAAAA,EAAA,GAAAX,CAAA;EAAA;EARD,MAAAP,IAAA,GAA2BkB,EAQ1B;EACD,MAAAC,SAAA,GAAkBhC,YAAY,CAAC,CAAC;EAEhC;IAAAiC,cAAA;IAAAC,qBAAA;IAAAC;EAAA,IACE9B,oBAAoB,CAACiB,cAAc,CAAC;EAAA,IAAAc,EAAA;EAAA,IAAAhB,CAAA,QAAAY,SAAA,IAAAZ,CAAA,QAAAE,cAAA,IAAAF,CAAA,QAAAO,aAAA,CAAAU,EAAA,IAAAjB,CAAA,SAAAM,WAAA,IAAAN,CAAA,SAAAe,+BAAA,IAAAf,CAAA,SAAAP,IAAA;IAEFuB,EAAA,SAAAE,CAAA;MAClC;QAAA9B;MAAA,IAAiB8B,CAAC,CAAA9B,IAAK;MACvB,MAAA+B,OAAA,GAAgB3C,0CAA0C,CAAC;QAAAY,IAAA;QAAAgC,eAAA,EAExCb,aAAa,CAAAU;MAChC,CAAC,CAAC;MACF,MAAAI,iBAAA,GAA0BH,CAAC,CAAA1B,KAAM,KAAK,iBAAyD,IAApCJ,IAAI,CAAAC,aAAc,KAAKD,IAAI,CAAAE,QAAS;MAE/F,IAAI4B,CAAC,CAAA1B,KAAM,KAAK,iBAAmC,IAAdJ,IAAI,CAAAkC,SAAU;QACjDP,+BAA+B,CAAC3B,IAAI,CAAAkC,SAAU,CAAC;QAC/C,IAAIlC,IAAI,CAAAmC,cAAsD,IAAnCnC,IAAI,CAAAkC,SAAU,KAAKf,aAAa,CAAAU,EAAG;UAC5DxC,+BAA+B,CAAC;YAAAmC,SAAA;YAAAY,aAAA,EAA4BpC,IAAI,CAAAmC;UAAgB,CAAC,CAAC;QAAA;MACnF;MAGH,MAAAE,eAAA,GAAwBlC,iBAAiB,CAAC2B,CAAC,CAAA1B,KAAM,EAAEC,IAAI,EAAEL,IAAI,CAAC;MAC9DqC,eAAe,CAAAC,OAAQ,CAAC7B,QAAA,IACtBzB,sBAAsB,CAACkC,WAAW,EAAET,QAAQ,EAAEsB,OAAO,EAAED,CAAC,CAAA1B,KAAM,CAChE,CAAC;MACD,IAAI6B,iBAAiB;QACnBI,eAAe,CAAAC,OAAQ,CAACC,UAAA,IAAYpD,qBAAqB,CAAC+B,WAAW,EAAET,UAAQ,EAAEsB,OAAO,CAAC,CAAC;MAAA;MAI5F,IAAID,CAAC,CAAA1B,KAAM,KAAK,iBAAiB;QAC/B,MAAAoC,yBAAA,GAAkClD,kBAAkB,CAAC;UAAAgC,eAAA,EAClCR,cAAc;UAAA2B,SAAA,EACpBzC,IAAI,CAAAE;QACjB,CAAC,CAAC;QACFjB,gCAAgC,CAACiC,WAAW,EAAEsB,yBAAyB,EAAET,OAAO,CAAC;MAAA;IAClF,CACF;IAAAnB,CAAA,MAAAY,SAAA;IAAAZ,CAAA,MAAAE,cAAA;IAAAF,CAAA,MAAAO,aAAA,CAAAU,EAAA;IAAAjB,CAAA,OAAAM,WAAA;IAAAN,CAAA,OAAAe,+BAAA;IAAAf,CAAA,OAAAP,IAAA;IAAAO,CAAA,OAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EA/BD,MAAA8B,2BAAA,GAAoCd,EA+BnC;EAAA,IAAAe,EAAA;EAAA,IAAA/B,CAAA,SAAAO,aAAA,CAAAU,EAAA,IAAAjB,CAAA,SAAAM,WAAA,IAAAN,CAAA,SAAAP,IAAA;IAE4BsC,EAAA,SAAAC,GAAA;MAC3B;QAAA5C,IAAA,EAAA6C;MAAA,IAAiBf,GAAC,CAAA9B,IAAK;MACvB,MAAA8C,SAAA,GAAgB1D,0CAA0C,CAAC;QAAAY,IAAA,EACzDA,MAAI;QAAAgC,eAAA,EACab,aAAa,CAAAU;MAChC,CAAC,CAAC;MAEF1B,iBAAiB,CAAC,mBAAmB,EAAEE,IAAI,EAAEL,MAAI,CAAC,CAAAsC,OAAQ,CAACS,UAAA,IACzD7B,WAAW,CAAA8B,YAAa,CAAYvC,UAAQ,EAAEwC,IAAA,IAC5ClE,uBAAuB,CAAC;QAAAiB,IAAA,EAAQiD,IAAI;QAAAC,MAAA,EAAUnB;MAAQ,CAAC,CACzD,CACF,CAAC;IAAA,CACF;IAAAnB,CAAA,OAAAO,aAAA,CAAAU,EAAA;IAAAjB,CAAA,OAAAM,WAAA;IAAAN,CAAA,OAAAP,IAAA;IAAAO,CAAA,OAAA+B,EAAA;EAAA;IAAAA,EAAA,GAAA/B,CAAA;EAAA;EAZD,MAAAuC,oBAAA,GAA6BR,EAY5B;EAAA,IAAAS,EAAA;EAAA,IAAAxC,CAAA,SAAAO,aAAA,CAAAU,EAAA,IAAAjB,CAAA,SAAAM,WAAA,IAAAN,CAAA,SAAAP,IAAA;IAE+B+C,EAAA,SAAAC,GAAA;MAC9B,MAAAC,MAAA,GAAa;QAAApD,QAAA,EACD4B,GAAC,CAAA9B,IAAK,CAAAA,IAAK,CAAAuD,gBAAiB;QAAAtD,aAAA,EACvB6B,GAAC,CAAA9B,IAAK,CAAAA,IAAK,CAAAC;MAC5B,CAAC;MACDE,iBAAiB,CAAC,UAAU,EAAEE,IAAI,EAAEL,MAAI,CAAC,CAAAsC,OAAQ,CAACkB,UAAA,IAChDtE,uBAAuB,CAACgC,WAAW,EAAET,UAAQ,EAAEqB,GAAC,EAAEX,aAAa,CAAAU,EAAG,CACpE,CAAC;IAAA,CACF;IAAAjB,CAAA,OAAAO,aAAA,CAAAU,EAAA;IAAAjB,CAAA,OAAAM,WAAA;IAAAN,CAAA,OAAAP,IAAA;IAAAO,CAAA,OAAAwC,EAAA;EAAA;IAAAA,EAAA,GAAAxC,CAAA;EAAA;EARD,MAAA6C,uBAAA,GAAgCL,EAQ/B;EAAA,IAAAM,EAAA;EAAA,IAAA9C,CAAA,SAAAa,cAAA,IAAAb,CAAA,SAAAc,qBAAA;IAEyBgC,EAAA,SAAAC,GAAA;MACxB;QAAA3D,IAAA,EAAA4D;MAAA,IAAiB9B,GAAC,CAAA9B,IAAK;MACvByB,cAAc,CAACzB,MAAI,CAAC;MACpB6D,UAAU,CAAC,MAAMnC,qBAAqB,CAAC1B,MAAI,CAAA6B,EAAG,CAAC,EAAEjC,uBAAuB,CAAC;IAAA,CAC1E;IAAAgB,CAAA,OAAAa,cAAA;IAAAb,CAAA,OAAAc,qBAAA;IAAAd,CAAA,OAAA8C,EAAA;EAAA;IAAAA,EAAA,GAAA9C,CAAA;EAAA;EAJD,MAAAkD,iBAAA,GAA0BJ,EAIzB;EAED/D,YAAY,CAACyB,WAAW,EAAE,iBAAiB,EAAEsB,2BAA2B,CAAC;EACzE/C,YAAY,CAACyB,WAAW,EAAE,iBAAiB,EAAEsB,2BAA2B,CAAC;EACzE/C,YAAY,CAACyB,WAAW,EAAE,mBAAmB,EAAE+B,oBAAoB,CAAC;EACpExD,YAAY,CAACyB,WAAW,EAAE,YAAY,EAAEqC,uBAAuB,CAAC;EAChE9D,YAAY,CAACyB,WAAW,EAAE,kBAAkB,EAAE0C,iBAAiB,CAAC;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_fetch_newer_messages.d.ts","sourceRoot":"","sources":["../../src/hooks/use_fetch_newer_messages.ts"],"names":[],"mappings":"
|
|
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
|
|
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
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
|
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","
|
|
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 +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;
|
|
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
|
|
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":"
|
|
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"}
|