From db12922284ad8f41b81c246dd897df532a3e48f3 Mon Sep 17 00:00:00 2001 From: tjs Date: Mon, 20 Feb 2023 01:05:07 -0500 Subject: [PATCH] more orderbook refactoring --- components/trade/Orderbook.tsx | 51 +++++++++++++++++----------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/components/trade/Orderbook.tsx b/components/trade/Orderbook.tsx index 6873aa2b..cdd3fab7 100644 --- a/components/trade/Orderbook.tsx +++ b/components/trade/Orderbook.tsx @@ -4,7 +4,6 @@ import mangoStore from '@store/mangoStore' import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { Market, Orderbook as SpotOrderBook } from '@project-serum/serum' import isEqual from 'lodash/isEqual' -import usePrevious from '@components/shared/usePrevious' import useLocalStorageState from 'hooks/useLocalStorageState' import { floorToDecimal, @@ -169,7 +168,6 @@ type OrderbookData = { const Orderbook = () => { const { t } = useTranslation(['common', 'trade']) const { - selectedMarket, serumOrPerpMarket: market, baseSymbol, quoteSymbol, @@ -185,7 +183,6 @@ const Orderbook = () => { const currentOrderbookData = useRef() const orderbookElRef = useRef(null) - const previousGrouping = usePrevious(grouping) const { width } = useViewport() const isMobile = width ? width < breakpoints.md : false @@ -199,6 +196,20 @@ const Orderbook = () => { setGrouping(market.tickSize) }, [market]) + const verticallyCenterOrderbook = useCallback(() => { + const element = orderbookElRef.current + if (element) { + if (element.scrollHeight > window.innerHeight) { + element.scrollTop = + (element.scrollHeight - element.scrollHeight) / 2 + + (element.scrollHeight - window.innerHeight) / 2 + + 94 + } else { + element.scrollTop = (element.scrollHeight - element.offsetHeight) / 2 + } + } + }, []) + useEffect( () => mangoStore.subscribe( @@ -207,18 +218,14 @@ const Orderbook = () => { if ( newOrderbook && market && - (!isEqual(currentOrderbookData.current, newOrderbook) || - previousGrouping !== grouping) + !isEqual(currentOrderbookData.current, newOrderbook) ) { // check if user has open orders so we can highlight them on orderbook const openOrders = mangoStore.getState().mangoAccount.openOrders - const marketPk = - selectedMarket && selectedMarket instanceof PerpMarket - ? selectedMarket.publicKey - : selectedMarket?.serumMarketExternal + const marketPk = market.publicKey.toString() const newUserOpenOrderPrices = - marketPk && openOrders[marketPk.toString()]?.length - ? openOrders[marketPk.toString()]?.map((order) => order.price) + marketPk && openOrders[marketPk]?.length + ? openOrders[marketPk]?.map((order) => order.price) : [] if (!isEqual(newUserOpenOrderPrices, userOpenOrderPrices)) { @@ -286,23 +293,15 @@ const Orderbook = () => { } } ), - [] + [ + grouping, + market, + isScrolled, + verticallyCenterOrderbook, + userOpenOrderPrices, + ] ) - const verticallyCenterOrderbook = useCallback(() => { - const element = orderbookElRef.current - if (element) { - if (element.scrollHeight > window.innerHeight) { - element.scrollTop = - (element.scrollHeight - element.scrollHeight) / 2 + - (element.scrollHeight - window.innerHeight) / 2 + - 94 - } else { - element.scrollTop = (element.scrollHeight - element.offsetHeight) / 2 - } - } - }, []) - useEffect(() => { const group = mangoStore.getState().group const set = mangoStore.getState().set