import { forwardRef } from 'react'; import { addDecimalsFormatNumber, formatNumberPercentage, getDateTimeFormat, t, } from '@vegaprotocol/react-helpers'; import type { VegaValueFormatterParams, TypedDataAgGrid, } from '@vegaprotocol/ui-toolkit'; import { AgGridDynamic as AgGrid, TooltipCellComponent, } from '@vegaprotocol/ui-toolkit'; import type { AgGridReact } from 'ag-grid-react'; import { AgGridColumn } from 'ag-grid-react'; import type { ValueFormatterParams } from 'ag-grid-community'; import BigNumber from 'bignumber.js'; import { LiquidityProvisionStatusMapping } from '@vegaprotocol/types'; import type { LiquidityProvisionData } from './liquidity-data-provider'; import { getId } from './liquidity-data-provider'; const percentageFormatter = ({ value }: ValueFormatterParams) => { if (!value) return '-'; return formatNumberPercentage(new BigNumber(value).times(100), 2) || '-'; }; const dateValueFormatter = ({ value }: { value?: string | null }) => { if (!value) { return '-'; } return getDateTimeFormat().format(new Date(value)); }; export interface LiquidityTableProps extends TypedDataAgGrid { symbol?: string; assetDecimalPlaces?: number; stakeToCcyVolume: string | null; } export const LiquidityTable = forwardRef( ({ symbol = '', assetDecimalPlaces, stakeToCcyVolume, ...props }, ref) => { const assetDecimalsFormatter = ({ value }: ValueFormatterParams) => { if (!value) return '-'; return `${addDecimalsFormatNumber(value, assetDecimalPlaces ?? 0, 5)}`; }; const stakeToCcyVolumeFormatter = ({ value }: ValueFormatterParams) => { if (!value) return '-'; const newValue = new BigNumber(value) .times(Number(stakeToCcyVolume) || 1) .toString(); return `${addDecimalsFormatNumber(newValue, assetDecimalPlaces ?? 0, 5)}`; }; return ( getId(data)} ref={ref} tooltipShowDelay={500} defaultColDef={{ flex: 1, resizable: true, minWidth: 100, tooltipComponent: TooltipCellComponent, sortable: true, }} {...props} > ) => { if (!value) return value; return LiquidityProvisionStatusMapping[value]; }} /> ); } ); export default LiquidityTable;