UNPKG

@suiware/kit

Version:

Opinionated React components and hooks for building Sui dApps.

1 lines 4.42 kB
{"version":3,"sources":["../src/helpers/formatAmount.ts","../src/hooks/useBalance.tsx"],"names":[],"mappings":";;;;;AAQO,IAAM,YAAA,GAAe,CAAC,MAAA,KAAiD;AAC5E,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,EAAA,GAAK,IAAI,SAAA,CAAU,MAAA,CAAO,UAAU,CAAA;AACxC,EAAA,EAAA,GAAK,EAAA,CAAG,UAAU,EAAE,CAAA;AAEpB,EAAA,OAAO,GAAG,aAAA,CAAc,CAAA,EAAG,UAAU,UAAU,CAAA,CAAE,SAAS,CAAC,CAAA;AAC7D,CAAA;;;ACbA,IAAM,wBAAA,GAA2B,GAAA;AAsDjC,IAAM,aAAa,CAAC;AAAA,EAClB,WAAA;AAAA,EACA;AACF,CAAA,GAAuB,EAAC,KAA2B;AACjD,EAAA,MAAM,iBAAiB,iBAAA,EAAkB;AACzC,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAM,GAAI,kBAAkB,YAAA,EAAc;AAAA,IAC/D,OAAO,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,CAAgB;AAAA,GACxB,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAA,IAAe,IAAA,IAAQ,WAAA,KAAgB,KAAA,EAAO;AAChD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,WAAA;AAAA,MACf,MAAM;AACJ,QAAA,IAAI,cAAA,IAAkB,IAAA,IAAQ,CAAC,WAAA,EAAa;AAC1C,UAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,UAAA;AAAA,QACF;AAEA,QAAA,OAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,WAAA,IAAe,mBAAA,IAAuB,IAAA,GAClC,mBAAA,GACA;AAAA,KACN;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,IACvB,CAAA;AAAA,EACF,GAAG,CAAC,OAAA,EAAS,WAAA,EAAa,mBAAA,EAAqB,cAAc,CAAC,CAAA;AAE9D,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAA,GAAO,YAAA,CAAa,IAAA,CAAK,YAAY,CAAA,GAAI,MAAA;AAAA,IAClD,KAAA;AAAA,IACA,SAAS,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACnB,MAAA,OAAA,EAAQ;AAAA,IACV,CAAA;AAAA,GACF;AACF,CAAA;AAEA,IAAO,kBAAA,GAAQ","file":"chunk-S6QX3QFH.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"]}