import { SignatureResult, TransactionInstruction } from "@solana/web3.js"; import moment from "moment"; import { useCluster } from "providers/cluster"; import { useEffect, useState } from "react"; import { InstructionCard } from "../InstructionCard"; import { ChangePerpMarketParams, getPerpMarketFromInstruction, getPerpMarketFromPerpMarketConfig, } from "./types"; export function ChangePerpMarketParamsDetailsCard(props: { ix: TransactionInstruction; index: number; result: SignatureResult; info: ChangePerpMarketParams; innerCards?: JSX.Element[]; childIndex?: number; }) { const { ix, index, result, info, innerCards, childIndex } = props; const perpMarketAccountMeta = ix.keys[1]; const mangoPerpMarketConfig = getPerpMarketFromInstruction( ix, perpMarketAccountMeta ); const cluster = useCluster(); const [targetPeriodLength, setTargetPeriodLength] = useState( null ); useEffect(() => { async function getTargetPeriodLength() { if (mangoPerpMarketConfig === undefined) { return; } const mangoPerpMarket = await getPerpMarketFromPerpMarketConfig( cluster.url, mangoPerpMarketConfig ); setTargetPeriodLength( mangoPerpMarket.liquidityMiningInfo.targetPeriodLength.toNumber() ); } getTargetPeriodLength(); }, [cluster.url, mangoPerpMarketConfig]); return ( {info.initLeverageOption && ( Init leverage {info.initLeverage} )} {info.liquidationFeeOption && ( Liquidation fee {info.liquidationFee} )} {info.maintLeverageOption && ( Maint leverage {info.maintLeverage} )} {info.makerFeeOption && ( Maker fee {info.makerFee} )} {info.mngoPerPeriodOption && ( MNGO per{" "} {targetPeriodLength !== null && moment.duration(targetPeriodLength, "seconds").humanize()} {info.mngoPerPeriod} {} )} {info.maxDepthBpsOption && ( Max depth bps {info.maxDepthBps} )} {info.rateOption && ( Rate {info.rate} )} {info.takerFeeOption && ( Taker fee {info.takerFee} )} {info.targetPeriodLengthOption && ( Target period length {info.targetPeriodLength} )} ); }