mars-v2-frontend/src/hooks/queries/useCreditAccounts.tsx
Linkie Link b5c097d661
Upgrade next (#100)
* upgrade to next 13

* WIP: adjust to app dir

* add docker + wallet connector

* fix: update the wallet connect component

* tidy: format

* wip: make the wallet balance fetcher work

* fix balance retrieval

* MP-2258: added estimateFee hook (#94)

* Mp 2259 queries to api (#96)

* update next config for build errors

* Convert queries to API + remove config

* tidy: save some bytes by adding constants/env.ts

* tidy: added URL_ prefix to REST, RPC and GQL

---------

Co-authored-by: Linkie Link <linkielink.dev@gmail.com>

* MP-2261: created useBroadcast hook for transactions (#95)

* tidy: remove unneeded wallet images

* Mp 2264 convert store (#97)

* Merge stores into 1

* refactor codebase to use new store

* fiex build and rename whitelisted to marketassets

* tidy: import refactor

* updated account navigation basics

* feat: added loading component and fixed the disconnect button

* fix: format

* update new routing system

* update config and dependencies

* feat: create and delete credit account are restored

* tidy: format

* fix: fixed the deployment

* update route structure (#98)

* fix: creditAccountDeposit works again

* fix: bugfixes

* add apis, remove allowedCoins, get basic borrow tables (#99)

Co-authored-by: bwvdhelm <34470358+bobthebuidlr@users.noreply.github.com>

---------

Co-authored-by: bwvdhelm <34470358+bobthebuidlr@users.noreply.github.com>
2023-02-24 09:47:27 +01:00

54 lines
1.3 KiB
TypeScript

'use client'
import { useQuery } from '@tanstack/react-query'
import { useMemo } from 'react'
import { ADDRESS_ACCOUNT_NFT } from 'constants/env'
import useStore from 'store'
import { queryKeys } from 'types/query-keys-factory'
type Result = {
tokens: string[]
}
export const useCreditAccounts = () => {
const address = useStore((s) => s.address)
const client = useStore((s) => s.signingClient)
const selectedAccount = useStore((s) => s.selectedAccount)
const accountNftAddress = ADDRESS_ACCOUNT_NFT
const setSelectedAccount = (account: string) => {
useStore.setState({ selectedAccount: account })
}
const queryMsg = useMemo(() => {
return {
tokens: {
owner: address,
},
}
}, [address])
const result = useQuery<Result>(
queryKeys.creditAccounts(address ?? ''),
async () => client?.queryContractSmart(accountNftAddress || '', queryMsg),
{
staleTime: Infinity,
enabled: !!address && !!client,
onSuccess: (data) => {
if (!data.tokens.includes(selectedAccount || '') && data.tokens.length > 0) {
setSelectedAccount(data.tokens[0])
}
},
},
)
return {
...result,
data: useMemo(() => {
if (!address) return []
return result?.data && result.data.tokens
}, [address, result?.data]),
}
}