Commit 12fdf930 authored by Steven's avatar Steven

fix: invalidate React Query cache after memo reaction changes

parent 9f5a7bb8
import { useQueryClient } from "@tanstack/react-query";
import { uniq } from "lodash-es"; import { uniq } from "lodash-es";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { memoServiceClient, userServiceClient } from "@/connect"; import { memoServiceClient, userServiceClient } from "@/connect";
import useCurrentUser from "@/hooks/useCurrentUser"; import useCurrentUser from "@/hooks/useCurrentUser";
import { memoKeys } from "@/hooks/useMemoQueries";
import type { Memo, Reaction } from "@/types/proto/api/v1/memo_service_pb"; import type { Memo, Reaction } from "@/types/proto/api/v1/memo_service_pb";
import type { User } from "@/types/proto/api/v1/user_service_pb"; import type { User } from "@/types/proto/api/v1/user_service_pb";
...@@ -35,6 +37,7 @@ interface UseReactionActionsOptions { ...@@ -35,6 +37,7 @@ interface UseReactionActionsOptions {
export const useReactionActions = ({ memo, onComplete }: UseReactionActionsOptions) => { export const useReactionActions = ({ memo, onComplete }: UseReactionActionsOptions) => {
const currentUser = useCurrentUser(); const currentUser = useCurrentUser();
const queryClient = useQueryClient();
const hasReacted = (reactionType: string) => { const hasReacted = (reactionType: string) => {
return memo.reactions.some((r) => r.reactionType === reactionType && r.creator === currentUser?.name); return memo.reactions.some((r) => r.reactionType === reactionType && r.creator === currentUser?.name);
...@@ -57,8 +60,10 @@ export const useReactionActions = ({ memo, onComplete }: UseReactionActionsOptio ...@@ -57,8 +60,10 @@ export const useReactionActions = ({ memo, onComplete }: UseReactionActionsOptio
reaction: { contentId: memo.name, reactionType }, reaction: { contentId: memo.name, reactionType },
}); });
} }
// Refetch the memo to get updated reactions // Refetch the memo to get updated reactions and invalidate cache
await memoServiceClient.getMemo({ name: memo.name }); const updatedMemo = await memoServiceClient.getMemo({ name: memo.name });
queryClient.setQueryData(memoKeys.detail(memo.name), updatedMemo);
queryClient.invalidateQueries({ queryKey: memoKeys.lists() });
} catch { } catch {
// skip error // skip error
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment