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

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,75 @@
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) => {
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
+ ]);
24
+ useMemo(() => {
25
+ if (balancesError) {
26
+ setLoading(false);
27
+ }
28
+ }, [
29
+ balancesError
30
+ ]);
31
+ const shiftedBigInt = useMemo(() => {
32
+ if (typeof balancesResult !== "bigint") return;
33
+ return new ShiftedBigInt(balancesResult, {
34
+ places: 18,
35
+ maxDecimal: 18,
36
+ maxCharacters: 9,
37
+ minDecimals: 1,
38
+ locale: navigator.language
39
+ });
40
+ }, [
41
+ balancesResult
42
+ ]);
43
+ const balanceIntlFriendly = useMemo(() => {
44
+ return shiftedBigInt?.toFullString();
45
+ }, [
46
+ shiftedBigInt
47
+ ]);
48
+ const shortBalanceIntlFriendly = useMemo(() => {
49
+ return isUndefinedOrNull(balancesResult) ? void 0 : balancesResult < 1000000000000n && balancesResult > 0n ? "<0.00001" : shiftedBigInt?.toShortString();
50
+ }, [
51
+ shiftedBigInt
52
+ ]);
53
+ return {
54
+ address,
55
+ balanceForAddress: balancesResult,
56
+ balanceIntlFriendly,
57
+ shortBalanceIntlFriendly,
58
+ error: balancesError,
59
+ loading
60
+ };
61
+ }, "useAddressBalance");
62
+
63
+ // src/hooks/useCurrentBlock.ts
64
+ import { usePromise as usePromise2 } from "@xylabs/react-promise";
6
65
 
7
66
  // src/hooks/useViewer.ts
8
67
  import { useChainNetwork } from "@xyo-network/react-chain-network";
9
68
  import { AllRpcSchemas, HttpRpcTransport, JsonRpcXyoViewer } from "@xyo-network/xl1-rpc";
10
- import { useMemo } from "react";
69
+ import { useMemo as useMemo2 } from "react";
11
70
  var useViewer = /* @__PURE__ */ __name((_provider) => {
12
71
  const { activeNetwork } = useChainNetwork();
13
- return useMemo(() => {
72
+ return useMemo2(() => {
14
73
  if (!activeNetwork) {
15
74
  return;
16
75
  }
@@ -24,7 +83,7 @@ var useViewer = /* @__PURE__ */ __name((_provider) => {
24
83
  // src/hooks/useCurrentBlock.ts
25
84
  var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1) => {
26
85
  const viewer = useViewer();
27
- return usePromise(async () => {
86
+ return usePromise2(async () => {
28
87
  if (viewer && refresh > 0) {
29
88
  const block = await viewer.currentBlock();
30
89
  return block;
@@ -38,10 +97,10 @@ var useCurrentBlock = /* @__PURE__ */ __name((refresh = 1) => {
38
97
  // src/hooks/useNetwork.ts
39
98
  import { useChainNetwork as useChainNetwork2 } from "@xyo-network/react-chain-network";
40
99
  import { MemoryXyoNetwork } from "@xyo-network/xl1-rpc";
41
- import { useMemo as useMemo2 } from "react";
100
+ import { useMemo as useMemo3 } from "react";
42
101
  var useNetwork = /* @__PURE__ */ __name(() => {
43
102
  const { activeNetwork } = useChainNetwork2();
44
- return useMemo2(() => {
103
+ return useMemo3(() => {
45
104
  if (!activeNetwork) return;
46
105
  return new MemoryXyoNetwork(activeNetwork.id);
47
106
  }, [
@@ -52,10 +111,10 @@ var useNetwork = /* @__PURE__ */ __name(() => {
52
111
  // src/hooks/useRunner.ts
53
112
  import { useChainNetwork as useChainNetwork3 } from "@xyo-network/react-chain-network";
54
113
  import { AllRpcSchemas as AllRpcSchemas2, HttpRpcTransport as HttpRpcTransport2, JsonRpcXyoRunner } from "@xyo-network/xl1-rpc";
55
- import { useMemo as useMemo3 } from "react";
114
+ import { useMemo as useMemo4 } from "react";
56
115
  var useRunner = /* @__PURE__ */ __name((_provider) => {
57
116
  const { activeNetwork } = useChainNetwork3();
58
- return useMemo3(() => {
117
+ return useMemo4(() => {
59
118
  if (!activeNetwork) {
60
119
  return;
61
120
  }
@@ -68,13 +127,14 @@ var useRunner = /* @__PURE__ */ __name((_provider) => {
68
127
 
69
128
  // src/hooks/useSigner.ts
70
129
  import { MemoryXyoSigner } from "@xyo-network/xl1-rpc";
71
- import { useMemo as useMemo4 } from "react";
130
+ import { useMemo as useMemo5 } from "react";
72
131
  var useSigner = /* @__PURE__ */ __name((_provider, account) => {
73
- return useMemo4(() => account ? new MemoryXyoSigner(account) : void 0, [
132
+ return useMemo5(() => account ? new MemoryXyoSigner(account) : void 0, [
74
133
  account
75
134
  ]);
76
135
  }, "useSigner");
77
136
  export {
137
+ useAddressBalance,
78
138
  useCurrentBlock,
79
139
  useNetwork,
80
140
  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) => {\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])\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","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) => {
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;;;;;;;CA6CtB,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.9",
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",
39
+ "@xyo-network/react-chain-network": "^1.5.9",
40
40
  "@xyo-network/xl1-protocol": "^1.4.14",
41
- "@xyo-network/xl1-rpc": "^1.5.8",
41
+ "@xyo-network/xl1-rpc": "^1.5.9",
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,61 @@
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
+ ) => {
18
+ const [balancesResult, setBalancesResult] = useState<AttoXL1 | null>()
19
+ const [loading, setLoading] = useState(false)
20
+
21
+ const [, balancesError] = usePromise(async () => {
22
+ if (isUndefined(viewer) || isUndefined(address)) return
23
+ setLoading(true)
24
+ setBalancesResult(undefined)
25
+ const balance = await viewer.accountBalance(address)
26
+ setBalancesResult(balance as AttoXL1)
27
+ setLoading(false)
28
+ }, [address, viewer, networkId])
29
+
30
+ useMemo(() => {
31
+ if (balancesError) {
32
+ setLoading(false)
33
+ }
34
+ }, [balancesError])
35
+
36
+ const shiftedBigInt = useMemo(() => {
37
+ if (typeof balancesResult !== 'bigint') return
38
+ return new ShiftedBigInt(balancesResult, {
39
+ places: 18, maxDecimal: 18, maxCharacters: 9, minDecimals: 1, locale: navigator.language,
40
+ })
41
+ }, [balancesResult])
42
+
43
+ const balanceIntlFriendly = useMemo(() => {
44
+ return shiftedBigInt?.toFullString()
45
+ }, [shiftedBigInt])
46
+
47
+ const shortBalanceIntlFriendly = useMemo(() => {
48
+ return isUndefinedOrNull(balancesResult)
49
+ ? undefined
50
+ : (balancesResult < 1_000_000_000_000n && balancesResult > 0n) ? '<0.00001' : shiftedBigInt?.toShortString()
51
+ }, [shiftedBigInt])
52
+
53
+ return {
54
+ address,
55
+ balanceForAddress: balancesResult,
56
+ balanceIntlFriendly,
57
+ shortBalanceIntlFriendly,
58
+ error: balancesError,
59
+ loading,
60
+ }
61
+ }