mars-v2-frontend/hooks/mutations/useBorrowFunds.tsx
Linkie Link c4f8f4eab0
Mp 1757 wallet connect (#66)
* MP-1757: implemented the WalletProvider and connect buttons

* tidy: tidy up the search

* MP-1691: moved modals outside of the DOM

* MP-1691: changed CreditManager into AccountDetails

* fix: fixed the naming

* MP-1691: UX approvements

* MP-1691: global confirm and delete modal added

* fix: merged the credit-account and wallet branch

* MP-1757: added the status store

* fix: updated the store interaction

* MP-1757: major cleanup of stores

* tidy: format
2022-12-08 21:14:38 +01:00

75 lines
1.9 KiB
TypeScript

import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
import { useMemo } from 'react'
import { toast } from 'react-toastify'
import { useAccountDetailsStore, useWalletStore } from 'stores'
import { queryKeys } from 'types/query-keys-factory'
import { hardcodedFee } from 'utils/contants'
const useBorrowFunds = (
amount: number,
denom: string,
withdraw = false,
options: Omit<UseMutationOptions, 'onError'>,
) => {
const creditManagerClient = useWalletStore((s) => s.clients.creditManager)
const selectedAccount = useAccountDetailsStore((s) => s.selectedAccount ?? '')
const address = useWalletStore((s) => s.address)
const queryClient = useQueryClient()
const actions = useMemo(() => {
if (!withdraw) {
return [
{
borrow: {
denom: denom,
amount: String(amount),
},
},
]
}
return [
{
borrow: {
denom: denom,
amount: String(amount),
},
},
{
withdraw: {
denom: denom,
amount: String(amount),
},
},
]
}, [withdraw, denom, amount])
return useMutation(
async () =>
await creditManagerClient?.updateCreditAccount(
{ accountId: selectedAccount, actions },
hardcodedFee,
),
{
onSettled: () => {
queryClient.invalidateQueries(queryKeys.creditAccountsPositions(selectedAccount))
queryClient.invalidateQueries(queryKeys.redbankBalances())
// if withdrawing to wallet, need to explicility invalidate balances queries
if (withdraw) {
queryClient.invalidateQueries(queryKeys.tokenBalance(address ?? '', denom))
queryClient.invalidateQueries(queryKeys.allBalances(address ?? ''))
}
},
onError: (err: Error) => {
toast.error(err.message)
},
...options,
},
)
}
export default useBorrowFunds