import { useState, useRef } from "react" import { Data, CustomFunction, TokenKey } from "./PoolActions" import Button from '../../atoms/Button' import Slider from '../../atoms/Slider' import Token from "./Token" import { formatAmount, maxDecimals } from "../../../utils/format" import { BigNumber } from "bignumber.js" import { faCoins } from '@fortawesome/free-solid-svg-icons'; import { setInputValue } from "./helpers" export interface Props { data: Data, onInput?: CustomFunction, onConfirm?: CustomFunction, calcValues?: CustomFunction } const Provide = ({ data, onInput, onConfirm, calcValues = () => {} }: Props): JSX.Element => { const defaultValues = { firstToken: 0, secondToken: 0, percentage: 0, value: 0 } const [values, setValues] = useState(defaultValues) const firstTokenInput = useRef(null) const secondTokenInput = useRef(null) const getOutput = (value = values) => { return { firstToken: { data: data.firstToken, amount: value.firstToken }, secondToken: { data: data.secondToken, amount: value.secondToken }, percentage: value.percentage, value: value.value } } const setValue = (value) => { const newValues = calcValues ? calcValues(value) : defaultValues setInputValue(firstTokenInput, newValues.firstToken) setInputValue(secondTokenInput, newValues.secondToken) setValues(newValues) return newValues } const handleInput = ( tokenKey: TokenKey, event: React.ChangeEvent ) => { const token = data[tokenKey] let value = new BigNumber(event.target.value.replace(/[^0-9.]+/gi, "")).toNumber() value = maxDecimals(value, 4, "floor") if (isNaN(value) || value < 0) value = 0 const newValues = setValue({ [tokenKey]: value }) if (onInput) onInput({ token, data: getOutput(newValues), event }) } const handleSlide = (percentage: number) => { const newValues = setValue({ percentage }) if (onInput) onInput({ token: undefined, data: getOutput(newValues), event: "slide" }) } const confirm = () => { if (onConfirm) onConfirm(getOutput()) } return ( <>
handleInput('firstToken', e)} onBlur={e => setInputValue(firstTokenInput, values.firstToken)} inputRef={firstTokenInput} /> handleInput('secondToken', e)} onBlur={e => setInputValue(secondTokenInput, values.secondToken)} inputRef={secondTokenInput} />
Total
${ values.value ? formatAmount(values.value) : '0.0' }