feat(mobile): MIKRO POLISH-3 optimistisk favoritmarkering med rollback

This commit is contained in:
Sven (AAMOS AI)
2026-08-17 21:38:48 +07:00
parent 653f94de86
commit 6fe1955c9f
+4 -4
View File
@@ -88,14 +88,14 @@ export default function RecipeScreen() {
api(`/v1/recipes/${id}/favorite`, { method: isFavorite ? "DELETE" : "POST" }), api(`/v1/recipes/${id}/favorite`, { method: isFavorite ? "DELETE" : "POST" }),
onMutate: async (isFavorite: boolean) => { onMutate: async (isFavorite: boolean) => {
await queryClient.cancelQueries({ queryKey: ["recipe", id] }); await queryClient.cancelQueries({ queryKey: ["recipe", id] });
const previous = queryClient.getQueryData<RecipeDetail>(["recipe", id]); const prev = queryClient.getQueryData<RecipeDetail>(["recipe", id]);
queryClient.setQueryData<RecipeDetail>(["recipe", id], (old) => queryClient.setQueryData<RecipeDetail>(["recipe", id], (old) =>
old ? { ...old, isFavorite: !isFavorite } : old, old ? { ...old, isFavorite: !isFavorite } : old,
); );
return { previous }; return { prev };
}, },
onError: (err, _isFavorite, context) => { onError: (err, _vars, ctx) => {
if (context?.previous) queryClient.setQueryData(["recipe", id], context.previous); if (ctx?.prev) queryClient.setQueryData(["recipe", id], ctx.prev);
Alert.alert(t("common.oops"), err instanceof Error ? err.message : t("common.error")); Alert.alert(t("common.oops"), err instanceof Error ? err.message : t("common.error"));
}, },
onSettled: () => void queryClient.invalidateQueries({ queryKey: ["recipe", id] }), onSettled: () => void queryClient.invalidateQueries({ queryKey: ["recipe", id] }),