@suiware/kit
Version:
Opinionated React components and hooks for building Sui dApps.
1 lines • 4.39 kB
Source Map (JSON)
{"version":3,"sources":["../src/helpers/formatAmount.ts","../src/hooks/useBalance.tsx"],"names":[],"mappings":";;;;;AAQO,IAAM,YAAA,GAAe,CAAC,MAAiD,KAAA;AAC5E,EAAA,IAAI,UAAU,IAAM,EAAA;AAClB,IAAO,OAAA,MAAA;AAAA;AAGT,EAAA,IAAI,EAAK,GAAA,IAAI,SAAU,CAAA,MAAA,CAAO,UAAU,CAAA;AACxC,EAAK,EAAA,GAAA,EAAA,CAAG,UAAU,EAAE,CAAA;AAEpB,EAAA,OAAO,GAAG,aAAc,CAAA,CAAA,EAAG,UAAU,UAAU,CAAA,CAAE,SAAS,CAAC,CAAA;AAC7D,CAAA;;;ACbA,IAAM,wBAA2B,GAAA,GAAA;AAsDjC,IAAM,aAAa,CAAC;AAAA,EAClB,WAAA;AAAA,EACA;AACF,CAAA,GAAuB,EAA4B,KAAA;AACjD,EAAA,MAAM,iBAAiB,iBAAkB,EAAA;AACzC,EAAA,MAAM,EAAE,IAAM,EAAA,OAAA,EAAS,KAAM,EAAA,GAAI,kBAAkB,YAAc,EAAA;AAAA,IAC/D,OAAO,cAAgB,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,CAAA;AAAA,GACxB,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,WAAA,IAAe,IAAQ,IAAA,WAAA,KAAgB,KAAO,EAAA;AAChD,MAAA;AAAA;AAGF,IAAA,MAAM,QAAW,GAAA,WAAA;AAAA,MACf,MAAM;AACJ,QAAI,IAAA,cAAA,IAAkB,IAAQ,IAAA,CAAC,WAAa,EAAA;AAC1C,UAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,UAAA;AAAA;AAGF,QAAQ,OAAA,EAAA;AAAA,OACV;AAAA,MACA,WAAA,IAAe,mBAAuB,IAAA,IAAA,GAClC,mBACA,GAAA;AAAA,KACN;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,KACvB;AAAA,KACC,CAAC,OAAA,EAAS,WAAa,EAAA,mBAAA,EAAqB,cAAc,CAAC,CAAA;AAE9D,EAAO,OAAA;AAAA,IACL,OAAS,EAAA,IAAA,GAAO,YAAa,CAAA,IAAA,CAAK,YAAY,CAAI,GAAA,MAAA;AAAA,IAClD,KAAA;AAAA,IACA,SAAS,MAAY,OAAA,CAAA,MAAA,EAAA,IAAA,EAAA,aAAA;AACnB,MAAQ,OAAA,EAAA;AAAA,KACV;AAAA,GACF;AACF,CAAA;AAEA,IAAO,kBAAQ,GAAA","file":"chunk-VHHQEKW7.mjs","sourcesContent":["import BigNumber from 'bignumber.js'\n\n/**\n * Format SUI amount to a human readable format.\n *\n * @param amount\n * @returns\n */\nexport const formatAmount = (amount: string | number | bigint | undefined) => {\n if (amount == null) {\n return undefined\n }\n\n let bn = new BigNumber(amount.toString())\n bn = bn.shiftedBy(-9)\n\n return bn.decimalPlaces(2, BigNumber.ROUND_DOWN).toFormat(2)\n}\n","import { useCurrentAccount, useSuiClientQuery } from '@mysten/dapp-kit'\nimport { useEffect } from 'react'\nimport { formatAmount } from '~~/helpers/formatAmount'\n\nconst DEFAULT_REFETCH_INTERVAL = 3000\n\nexport interface IUseBalanceParams {\n /**\n * (Optional) The flag determines whether the balance needs to be refreshed regularly or just once.\n */\n autoRefetch?: boolean\n /**\n * (Optional) Auto refetch interval in milliseconds.\n */\n autoRefetchInterval?: number\n}\nexport interface IUseBalanceResponse {\n /**\n * Decimally formatted SUI balance.\n */\n balance: string | undefined\n error: Error | null\n /**\n * Refetch the balance.\n */\n refetch: () => void\n}\n\n/**\n * The `useBalance()` hook lets you request SUI balance for current user address on the currently active network.\n *\n * It's possible to request the balance once or on a regular basis.\n *\n * Usage:\n * - One-time request\n * ```ts\n * const { balance } = useBalance({\n * autoRefetch: false\n * })\n * ```\n * - On demand\n * ```ts\n * const { balance, error, refetch } = useBalance()\n * refetch()\n * ```\n * - Regular update\n * ```ts\n * const { balance } = useBalance({\n * autoRefetch: true,\n * autoRefetchInterval: 3000\n * })\n * ```\n *\n * Where `autoRefetchInterval` is in milliseconds. Default value is 3000 milliseconds (3 seconds).\n *\n * @param {IUseBalanceParams} params The parameter object.\n * @returns {IUseBalanceResponse} An object with the balance, error and refetch function.\n */\nconst useBalance = ({\n autoRefetch,\n autoRefetchInterval,\n}: IUseBalanceParams = {}): IUseBalanceResponse => {\n const currentAccount = useCurrentAccount()\n const { data, refetch, error } = useSuiClientQuery('getBalance', {\n owner: currentAccount?.address as string,\n })\n\n useEffect(() => {\n if (autoRefetch == null || autoRefetch === false) {\n return\n }\n\n const interval = setInterval(\n () => {\n if (currentAccount == null || !autoRefetch) {\n clearInterval(interval)\n return\n }\n\n refetch()\n },\n autoRefetch && autoRefetchInterval != null\n ? autoRefetchInterval\n : DEFAULT_REFETCH_INTERVAL\n )\n\n return () => {\n clearTimeout(interval)\n }\n }, [refetch, autoRefetch, autoRefetchInterval, currentAccount])\n\n return {\n balance: data ? formatAmount(data.totalBalance) : undefined,\n error,\n refetch: async () => {\n refetch()\n },\n }\n}\n\nexport default useBalance\n"]}