fix: proper cancellation handling

This commit is contained in:
2026-01-28 21:13:15 +00:00
parent 65964d64f6
commit d4cc50f289
12 changed files with 359 additions and 20 deletions

View File

@@ -1,10 +1,11 @@
import type {
CancelSubscriptionResponse,
CreateCheckoutSessionRequest,
CreateCheckoutSessionResponse,
CreatePortalSessionResponse,
GetSubscriptionResponse,
} from "@sprint/shared";
import { useMutation, useQuery } from "@tanstack/react-query";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { queryKeys } from "@/lib/query/keys";
import { apiClient } from "@/lib/server";
@@ -42,3 +43,20 @@ export function useCreatePortalSession() {
},
});
}
export function useCancelSubscription() {
const queryClient = useQueryClient();
return useMutation<CancelSubscriptionResponse, Error>({
mutationKey: ["subscription", "cancel"],
mutationFn: async () => {
const { data, error } = await apiClient.subscriptionCancel({ body: {} });
if (error) throw new Error(error);
if (!data) throw new Error("failed to cancel subscription");
return data as CancelSubscriptionResponse;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: queryKeys.subscription.current() });
},
});
}