MCPcopy Index your code
hub / github.com/coder/coder / projectEditedConversationIntoCache

Function projectEditedConversationIntoCache

site/src/api/queries/chatMessageEdits.ts:77–115  ·  view source on GitHub ↗
({
	currentData,
	editedMessageId,
	replacementMessage,
	queuedMessages,
}: {
	currentData: InfiniteData<TypesGen.ChatMessagesResponse> | undefined;
	editedMessageId: number;
	replacementMessage?: TypesGen.ChatMessage;
	queuedMessages?: readonly TypesGen.ChatQueuedMessage[];
})

Source from the content-addressed store, hash-verified

75};
76
77export 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
117export const reconcileEditedMessageInCache = ({
118 currentData,

Callers 1

editChatMessageFunction · 0.90

Calls 2

upsertFirstPageMessageFunction · 0.85
filterMethod · 0.80

Tested by

no test coverage detected