swaps-gas-customization (#11938)
parent
8d22dc4470
commit
9f10fe8c97
@ -0,0 +1,157 @@ |
||||
import React, { useEffect, useState } from 'react'; |
||||
import { Provider } from 'react-redux'; |
||||
import { number } from '@storybook/addon-knobs'; |
||||
import configureStore from '../../../store/store'; |
||||
import testData from '../../../../.storybook/test-data'; |
||||
import { formatETHFee } from '../../../helpers/utils/formatters'; |
||||
import { |
||||
addHexes, |
||||
getValueFromWeiHex, |
||||
getWeiHexFromDecimalValue, |
||||
sumHexWEIsToRenderableFiat, |
||||
} from '../../../helpers/utils/conversions.util'; |
||||
import { ETH } from '../../../helpers/constants/common'; |
||||
import { calcGasTotal, isBalanceSufficient } from '../../send/send.utils'; |
||||
import { conversionLessThan } from '../../../../shared/modules/conversion.utils'; |
||||
import GasModalPageContainer from './swaps-gas-customization-modal.component'; |
||||
|
||||
// Using Test Data For Redux
|
||||
const store = configureStore(testData); |
||||
|
||||
export default { |
||||
title: 'Swap', |
||||
decorators: [(story) => <Provider store={store}>{story()}</Provider>], |
||||
}; |
||||
|
||||
// Convert Hex Wei to Decimal ETH
|
||||
const sumHexWEIsToRenderableEth = (hexWEIs, currencySymbol = 'ETH') => { |
||||
const hexWEIsSum = hexWEIs.filter(Boolean).reduce(addHexes); |
||||
return formatETHFee( |
||||
getValueFromWeiHex({ |
||||
value: hexWEIsSum, |
||||
fromCurrency: currencySymbol, |
||||
toCurrency: currencySymbol, |
||||
numberOfDecimals: 6, |
||||
}), |
||||
currencySymbol, |
||||
); |
||||
}; |
||||
|
||||
export const GasModalPageContainerComponent = () => { |
||||
// Send Amount Data
|
||||
const hexWei = getWeiHexFromDecimalValue({ |
||||
value: String(number('Send Amount (this should be static)', 0.01)), |
||||
fromCurrency: ETH, |
||||
fromDenomination: ETH, |
||||
}); |
||||
|
||||
// ETH Balance
|
||||
const balanceHexWei = getWeiHexFromDecimalValue({ |
||||
value: String(number('Wallet Balance (this should be static)', 1.582717)), |
||||
fromCurrency: ETH, |
||||
fromDenomination: ETH, |
||||
}); |
||||
|
||||
const sendAmount = sumHexWEIsToRenderableEth([hexWei, '0x0']); |
||||
const [gasLimit, setGasLimit] = useState('5208'); |
||||
const [gasPrice, setGasPrice] = useState('ee6b2800'); |
||||
const [transactionFee, setTransactionFee] = useState(''); |
||||
const [totalETH, setTotalETH] = useState(''); |
||||
const [totalFiat, setTotalFiat] = useState(''); |
||||
const [isInsufficientBalance, setIsInsufficientBalance] = useState(false); |
||||
|
||||
const { metamask } = store.getState(); |
||||
const { currentCurrency, conversionRate } = metamask; |
||||
|
||||
console.log('metamask', store.getState()); |
||||
|
||||
useEffect(() => { |
||||
// Transfer Fee
|
||||
const customGasTotal = calcGasTotal(gasLimit, gasPrice); |
||||
setTransactionFee(sumHexWEIsToRenderableEth(['0x0', customGasTotal])); |
||||
|
||||
// New Total ETH
|
||||
setTotalETH(sumHexWEIsToRenderableEth([hexWei, customGasTotal, ''])); |
||||
|
||||
// New Total Fiat
|
||||
setTotalFiat( |
||||
sumHexWEIsToRenderableFiat( |
||||
[hexWei, customGasTotal, ''], |
||||
currentCurrency, |
||||
conversionRate, |
||||
), |
||||
); |
||||
|
||||
// Check If Balance is Sufficient
|
||||
setIsInsufficientBalance( |
||||
!isBalanceSufficient({ |
||||
amount: hexWei, |
||||
gasTotal: customGasTotal, |
||||
balance: balanceHexWei, |
||||
conversionRate, |
||||
}), |
||||
); |
||||
}, [ |
||||
gasPrice, |
||||
gasLimit, |
||||
hexWei, |
||||
totalETH, |
||||
conversionRate, |
||||
currentCurrency, |
||||
totalFiat, |
||||
balanceHexWei, |
||||
]); |
||||
|
||||
// Check If Gas Price Is Too Low
|
||||
const shouldShowCustomPriceTooLowWarning = () => { |
||||
const average = number('Average Gas Price', 2); |
||||
|
||||
const customGasPrice = gasPrice; |
||||
|
||||
if (!customGasPrice || average === undefined) { |
||||
return false; |
||||
} |
||||
|
||||
const customPriceRisksSwapFailure = conversionLessThan( |
||||
{ |
||||
value: customGasPrice, |
||||
fromNumericBase: 'hex', |
||||
fromDenomination: 'WEI', |
||||
toDenomination: 'GWEI', |
||||
}, |
||||
{ value: average, fromNumericBase: 'dec' }, |
||||
); |
||||
|
||||
return customPriceRisksSwapFailure; |
||||
}; |
||||
|
||||
return ( |
||||
<GasModalPageContainer |
||||
insufficientBalance={isInsufficientBalance} |
||||
showCustomPriceTooLowWarning={shouldShowCustomPriceTooLowWarning()} |
||||
minimumGasLimit={21000} |
||||
infoRowProps={{ |
||||
sendAmount, |
||||
transactionFee, |
||||
newTotalEth: totalETH, |
||||
newTotalFiat: totalFiat, |
||||
}} |
||||
gasPriceButtonGroupProps={{ |
||||
buttonDataLoading: true, |
||||
}} |
||||
setSwapsCustomizationModalPrice={(newPrice) => { |
||||
console.log('updatedPrice', newPrice); |
||||
setGasPrice(newPrice); |
||||
}} |
||||
setSwapsCustomizationModalLimit={(newLimit) => { |
||||
console.log('updatedLimit', newLimit); |
||||
setGasLimit(newLimit); |
||||
}} |
||||
customGasPrice={gasPrice} |
||||
customGasLimit={gasLimit} |
||||
disableSave={ |
||||
isInsufficientBalance || shouldShowCustomPriceTooLowWarning() |
||||
} |
||||
/> |
||||
); |
||||
}; |
Loading…
Reference in new issue