import { CheckBoxOutlineBlank, CheckBoxOutlined } from "@mui/icons-material"; import { Box, Checkbox, FormControlLabel } from "@mui/material"; import { useState, useMemo } from "react"; import { useLocation } from "react-router-dom"; import { BOND_DEPOSITORY_ADDRESSES } from "../../../constants/addresses"; import { shorten, formatNumber, formatCurrency } from "../../../helpers"; import { DecimalBigNumber } from "../../../helpers/DecimalBigNumber"; import BondDiscount from "./BondDiscount"; import BondVesting from "./BondVesting"; import BondConfirmModal from "./BondConfirmModal"; import { TokenAllowanceGuard } from "../../../components/TokenAllowanceGuard/TokenAllowanceGuard"; import { PrimaryButton } from "../../../components/Button"; import SwapCard from "../../../components/Swap/SwapCard"; import SwapCollection from "../../../components/Swap/SwapCollection"; import TokenStack from "../../../components/TokenStack/TokenStack"; import DataRow from "../../../components/DataRow/DataRow"; import Paper from "../../../components/Paper/Paper"; import { useCurrentIndex } from "../../../hooks/staking"; import { useBalance } from "../../../hooks/tokens"; const BondInputArea = ({ bond, chainId, slippage, recipientAddress, formatDecimals, handleSettingsOpen, address, connect }) => { const { pathname } = useLocation(); const { currentIndex } = useCurrentIndex(chainId); const { balance } = useBalance(chainId, bond.quoteToken.quoteTokenAddress, address); const { symbol: ftsoSymbol } = useTokenSymbol(chainId, "FTSO"); const { symbol: ghstSymbol } = useTokenSymbol(chainId, "GHST"); const [amount, setAmount] = useState(""); const [checked, setChecked] = useState(false); const [confirmOpen, setConfirmOpen] = useState(false); const parsedAmount = useMemo(() => { return new DecimalBigNumber(amount, bond.quoteToken.decimals); }, [bond, amount]) const amountInBaseToken = useMemo(() => { if (bond.price.inBaseToken._value !== 0n) return parsedAmount.div(bond.price.inBaseToken); return new DecimalBigNumber(0n, 0); }, [parsedAmount]); const showDisclaimer = useMemo(() => { return new DecimalBigNumber("0").gt(bond.discount); }, [bond]); const handleConfirmClose = () => { setAmount(""); setConfirmOpen(false); } const setMax = () => { if (!balance) return; if (bond.capacity.inQuoteToken.lt(bond.maxPayout.inQuoteToken)) { return setAmount( bond.capacity.inQuoteToken.lt(balance) ? bond.capacity.inQuoteToken.toString() // Capacity is the smallest : balance.toString(), ); } setAmount( bond.maxPayout.inQuoteToken.lt(balance) ? bond.maxPayout.inQuoteToken.toString() // Payout is the smallest : balance.toString(), ); }; const baseTokenString = (bond.maxPayout.inBaseToken.lt(bond.capacity.inBaseToken) ? bond.maxPayout.inBaseToken : bond.capacity.inBaseToken ); return ( } tokenName={bond.quoteToken.name} info={formatCurrency(balance, formatDecimals, bond.quoteToken.name)} endString="Max" endStringOnClick={setMax} value={amount} onChange={event => setAmount(event.currentTarget.value)} inputProps={{ "data-testid": "fromInput" }} /> } LowerSwapCard={ } tokenName={bond.baseToken.name} value={amountInBaseToken.toString({ decimals: 9 })} inputProps={{ "data-testid": "toInput" }} /> } /> First time bonding {bond.quoteToken.name}?
Please approve ghostDAO to use your{" "} {bond.quoteToken.name} for bonding. } > {showDisclaimer && ( setChecked(event.target.checked)} icon={} checkedIcon={} /> } label="I understand that I'm buying a negative discount bond" /> )} setConfirmOpen(true)} > Bond
{formatCurrency(amountInBaseToken, formatDecimals, ftsoSymbol)} {" "} {!!currentIndex && ( (≈{formatCurrency(amountInBaseToken.div(currentIndex), formatDecimals, ghstSymbol)}) )} } tooltip={`The total amount of payout asset you will receive from this bond purchase`} /> {bond.baseToken.tokenAddress.toUpperCase() === bond.quoteToken.quoteTokenAddress.toUpperCase() ? `${formatCurrency(baseTokenString, formatDecimals, ftsoSymbol)}` : `${formatCurrency(baseTokenString, formatDecimals, ftsoSymbol)} (≈${formatCurrency(baseTokenString.div(currentIndex), formatDecimals, ghstSymbol)})`} } /> } tooltip={`The bond discount is the percentage difference between ${ftsoSymbol} market value and the bond's price`} /> } tooltip={"The duration of the Bond whereby the bond can be claimed in its entirety"} /> {recipientAddress !== address && ( )}
handleConfirmClose()} />
); }; export default BondInputArea;