From c3f3a34a63e6fb6cf9edd11fcf93378f5a223313 Mon Sep 17 00:00:00 2001 From: tjs Date: Sat, 25 Feb 2023 14:58:34 -0500 Subject: [PATCH] only update orderbook websocket when changing markets --- components/trade/Orderbook.tsx | 41 ++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/components/trade/Orderbook.tsx b/components/trade/Orderbook.tsx index ec0eba8f..2bed4d1a 100644 --- a/components/trade/Orderbook.tsx +++ b/components/trade/Orderbook.tsx @@ -1,4 +1,4 @@ -import { AccountInfo } from '@solana/web3.js' +import { AccountInfo, PublicKey } from '@solana/web3.js' import Big from 'big.js' import mangoStore from '@store/mangoStore' import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react' @@ -323,18 +323,35 @@ const Orderbook = () => { [grouping, market, isScrolled, verticallyCenterOrderbook] ) + const bidAccountAddress = useMemo(() => { + if (!market) return '' + const bidsPk = + market instanceof Market ? market['_decoded'].bids : market.bids + return bidsPk.toString() + }, [market]) + + const askAccountAddress = useMemo(() => { + if (!market) return '' + const asksPk = + market instanceof Market ? market['_decoded'].asks : market.asks + return asksPk.toString() + }, [market]) + useEffect(() => { + console.log('setting up orderbook websockets') const set = mangoStore.getState().set const client = mangoStore.getState().client - - if (!market) return + const selectedMarket = mangoStore.getState().selectedMarket.current + const group = mangoStore.getState().group + if (!group || !selectedMarket) return let bidSubscriptionId: number | undefined = undefined let askSubscriptionId: number | undefined = undefined - - const bidsPk = - market instanceof Market ? market['_decoded'].bids : market.bids - console.log('bidsPk', bidsPk?.toString()) + const market = + selectedMarket instanceof PerpMarket + ? selectedMarket + : group?.getSerum3ExternalMarket(selectedMarket.serumMarketExternal) + const bidsPk = new PublicKey(bidAccountAddress) if (bidsPk) { connection .getAccountInfoAndContext(bidsPk) @@ -368,9 +385,7 @@ const Orderbook = () => { ) } - const asksPk = - market instanceof Market ? market['_decoded'].asks : market.asks - console.log('asksPk', asksPk?.toString()) + const asksPk = new PublicKey(askAccountAddress) if (asksPk) { connection .getAccountInfoAndContext(asksPk) @@ -411,12 +426,10 @@ const Orderbook = () => { connection.removeAccountChangeListener(askSubscriptionId) } } - }, [market, connection]) + }, [bidAccountAddress, askAccountAddress, connection]) useEffect(() => { window.addEventListener('resize', verticallyCenterOrderbook) - // const id = setTimeout(verticallyCenterOrderbook, 400) - // return () => clearTimeout(id) }, [verticallyCenterOrderbook]) const resetOrderbook = useCallback(async () => { @@ -424,7 +437,7 @@ const Orderbook = () => { setShowSells(true) await sleep(300) verticallyCenterOrderbook() - }, []) + }, [verticallyCenterOrderbook]) const onGroupSizeChange = useCallback((groupSize: number) => { setGrouping(groupSize)