@talismn/balances-react 0.1.11 → 0.1.13
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.
- package/CHANGELOG.md +30 -0
- package/dist/hooks/useBalances.js +12 -4
- package/dist/hooks/useTokenRates.d.ts +3 -0
- package/dist/hooks/useTokenRates.js +22 -0
- package/package.json +6 -10
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,35 @@
|
|
1
1
|
# @talismn/balances-react
|
2
2
|
|
3
|
+
## 0.1.13
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- 7168ea7: fix: missing/unnecessary/broken deps in @talismn/balances libs
|
8
|
+
- db04d0d: fix: missing token rates and empty token rates requests
|
9
|
+
- 67d8982: fix: only attempt to fetch each token using its respective balance module
|
10
|
+
- Updated dependencies [7168ea7]
|
11
|
+
- @talismn/chaindata-provider-extension@0.1.7
|
12
|
+
- @talismn/balances@0.1.13
|
13
|
+
- @talismn/chain-connector@0.1.7
|
14
|
+
- @talismn/chaindata-provider@0.1.7
|
15
|
+
- @talismn/chain-connector-evm@0.1.7
|
16
|
+
|
17
|
+
## 0.1.12
|
18
|
+
|
19
|
+
### Patch Changes
|
20
|
+
|
21
|
+
- ca50757: feat: implemented token fiat rates in @talismn/balances
|
22
|
+
- Updated dependencies [ca50757]
|
23
|
+
- @talismn/balances@0.1.12
|
24
|
+
- @talismn/chaindata-provider@0.1.6
|
25
|
+
- @talismn/balances-evm-erc20@0.1.12
|
26
|
+
- @talismn/balances-evm-native@0.1.12
|
27
|
+
- @talismn/balances-example@0.1.12
|
28
|
+
- @talismn/balances-substrate-native@0.1.12
|
29
|
+
- @talismn/balances-substrate-orml@0.1.12
|
30
|
+
- @talismn/chain-connector@0.1.6
|
31
|
+
- @talismn/chaindata-provider-extension@0.1.6
|
32
|
+
|
3
33
|
## 0.1.11
|
4
34
|
|
5
35
|
### Patch Changes
|
@@ -16,6 +16,7 @@ import { useEffect, useState } from "react";
|
|
16
16
|
import { useDebounce } from "react-use";
|
17
17
|
import log from "../log";
|
18
18
|
import { useChains, useEvmNetworks, useTokens } from "./useChaindata";
|
19
|
+
import { useTokenRates } from "./useTokenRates";
|
19
20
|
export function useBalances(
|
20
21
|
// TODO: Make this array of BalanceModules more type-safe
|
21
22
|
balanceModules, chaindataProvider, addressesByToken) {
|
@@ -23,6 +24,7 @@ balanceModules, chaindataProvider, addressesByToken) {
|
|
23
24
|
const chains = useChains(chaindataProvider);
|
24
25
|
const evmNetworks = useEvmNetworks(chaindataProvider);
|
25
26
|
const tokens = useTokens(chaindataProvider);
|
27
|
+
const tokenRates = useTokenRates(tokens);
|
26
28
|
const balances = useLiveQuery(() => __awaiter(this, void 0, void 0, function* () {
|
27
29
|
return new Balances(yield db.balances
|
28
30
|
.filter((balance) => {
|
@@ -36,8 +38,8 @@ balanceModules, chaindataProvider, addressesByToken) {
|
|
36
38
|
return false;
|
37
39
|
return true;
|
38
40
|
})
|
39
|
-
.toArray(), { chains, evmNetworks, tokens });
|
40
|
-
}), [balanceModules, addressesByToken, chains, evmNetworks, tokens]);
|
41
|
+
.toArray(), { chains, evmNetworks, tokens, tokenRates });
|
42
|
+
}), [balanceModules, addressesByToken, chains, evmNetworks, tokens, tokenRates]);
|
41
43
|
// debounce every 100ms to prevent hammering UI with updates
|
42
44
|
const [debouncedBalances, setDebouncedBalances] = useState(balances);
|
43
45
|
useDebounce(() => balances && setDebouncedBalances(balances), 100, [balances]);
|
@@ -104,6 +106,7 @@ balanceModules, chaindataProvider, addressesByToken) {
|
|
104
106
|
};
|
105
107
|
const chainConnector = useChainConnector(chaindataProvider);
|
106
108
|
const chainConnectorEvm = useChainConnectorEvm();
|
109
|
+
const tokens = useTokens(chaindataProvider);
|
107
110
|
useEffect(() => {
|
108
111
|
if (chainConnector === null)
|
109
112
|
return;
|
@@ -115,14 +118,19 @@ balanceModules, chaindataProvider, addressesByToken) {
|
|
115
118
|
return;
|
116
119
|
const unsubs = balanceModules.map((balanceModule) => {
|
117
120
|
const subscriptionKey = `${balanceModule.type}-${JSON.stringify(addressesByToken)}`;
|
121
|
+
// filter out tokens to only include those which this module knows how to fetch balances for
|
122
|
+
const moduleTokenIds = Object.values(tokens)
|
123
|
+
.filter(({ type }) => type === balanceModule.type)
|
124
|
+
.map(({ id }) => id);
|
125
|
+
const addressesByModuleToken = Object.fromEntries(Object.entries(addressesByToken).filter(([tokenId]) => moduleTokenIds.includes(tokenId)));
|
118
126
|
// add balance subscription for this module
|
119
|
-
addSubscription(subscriptionKey, balanceModule, { substrate: chainConnector, evm: chainConnectorEvm }, chaindataProvider,
|
127
|
+
addSubscription(subscriptionKey, balanceModule, { substrate: chainConnector, evm: chainConnectorEvm }, chaindataProvider, addressesByModuleToken);
|
120
128
|
// return an unsub method, to be called when this effect unmounts
|
121
129
|
return () => removeSubscription(subscriptionKey, balanceModule, addressesByToken);
|
122
130
|
});
|
123
131
|
const unsubAll = () => unsubs.forEach((unsub) => unsub());
|
124
132
|
return unsubAll;
|
125
|
-
}, [addressesByToken, chainConnector, chainConnectorEvm]);
|
133
|
+
}, [addressesByToken, chainConnector, chainConnectorEvm, tokens]);
|
126
134
|
}
|
127
135
|
// TODO: Allow advanced users of this library to provide their own chain connector
|
128
136
|
function useChainConnector(chaindataProvider) {
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { fetchTokenRates } from "@talismn/token-rates";
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
3
|
+
export function useTokenRates(tokens) {
|
4
|
+
const generation = useRef(0);
|
5
|
+
const [tokenRates, setTokenRates] = useState();
|
6
|
+
useEffect(() => {
|
7
|
+
if (!tokens)
|
8
|
+
return;
|
9
|
+
if (Object.keys(tokens).length < 1)
|
10
|
+
return;
|
11
|
+
// when we make a new request, we want to ignore any old requests which haven't yet completed
|
12
|
+
// otherwise we risk replacing the most recent data with older data
|
13
|
+
generation.current = (generation.current + 1) % Number.MAX_SAFE_INTEGER;
|
14
|
+
const thisGeneration = generation.current;
|
15
|
+
fetchTokenRates(tokens).then((tokenRates) => {
|
16
|
+
if (thisGeneration !== generation.current)
|
17
|
+
return;
|
18
|
+
setTokenRates(tokenRates);
|
19
|
+
});
|
20
|
+
}, [tokens]);
|
21
|
+
return tokenRates || {};
|
22
|
+
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@talismn/balances-react",
|
3
|
-
"version": "0.1.
|
3
|
+
"version": "0.1.13",
|
4
4
|
"author": "Talisman",
|
5
5
|
"homepage": "https://talisman.xyz",
|
6
6
|
"license": "UNLICENSED",
|
@@ -30,15 +30,11 @@
|
|
30
30
|
"clean": "rm -rf dist && rm -rf .turbo rm -rf node_modules"
|
31
31
|
},
|
32
32
|
"dependencies": {
|
33
|
-
"@talismn/balances": "^0.1.
|
34
|
-
"@talismn/
|
35
|
-
"@talismn/
|
36
|
-
"@talismn/
|
37
|
-
"@talismn/
|
38
|
-
"@talismn/balances-substrate-orml": "^0.1.11",
|
39
|
-
"@talismn/chain-connector": "^0.1.5",
|
40
|
-
"@talismn/chaindata-provider": "^0.1.5",
|
41
|
-
"@talismn/chaindata-provider-extension": "^0.1.5",
|
33
|
+
"@talismn/balances": "^0.1.13",
|
34
|
+
"@talismn/chain-connector": "^0.1.7",
|
35
|
+
"@talismn/chain-connector-evm": "^0.1.7",
|
36
|
+
"@talismn/chaindata-provider": "^0.1.7",
|
37
|
+
"@talismn/chaindata-provider-extension": "^0.1.7",
|
42
38
|
"anylogger": "^1.0.11",
|
43
39
|
"dexie": "^3.2.2",
|
44
40
|
"dexie-react-hooks": "^1.1.1",
|