Refactor TokenState type
This commit is contained in:
@@ -10,7 +10,14 @@ import ReactTooltip = require('react-tooltip');
|
|||||||
import { Blockchain } from 'ts/blockchain';
|
import { Blockchain } from 'ts/blockchain';
|
||||||
import { EthWethConversionButton } from 'ts/components/eth_weth_conversion_button';
|
import { EthWethConversionButton } from 'ts/components/eth_weth_conversion_button';
|
||||||
import { Dispatcher } from 'ts/redux/dispatcher';
|
import { Dispatcher } from 'ts/redux/dispatcher';
|
||||||
import { OutdatedWrappedEtherByNetworkId, Side, Token, TokenByAddress, TokenState } from 'ts/types';
|
import {
|
||||||
|
OutdatedWrappedEtherByNetworkId,
|
||||||
|
Side,
|
||||||
|
Token,
|
||||||
|
TokenByAddress,
|
||||||
|
TokenState,
|
||||||
|
TokenStateByAddress,
|
||||||
|
} from 'ts/types';
|
||||||
import { configs } from 'ts/utils/configs';
|
import { configs } from 'ts/utils/configs';
|
||||||
import { constants } from 'ts/utils/constants';
|
import { constants } from 'ts/utils/constants';
|
||||||
import { utils } from 'ts/utils/utils';
|
import { utils } from 'ts/utils/utils';
|
||||||
@@ -20,13 +27,6 @@ const ICON_DIMENSION = 40;
|
|||||||
const ETHER_ICON_PATH = '/images/ether.png';
|
const ETHER_ICON_PATH = '/images/ether.png';
|
||||||
const OUTDATED_WETH_ICON_PATH = '/images/wrapped_eth_gray.png';
|
const OUTDATED_WETH_ICON_PATH = '/images/wrapped_eth_gray.png';
|
||||||
|
|
||||||
interface OutdatedWETHAddressToIsStateLoaded {
|
|
||||||
[address: string]: boolean;
|
|
||||||
}
|
|
||||||
interface OutdatedWETHStateByAddress {
|
|
||||||
[address: string]: TokenState;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface EthWrappersProps {
|
interface EthWrappersProps {
|
||||||
networkId: number;
|
networkId: number;
|
||||||
blockchain: Blockchain;
|
blockchain: Blockchain;
|
||||||
@@ -39,9 +39,7 @@ interface EthWrappersProps {
|
|||||||
|
|
||||||
interface EthWrappersState {
|
interface EthWrappersState {
|
||||||
ethTokenState: TokenState;
|
ethTokenState: TokenState;
|
||||||
isWethStateLoaded: boolean;
|
outdatedWETHStateByAddress: TokenStateByAddress;
|
||||||
outdatedWETHAddressToIsStateLoaded: OutdatedWETHAddressToIsStateLoaded;
|
|
||||||
outdatedWETHStateByAddress: OutdatedWETHStateByAddress;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class EthWrappers extends React.Component<EthWrappersProps, EthWrappersState> {
|
export class EthWrappers extends React.Component<EthWrappersProps, EthWrappersState> {
|
||||||
@@ -50,22 +48,20 @@ export class EthWrappers extends React.Component<EthWrappersProps, EthWrappersSt
|
|||||||
super(props);
|
super(props);
|
||||||
this._isUnmounted = false;
|
this._isUnmounted = false;
|
||||||
const outdatedWETHAddresses = this._getOutdatedWETHAddresses();
|
const outdatedWETHAddresses = this._getOutdatedWETHAddresses();
|
||||||
const outdatedWETHAddressToIsStateLoaded: OutdatedWETHAddressToIsStateLoaded = {};
|
const outdatedWETHStateByAddress: TokenStateByAddress = {};
|
||||||
const outdatedWETHStateByAddress: OutdatedWETHStateByAddress = {};
|
|
||||||
_.each(outdatedWETHAddresses, outdatedWETHAddress => {
|
_.each(outdatedWETHAddresses, outdatedWETHAddress => {
|
||||||
outdatedWETHAddressToIsStateLoaded[outdatedWETHAddress] = false;
|
|
||||||
outdatedWETHStateByAddress[outdatedWETHAddress] = {
|
outdatedWETHStateByAddress[outdatedWETHAddress] = {
|
||||||
balance: new BigNumber(0),
|
balance: new BigNumber(0),
|
||||||
allowance: new BigNumber(0),
|
allowance: new BigNumber(0),
|
||||||
|
isLoaded: false,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
this.state = {
|
this.state = {
|
||||||
outdatedWETHAddressToIsStateLoaded,
|
|
||||||
outdatedWETHStateByAddress,
|
outdatedWETHStateByAddress,
|
||||||
isWethStateLoaded: false,
|
|
||||||
ethTokenState: {
|
ethTokenState: {
|
||||||
balance: new BigNumber(0),
|
balance: new BigNumber(0),
|
||||||
allowance: new BigNumber(0),
|
allowance: new BigNumber(0),
|
||||||
|
isLoaded: false,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -169,7 +165,7 @@ export class EthWrappers extends React.Component<EthWrappersProps, EthWrappersSt
|
|||||||
{this._renderTokenLink(tokenLabel, etherscanUrl)}
|
{this._renderTokenLink(tokenLabel, etherscanUrl)}
|
||||||
</TableRowColumn>
|
</TableRowColumn>
|
||||||
<TableRowColumn>
|
<TableRowColumn>
|
||||||
{this.state.isWethStateLoaded ? (
|
{this.state.ethTokenState.isLoaded ? (
|
||||||
`${wethBalance.toFixed(configs.AMOUNT_DISPLAY_PRECSION)} WETH`
|
`${wethBalance.toFixed(configs.AMOUNT_DISPLAY_PRECSION)} WETH`
|
||||||
) : (
|
) : (
|
||||||
<i className="zmdi zmdi-spinner zmdi-hc-spin" />
|
<i className="zmdi zmdi-spinner zmdi-hc-spin" />
|
||||||
@@ -183,7 +179,7 @@ export class EthWrappers extends React.Component<EthWrappersProps, EthWrappersSt
|
|||||||
networkId={this.props.networkId}
|
networkId={this.props.networkId}
|
||||||
isOutdatedWrappedEther={false}
|
isOutdatedWrappedEther={false}
|
||||||
direction={Side.Receive}
|
direction={Side.Receive}
|
||||||
isDisabled={!this.state.isWethStateLoaded}
|
isDisabled={!this.state.ethTokenState.isLoaded}
|
||||||
ethToken={etherToken}
|
ethToken={etherToken}
|
||||||
dispatcher={this.props.dispatcher}
|
dispatcher={this.props.dispatcher}
|
||||||
blockchain={this.props.blockchain}
|
blockchain={this.props.blockchain}
|
||||||
@@ -266,8 +262,8 @@ export class EthWrappers extends React.Component<EthWrappersProps, EthWrappersSt
|
|||||||
...etherToken,
|
...etherToken,
|
||||||
address: outdatedWETHIfExists.address,
|
address: outdatedWETHIfExists.address,
|
||||||
};
|
};
|
||||||
const isStateLoaded = this.state.outdatedWETHAddressToIsStateLoaded[outdatedWETHIfExists.address];
|
|
||||||
const outdatedEtherTokenState = this.state.outdatedWETHStateByAddress[outdatedWETHIfExists.address];
|
const outdatedEtherTokenState = this.state.outdatedWETHStateByAddress[outdatedWETHIfExists.address];
|
||||||
|
const isStateLoaded = outdatedEtherTokenState.isLoaded;
|
||||||
const balanceInEthIfExists = isStateLoaded
|
const balanceInEthIfExists = isStateLoaded
|
||||||
? ZeroEx.toUnitAmount(outdatedEtherTokenState.balance, constants.DECIMAL_PLACES_ETH).toFixed(
|
? ZeroEx.toUnitAmount(outdatedEtherTokenState.balance, constants.DECIMAL_PLACES_ETH).toFixed(
|
||||||
configs.AMOUNT_DISPLAY_PRECSION,
|
configs.AMOUNT_DISPLAY_PRECSION,
|
||||||
@@ -345,10 +341,15 @@ export class EthWrappers extends React.Component<EthWrappersProps, EthWrappersSt
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
private async _onOutdatedConversionSuccessfulAsync(outdatedWETHAddress: string) {
|
private async _onOutdatedConversionSuccessfulAsync(outdatedWETHAddress: string) {
|
||||||
|
const currentOutdatedWETHState = this.state.outdatedWETHStateByAddress[outdatedWETHAddress];
|
||||||
this.setState({
|
this.setState({
|
||||||
outdatedWETHAddressToIsStateLoaded: {
|
outdatedWETHStateByAddress: {
|
||||||
...this.state.outdatedWETHAddressToIsStateLoaded,
|
...this.state.outdatedWETHStateByAddress,
|
||||||
[outdatedWETHAddress]: false,
|
[outdatedWETHAddress]: {
|
||||||
|
balance: currentOutdatedWETHState.balance,
|
||||||
|
allowance: currentOutdatedWETHState.allowance,
|
||||||
|
isLoaded: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const userAddressIfExists = _.isEmpty(this.props.userAddress) ? undefined : this.props.userAddress;
|
const userAddressIfExists = _.isEmpty(this.props.userAddress) ? undefined : this.props.userAddress;
|
||||||
@@ -357,15 +358,12 @@ export class EthWrappers extends React.Component<EthWrappersProps, EthWrappersSt
|
|||||||
outdatedWETHAddress,
|
outdatedWETHAddress,
|
||||||
);
|
);
|
||||||
this.setState({
|
this.setState({
|
||||||
outdatedWETHAddressToIsStateLoaded: {
|
|
||||||
...this.state.outdatedWETHAddressToIsStateLoaded,
|
|
||||||
[outdatedWETHAddress]: true,
|
|
||||||
},
|
|
||||||
outdatedWETHStateByAddress: {
|
outdatedWETHStateByAddress: {
|
||||||
...this.state.outdatedWETHStateByAddress,
|
...this.state.outdatedWETHStateByAddress,
|
||||||
[outdatedWETHAddress]: {
|
[outdatedWETHAddress]: {
|
||||||
balance,
|
balance,
|
||||||
allowance,
|
allowance,
|
||||||
|
isLoaded: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -380,8 +378,7 @@ export class EthWrappers extends React.Component<EthWrappersProps, EthWrappersSt
|
|||||||
);
|
);
|
||||||
|
|
||||||
const outdatedWETHAddresses = this._getOutdatedWETHAddresses();
|
const outdatedWETHAddresses = this._getOutdatedWETHAddresses();
|
||||||
const outdatedWETHAddressToIsStateLoaded: OutdatedWETHAddressToIsStateLoaded = {};
|
const outdatedWETHStateByAddress: TokenStateByAddress = {};
|
||||||
const outdatedWETHStateByAddress: OutdatedWETHStateByAddress = {};
|
|
||||||
for (const address of outdatedWETHAddresses) {
|
for (const address of outdatedWETHAddresses) {
|
||||||
const [balance, allowance] = await this.props.blockchain.getTokenBalanceAndAllowanceAsync(
|
const [balance, allowance] = await this.props.blockchain.getTokenBalanceAndAllowanceAsync(
|
||||||
userAddressIfExists,
|
userAddressIfExists,
|
||||||
@@ -390,18 +387,17 @@ export class EthWrappers extends React.Component<EthWrappersProps, EthWrappersSt
|
|||||||
outdatedWETHStateByAddress[address] = {
|
outdatedWETHStateByAddress[address] = {
|
||||||
balance,
|
balance,
|
||||||
allowance,
|
allowance,
|
||||||
|
isLoaded: true,
|
||||||
};
|
};
|
||||||
outdatedWETHAddressToIsStateLoaded[address] = true;
|
|
||||||
}
|
}
|
||||||
if (!this._isUnmounted) {
|
if (!this._isUnmounted) {
|
||||||
this.setState({
|
this.setState({
|
||||||
outdatedWETHStateByAddress,
|
outdatedWETHStateByAddress,
|
||||||
outdatedWETHAddressToIsStateLoaded,
|
|
||||||
ethTokenState: {
|
ethTokenState: {
|
||||||
balance: wethBalance,
|
balance: wethBalance,
|
||||||
allowance: wethAllowance,
|
allowance: wethAllowance,
|
||||||
|
isLoaded: true,
|
||||||
},
|
},
|
||||||
isWethStateLoaded: true,
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -434,6 +430,7 @@ export class EthWrappers extends React.Component<EthWrappersProps, EthWrappersSt
|
|||||||
ethTokenState: {
|
ethTokenState: {
|
||||||
balance,
|
balance,
|
||||||
allowance,
|
allowance,
|
||||||
|
isLoaded: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import {
|
|||||||
ScreenWidths,
|
ScreenWidths,
|
||||||
Token,
|
Token,
|
||||||
TokenByAddress,
|
TokenByAddress,
|
||||||
|
TokenStateByAddress,
|
||||||
TokenVisibility,
|
TokenVisibility,
|
||||||
} from 'ts/types';
|
} from 'ts/types';
|
||||||
import { configs } from 'ts/utils/configs';
|
import { configs } from 'ts/utils/configs';
|
||||||
@@ -61,14 +62,6 @@ const styles: Styles = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
interface TokenStateByAddress {
|
|
||||||
[address: string]: {
|
|
||||||
balance: BigNumber;
|
|
||||||
allowance: BigNumber;
|
|
||||||
isLoaded: boolean;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
interface TokenBalancesProps {
|
interface TokenBalancesProps {
|
||||||
blockchain: Blockchain;
|
blockchain: Blockchain;
|
||||||
blockchainErr: BlockchainErrs;
|
blockchainErr: BlockchainErrs;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import { AllowanceToggle } from 'ts/components/inputs/allowance_toggle';
|
|||||||
import { Identicon } from 'ts/components/ui/identicon';
|
import { Identicon } from 'ts/components/ui/identicon';
|
||||||
import { TokenIcon } from 'ts/components/ui/token_icon';
|
import { TokenIcon } from 'ts/components/ui/token_icon';
|
||||||
import { Dispatcher } from 'ts/redux/dispatcher';
|
import { Dispatcher } from 'ts/redux/dispatcher';
|
||||||
import { BalanceErrs, BlockchainErrs, Token, TokenByAddress } from 'ts/types';
|
import { BalanceErrs, BlockchainErrs, Token, TokenByAddress, TokenState, TokenStateByAddress } from 'ts/types';
|
||||||
import { constants } from 'ts/utils/constants';
|
import { constants } from 'ts/utils/constants';
|
||||||
import { utils } from 'ts/utils/utils';
|
import { utils } from 'ts/utils/utils';
|
||||||
|
|
||||||
@@ -41,16 +41,6 @@ interface WalletState {
|
|||||||
trackedTokenStateByAddress: TokenStateByAddress;
|
trackedTokenStateByAddress: TokenStateByAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface TokenStateByAddress {
|
|
||||||
[address: string]: TokenState;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface TokenState {
|
|
||||||
balance: BigNumber;
|
|
||||||
allowance: BigNumber;
|
|
||||||
isLoaded: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum WrappedEtherAction {
|
enum WrappedEtherAction {
|
||||||
Wrap,
|
Wrap,
|
||||||
Unwrap,
|
Unwrap,
|
||||||
|
|||||||
@@ -21,11 +21,6 @@ export interface TokenByAddress {
|
|||||||
[address: string]: Token;
|
[address: string]: Token;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TokenState {
|
|
||||||
allowance: BigNumber;
|
|
||||||
balance: BigNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface AssetToken {
|
export interface AssetToken {
|
||||||
address?: string;
|
address?: string;
|
||||||
amount?: BigNumber;
|
amount?: BigNumber;
|
||||||
@@ -469,4 +464,14 @@ export enum Providers {
|
|||||||
Metamask = 'METAMASK',
|
Metamask = 'METAMASK',
|
||||||
Mist = 'MIST',
|
Mist = 'MIST',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface TokenStateByAddress {
|
||||||
|
[address: string]: TokenState;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface TokenState {
|
||||||
|
balance: BigNumber;
|
||||||
|
allowance: BigNumber;
|
||||||
|
isLoaded: boolean;
|
||||||
|
}
|
||||||
// tslint:disable:max-file-line-count
|
// tslint:disable:max-file-line-count
|
||||||
|
|||||||
Reference in New Issue
Block a user