import React, { useState, useContext } from 'react'; import PropTypes from 'prop-types'; import { I18nContext } from '../../../contexts/i18n'; import Box from '../../ui/box'; import FormField from '../../ui/form-field'; import Typography from '../../ui/typography'; import { ALIGN_ITEMS, COLORS, DISPLAY, FLEX_DIRECTION, TEXT_ALIGN, FONT_WEIGHT, TYPOGRAPHY, JUSTIFY_CONTENT, SIZES, } from '../../../helpers/constants/design-system'; import { CustomSpendingCapTooltip } from './custom-spending-cap-tooltip'; export default function CustomSpendingCap({ tokenName, currentTokenBalance, dappProposedValue, siteOrigin, onEdit, }) { const t = useContext(I18nContext); const [value, setValue] = useState(''); const [customSpendingCapText, setCustomSpendingCapText] = useState(''); const [error, setError] = useState(''); const inputLogicEmptyStateText = t('inputLogicEmptyState'); const getInputTextLogic = (inputNumber) => { if (inputNumber <= currentTokenBalance) { return { className: 'custom-spending-cap__lowerValue', description: t('inputLogicEqualOrSmallerNumber', [ {inputNumber} {tokenName} , ]), }; } else if (inputNumber > currentTokenBalance) { return { className: 'custom-spending-cap__higherValue', description: t('inputLogicHigherNumber'), }; } return { className: 'custom-spending-cap__emptyState', description: t('inputLogicEmptyState'), }; }; const handleChange = (valueInput) => { let spendingCapError = ''; const inputTextLogic = getInputTextLogic(valueInput); const inputTextLogicDescription = inputTextLogic.description; if (valueInput < 0 || isNaN(valueInput)) { spendingCapError = t('spendingCapError'); setCustomSpendingCapText(t('spendingCapErrorDescription', [siteOrigin])); setError(spendingCapError); } else { setCustomSpendingCapText(inputTextLogicDescription); setError(''); } setValue(valueInput); }; const chooseTooltipContentText = value > currentTokenBalance ? t('warningTooltipText', [ {t('beCareful')} , ]) : t('inputLogicEmptyState'); return ( <> ); } CustomSpendingCap.propTypes = { /** * Displayed the token name currently tracked in description related to the input state */ tokenName: PropTypes.string, /** * The current token balance of the token */ currentTokenBalance: PropTypes.number, /** * The dapp suggested amount */ dappProposedValue: PropTypes.number, /** * The origin of the site generally the URL */ siteOrigin: PropTypes.string, /** * onClick handler for the Edit link */ onEdit: PropTypes.func, };