- Implemented `createTrialSubscription` action in the API for initiating trial subscriptions. - Enhanced the Pro page to include a `TryFreeButton` for users to activate their trial. - Updated GraphQL operations and types to support trial subscription features. - Improved subscription messaging and user experience across relevant components.
149 lines
3.7 KiB
TypeScript
149 lines
3.7 KiB
TypeScript
/* eslint-disable sonarjs/no-identical-functions */
|
|
'use client';
|
|
|
|
import {
|
|
createSubscription,
|
|
createSubscriptionHistory,
|
|
createTrialSubscription,
|
|
getSubscription,
|
|
getSubscriptionHistory,
|
|
getSubscriptionPrices,
|
|
getSubscriptionSettings,
|
|
updateSubscription,
|
|
updateSubscriptionHistory,
|
|
} from '@/actions/api/subscriptions';
|
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
import { useSession } from 'next-auth/react';
|
|
|
|
export const useSubscriptionQuery = (variables?: Parameters<typeof getSubscription>[0]) => {
|
|
const { data: session } = useSession();
|
|
const telegramId = variables?.telegramId || session?.user?.telegramId;
|
|
|
|
return useQuery({
|
|
enabled: Boolean(telegramId),
|
|
queryFn: () => getSubscription({ telegramId }),
|
|
queryKey: ['subscription', telegramId],
|
|
});
|
|
};
|
|
|
|
export const useSubscriptionSettingQuery = () => {
|
|
return useQuery({
|
|
queryFn: getSubscriptionSettings,
|
|
queryKey: ['subscriptionSetting'],
|
|
});
|
|
};
|
|
|
|
export const useSubscriptionPricesQuery = (
|
|
variables?: Parameters<typeof getSubscriptionPrices>[0],
|
|
) => {
|
|
return useQuery({
|
|
queryFn: () => getSubscriptionPrices(variables),
|
|
queryKey: ['subscriptionPrices', variables],
|
|
});
|
|
};
|
|
|
|
export const useSubscriptionHistoryQuery = (
|
|
variables: Parameters<typeof getSubscriptionHistory>[0],
|
|
) => {
|
|
return useQuery({
|
|
enabled: Boolean(variables.subscriptionId),
|
|
queryFn: () => getSubscriptionHistory(variables),
|
|
queryKey: ['subscriptionHistory', variables.subscriptionId],
|
|
});
|
|
};
|
|
|
|
export const useSubscriptionMutation = () => {
|
|
const { data: session } = useSession();
|
|
const telegramId = session?.user?.telegramId;
|
|
const queryClient = useQueryClient();
|
|
|
|
const handleOnSuccess = () => {
|
|
if (!telegramId) return;
|
|
|
|
queryClient.invalidateQueries({
|
|
queryKey: ['subscription', telegramId],
|
|
});
|
|
};
|
|
|
|
return useMutation({
|
|
mutationFn: updateSubscription,
|
|
onSuccess: handleOnSuccess,
|
|
});
|
|
};
|
|
|
|
export const useSubscriptionCreate = () => {
|
|
const { data: session } = useSession();
|
|
const telegramId = session?.user?.telegramId;
|
|
const queryClient = useQueryClient();
|
|
|
|
const handleOnSuccess = () => {
|
|
if (!telegramId) return;
|
|
|
|
queryClient.refetchQueries({
|
|
queryKey: ['subscription', telegramId],
|
|
});
|
|
};
|
|
|
|
return useMutation({
|
|
mutationFn: createSubscription,
|
|
onSuccess: handleOnSuccess,
|
|
});
|
|
};
|
|
|
|
export const useSubscriptionHistoryMutation = () => {
|
|
const { data: session } = useSession();
|
|
const telegramId = session?.user?.telegramId;
|
|
const queryClient = useQueryClient();
|
|
|
|
const handleOnSuccess = () => {
|
|
if (!telegramId) return;
|
|
|
|
queryClient.invalidateQueries({
|
|
queryKey: ['subscription', telegramId],
|
|
});
|
|
};
|
|
|
|
return useMutation({
|
|
mutationFn: updateSubscriptionHistory,
|
|
onSuccess: handleOnSuccess,
|
|
});
|
|
};
|
|
|
|
export const useSubscriptionHistoryCreate = () => {
|
|
const { data: session } = useSession();
|
|
const telegramId = session?.user?.telegramId;
|
|
const queryClient = useQueryClient();
|
|
|
|
const handleOnSuccess = () => {
|
|
if (!telegramId) return;
|
|
|
|
queryClient.refetchQueries({
|
|
queryKey: ['subscription', telegramId],
|
|
});
|
|
};
|
|
|
|
return useMutation({
|
|
mutationFn: createSubscriptionHistory,
|
|
onSuccess: handleOnSuccess,
|
|
});
|
|
};
|
|
|
|
export const useCreateTrialSubscriptionMutation = () => {
|
|
const { data: session } = useSession();
|
|
const telegramId = session?.user?.telegramId;
|
|
const queryClient = useQueryClient();
|
|
|
|
const handleOnSuccess = () => {
|
|
if (!telegramId) return;
|
|
|
|
queryClient.invalidateQueries({
|
|
queryKey: ['subscription', telegramId],
|
|
});
|
|
};
|
|
|
|
return useMutation({
|
|
mutationFn: createTrialSubscription,
|
|
onSuccess: handleOnSuccess,
|
|
});
|
|
};
|