selectors.ts
1 import { Wei } from 'libs/units'; 2 import { gasPriceValidator, gasLimitValidator } from 'libs/validators'; 3 import { AppState } from 'features/reducers'; 4 import { transactionBroadcastSelectors } from './broadcast'; 5 import { transactionFieldsSelectors } from './fields'; 6 import { transactionMetaSelectors } from './meta'; 7 import { transactionSignSelectors } from './sign'; 8 9 export const getTransactionState = (state: AppState) => state.transaction; 10 11 export const getCurrentTransactionStatus = (state: AppState) => { 12 const { indexingHash } = transactionSignSelectors.getSignState(state); 13 if (!indexingHash) { 14 return false; 15 } 16 const txExists = transactionBroadcastSelectors.getTransactionStatus(state, indexingHash); 17 return txExists; 18 }; 19 20 export const currentTransactionFailed = (state: AppState) => { 21 const txExists = getCurrentTransactionStatus(state); 22 return txExists && !txExists.broadcastSuccessful; 23 }; 24 25 // Note: if the transaction or the indexing hash doesn't exist, we have a problem 26 export const currentTransactionBroadcasting = (state: AppState) => { 27 const txExists = getCurrentTransactionStatus(state); 28 29 return txExists && txExists.isBroadcasting; 30 }; 31 32 export const currentTransactionBroadcasted = (state: AppState) => { 33 const txExists = getCurrentTransactionStatus(state); 34 35 return txExists && !txExists.isBroadcasting; 36 }; 37 38 export const isValidGasPrice = (state: AppState): boolean => 39 gasPriceValidator(transactionFieldsSelectors.getGasPrice(state).raw); 40 41 export const isValidGasLimit = (state: AppState): boolean => 42 gasLimitValidator(transactionFieldsSelectors.getGasLimit(state).raw); 43 44 export const getDataExists = (state: AppState) => { 45 const { value } = transactionFieldsSelectors.getData(state); 46 return !!value && value.length > 0; 47 }; 48 49 export const getToRaw = (state: AppState) => transactionFieldsSelectors.getTo(state).raw; 50 51 export const getPreviousUnit = (state: AppState) => 52 transactionMetaSelectors.getMetaState(state).previousUnit; 53 54 export const getGasCost = (state: AppState) => { 55 const gasPrice = transactionFieldsSelectors.getGasPrice(state); 56 const gasLimit = transactionFieldsSelectors.getGasLimit(state); 57 return gasLimit.value ? gasPrice.value.mul(gasLimit.value) : Wei('0'); 58 };