From 7ef749b73034a90df1752e8ddeeb50ca987aef35 Mon Sep 17 00:00:00 2001 From: Matthew Russell Date: Tue, 12 Sep 2023 10:35:20 -0700 Subject: [PATCH] fix: make spread column show the calculated spread --- .../src/lib/cells/market-name-cell.tsx | 4 +- .../markets-container/use-column-defs.tsx | 94 +++++++------------ 2 files changed, 34 insertions(+), 64 deletions(-) diff --git a/libs/datagrid/src/lib/cells/market-name-cell.tsx b/libs/datagrid/src/lib/cells/market-name-cell.tsx index d1df34e5d..0d7ffb8a7 100644 --- a/libs/datagrid/src/lib/cells/market-name-cell.tsx +++ b/libs/datagrid/src/lib/cells/market-name-cell.tsx @@ -59,7 +59,7 @@ export const MarketNameCell = ({ (data as { market: Market })?.market?.tradableInstrument.instrument.product .__typename; - if (!value) return; + if (!value) return null; const content = ( <> @@ -72,7 +72,7 @@ export const MarketNameCell = ({ diff --git a/libs/markets/src/lib/components/markets-container/use-column-defs.tsx b/libs/markets/src/lib/components/markets-container/use-column-defs.tsx index 7394bf54c..a0511303c 100644 --- a/libs/markets/src/lib/components/markets-container/use-column-defs.tsx +++ b/libs/markets/src/lib/components/markets-container/use-column-defs.tsx @@ -7,7 +7,7 @@ import type { VegaValueFormatterParams, VegaValueGetterParams, } from '@vegaprotocol/datagrid'; -import { COL_DEFS, FlashCell, SetFilter } from '@vegaprotocol/datagrid'; +import { COL_DEFS, SetFilter } from '@vegaprotocol/datagrid'; import * as Schema from '@vegaprotocol/types'; import { addDecimalsFormatNumber, toBigNum } from '@vegaprotocol/utils'; import { ButtonLink, Tooltip } from '@vegaprotocol/ui-toolkit'; @@ -169,72 +169,42 @@ export const useColumnDefs = ({ onMarketClick }: Props) => { field: 'data.bestBidPrice', type: 'rightAligned', filter: 'agNumberColumnFilter', + cellRenderer: 'PriceFlashCell', valueGetter: ({ data, }: VegaValueGetterParams) => { - const offer = - data?.data?.bestOfferPrice === undefined - ? undefined - : toBigNum( - data?.data?.bestOfferPrice, - data.decimalPlaces - ).toNumber(); - const bid = - data?.data?.bestBidPrice === undefined - ? undefined - : toBigNum( - data?.data?.bestBidPrice, - data.decimalPlaces - ).toNumber(); - return Number(bid) - Number(offer); - }, - cellRenderer: ({ - data, - }: VegaICellRendererParams) => { - const offerValue = - data?.data?.bestOfferPrice === undefined - ? undefined - : toBigNum( - data?.data?.bestOfferPrice, - data.decimalPlaces - ).toNumber(); - const bidValue = - data?.data?.bestBidPrice === undefined - ? undefined - : toBigNum( - data?.data?.bestBidPrice, - data.decimalPlaces - ).toNumber(); + if ( + !data || + !data.data?.bestOfferPrice || + !data.data?.bestBidPrice + ) { + return undefined; + } - const offerFlash = ( - - - {data?.data?.bestOfferPrice === undefined - ? '-' - : addDecimalsFormatNumber( - data.data.bestOfferPrice, - data.decimalPlaces - )} - - - ); - const bidFlash = ( - - - {data?.data?.bestBidPrice === undefined - ? '-' - : addDecimalsFormatNumber( - data.data.bestBidPrice, - data.decimalPlaces - )} - - - ); - return ( - <> - {offerFlash} - {bidFlash} - + const offer = toBigNum( + data.data.bestOfferPrice, + data.decimalPlaces ); + const bid = toBigNum(data.data.bestBidPrice, data.decimalPlaces); + + const spread = offer.minus(bid).toNumber(); + + // The calculation above can result in '-0' being rendered after formatting + // so return Math.abs to remove it and just render '0' + if (spread === 0) { + return Math.abs(spread); + } + + return spread; + }, + valueFormatter: ({ + value, + }: VegaValueFormatterParams< + MarketMaybeWithData, + 'data.bestBidPrice' + >) => { + if (!value) return '-'; + return value.toString(); }, }, {