import React from 'react'; import { Provider } from 'react-redux'; import { keccak } from 'ethereumjs-util'; import { cloneDeep } from 'lodash'; import { GasFeeContextProvider } from '../../../contexts/gasFee'; import configureStore from '../../../store/store'; import testData from '../../../../.storybook/test-data'; import TransactionAlerts from '.'; const customTransaction = ({ estimateUsed, hasSimulationError, i = 0, ...props } = {}) => { const tx = { simulationFails: Boolean(hasSimulationError), userFeeLevel: estimateUsed ? 'low' : 'medium', blockNumber: `${10902987 + i}`, id: 4678200543090545 + i, metamaskNetworkId: testData?.metamask?.networkId, chainId: testData?.metamask?.providerConfig?.chainId, status: 'confirmed', time: 1600654021000, txParams: { from: '0x64a845a5b02460acf8a3d84503b0d68d028b4bb4', gas: '0x5208', gasPrice: '0x147d357000', nonce: '0xf', to: testData?.metamask?.selectedAddress, value: '0x63eb89da4ed00000', ...props?.txParams, }, // '0x50be62ab1cabd03ff104c602c11fdef7a50f3d73c55006d5583ba97950ab1144', transactionCategory: 'incoming', ...props, }; // just simulate hash if not provided if (!props?.hash) { tx.hash = `0x${keccak(Buffer.from(JSON.stringify(tx))).toString('hex')}`; } return tx; }; // simulate gas fee state const customStore = ({ supportsEIP1559, isNetworkBusy, pendingCount = 0, } = {}) => { const data = cloneDeep({ ...testData, metamask: { ...testData?.metamask, // isNetworkBusy gasFeeEstimates: { ...testData?.metamask?.gasFeeEstimates, networkCongestion: isNetworkBusy ? 1 : 0.1, }, // supportsEIP1559 networkDetails: { ...testData?.metamask?.networkDetails, EIPS: { ...testData?.metamask?.networkDetails?.EIPS, 1159: Boolean(supportsEIP1559), }, }, // pendingTransactions featureFlags: { ...testData?.metamask?.featureFlags, showIncomingTransactions: pendingCount > 0, }, incomingTransactions: { ...testData?.metamask?.incomingTransactions, ...Object.fromEntries( Array.from({ length: pendingCount }).map((_, i) => { const transaction = customTransaction({ i, status: 'submitted' }); return [transaction?.hash, transaction]; }), ), }, }, }); return configureStore(data); }; export default { title: 'Components/App/TransactionAlerts', argTypes: { userAcknowledgedGasMissing: { control: 'boolean', }, }, args: { userAcknowledgedGasMissing: false, }, }; // show everything export const DefaultStory = (args) => ( ); DefaultStory.storyName = 'Default'; export const SimulationError = (args) => ( ); SimulationError.storyName = 'SimulationError'; export const SinglePendingTransaction = (args) => ( ); SinglePendingTransaction.storyName = 'SinglePendingTransaction'; export const MultiplePendingTransactions = (args) => ( ); MultiplePendingTransactions.storyName = 'MultiplePendingTransactions'; export const LowPriority = (args) => ( ); LowPriority.storyName = 'LowPriority'; export const BusyNetwork = (args) => ( ); BusyNetwork.storyName = 'BusyNetwork';