import { useMutation, useQueryClient } from '@tanstack/react-query' import { useMemo } from 'react' import { toast } from 'react-toastify' import useCreditManagerStore from 'stores/useCreditManagerStore' import useWalletStore from 'stores/useWalletStore' import { queryKeys } from 'types/query-keys-factory' import { hardcodedFee } from 'utils/contants' const useWithdrawFunds = ( amount: number, borrowAmount: number, denom: string, options?: { onSuccess?: () => void }, ) => { const selectedAccount = useCreditManagerStore((s) => s.selectedAccount ?? '') const address = useWalletStore((s) => s.address) const creditManagerClient = useWalletStore((s) => s.clients.creditManager) const queryClient = useQueryClient() const actions = useMemo(() => { if (borrowAmount > 0) { return [ { borrow: { denom, amount: String(borrowAmount), }, }, { withdraw: { denom, amount: String(amount), }, }, ] } return [ { withdraw: { denom, amount: String(amount), }, }, ] }, [amount, borrowAmount, denom]) const { onSuccess } = { ...options } return useMutation( async () => creditManagerClient?.updateCreditAccount( { accountId: selectedAccount, actions }, hardcodedFee, ), { onSuccess: () => { queryClient.invalidateQueries(queryKeys.creditAccountsPositions(selectedAccount)) queryClient.invalidateQueries(queryKeys.tokenBalance(address, denom)) queryClient.invalidateQueries(queryKeys.allBalances(address)) queryClient.invalidateQueries(queryKeys.redbankBalances()) onSuccess && onSuccess() }, onError: (err: Error) => { toast.error(err.message) }, }, ) } export default useWithdrawFunds