/* eslint-disable jsx-a11y/anchor-is-valid */ import { Backdrop, Card, CircularProgress, Highlight, Notification, Title, Tutorial, } from 'components/common' import { AssetTable, Portfolio, useBorrowColumns, useDepositColumns } from 'components/redbank' import { RED_BANK_TUTORIAL_KEY } from 'constants/appConstants' import { balanceSum, ltvWeightedDepositValue, maintainanceMarginWeightedDepositValue, } from 'libs/assetInfo' import { useEffect, useMemo } from 'react' import { Trans, useTranslation } from 'react-i18next' import useStore from 'store' import { NotificationType, State } from 'types/enums' import { DocURL } from 'types/enums/docURL' import styles from './Redbank.module.scss' const RedBank = () => { // ------------------ // EXTERNAL HOOKS // ------------------ const { t } = useTranslation() const redBankAssets = useStore((s) => s.redBankAssets) const redBankState = useStore((s) => s.redBankState) const setRedBankState = useStore((s) => s.setRedBankState) const defaultDepositColumns = useDepositColumns() const defaultBorrowColumns = useBorrowColumns() // ------------------ // STORE STATE // ------------------ const marketInfo = useStore((s) => s.marketInfo) const showTutorial = useStore((s) => s.showRedBankTutorial) const tutorialStep = useStore((s) => s.tutorialSteps['redbank']) const userBalancesState = useStore((s) => s.userBalancesState) const userCollateral = useStore((s) => s.userCollateral) const maxBorrowLimit = useMemo(() => { if (!userCollateral || !redBankAssets) return 0 return ltvWeightedDepositValue( redBankAssets, marketInfo, userCollateral, 'depositBalanceBaseCurrency', ) }, [redBankAssets, marketInfo, userCollateral]) const liquidationThreshold = useMemo(() => { if (!userCollateral) return 0 return maintainanceMarginWeightedDepositValue( redBankAssets, marketInfo, userCollateral, 'depositBalanceBaseCurrency', ) }, [redBankAssets, marketInfo, userCollateral]) const maxLtvExceeded = ( text Learn more. ) useEffect(() => { if ( redBankAssets.length === 0 || marketInfo.length === 0 || userBalancesState !== State.READY || redBankState === State.READY ) return setRedBankState(State.READY) }, [redBankAssets, marketInfo, redBankState, userBalancesState, setRedBankState]) const borrowBalance = Number(balanceSum(redBankAssets, 'borrowBalanceBaseCurrency')) const showLiquidationWarning = borrowBalance >= maxBorrowLimit && borrowBalance > 0 && redBankState === State.READY const loader = (
) const depositCard = ( } > {redBankState === State.READY ? ( ) : ( loader )} ) const borrowCard = ( } > {redBankState === State.READY ? ( ) : ( loader )} ) useEffect(() => { if (userBalancesState !== State.READY) return if (localStorage.getItem(RED_BANK_TUTORIAL_KEY)) { return useStore.setState({ showRedBankTutorial: false }) } if (Number(balanceSum(redBankAssets, 'depositBalanceBaseCurrency')) > 0) { localStorage.setItem(RED_BANK_TUTORIAL_KEY, 'true') return useStore.setState({ showRedBankTutorial: false }) } useStore.setState({ showRedBankTutorial: true }) }, [redBankAssets, userBalancesState]) return (
<div className={styles.grids}> <Highlight show={tutorialStep === 1 || !showTutorial}> {showTutorial ? ( <Tutorial step={1} type='redbank'> {depositCard} </Tutorial> ) : ( <>{depositCard}</> )} </Highlight> <Highlight show={tutorialStep === 2 || !showTutorial}> {showTutorial ? ( <Tutorial step={2} type='redbank'> {borrowCard} </Tutorial> ) : ( <>{borrowCard}</> )} </Highlight> </div> </div> ) } export default RedBank