import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { subscriptionsApi } from '../api/subscriptionsApi'; import { SubscriptionListParams, Subscription as SubscriptionType } from '../types/api'; import { message } from 'antd'; import { normalizeData } from '../utils/normalize'; export const useSubscriptions = (params: SubscriptionListParams) => { return useQuery({ queryKey: ['subscriptions', params], queryFn: async () => { const res = await subscriptionsApi.getSubscriptions(params); return { data: normalizeData(res.data), total: res.total }; }, }); }; export const useSubscription = (id: string) => { return useQuery({ queryKey: ['subscriptions', id], queryFn: () => subscriptionsApi.getSubscription(id), // сырые данные enabled: !!id, }); }; export const useUpdateSubscription = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ id, data }: { id: string; data: Partial }) => subscriptionsApi.updateSubscription(id, data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['subscriptions'] }); message.success('Подписка обновлена'); }, onError: () => message.error('Ошибка обновления'), }); }; export const useDeleteSubscription = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: (id: string) => subscriptionsApi.deleteSubscription(id), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['subscriptions'] }); message.success('Подписка удалена'); }, onError: () => message.error('Ошибка удаления'), }); }; export const useSubscriptionStats = () => { return useQuery({ queryKey: ['subscription-stats'], queryFn: async () => normalizeData(await subscriptionsApi.getSubscriptionStats()), }); };