import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { api, unwrap } from "../api/client"; import { qk } from "../api/queryKeys"; export function useMyInvitations() { return useQuery({ queryKey: qk.invitations, queryFn: async () => unwrap(await api.GET("/api/invitations")), }); } // Принятие/отклонение меняет приглашения, состав групп и активную группу. function invalidateAll(qc: ReturnType) { qc.invalidateQueries({ queryKey: qk.invitations }); qc.invalidateQueries({ queryKey: qk.me }); qc.invalidateQueries({ queryKey: qk.groups }); qc.invalidateQueries({ queryKey: qk.home }); } export function useAcceptInvitation() { const qc = useQueryClient(); return useMutation({ mutationFn: async (invitationId: number) => unwrap( await api.POST("/api/invitations/{invitation_id}/accept", { params: { path: { invitation_id: invitationId } }, }), ), onSuccess: () => invalidateAll(qc), }); } export function useDeclineInvitation() { const qc = useQueryClient(); return useMutation({ mutationFn: async (invitationId: number) => unwrap( await api.POST("/api/invitations/{invitation_id}/decline", { params: { path: { invitation_id: invitationId } }, }), ), onSuccess: () => invalidateAll(qc), }); }