From 82379e8165a035af878ec48958c426090025fd1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Brzezin=CC=81ski?= Date: Wed, 14 Dec 2022 15:20:51 +0100 Subject: [PATCH] modify perp wip --- components/trade/OpenOrders.tsx | 53 ++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/components/trade/OpenOrders.tsx b/components/trade/OpenOrders.tsx index d0ac8e0e..f57ebba0 100644 --- a/components/trade/OpenOrders.tsx +++ b/components/trade/OpenOrders.tsx @@ -1,6 +1,7 @@ import { PerpMarket, PerpOrder, + PerpOrderType, Serum3Market, Serum3Side, } from '@blockworks-foundation/mango-v4' @@ -22,6 +23,7 @@ import { Order } from '@project-serum/serum/lib/market' import { useWallet } from '@solana/wallet-adapter-react' import { PublicKey } from '@solana/web3.js' import mangoStore from '@store/mangoStore' +import Decimal from 'decimal.js' import { useViewport } from 'hooks/useViewport' import { useTranslation } from 'next-i18next' import { ChangeEvent, useCallback, useState } from 'react' @@ -123,6 +125,55 @@ const OpenOrders = () => { [t] ) + const modifyOrder = useCallback( + async (o: PerpOrder | Order) => { + const client = mangoStore.getState().client + const group = mangoStore.getState().group + const mangoAccount = mangoStore.getState().mangoAccount.current + const selectedMarket = mangoStore.getState().selectedMarket.current + const actions = mangoStore.getState().actions + const baseSize = new Decimal(modifiedOrderSize).toNumber() + const price = new Decimal(modifiedOrderPrice).toNumber() + if (!group || !mangoAccount) return + setCancelId(o.orderId.toString()) + try { + if (selectedMarket instanceof PerpMarket && o instanceof PerpOrder) { + const tx = await client.modifyPerpOrder( + group, + mangoAccount, + o.perpMarketIndex, + o.orderId, + o.side, + price, + Math.abs(baseSize), + undefined, // maxQuoteQuantity + Date.now(), + PerpOrderType.limit, + undefined, + undefined + ) + actions.fetchOpenOrders() + notify({ + type: 'success', + title: 'Transaction successful', + txid: tx, + }) + } + } catch (e: any) { + console.error('Error canceling', e) + notify({ + title: t('trade:cancel-order-error'), + description: e.message, + txid: e.txid, + type: 'error', + }) + } finally { + setCancelId('') + } + }, + [t] + ) + const showEditOrderForm = (order: Order | PerpOrder) => { setModifyOrderId(order.orderId.toString()) setModifiedOrderSize(order.size.toString()) @@ -264,7 +315,7 @@ const OpenOrders = () => { ) : ( <> console.log('save')} + onClick={() => modifyOrder(o)} size="small" >