mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-23 17:33:51 +02:00
Fix conference room crash from query key collision with IssueDetail
ConferenceRoom used useQuery on the same queryKeys.issues.comments() key that IssueDetail uses with useInfiniteQuery. When LiveUpdatesProvider wrote InfiniteData to that shared key, ConferenceRoom received an object instead of an array, crashing on spread. Added a dedicated queryKeys.conferenceRoom.comments() key so the two caches are isolated. Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
1 parent
756c2392dd
commit
571eae04b4
3 files changed
+7
-5
No files matched your search
@@ -686,6 +686,7 @@ function invalidateActivityQueries(
|
||||
queryClient.invalidateQueries({ queryKey: queryKeys.issues.activity(ref), ...invalidationOptions });
|
||||
if (action === "issue.comment_added") {
|
||||
queryClient.invalidateQueries({ queryKey: queryKeys.issues.comments(ref), ...invalidationOptions });
|
||||
queryClient.invalidateQueries({ queryKey: queryKeys.conferenceRoom.comments(ref), ...invalidationOptions });
|
||||
}
|
||||
if (action?.startsWith("issue.thread_interaction_")) {
|
||||
queryClient.invalidateQueries({ queryKey: queryKeys.issues.interactions(ref), ...invalidationOptions });
|
||||
|
||||
@@ -67,6 +67,7 @@ export const queryKeys = {
|
||||
target: (companyId: string) => ["conference-room", companyId, "target"] as const,
|
||||
chats: (companyId: string, targetAgentId?: string | null) =>
|
||||
["conference-room", companyId, "chats", targetAgentId ?? "__default__"] as const,
|
||||
comments: (issueRef: string) => ["conference-room", "comments", issueRef] as const,
|
||||
},
|
||||
routines: {
|
||||
list: (companyId: string) => ["routines", companyId] as const,
|
||||
|
||||
@@ -128,7 +128,7 @@ export function ConferenceRoom() {
|
||||
const issueQueryRef = chatRef && chatRef !== "new" && !isHistoryRoute ? chatRef : (issueId ?? "conference-room-new");
|
||||
|
||||
const { data: comments = [] } = useQuery({
|
||||
queryKey: issueId ? queryKeys.issues.comments(issueQueryRef) : ["issues", "comments", "conference-room-new"],
|
||||
queryKey: issueId ? queryKeys.conferenceRoom.comments(issueQueryRef) : ["conference-room", "comments", "new"],
|
||||
queryFn: () => issuesApi.listComments(issueId!, { order: "asc", limit: 200 }),
|
||||
enabled: !!issueId,
|
||||
});
|
||||
@@ -182,7 +182,7 @@ export function ConferenceRoom() {
|
||||
const refs = new Set([nextIssueId, nextIdentifier, chatRef, issueId].filter(Boolean) as string[]);
|
||||
for (const ref of refs) {
|
||||
queryClient.invalidateQueries({ queryKey: queryKeys.issues.detail(ref) });
|
||||
queryClient.invalidateQueries({ queryKey: queryKeys.issues.comments(ref) });
|
||||
queryClient.invalidateQueries({ queryKey: queryKeys.conferenceRoom.comments(ref) });
|
||||
queryClient.invalidateQueries({ queryKey: queryKeys.issues.runs(ref) });
|
||||
queryClient.invalidateQueries({ queryKey: queryKeys.issues.liveRuns(ref) });
|
||||
queryClient.invalidateQueries({ queryKey: queryKeys.issues.activeRun(ref) });
|
||||
@@ -201,9 +201,9 @@ export function ConferenceRoom() {
|
||||
queryClient.setQueryData(queryKeys.issues.detail(nextIssue.identifier), nextIssue);
|
||||
}
|
||||
if (comment) {
|
||||
queryClient.setQueryData(queryKeys.issues.comments(nextIssue.id), [comment]);
|
||||
queryClient.setQueryData(queryKeys.conferenceRoom.comments(nextIssue.id), [comment]);
|
||||
if (nextIssue.identifier) {
|
||||
queryClient.setQueryData(queryKeys.issues.comments(nextIssue.identifier), [comment]);
|
||||
queryClient.setQueryData(queryKeys.conferenceRoom.comments(nextIssue.identifier), [comment]);
|
||||
}
|
||||
}
|
||||
invalidateConferenceRoom(nextIssue.id, nextIssue.identifier);
|
||||
@@ -240,7 +240,7 @@ export function ConferenceRoom() {
|
||||
if (context?.optimisticId) {
|
||||
setOptimisticComments((current) => current.filter((entry) => entry.clientId !== context.optimisticId));
|
||||
}
|
||||
queryClient.setQueryData<IssueComment[]>(queryKeys.issues.comments(issueQueryRef), (current) => {
|
||||
queryClient.setQueryData<IssueComment[]>(queryKeys.conferenceRoom.comments(issueQueryRef), (current) => {
|
||||
const existing = current ?? [];
|
||||
if (existing.some((entry) => entry.id === comment.id)) return existing;
|
||||
return [...existing, comment].sort(
|
||||
|
||||
Reference in new issue
Block a user