feat(#2307): make liquidity provision table more prominent (#2350)

* feat(#2307): make liquidity provision table more prominent

* feat(#2307): show title only if content is defined

* feat(#2307): filter LP to show active, undeployed and pending

* fix(#2307): remove showTitle attribute

* fix: check marketId and name before building href

* fix(#2307): revert header changes
This commit is contained in:
m.ray 2022-12-12 04:44:58 -05:00 committed by GitHub
parent 3bca206e45
commit 71399105ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 111 additions and 11 deletions

View File

@ -30,11 +30,103 @@ import { Link, useParams } from 'react-router-dom';
export const Liquidity = () => {
const params = useParams();
const marketId = params.marketId;
return <LiquidityViewContainer marketId={marketId} />;
};
export const LiquidityContainer = ({
marketId,
}: {
marketId: string | undefined;
}) => {
const gridRef = useRef<AgGridReact | null>(null);
const { data: marketProvision } = useDataProvider({
dataProvider: marketLiquidityDataProvider,
skipUpdates: true,
variables: useMemo(() => ({ marketId }), [marketId]),
});
const dataRef = useRef<LiquidityProvisionData[] | null>(null);
const { reload } = useDataProvider({
dataProvider: liquidityProvisionsDataProvider,
variables: useMemo(() => ({ marketId }), [marketId]),
});
const update = useCallback(
({ data }: { data: LiquidityProvisionData[] | null }) => {
if (!gridRef.current?.api) {
return false;
}
if (dataRef.current?.length) {
dataRef.current = data;
gridRef.current.api.refreshInfiniteCache();
return true;
}
return false;
},
[gridRef]
);
const {
data: liquidityProviders,
loading,
error,
} = useDataProvider({
dataProvider: lpAggregatedDataProvider,
update,
variables: useMemo(() => ({ marketId }), [marketId]),
});
// To be removed when liquidityProvision subscriptions are working
useEffect(() => {
const interval = setInterval(reload, 10000);
return () => clearInterval(interval);
}, [reload]);
const assetDecimalPlaces =
marketProvision?.market?.tradableInstrument.instrument.product
.settlementAsset.decimals || 0;
const symbol =
marketProvision?.market?.tradableInstrument.instrument.product
.settlementAsset.symbol;
const { param: stakeToCcySiskas } = useNetworkParam(
NetworkParams.market_liquidity_stakeToCcySiskas
);
const stakeToCcySiska = stakeToCcySiskas && stakeToCcySiskas[0];
const filteredEdges = useMemo(
() =>
liquidityProviders?.filter((e) =>
[
Schema.LiquidityProvisionStatus.STATUS_ACTIVE,
Schema.LiquidityProvisionStatus.STATUS_UNDEPLOYED,
Schema.LiquidityProvisionStatus.STATUS_PENDING,
].includes(e.status)
),
[liquidityProviders]
);
return (
<AsyncRenderer loading={loading} error={error} data={filteredEdges}>
<LiquidityTable
ref={gridRef}
data={filteredEdges}
symbol={symbol}
assetDecimalPlaces={assetDecimalPlaces}
stakeToCcySiskas={stakeToCcySiska}
/>
</AsyncRenderer>
);
};
export const LiquidityViewContainer = ({
marketId,
}: {
marketId: string | undefined;
}) => {
const { pubKey } = useVegaWallet();
const gridRef = useRef<AgGridReact | null>(null);
const marketId = params.marketId;
const { data: marketProvision } = useDataProvider({
dataProvider: marketLiquidityDataProvider,
skipUpdates: true,
@ -133,6 +225,8 @@ export const Liquidity = () => {
<div className="h-full grid grid-rows-[min-content_1fr]">
<Header
title={
marketProvision?.market?.tradableInstrument.instrument.name &&
marketId && (
<Link to={`/markets/${marketId}`}>
<UiToolkitLink className="sm:text-lg md:text-xl lg:text-2xl flex items-center gap-2 whitespace-nowrap hover:text-neutral-500 dark:hover:text-neutral-300">
{`${
@ -140,6 +234,7 @@ export const Liquidity = () => {
} ${t('liquidity provision')}`}
</UiToolkitLink>
</Link>
)
}
>
<HeaderStat

View File

@ -25,6 +25,7 @@ import type { SingleMarketFieldsFragment } from '@vegaprotocol/market-list';
import { VegaWalletContainer } from '../../components/vega-wallet-container';
import { TradeMarketHeader } from './trade-market-header';
import { NO_MARKET } from './constants';
import { LiquidityContainer } from '../liquidity/liquidity';
type MarketDependantView =
| typeof CandlesChartContainer
@ -46,6 +47,7 @@ const requiresMarket = (View: MarketDependantView) => {
const TradingViews = {
Candles: requiresMarket(CandlesChartContainer),
Depth: requiresMarket(DepthChartContainer),
Liquidity: requiresMarket(LiquidityContainer),
Ticket: requiresMarket(DealTicketContainer),
Info: requiresMarket(MarketInfoContainer),
Orderbook: requiresMarket(OrderbookContainer),
@ -86,6 +88,9 @@ const MainGrid = ({
<Tab id="depth" name={t('Depth')}>
<TradingViews.Depth marketId={marketId} />
</Tab>
<Tab id="liquidity" name={t('Liquidity')}>
<TradingViews.Liquidity marketId={marketId} />
</Tab>
</Tabs>
</TradeGridChild>
</ResizableGridPanel>