Группы: приглашения вместо авто-добавления (согласиться/отказаться)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
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<typeof useQueryClient>) {
|
||||
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),
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user