fix(web): Dismiss button on refine agent ChangeSetBanner now works

The dismiss mutation only invalidated `listAgents` but the hook reads
from `getActiveRefineAgent`, so the banner stayed visible after dismiss.
Added optimistic cache clearing and invalidation for `getActiveRefineAgent`.
This commit is contained in:
Lukas May
2026-02-10 11:03:20 +01:00
parent 57a5843324
commit d18c3c7e44

View File

@@ -170,26 +170,34 @@ export function useRefineAgent(initiativeId: string): UseRefineAgentResult {
onMutate: async ({ id }) => { onMutate: async ({ id }) => {
// Cancel outgoing refetches // Cancel outgoing refetches
await utils.listAgents.cancel(); await utils.listAgents.cancel();
await utils.getActiveRefineAgent.cancel({ initiativeId });
// Snapshot previous value // Snapshot previous values
const previousAgents = utils.listAgents.getData(); const previousAgents = utils.listAgents.getData();
const previousRefineAgent = utils.getActiveRefineAgent.getData({ initiativeId });
// Optimistically remove the agent from the list // Optimistically remove the agent from the list
utils.listAgents.setData(undefined, (old = []) => utils.listAgents.setData(undefined, (old = []) =>
old.filter(a => a.id !== id) old.filter(a => a.id !== id)
); );
// Optimistically clear the active refine agent so the banner disappears immediately
utils.getActiveRefineAgent.setData({ initiativeId }, null);
return { previousAgents }; return { previousAgents, previousRefineAgent };
}, },
onSuccess: () => {}, onSuccess: () => {},
onError: (err, variables, context) => { onError: (err, variables, context) => {
// Revert optimistic update // Revert optimistic updates
if (context?.previousAgents) { if (context?.previousAgents) {
utils.listAgents.setData(undefined, context.previousAgents); utils.listAgents.setData(undefined, context.previousAgents);
} }
if (context?.previousRefineAgent !== undefined) {
utils.getActiveRefineAgent.setData({ initiativeId }, context.previousRefineAgent);
}
}, },
onSettled: () => { onSettled: () => {
void utils.listAgents.invalidate(); void utils.listAgents.invalidate();
void utils.getActiveRefineAgent.invalidate({ initiativeId });
}, },
}); });