({
currentData,
editedMessageId,
replacementMessage,
queuedMessages,
}: {
currentData: InfiniteData<TypesGen.ChatMessagesResponse> | undefined;
editedMessageId: number;
replacementMessage?: TypesGen.ChatMessage;
queuedMessages?: readonly TypesGen.ChatQueuedMessage[];
})
| 75 | }; |
| 76 | |
| 77 | export const projectEditedConversationIntoCache = ({ |
| 78 | currentData, |
| 79 | editedMessageId, |
| 80 | replacementMessage, |
| 81 | queuedMessages, |
| 82 | }: { |
| 83 | currentData: InfiniteData<TypesGen.ChatMessagesResponse> | undefined; |
| 84 | editedMessageId: number; |
| 85 | replacementMessage?: TypesGen.ChatMessage; |
| 86 | queuedMessages?: readonly TypesGen.ChatQueuedMessage[]; |
| 87 | }): InfiniteData<TypesGen.ChatMessagesResponse> | undefined => { |
| 88 | if (!currentData?.pages?.length) { |
| 89 | return currentData; |
| 90 | } |
| 91 | |
| 92 | const truncatedPages = currentData.pages.map((page, pageIndex) => { |
| 93 | const truncatedMessages = page.messages.filter( |
| 94 | (message) => message.id < editedMessageId, |
| 95 | ); |
| 96 | const nextPage = { |
| 97 | ...page, |
| 98 | ...(pageIndex === 0 && queuedMessages !== undefined |
| 99 | ? { queued_messages: queuedMessages } |
| 100 | : {}), |
| 101 | }; |
| 102 | if (pageIndex !== 0 || !replacementMessage) { |
| 103 | return { ...nextPage, messages: truncatedMessages }; |
| 104 | } |
| 105 | return { |
| 106 | ...nextPage, |
| 107 | messages: upsertFirstPageMessage(truncatedMessages, replacementMessage), |
| 108 | }; |
| 109 | }); |
| 110 | |
| 111 | return { |
| 112 | ...currentData, |
| 113 | pages: truncatedPages, |
| 114 | }; |
| 115 | }; |
| 116 | |
| 117 | export const reconcileEditedMessageInCache = ({ |
| 118 | currentData, |
no test coverage detected