zapishis-client/apps/web/hooks/api/subscriptions.ts
vchikalkin 30bdc0447f feat(contacts): enhance contact display and improve user experience
- Updated ContactsList to include a description prop in ContactRow for better service representation.
- Renamed header in OrderContacts from "Контакты" to "Участники" for clarity.
- Replaced Avatar components with UserAvatar in various components for consistent user representation.
- Filtered active contacts in MastersGrid and ClientsGrid to improve data handling.
- Adjusted customer query logic to ensure proper handling of telegramId.
2025-09-09 11:23:35 +03:00

150 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 === undefined ? session?.user?.telegramId : variables?.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,
});
};