import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { api } from '../api'; import type { Loan } from '../types'; export const useRates = () => useQuery({ queryKey: ['rates'], queryFn: api.getRates, }); export const useWallets = () => useQuery({ queryKey: ['wallets'], queryFn: api.getWallets, }); export const useTransactions = () => useQuery({ queryKey: ['transactions'], queryFn: api.getTransactions, }); export const useCreateTransaction = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: api.createTransaction, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['transactions'] }); queryClient.invalidateQueries({ queryKey: ['dashboard-analytics'] }); queryClient.invalidateQueries({ queryKey: ['wallets'] }); }, }); }; export const useExchanges = () => useQuery({ queryKey: ['exchanges'], queryFn: api.getExchanges, }); export const useCreateExchange = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: api.createExchange, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['exchanges'] }); queryClient.invalidateQueries({ queryKey: ['transactions'] }); queryClient.invalidateQueries({ queryKey: ['dashboard-analytics'] }); queryClient.invalidateQueries({ queryKey: ['wallets'] }); }, }); }; export const useLoans = () => useQuery({ queryKey: ['loans'], queryFn: api.getLoans, }); export const useCreateLoan = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: api.createLoan, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['loans'] }); queryClient.invalidateQueries({ queryKey: ['transactions'] }); queryClient.invalidateQueries({ queryKey: ['dashboard-analytics'] }); queryClient.invalidateQueries({ queryKey: ['wallets'] }); }, }); }; export const useUpdateLoan = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ id, data }: { id: number, data: Omit }) => api.updateLoan(id, data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['loans'] }); queryClient.invalidateQueries({ queryKey: ['transactions'] }); queryClient.invalidateQueries({ queryKey: ['dashboard-analytics'] }); queryClient.invalidateQueries({ queryKey: ['wallets'] }); }, }); }; export const useDeleteLoan = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: (id: number) => api.deleteLoan(id), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['loans'] }); queryClient.invalidateQueries({ queryKey: ['transactions'] }); queryClient.invalidateQueries({ queryKey: ['dashboard-analytics'] }); queryClient.invalidateQueries({ queryKey: ['wallets'] }); }, }); }; export const usePayLoan = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ id, amount }: { id: number, amount: number }) => api.payLoan(id, amount), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['loans'] }); queryClient.invalidateQueries({ queryKey: ['transactions'] }); queryClient.invalidateQueries({ queryKey: ['dashboard-analytics'] }); queryClient.invalidateQueries({ queryKey: ['wallets'] }); }, }); }; export const useDashboardAnalytics = () => useQuery({ queryKey: ['dashboard-analytics'], queryFn: api.getDashboardAnalytics, });