( queryClient: QueryClient, chat: TypesGen.Chat, )
| 113 | * runs independently on each page. |
| 114 | */ |
| 115 | export const prependToInfiniteChatsCache = ( |
| 116 | queryClient: QueryClient, |
| 117 | chat: TypesGen.Chat, |
| 118 | ) => { |
| 119 | queryClient.setQueriesData<InfiniteChatsCacheData>( |
| 120 | { queryKey: chatsKey, predicate: isChatListQuery }, |
| 121 | (prev) => { |
| 122 | if (!prev?.pages) return prev; |
| 123 | // Check across ALL pages to avoid duplicates. |
| 124 | const exists = prev.pages.some((page) => |
| 125 | page.some((c) => c.id === chat.id), |
| 126 | ); |
| 127 | if (exists) return prev; |
| 128 | // Only prepend to the first page. |
| 129 | const nextPages = prev.pages.map((page, i) => |
| 130 | i === 0 ? [chat, ...page] : page, |
| 131 | ); |
| 132 | return { ...prev, pages: nextPages }; |
| 133 | }, |
| 134 | ); |
| 135 | }; |
| 136 | |
| 137 | /** |
| 138 | * Reads the flat list of chats from the first matching infinite query |
no outgoing calls
no test coverage detected