Skip to content

Commit d78bb12

Browse files
fix sse frontend issue (#84)
1 parent 020f456 commit d78bb12

2 files changed

Lines changed: 27 additions & 9 deletions

File tree

frontend/src/hooks/useOpenCode.ts

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -279,8 +279,12 @@ export const useSendPrompt = (opcodeUrl: string | null | undefined, directory?:
279279
contentParts,
280280
optimisticUserID,
281281
);
282+
283+
const messagesQueryKey = ["opencode", "messages", opcodeUrl, sessionID, directory];
284+
await queryClient.cancelQueries({ queryKey: messagesQueryKey });
285+
282286
queryClient.setQueryData<MessageListResponse>(
283-
["opencode", "messages", opcodeUrl, sessionID, directory],
287+
messagesQueryKey,
284288
(old) => [...(old || []), userMessage],
285289
);
286290

@@ -348,7 +352,10 @@ export const useSendPrompt = (opcodeUrl: string | null | undefined, directory?:
348352

349353
queryClient.setQueryData<MessageListResponse>(
350354
["opencode", "messages", opcodeUrl, sessionID, directory],
351-
(old) => old?.filter((msg) => msg.info.id !== optimisticUserID) || [],
355+
(old) => {
356+
if (!old) return old;
357+
return old.filter((msg) => msg.info.id !== optimisticUserID);
358+
},
352359
);
353360

354361
queryClient.invalidateQueries({
@@ -511,8 +518,12 @@ export const useSendShell = (opcodeUrl: string | null | undefined, directory?: s
511518
[{ type: "text" as const, content: command }],
512519
optimisticUserID,
513520
);
521+
522+
const messagesQueryKey = ["opencode", "messages", opcodeUrl, sessionID, directory];
523+
await queryClient.cancelQueries({ queryKey: messagesQueryKey });
524+
514525
queryClient.setQueryData<MessageListResponse>(
515-
["opencode", "messages", opcodeUrl, sessionID, directory],
526+
messagesQueryKey,
516527
(old) => [...(old || []), userMessage],
517528
);
518529

@@ -528,7 +539,10 @@ export const useSendShell = (opcodeUrl: string | null | undefined, directory?: s
528539
setSessionStatus(sessionID, { type: "idle" });
529540
queryClient.setQueryData<MessageListResponse>(
530541
["opencode", "messages", opcodeUrl, sessionID, directory],
531-
(old) => old?.filter((msg) => !msg.info.id.startsWith("optimistic_")),
542+
(old) => {
543+
if (!old) return old;
544+
return old.filter((msg) => !msg.info.id.startsWith("optimistic_"));
545+
},
532546
);
533547
},
534548
onSuccess: (data, variables) => {
@@ -537,7 +551,10 @@ export const useSendShell = (opcodeUrl: string | null | undefined, directory?: s
537551

538552
queryClient.setQueryData<MessageListResponse>(
539553
["opencode", "messages", opcodeUrl, sessionID, directory],
540-
(old) => old?.filter((msg) => msg.info.id !== optimisticUserID) || [],
554+
(old) => {
555+
if (!old) return old;
556+
return old.filter((msg) => msg.info.id !== optimisticUserID);
557+
},
541558
);
542559

543560
queryClient.invalidateQueries({

frontend/src/hooks/useSSE.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,10 @@ export const useSSE = (opcodeUrl: string | null | undefined, directory?: string,
126126
setSessionStatus(sessionID, isComplete ? { type: 'idle' } : { type: 'busy' })
127127
}
128128

129-
const currentData = queryClient.getQueryData<MessageListResponse>(['opencode', 'messages', opcodeUrl, sessionID, directory])
129+
const messagesQueryKey = ['opencode', 'messages', opcodeUrl, sessionID, directory]
130+
const currentData = queryClient.getQueryData<MessageListResponse>(messagesQueryKey)
130131
if (!currentData) {
131-
queryClient.setQueryData(['opencode', 'messages', opcodeUrl, sessionID, directory], [{ info, parts: [] }])
132+
queryClient.invalidateQueries({ queryKey: messagesQueryKey })
132133
return
133134
}
134135

@@ -138,7 +139,7 @@ export const useSSE = (opcodeUrl: string | null | undefined, directory?: string,
138139
const filteredData = info.role === 'user'
139140
? currentData.filter(msg => !msg.info.id.startsWith('optimistic_'))
140141
: currentData
141-
queryClient.setQueryData(['opencode', 'messages', opcodeUrl, sessionID, directory], [...filteredData, { info, parts: [] }])
142+
queryClient.setQueryData(messagesQueryKey, [...filteredData, { info, parts: [] }])
142143
return
143144
}
144145

@@ -150,7 +151,7 @@ export const useSSE = (opcodeUrl: string | null | undefined, directory?: string,
150151
}
151152
})
152153

153-
queryClient.setQueryData(['opencode', 'messages', opcodeUrl, sessionID, directory], updated)
154+
queryClient.setQueryData(messagesQueryKey, updated)
154155
break
155156
}
156157

0 commit comments

Comments
 (0)