/ common / features / transaction / selectors.ts
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  };