@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 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, addressesByToken);
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,3 @@
1
+ import { TokenList } from "@talismn/chaindata-provider";
2
+ import { TokenRatesList } from "@talismn/token-rates";
3
+ export declare function useTokenRates(tokens?: TokenList): TokenRatesList;
@@ -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.11",
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.11",
34
- "@talismn/balances-evm-erc20": "^0.1.11",
35
- "@talismn/balances-evm-native": "^0.1.11",
36
- "@talismn/balances-example": "^0.1.11",
37
- "@talismn/balances-substrate-native": "^0.1.11",
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",