{"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"]}