aboutsummaryrefslogtreecommitdiffstats
path: root/packages/website/ts/components/inputs/token_amount_input.tsx
diff options
context:
space:
mode:
authorHsuan Lee <hsuan@cobinhood.com>2019-01-19 18:42:04 +0800
committerHsuan Lee <hsuan@cobinhood.com>2019-01-19 18:42:04 +0800
commit7ae38906926dc09bc10670c361af0d2bf0050426 (patch)
tree5fb10ae366b987db09e4ddb4bc3ba0f75404ad08 /packages/website/ts/components/inputs/token_amount_input.tsx
parentb5fd3c72a08aaa6957917d74c333387a16edf66b (diff)
downloaddexon-sol-tools-7ae38906926dc09bc10670c361af0d2bf0050426.tar
dexon-sol-tools-7ae38906926dc09bc10670c361af0d2bf0050426.tar.gz
dexon-sol-tools-7ae38906926dc09bc10670c361af0d2bf0050426.tar.bz2
dexon-sol-tools-7ae38906926dc09bc10670c361af0d2bf0050426.tar.lz
dexon-sol-tools-7ae38906926dc09bc10670c361af0d2bf0050426.tar.xz
dexon-sol-tools-7ae38906926dc09bc10670c361af0d2bf0050426.tar.zst
dexon-sol-tools-7ae38906926dc09bc10670c361af0d2bf0050426.zip
Update dependency packages
Diffstat (limited to 'packages/website/ts/components/inputs/token_amount_input.tsx')
-rw-r--r--packages/website/ts/components/inputs/token_amount_input.tsx152
1 files changed, 0 insertions, 152 deletions
diff --git a/packages/website/ts/components/inputs/token_amount_input.tsx b/packages/website/ts/components/inputs/token_amount_input.tsx
deleted file mode 100644
index fded3a9dd..000000000
--- a/packages/website/ts/components/inputs/token_amount_input.tsx
+++ /dev/null
@@ -1,152 +0,0 @@
-import { colors, Link } from '@0x/react-shared';
-import { BigNumber } from '@0x/utils';
-import { Web3Wrapper } from '@0x/web3-wrapper';
-import * as _ from 'lodash';
-import * as React from 'react';
-import { Blockchain } from 'ts/blockchain';
-import { BalanceBoundedInput } from 'ts/components/inputs/balance_bounded_input';
-import { Token, ValidatedBigNumberCallback, WebsitePaths } from 'ts/types';
-
-interface TokenAmountInputProps {
- userAddress: string;
- networkId: number;
- blockchain: Blockchain;
- token: Token;
- label?: string;
- amount?: BigNumber;
- hintText?: string;
- shouldShowIncompleteErrs: boolean;
- shouldCheckBalance: boolean;
- shouldCheckAllowance: boolean;
- onChange: ValidatedBigNumberCallback;
- onErrorMsgChange?: (errorMsg: React.ReactNode) => void;
- lastForceTokenStateRefetch: number;
- shouldShowErrs?: boolean;
- shouldShowUnderline?: boolean;
- style?: React.CSSProperties;
- labelStyle?: React.CSSProperties;
- inputHintStyle?: React.CSSProperties;
-}
-
-interface TokenAmountInputState {
- balance: BigNumber;
- allowance: BigNumber;
- isBalanceAndAllowanceLoaded: boolean;
-}
-
-const HEIGHT_WITH_LABEL = 84;
-const HEIGHT_WITHOUT_LABEL = 62;
-
-export class TokenAmountInput extends React.Component<TokenAmountInputProps, TokenAmountInputState> {
- public static defaultProps: Partial<TokenAmountInputProps> = {
- shouldShowErrs: true,
- shouldShowUnderline: true,
- };
- private _isUnmounted: boolean;
- constructor(props: TokenAmountInputProps) {
- super(props);
- this._isUnmounted = false;
- const defaultAmount = new BigNumber(0);
- this.state = {
- balance: defaultAmount,
- allowance: defaultAmount,
- isBalanceAndAllowanceLoaded: false,
- };
- }
- public componentWillMount(): void {
- // tslint:disable-next-line:no-floating-promises
- this._fetchBalanceAndAllowanceAsync(this.props.token.address, this.props.userAddress);
- }
- public componentWillUnmount(): void {
- this._isUnmounted = true;
- }
- public componentWillReceiveProps(nextProps: TokenAmountInputProps): void {
- if (
- nextProps.userAddress !== this.props.userAddress ||
- nextProps.networkId !== this.props.networkId ||
- nextProps.token.address !== this.props.token.address ||
- nextProps.lastForceTokenStateRefetch !== this.props.lastForceTokenStateRefetch
- ) {
- // tslint:disable-next-line:no-floating-promises
- this._fetchBalanceAndAllowanceAsync(nextProps.token.address, nextProps.userAddress);
- }
- }
- public render(): React.ReactNode {
- const amount = this.props.amount
- ? Web3Wrapper.toUnitAmount(this.props.amount, this.props.token.decimals)
- : undefined;
- return (
- <div className="flex overflow-hidden" style={this._getStyle()}>
- <BalanceBoundedInput
- label={this.props.label}
- amount={amount}
- balance={Web3Wrapper.toUnitAmount(this.state.balance, this.props.token.decimals)}
- onChange={this._onChange.bind(this)}
- onErrorMsgChange={this.props.onErrorMsgChange}
- validate={this._validate.bind(this)}
- shouldCheckBalance={this.props.shouldCheckBalance}
- shouldShowIncompleteErrs={this.props.shouldShowIncompleteErrs}
- isDisabled={!this.state.isBalanceAndAllowanceLoaded}
- hintText={this.props.hintText}
- shouldShowErrs={this.props.shouldShowErrs}
- shouldShowUnderline={this.props.shouldShowUnderline}
- inputStyle={this.props.style}
- inputHintStyle={this.props.inputHintStyle}
- />
- <div style={this._getLabelStyle()}>{this.props.token.symbol}</div>
- </div>
- );
- }
- private _onChange(isValid: boolean, amount?: BigNumber): void {
- let baseUnitAmount;
- if (!_.isUndefined(amount)) {
- baseUnitAmount = Web3Wrapper.toBaseUnitAmount(amount, this.props.token.decimals);
- }
- this.props.onChange(isValid, baseUnitAmount);
- }
- private _validate(amount: BigNumber): React.ReactNode {
- if (this.props.shouldCheckAllowance && amount.gt(this.state.allowance)) {
- return (
- <span>
- Insufficient allowance.{' '}
- <Link
- to={`${WebsitePaths.Portal}/account`}
- textDecoration="underline"
- fontColor={colors.darkestGrey}
- >
- Set allowance
- </Link>
- </span>
- );
- } else {
- return undefined;
- }
- }
- private async _fetchBalanceAndAllowanceAsync(tokenAddress: string, userAddress: string): Promise<void> {
- this.setState({
- isBalanceAndAllowanceLoaded: false,
- });
- const userAddressIfExists = _.isEmpty(userAddress) ? undefined : userAddress;
- const [balance, allowance] = await this.props.blockchain.getTokenBalanceAndAllowanceAsync(
- userAddressIfExists,
- tokenAddress,
- );
- if (!this._isUnmounted) {
- this.setState({
- balance,
- allowance,
- isBalanceAndAllowanceLoaded: true,
- });
- }
- }
- private _getStyle(): React.CSSProperties {
- const hasLabel = !_.isUndefined(this.props.label);
- return !_.isUndefined(this.props.style)
- ? this.props.style
- : { height: hasLabel ? HEIGHT_WITH_LABEL : HEIGHT_WITHOUT_LABEL };
- }
- private _getLabelStyle(): React.CSSProperties {
- const hasLabel = !_.isUndefined(this.props.label);
- return this.props.labelStyle || { paddingTop: hasLabel ? 39 : 14 };
- }
-}