vega-frontend-monorepo/libs/deal-ticket/src/components/trading-mode-tooltip/compile-grid-data.tsx
macqbat ca5c3bc21d
fix: live validation in deal ticket (#2315)
* fix: live validation in deal ticket

* fix: live validation in deal ticket

* fix: live validation in deal ticket

* fix: live validation in deal ticket - fix test mock generate
2022-12-06 09:09:13 +01:00

104 lines
2.9 KiB
TypeScript

import {
t,
getDateTimeFormat,
addDecimalsFormatNumber,
} from '@vegaprotocol/react-helpers';
import { Schema } from '@vegaprotocol/types';
import { Link as UILink } from '@vegaprotocol/ui-toolkit';
import type { ReactNode } from 'react';
import type { MarketDataGridProps } from './market-data-grid';
import { Link } from 'react-router-dom';
import type { MarketDealTicket } from '@vegaprotocol/market-list';
export const compileGridData = (
market: MarketDealTicket,
onSelect?: (id: string) => void
): { label: ReactNode; value?: ReactNode }[] => {
const grid: MarketDataGridProps['grid'] = [];
const isLiquidityMonitoringAuction =
market.data.marketTradingMode ===
Schema.MarketTradingMode.TRADING_MODE_MONITORING_AUCTION &&
market.data.trigger === Schema.AuctionTrigger.AUCTION_TRIGGER_LIQUIDITY;
const formatStake = (value: string) => {
const formattedValue = addDecimalsFormatNumber(
value,
market.tradableInstrument.instrument.product.settlementAsset.decimals
);
const asset =
market.tradableInstrument.instrument.product.settlementAsset.symbol;
return `${formattedValue} ${asset}`;
};
if (!market.data) return grid;
if (market.data.auctionStart) {
grid.push({
label: t('Auction start'),
value: getDateTimeFormat().format(new Date(market.data.auctionStart)),
});
}
if (market.data.auctionEnd) {
const endDate = getDateTimeFormat().format(
new Date(market.data.auctionEnd)
);
grid.push({
label: isLiquidityMonitoringAuction
? t('Est. auction end')
: t('Auction end'),
value: isLiquidityMonitoringAuction ? `~${endDate}` : endDate,
});
}
if (isLiquidityMonitoringAuction && market.data.targetStake) {
grid.push({
label: t('Target liquidity'),
value: formatStake(market.data.targetStake),
});
}
if (isLiquidityMonitoringAuction && market.data.suppliedStake) {
grid.push({
label: (
<Link
to={`/liquidity/${market.id}`}
onClick={() => onSelect && onSelect(market.id)}
>
<UILink>{t('Current liquidity')}</UILink>
</Link>
),
value: formatStake(market.data.suppliedStake),
});
}
if (market.data.indicativePrice) {
grid.push({
label: t('Est. uncrossing price'),
value:
market.data.indicativePrice && market.data.indicativePrice !== '0'
? `~
${addDecimalsFormatNumber(
market.data.indicativePrice,
market.decimalPlaces
)}`
: '-',
});
}
if (market.data.indicativeVolume) {
grid.push({
label: t('Est. uncrossing vol'),
value:
market.data.indicativeVolume && market.data.indicativeVolume !== '0'
? '~' +
addDecimalsFormatNumber(
market.data.indicativeVolume,
market.positionDecimalPlaces
)
: '-',
});
}
return grid;
};