@xyo-network/react-chain-provider 1.5.8 → 1.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,76 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
- // src/hooks/useCurrentBlock.ts
4
+ // src/hooks/useAddressBalance.ts
5
5
  import { usePromise } from "@xylabs/react-promise";
6
+ import { isUndefined, isUndefinedOrNull } from "@xylabs/typeof";
7
+ import { ShiftedBigInt } from "@xyo-network/chain-wrappers";
8
+ import { useMemo, useState } from "react";
9
+ var useAddressBalance = /* @__PURE__ */ __name((address, viewer, networkId, refresh) => {
10
+ const [balancesResult, setBalancesResult] = useState();
11
+ const [loading, setLoading] = useState(false);
12
+ const [, balancesError] = usePromise(async () => {
13
+ if (isUndefined(viewer) || isUndefined(address)) return;
14
+ setLoading(true);
15
+ setBalancesResult(void 0);
16
+ const balance = await viewer.accountBalance(address);
17
+ setBalancesResult(balance);
18
+ setLoading(false);
19
+ }, [
20
+ address,
21
+ viewer,
22
+ networkId,
23
+ refresh
24
+ ]);
25
+ useMemo(() => {
26
+ if (balancesError) {
27
+ setLoading(false);
28
+ }
29
+ }, [
30
+ balancesError
31
+ ]);
32
+ const shiftedBigInt = useMemo(() => {
33
+ if (typeof balancesResult !== "bigint") return;
34
+ return new ShiftedBigInt(balancesResult, {
35
+ places: 18,
36
+ maxDecimal: 18,
37
+ maxCharacters: 9,
38
+ minDecimals: 1,
39
+ locale: navigator.language
40
+ });
41
+ }, [
42
+ balancesResult
43
+ ]);
44
+ const balanceIntlFriendly = useMemo(() => {
45
+ return shiftedBigInt?.toFullString();
46
+ }, [
47
+ shiftedBigInt
48
+ ]);
49
+ const shortBalanceIntlFriendly = useMemo(() => {
50
+ return isUndefinedOrNull(balancesResult) ? void 0 : balancesResult < 1000000000000n && balancesResult > 0n ? "<0.00001" : shiftedBigInt?.toShortString();
51
+ }, [
52
+ shiftedBigInt
53
+ ]);
54
+ return {
55
+ address,
56
+ balanceForAddress: balancesResult,
57
+ balanceIntlFriendly,
58
+ shortBalanceIntlFriendly,
59
+ error: balancesError,
60
+ loading
61
+ };
62
+ }, "useAddressBalance");
63
+
64
+ // src/hooks/useCurrentBlock.ts
65
+ import { usePromise as usePromise2 } from "@xylabs/react-promise";
6
66
 
7
67
  // src/hooks/useViewer.ts
8
68
  import { useChainNetwork } from "@xyo-network/react-chain-network";
9
69
  import { AllRpcSchemas, HttpRpcTransport, JsonRpcXyoViewer } from "@xyo-network/xl1-rpc";
10
- import { useMemo } from "react";
70
+ import { useMemo as useMemo2 } from "react";
11
71
  var useViewer = /* @__PURE__ */ __name((_provider) => {
12
72
  const { activeNetwork } = useChainNetwork();
13
- return useMemo(() => {
73
+ return useMemo2(() => {
14
74
  if (!activeNetwork) {
15
75
  return;
16
76
  }
@@ -24,7 +84,7 @@ var useViewer = /* @__PURE__ */ __name((_provider) => {
24
84
  // src/hooks/useCurrentBlock.ts
25
85
  var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1) => {
26
86
  const viewer = useViewer();
27
- return usePromise(async () => {
87
+ return usePromise2(async () => {
28
88
  if (viewer && refresh > 0) {
29
89
  const block = await viewer.currentBlock();
30
90
  return block;
@@ -38,10 +98,10 @@ var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1) => {
38
98
  // src/hooks/useNetwork.ts
39
99
  import { useChainNetwork as useChainNetwork2 } from "@xyo-network/react-chain-network";
40
100
  import { MemoryXyoNetwork } from "@xyo-network/xl1-rpc";
41
- import { useMemo as useMemo2 } from "react";
101
+ import { useMemo as useMemo3 } from "react";
42
102
  var useNetwork = /* @__PURE__ */ __name(() => {
43
103
  const { activeNetwork } = useChainNetwork2();
44
- return useMemo2(() => {
104
+ return useMemo3(() => {
45
105
  if (!activeNetwork) return;
46
106
  return new MemoryXyoNetwork(activeNetwork.id);
47
107
  }, [
@@ -52,10 +112,10 @@ var useNetwork = /* @__PURE__ */ __name(() => {
52
112
  // src/hooks/useRunner.ts
53
113
  import { useChainNetwork as useChainNetwork3 } from "@xyo-network/react-chain-network";
54
114
  import { AllRpcSchemas as AllRpcSchemas2, HttpRpcTransport as HttpRpcTransport2, JsonRpcXyoRunner } from "@xyo-network/xl1-rpc";
55
- import { useMemo as useMemo3 } from "react";
115
+ import { useMemo as useMemo4 } from "react";
56
116
  var useRunner = /* @__PURE__ */ __name((_provider) => {
57
117
  const { activeNetwork } = useChainNetwork3();
58
- return useMemo3(() => {
118
+ return useMemo4(() => {
59
119
  if (!activeNetwork) {
60
120
  return;
61
121
  }
@@ -68,13 +128,14 @@ var useRunner = /* @__PURE__ */ __name((_provider) => {
68
128
 
69
129
  // src/hooks/useSigner.ts
70
130
  import { MemoryXyoSigner } from "@xyo-network/xl1-rpc";
71
- import { useMemo as useMemo4 } from "react";
131
+ import { useMemo as useMemo5 } from "react";
72
132
  var useSigner = /* @__PURE__ */ __name((_provider, account) => {
73
- return useMemo4(() => account ? new MemoryXyoSigner(account) : void 0, [
133
+ return useMemo5(() => account ? new MemoryXyoSigner(account) : void 0, [
74
134
  account
75
135
  ]);
76
136
  }, "useSigner");
77
137
  export {
138
+ useAddressBalance,
78
139
  useCurrentBlock,
79
140
  useNetwork,
80
141
  useRunner,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/hooks/useCurrentBlock.ts","../../src/hooks/useViewer.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useRunner.ts","../../src/hooks/useSigner.ts"],"sourcesContent":["import { usePromise } from '@xylabs/react-promise'\n\nimport { useViewer } from './useViewer.ts'\n\nexport const useCurrentBlock = (refresh = 1) => {\n const viewer = useViewer()\n return usePromise(async () => {\n if (viewer && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport type { XyoProvider } from '@xyo-network/xl1-protocol'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoViewer,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useViewer = (_provider?: XyoProvider) => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) {\n return\n }\n const transport = new HttpRpcTransport(`${activeNetwork.url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoViewer(transport)\n }, [activeNetwork])\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport { MemoryXyoNetwork } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useNetwork = () => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) return\n return new MemoryXyoNetwork(activeNetwork.id)\n }, [activeNetwork])\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport type { XyoProvider } from '@xyo-network/xl1-protocol'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useRunner = (_provider?: XyoProvider) => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) {\n return\n }\n const transport = new HttpRpcTransport(`${activeNetwork.url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport)\n }, [activeNetwork])\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { XyoProvider, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoProvider, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new MemoryXyoSigner(account) : undefined, [account])\n}\n"],"mappings":";;;;AAAA,SAASA,kBAAkB;;;ACA3B,SAASC,uBAAuB;AAEhC,SACEC,eAAeC,kBAAkBC,wBAC5B;AACP,SAASC,eAAe;AAEjB,IAAMC,YAAY,wBAACC,cAAAA;AACxB,QAAM,EAAEC,cAAa,IAAKC,gBAAAA;AAE1B,SAAOC,QAAQ,MAAA;AACb,QAAI,CAACF,eAAe;AAClB;IACF;AACA,UAAMG,YAAY,IAAIC,iBAAiB,GAAGJ,cAAcK,GAAG,QAAQC,aAAAA;AACnE,WAAO,IAAIC,iBAAiBJ,SAAAA;EAC9B,GAAG;IAACH;GAAc;AACpB,GAVyB;;;ADHlB,IAAMQ,kBAAkB,wBAACC,UAAU,MAAC;AACzC,QAAMC,SAASC,UAAAA;AACf,SAAOC,WAAW,YAAA;AAChB,QAAIF,UAAUD,UAAU,GAAG;AACzB,YAAMI,QAAQ,MAAMH,OAAOI,aAAY;AACvC,aAAOD;IACT;EACF,GAAG;IAACH;IAAQD;GAAQ;AACtB,GAR+B;;;AEJ/B,SAASM,mBAAAA,wBAAuB;AAChC,SAASC,wBAAwB;AACjC,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,aAAa,6BAAA;AACxB,QAAM,EAAEC,cAAa,IAAKC,iBAAAA;AAE1B,SAAOC,SAAQ,MAAA;AACb,QAAI,CAACF,cAAe;AACpB,WAAO,IAAIG,iBAAiBH,cAAcI,EAAE;EAC9C,GAAG;IAACJ;GAAc;AACpB,GAP0B;;;ACJ1B,SAASK,mBAAAA,wBAAuB;AAEhC,SACEC,iBAAAA,gBAAeC,oBAAAA,mBAAkBC,wBAC5B;AACP,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,YAAY,wBAACC,cAAAA;AACxB,QAAM,EAAEC,cAAa,IAAKC,iBAAAA;AAE1B,SAAOC,SAAQ,MAAA;AACb,QAAI,CAACF,eAAe;AAClB;IACF;AACA,UAAMG,YAAY,IAAIC,kBAAiB,GAAGJ,cAAcK,GAAG,QAAQC,cAAAA;AACnE,WAAO,IAAIC,iBAAiBJ,SAAAA;EAC9B,GAAG;IAACH;GAAc;AACpB,GAVyB;;;ACLzB,SAASQ,uBAAuB;AAChC,SAASC,WAAAA,gBAAe;AAEjB,IAAMC,YAAY,wBAACC,WAAyBC,YAAAA;AACjD,SAAOC,SAA+B,MAAMD,UAAU,IAAIE,gBAAgBF,OAAAA,IAAWG,QAAW;IAACH;GAAQ;AAC3G,GAFyB;","names":["usePromise","useChainNetwork","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoViewer","useMemo","useViewer","_provider","activeNetwork","useChainNetwork","useMemo","transport","HttpRpcTransport","url","AllRpcSchemas","JsonRpcXyoViewer","useCurrentBlock","refresh","viewer","useViewer","usePromise","block","currentBlock","useChainNetwork","MemoryXyoNetwork","useMemo","useNetwork","activeNetwork","useChainNetwork","useMemo","MemoryXyoNetwork","id","useChainNetwork","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoRunner","useMemo","useRunner","_provider","activeNetwork","useChainNetwork","useMemo","transport","HttpRpcTransport","url","AllRpcSchemas","JsonRpcXyoRunner","MemoryXyoSigner","useMemo","useSigner","_provider","account","useMemo","MemoryXyoSigner","undefined"]}
1
+ {"version":3,"sources":["../../src/hooks/useAddressBalance.ts","../../src/hooks/useCurrentBlock.ts","../../src/hooks/useViewer.ts","../../src/hooks/useNetwork.ts","../../src/hooks/useRunner.ts","../../src/hooks/useSigner.ts"],"sourcesContent":["import type { Address } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'\nimport { ShiftedBigInt } from '@xyo-network/chain-wrappers'\nimport type {\n AttoXL1, NetworkId, XyoViewer,\n} from '@xyo-network/xl1-protocol'\nimport { useMemo, useState } from 'react'\n\nexport const useAddressBalance = (\n // address to get balance for\n address?: Address,\n // viewer to use for fetching balance\n viewer?: XyoViewer,\n // network ID to trigger a balance refresh\n networkId?: NetworkId,\n // refresh balance trigger\n refresh?: number,\n) => {\n const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()\n const [loading, setLoading] = useState(false)\n\n const [, balancesError] = usePromise(async () => {\n if (isUndefined(viewer) || isUndefined(address)) return\n setLoading(true)\n setBalancesResult(undefined)\n const balance = await viewer.accountBalance(address)\n setBalancesResult(balance as AttoXL1)\n setLoading(false)\n }, [address, viewer, networkId, refresh])\n\n useMemo(() => {\n if (balancesError) {\n setLoading(false)\n }\n }, [balancesError])\n\n const shiftedBigInt = useMemo(() => {\n if (typeof balancesResult !== 'bigint') return\n return new ShiftedBigInt(balancesResult, {\n places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,\n })\n }, [balancesResult])\n\n const balanceIntlFriendly = useMemo(() => {\n return shiftedBigInt?.toFullString()\n }, [shiftedBigInt])\n\n const shortBalanceIntlFriendly = useMemo(() => {\n return isUndefinedOrNull(balancesResult)\n ? undefined\n : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()\n }, [shiftedBigInt])\n\n return {\n address,\n balanceForAddress: balancesResult,\n balanceIntlFriendly,\n shortBalanceIntlFriendly,\n error: balancesError,\n loading,\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\n\nimport { useViewer } from './useViewer.ts'\n\nexport const useCurrentBlock = (refresh = 1) => {\n const viewer = useViewer()\n return usePromise(async () => {\n if (viewer && refresh > 0) {\n const block = await viewer.currentBlock()\n return block\n }\n }, [viewer, refresh])\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport type { XyoProvider } from '@xyo-network/xl1-protocol'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoViewer,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useViewer = (_provider?: XyoProvider) => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) {\n return\n }\n const transport = new HttpRpcTransport(`${activeNetwork.url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoViewer(transport)\n }, [activeNetwork])\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport { MemoryXyoNetwork } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useNetwork = () => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) return\n return new MemoryXyoNetwork(activeNetwork.id)\n }, [activeNetwork])\n}\n","import { useChainNetwork } from '@xyo-network/react-chain-network'\nimport type { XyoProvider } from '@xyo-network/xl1-protocol'\nimport {\n AllRpcSchemas, HttpRpcTransport, JsonRpcXyoRunner,\n} from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useRunner = (_provider?: XyoProvider) => {\n const { activeNetwork } = useChainNetwork()\n\n return useMemo(() => {\n if (!activeNetwork) {\n return\n }\n const transport = new HttpRpcTransport(`${activeNetwork.url}/rpc`, AllRpcSchemas)\n return new JsonRpcXyoRunner(transport)\n }, [activeNetwork])\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { XyoProvider, XyoSigner } from '@xyo-network/xl1-protocol'\nimport { MemoryXyoSigner } from '@xyo-network/xl1-rpc'\nimport { useMemo } from 'react'\n\nexport const useSigner = (_provider?: XyoProvider, account?: AccountInstance) => {\n return useMemo<XyoSigner | undefined>(() => account ? new MemoryXyoSigner(account) : undefined, [account])\n}\n"],"mappings":"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","names":["usePromise","isUndefined","isUndefinedOrNull","ShiftedBigInt","useMemo","useState","useAddressBalance","address","viewer","networkId","refresh","balancesResult","setBalancesResult","useState","loading","setLoading","balancesError","usePromise","isUndefined","undefined","balance","accountBalance","useMemo","shiftedBigInt","ShiftedBigInt","places","maxDecimal","maxCharacters","minDecimals","locale","navigator","language","balanceIntlFriendly","toFullString","shortBalanceIntlFriendly","isUndefinedOrNull","toShortString","balanceForAddress","error","usePromise","useChainNetwork","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoViewer","useMemo","useViewer","_provider","activeNetwork","useChainNetwork","useMemo","transport","HttpRpcTransport","url","AllRpcSchemas","JsonRpcXyoViewer","useCurrentBlock","refresh","viewer","useViewer","usePromise","block","currentBlock","useChainNetwork","MemoryXyoNetwork","useMemo","useNetwork","activeNetwork","useChainNetwork","useMemo","MemoryXyoNetwork","id","useChainNetwork","AllRpcSchemas","HttpRpcTransport","JsonRpcXyoRunner","useMemo","useRunner","_provider","activeNetwork","useChainNetwork","useMemo","transport","HttpRpcTransport","url","AllRpcSchemas","JsonRpcXyoRunner","MemoryXyoSigner","useMemo","useSigner","_provider","account","useMemo","MemoryXyoSigner","undefined"]}
@@ -1,3 +1,4 @@
1
+ export * from './useAddressBalance.ts';
1
2
  export * from './useCurrentBlock.ts';
2
3
  export * from './useNetwork.ts';
3
4
  export * from './useRunner.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { Address } from '@xylabs/hex';
2
+ import type { AttoXL1, NetworkId, XyoViewer } from '@xyo-network/xl1-protocol';
3
+ export declare const useAddressBalance: (address?: Address, viewer?: XyoViewer, networkId?: NetworkId, refresh?: number) => {
4
+ address: Lowercase<string> | undefined;
5
+ balanceForAddress: AttoXL1 | null | undefined;
6
+ balanceIntlFriendly: string | undefined;
7
+ shortBalanceIntlFriendly: string | undefined;
8
+ error: Error | undefined;
9
+ loading: boolean;
10
+ };
11
+ //# sourceMappingURL=useAddressBalance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAddressBalance.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAddressBalance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAI1C,OAAO,KAAK,EACV,OAAO,EAAE,SAAS,EAAE,SAAS,EAC9B,MAAM,2BAA2B,CAAA;AAGlC,eAAO,MAAM,iBAAiB,GAE5B,UAAU,OAAO,EAEjB,SAAS,SAAS,EAElB,YAAY,SAAS,EAErB,UAAU,MAAM;;;;;;;CA6CjB,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/react-chain-provider",
4
- "version": "1.5.8",
4
+ "version": "1.5.10",
5
5
  "description": "XYO Layer One API",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -36,9 +36,9 @@
36
36
  "dependencies": {
37
37
  "@xylabs/react-promise": "^6.3.4",
38
38
  "@xyo-network/account-model": "^3.18.0",
39
- "@xyo-network/react-chain-network": "^1.5.8",
40
- "@xyo-network/xl1-protocol": "^1.4.14",
41
- "@xyo-network/xl1-rpc": "^1.5.8",
39
+ "@xyo-network/react-chain-network": "^1.5.10",
40
+ "@xyo-network/xl1-protocol": "^1.4.16",
41
+ "@xyo-network/xl1-rpc": "^1.5.10",
42
42
  "react": "^19.1.0"
43
43
  },
44
44
  "devDependencies": {
@@ -1,3 +1,4 @@
1
+ export * from './useAddressBalance.ts'
1
2
  export * from './useCurrentBlock.ts'
2
3
  export * from './useNetwork.ts'
3
4
  export * from './useRunner.ts'
@@ -0,0 +1,63 @@
1
+ import type { Address } from '@xylabs/hex'
2
+ import { usePromise } from '@xylabs/react-promise'
3
+ import { isUndefined, isUndefinedOrNull } from '@xylabs/typeof'
4
+ import { ShiftedBigInt } from '@xyo-network/chain-wrappers'
5
+ import type {
6
+ AttoXL1, NetworkId, XyoViewer,
7
+ } from '@xyo-network/xl1-protocol'
8
+ import { useMemo, useState } from 'react'
9
+
10
+ export const useAddressBalance = (
11
+ // address to get balance for
12
+ address?: Address,
13
+ // viewer to use for fetching balance
14
+ viewer?: XyoViewer,
15
+ // network ID to trigger a balance refresh
16
+ networkId?: NetworkId,
17
+ // refresh balance trigger
18
+ refresh?: number,
19
+ ) => {
20
+ const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()
21
+ const [loading, setLoading] = useState(false)
22
+
23
+ const [, balancesError] = usePromise(async () => {
24
+ if (isUndefined(viewer) || isUndefined(address)) return
25
+ setLoading(true)
26
+ setBalancesResult(undefined)
27
+ const balance = await viewer.accountBalance(address)
28
+ setBalancesResult(balance as AttoXL1)
29
+ setLoading(false)
30
+ }, [address, viewer, networkId, refresh])
31
+
32
+ useMemo(() => {
33
+ if (balancesError) {
34
+ setLoading(false)
35
+ }
36
+ }, [balancesError])
37
+
38
+ const shiftedBigInt = useMemo(() => {
39
+ if (typeof balancesResult !== 'bigint') return
40
+ return new ShiftedBigInt(balancesResult, {
41
+ places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,
42
+ })
43
+ }, [balancesResult])
44
+
45
+ const balanceIntlFriendly = useMemo(() => {
46
+ return shiftedBigInt?.toFullString()
47
+ }, [shiftedBigInt])
48
+
49
+ const shortBalanceIntlFriendly = useMemo(() => {
50
+ return isUndefinedOrNull(balancesResult)
51
+ ? undefined
52
+ : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()
53
+ }, [shiftedBigInt])
54
+
55
+ return {
56
+ address,
57
+ balanceForAddress: balancesResult,
58
+ balanceIntlFriendly,
59
+ shortBalanceIntlFriendly,
60
+ error: balancesError,
61
+ loading,
62
+ }
63
+ }