import React, { useContext, useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { I18nContext } from '../../../contexts/i18n'; import ToggleButton from '../../ui/toggle-button'; import { Box, Text } from '../../component-library'; import { Display, FlexDirection, JustifyContent, TextVariant, TextColor, } from '../../../helpers/constants/design-system'; import { PolymorphicRef } from '../../component-library/box'; import { TEST_CHAINS } from '../../../../shared/constants/network'; import NetworkToggle from './network-toggle'; interface IncomingTransactionToggleProps { wrapperRef?: PolymorphicRef; incomingTransactionsPreferences: Record; allNetworks: Record[]; setIncomingTransactionsPreferences: ( chainId: string, isAllEnabledValue: boolean, ) => void; } const IncomingTransactionToggle = ({ wrapperRef, incomingTransactionsPreferences, allNetworks, setIncomingTransactionsPreferences, }: IncomingTransactionToggleProps) => { const t = useContext(I18nContext); const [networkPreferences, setNetworkPreferences] = useState( generateIncomingNetworkPreferences( incomingTransactionsPreferences, allNetworks, ), ); const [isAllEnabled, setIsAllEnabled] = useState( checkAllNetworks(incomingTransactionsPreferences), ); useEffect(() => { setNetworkPreferences( generateIncomingNetworkPreferences( incomingTransactionsPreferences, allNetworks, ), ); }, [incomingTransactionsPreferences, allNetworks]); useEffect(() => { setIsAllEnabled(checkAllNetworks(incomingTransactionsPreferences)); }, [incomingTransactionsPreferences]); const toggleAllEnabled = (isAllEnabledValue: boolean): void => { Object.keys(incomingTransactionsPreferences).forEach((chainId) => { if (incomingTransactionsPreferences[chainId] !== isAllEnabledValue) { setIncomingTransactionsPreferences(chainId, isAllEnabledValue); } }); }; const toggleSingleNetwork = (chainId: string, value: boolean): void => { setIncomingTransactionsPreferences(chainId, value); }; return ( {t('showIncomingTransactions')} {t('showIncomingTransactionsInformation')} {t('enableForAllNetworks')} toggleAllEnabled(!value)} offLabel={t('off')} onLabel={t('on')} /> {Object.keys(networkPreferences).map((chainId, index) => { return ( ); })} ); }; export default IncomingTransactionToggle; IncomingTransactionToggle.propTypes = { wrapperRef: PropTypes.object, incomingTransactionsPreferences: PropTypes.object.isRequired, allNetworks: PropTypes.array.isRequired, setIncomingTransactionsPreferences: PropTypes.func.isRequired, }; function generateIncomingNetworkPreferences( incomingTransactionsPreferences: Record, allNetworks: Record, ): Record { const incomingTxnPreferences: Record = {}; Object.keys(allNetworks).forEach((id) => { const { chainId } = allNetworks[id]; incomingTxnPreferences[chainId] = { isShowIncomingTransactions: incomingTransactionsPreferences[chainId], isATestNetwork: TEST_CHAINS.includes(chainId), label: allNetworks[id].nickname, imageUrl: allNetworks[id].rpcPrefs?.imageUrl, }; }); return incomingTxnPreferences; } function checkAllNetworks( incomingTransactionsPreferences: Record, ): boolean { return Object.values(incomingTransactionsPreferences).every(Boolean); }