Skip to content

Commit

Permalink
fixup! feat(suite-native): token definitions redux logic
Browse files Browse the repository at this point in the history
  • Loading branch information
PeKne committed Feb 26, 2024
1 parent 01a5caa commit 6cf5d4c
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 35 deletions.
4 changes: 1 addition & 3 deletions packages/suite-desktop/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"outDir": "./libDev"
},
"compilerOptions": { "outDir": "./libDev" },
"include": ["./src", "./e2e", "**/*.json"],
"references": []
}
4 changes: 2 additions & 2 deletions packages/suite/src/middlewares/wallet/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {
prepareFiatRatesMiddleware,
prepareBlockchainMiddleware,
prepareTokenDefinitionsMiddleware,
tokenDefinitionsMiddleware,
} from '@suite-common/wallet-core';

import { prepareDiscoveryMiddleware } from './discoveryMiddleware';
Expand All @@ -19,7 +19,7 @@ export default [
walletMiddleware,
prepareDiscoveryMiddleware(extraDependencies),
prepareFiatRatesMiddleware(extraDependencies),
prepareTokenDefinitionsMiddleware(extraDependencies),
tokenDefinitionsMiddleware,
storageMiddleware,
graphMiddleware,
coinmarketMiddleware,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,24 @@
import { createMiddlewareWithExtraDeps } from '@suite-common/redux-utils';
import { isAnyOf } from '@reduxjs/toolkit';

import { createMiddleware } from '@suite-common/redux-utils';
import { getNetworkFeatures, isEthereumBasedNetwork, networks } from '@suite-common/wallet-config';

import { accountsActions } from '../accounts/accountsActions';
import { getTokenDefinitionThunk } from './tokenDefinitionsThunks';
import { selectSpecificTokenDefinition } from './tokenDefinitionsSelectors';
import { selectShouldFetchTokenDefinition } from './tokenDefinitionsSelectors';

const isAccountChangingAction = isAnyOf(
accountsActions.createAccount,
accountsActions.updateAccount,
);

export const prepareTokenDefinitionsMiddleware = createMiddlewareWithExtraDeps(
export const tokenDefinitionsMiddleware = createMiddleware(
(action, { dispatch, next, getState }) => {
// The action changes has to be stored before evaluated in this middleware,
// because it needs to check the latest state to decide if we should fetch token definitions.
next(action);

if (
accountsActions.createAccount.match(action) ||
accountsActions.updateAccount.match(action)
) {
if (isAccountChangingAction(action)) {
const { symbol } = action.payload;

const networkFeatures = getNetworkFeatures(symbol);
Expand All @@ -21,17 +27,14 @@ export const prepareTokenDefinitionsMiddleware = createMiddlewareWithExtraDeps(
action.payload.tokens?.forEach(token => {
const contractAddress = token.contract;

const tokenDefinition = selectSpecificTokenDefinition(
const shouldFetchTokenDefinition = selectShouldFetchTokenDefinition(
getState(),
symbol,
contractAddress,
);

const network = networks[symbol];
if (
isEthereumBasedNetwork(network) &&
(!tokenDefinition || tokenDefinition.error)
) {
if (isEthereumBasedNetwork(network) && shouldFetchTokenDefinition) {
dispatch(
getTokenDefinitionThunk({
networkSymbol: symbol,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { D, pipe } from '@mobily/ts-belt';

import { NetworkSymbol } from '@suite-common/wallet-config';
import { NetworkSymbol, isEthereumBasedNetwork, networks } from '@suite-common/wallet-config';

import { TokenDefinitionsRootState } from './tokenDefinitionsTypes';

Expand All @@ -15,6 +15,17 @@ export const selectSpecificTokenDefinition = (
contractAddress: string,
) => state.wallet.tokenDefinitions?.[networkSymbol]?.[contractAddress];

export const selectShouldFetchTokenDefinition = (
state: TokenDefinitionsRootState,
networkSymbol: NetworkSymbol,
contractAddress: string,
) => {
const tokenDefinition = selectSpecificTokenDefinition(state, networkSymbol, contractAddress);
const network = networks[networkSymbol];

return isEthereumBasedNetwork(network) && (!tokenDefinition || tokenDefinition.error);
};

export const selectKnownNetworkTokens = (
state: TokenDefinitionsRootState,
networkSymbol: NetworkSymbol,
Expand Down
2 changes: 1 addition & 1 deletion suite-native/state/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@
"redux-flipper": "^2.0.2",
"redux-persist": "6.0.0"
}
}
}
4 changes: 2 additions & 2 deletions suite-native/state/src/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { prepareButtonRequestMiddleware, prepareDeviceMiddleware } from '@suite-
import { prepareDiscoveryMiddleware } from '@suite-native/discovery';
import { prepareTransactionCacheMiddleware } from '@suite-native/accounts';
import { blockchainMiddleware } from '@suite-native/blockchain';
import { prepareTokenDefinitionsMiddleware } from '@suite-native/token-definitions';
import { tokenDefinitionsMiddleware } from '@suite-native/token-definitions';

import { extraDependencies } from './extraDependencies';
import { prepareRootReducers } from './reducers';
Expand All @@ -19,7 +19,7 @@ const middlewares: Middleware[] = [
prepareButtonRequestMiddleware(extraDependencies),
prepareDiscoveryMiddleware(extraDependencies),
prepareTransactionCacheMiddleware(extraDependencies),
prepareTokenDefinitionsMiddleware(extraDependencies),
tokenDefinitionsMiddleware,
];

if (__DEV__) {
Expand Down
4 changes: 2 additions & 2 deletions suite-native/token-definitions/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
"main": "src/index",
"scripts": {
"lint:js": "yarn g:eslint '**/*.{ts,tsx,js}'",
"test:unit": "jest -c ../../jest.config.base.js",
"type-check": "yarn g:tsc --build"
},
"dependencies": {
"@reduxjs/toolkit": "1.9.5",
"@suite-common/redux-utils": "workspace:*",
"@suite-common/wallet-config": "workspace:*",
"@suite-common/wallet-core": "workspace:*"
}
}
}
27 changes: 15 additions & 12 deletions suite-native/token-definitions/src/tokenDefinitionsMiddleware.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,25 @@
import { createMiddlewareWithExtraDeps } from '@suite-common/redux-utils';
import { isAnyOf } from '@reduxjs/toolkit';

import { createMiddleware } from '@suite-common/redux-utils';
import { getNetworkFeatures, isEthereumBasedNetwork, networks } from '@suite-common/wallet-config';
import {
accountsActions,
getTokenDefinitionThunk,
selectSpecificTokenDefinition,
selectShouldFetchTokenDefinition,
} from '@suite-common/wallet-core';

export const prepareTokenDefinitionsMiddleware = createMiddlewareWithExtraDeps(
const isAccountChangingAction = isAnyOf(
accountsActions.createAccount,
accountsActions.updateAccount,
);

export const tokenDefinitionsMiddleware = createMiddleware(
(action, { dispatch, next, getState }) => {
// The action changes has to be stored before evaluated in this middleware,
// because it needs to check the latest state to decide if we should fetch token definitions.
next(action);

if (
accountsActions.createAccount.match(action) ||
accountsActions.updateAccount.match(action)
) {
if (isAccountChangingAction(action)) {
const { symbol } = action.payload;

const networkFeatures = getNetworkFeatures(symbol);
Expand All @@ -22,17 +28,14 @@ export const prepareTokenDefinitionsMiddleware = createMiddlewareWithExtraDeps(
action.payload.tokens?.forEach(token => {
const contractAddress = token.contract;

const tokenDefinition = selectSpecificTokenDefinition(
const shouldFetchTokenDefinition = selectShouldFetchTokenDefinition(
getState(),
symbol,
contractAddress,
);

const network = networks[symbol];
if (
isEthereumBasedNetwork(network) &&
(!tokenDefinition || tokenDefinition.error)
) {
if (shouldFetchTokenDefinition && isEthereumBasedNetwork(network)) {
dispatch(
getTokenDefinitionThunk({
networkSymbol: symbol,
Expand Down
1 change: 1 addition & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -8846,6 +8846,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@suite-native/token-definitions@workspace:suite-native/token-definitions"
dependencies:
"@reduxjs/toolkit": "npm:1.9.5"
"@suite-common/redux-utils": "workspace:*"
"@suite-common/wallet-config": "workspace:*"
"@suite-common/wallet-core": "workspace:*"
Expand Down

0 comments on commit 6cf5d4c

Please sign in to comment.