chore(markets): remove trading mode and type from market query (#6117)
Co-authored-by: Dariusz Majcherczyk <dariusz.majcherczyk@gmail.com>
This commit is contained in:
parent
bb2464ddc2
commit
df21996707
@ -1,5 +1,5 @@
|
|||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { getAsset, type MarketFieldsFragment } from '@vegaprotocol/markets';
|
import { getAsset, type MarketMaybeWithData } from '@vegaprotocol/markets';
|
||||||
import { t } from '@vegaprotocol/i18n';
|
import { t } from '@vegaprotocol/i18n';
|
||||||
import { ButtonLink } from '@vegaprotocol/ui-toolkit';
|
import { ButtonLink } from '@vegaprotocol/ui-toolkit';
|
||||||
import { type AgGridReact } from 'ag-grid-react';
|
import { type AgGridReact } from 'ag-grid-react';
|
||||||
@ -17,7 +17,7 @@ import { type RowClickedEvent } from 'ag-grid-community';
|
|||||||
import { Link, useNavigate } from 'react-router-dom';
|
import { Link, useNavigate } from 'react-router-dom';
|
||||||
|
|
||||||
type MarketsTableProps = {
|
type MarketsTableProps = {
|
||||||
data: MarketFieldsFragment[] | null;
|
data: MarketMaybeWithData[] | null;
|
||||||
};
|
};
|
||||||
export const MarketsTable = ({ data }: MarketsTableProps) => {
|
export const MarketsTable = ({ data }: MarketsTableProps) => {
|
||||||
const openAssetDetailsDialog = useAssetDetailsDialogStore(
|
const openAssetDetailsDialog = useAssetDetailsDialogStore(
|
||||||
@ -56,10 +56,10 @@ export const MarketsTable = ({ data }: MarketsTableProps) => {
|
|||||||
headerName: t('Status'),
|
headerName: t('Status'),
|
||||||
field: 'state',
|
field: 'state',
|
||||||
hide: window.innerWidth <= BREAKPOINT_MD,
|
hide: window.innerWidth <= BREAKPOINT_MD,
|
||||||
valueGetter: ({
|
valueGetter: ({ data }: VegaValueGetterParams<MarketMaybeWithData>) => {
|
||||||
data,
|
return data?.data?.marketState
|
||||||
}: VegaValueGetterParams<MarketFieldsFragment>) => {
|
? MarketStateMapping[data?.data.marketState]
|
||||||
return data?.state ? MarketStateMapping[data?.state] : '-';
|
: '-';
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -70,7 +70,7 @@ export const MarketsTable = ({ data }: MarketsTableProps) => {
|
|||||||
cellRenderer: ({
|
cellRenderer: ({
|
||||||
data,
|
data,
|
||||||
}: VegaICellRendererParams<
|
}: VegaICellRendererParams<
|
||||||
MarketFieldsFragment,
|
MarketMaybeWithData,
|
||||||
'tradableInstrument.instrument.product.settlementAsset.symbol'
|
'tradableInstrument.instrument.product.settlementAsset.symbol'
|
||||||
>) => {
|
>) => {
|
||||||
const value = data && getAsset(data);
|
const value = data && getAsset(data);
|
||||||
@ -99,7 +99,7 @@ export const MarketsTable = ({ data }: MarketsTableProps) => {
|
|||||||
field: 'id',
|
field: 'id',
|
||||||
cellRenderer: ({
|
cellRenderer: ({
|
||||||
value,
|
value,
|
||||||
}: VegaICellRendererParams<MarketFieldsFragment, 'id'>) =>
|
}: VegaICellRendererParams<MarketMaybeWithData, 'id'>) =>
|
||||||
value ? (
|
value ? (
|
||||||
<Link className="underline" to={value}>
|
<Link className="underline" to={value}>
|
||||||
{t('View details')}
|
{t('View details')}
|
||||||
@ -116,7 +116,7 @@ export const MarketsTable = ({ data }: MarketsTableProps) => {
|
|||||||
<AgGrid
|
<AgGrid
|
||||||
ref={gridRef}
|
ref={gridRef}
|
||||||
rowData={data}
|
rowData={data}
|
||||||
getRowId={({ data }: { data: MarketFieldsFragment }) => data.id}
|
getRowId={({ data }: { data: MarketMaybeWithData }) => data.id}
|
||||||
overlayNoRowsTemplate={t('This chain has no markets')}
|
overlayNoRowsTemplate={t('This chain has no markets')}
|
||||||
domLayout="autoHeight"
|
domLayout="autoHeight"
|
||||||
defaultColDef={{
|
defaultColDef={{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { useScrollToLocation } from '../../hooks/scroll-to-location';
|
import { useScrollToLocation } from '../../hooks/scroll-to-location';
|
||||||
import { useDocumentTitle } from '../../hooks/use-document-title';
|
import { useDocumentTitle } from '../../hooks/use-document-title';
|
||||||
import { marketsProvider } from '@vegaprotocol/markets';
|
import { marketsWithDataProvider } from '@vegaprotocol/markets';
|
||||||
import { RouteTitle } from '../../components/route-title';
|
import { RouteTitle } from '../../components/route-title';
|
||||||
import { AsyncRenderer } from '@vegaprotocol/ui-toolkit';
|
import { AsyncRenderer } from '@vegaprotocol/ui-toolkit';
|
||||||
import { t } from '@vegaprotocol/i18n';
|
import { t } from '@vegaprotocol/i18n';
|
||||||
@ -12,7 +12,7 @@ export const MarketsPage = () => {
|
|||||||
useScrollToLocation();
|
useScrollToLocation();
|
||||||
|
|
||||||
const { data, loading, error } = useDataProvider({
|
const { data, loading, error } = useDataProvider({
|
||||||
dataProvider: marketsProvider,
|
dataProvider: marketsWithDataProvider,
|
||||||
variables: undefined,
|
variables: undefined,
|
||||||
skipUpdates: true,
|
skipUpdates: true,
|
||||||
});
|
});
|
||||||
|
@ -5,8 +5,8 @@ import type { Market } from '@vegaprotocol/markets';
|
|||||||
import {
|
import {
|
||||||
addDecimalsFormatNumber,
|
addDecimalsFormatNumber,
|
||||||
fromNanoSeconds,
|
fromNanoSeconds,
|
||||||
getExpiryDate,
|
|
||||||
getMarketExpiryDate,
|
getMarketExpiryDate,
|
||||||
|
useExpiryDate,
|
||||||
} from '@vegaprotocol/utils';
|
} from '@vegaprotocol/utils';
|
||||||
import {
|
import {
|
||||||
Last24hPriceChange,
|
Last24hPriceChange,
|
||||||
@ -20,6 +20,7 @@ import {
|
|||||||
useMarketTradingMode,
|
useMarketTradingMode,
|
||||||
useExternalTwap,
|
useExternalTwap,
|
||||||
getQuoteName,
|
getQuoteName,
|
||||||
|
useMarketState,
|
||||||
} from '@vegaprotocol/markets';
|
} from '@vegaprotocol/markets';
|
||||||
import { MarketState as State } from '@vegaprotocol/types';
|
import { MarketState as State } from '@vegaprotocol/types';
|
||||||
import { HeaderStat } from '../../components/header';
|
import { HeaderStat } from '../../components/header';
|
||||||
@ -66,11 +67,8 @@ export const MarketHeaderStats = ({ market }: MarketHeaderStatsProps) => {
|
|||||||
quoteUnit={quoteUnit}
|
quoteUnit={quoteUnit}
|
||||||
/>
|
/>
|
||||||
</HeaderStat>
|
</HeaderStat>
|
||||||
<HeaderStatMarketTradingMode
|
<HeaderStatMarketTradingMode marketId={market.id} />
|
||||||
marketId={market.id}
|
<MarketState marketId={market.id} />
|
||||||
initialTradingMode={market.tradingMode}
|
|
||||||
/>
|
|
||||||
<MarketState market={market} />
|
|
||||||
{asset ? (
|
{asset ? (
|
||||||
<HeaderStat
|
<HeaderStat
|
||||||
heading={t('Settlement asset')}
|
heading={t('Settlement asset')}
|
||||||
@ -264,13 +262,13 @@ export const FundingCountdown = ({ marketId }: { marketId: string }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const ExpiryLabel = ({ market }: ExpiryLabelProps) => {
|
const ExpiryLabel = ({ market }: ExpiryLabelProps) => {
|
||||||
const content = market.tradableInstrument.instrument.metadata.tags
|
const { data: marketState } = useMarketState(market.id);
|
||||||
? getExpiryDate(
|
const content =
|
||||||
market.tradableInstrument.instrument.metadata.tags,
|
useExpiryDate(
|
||||||
market.marketTimestamps.close,
|
market.tradableInstrument.instrument.metadata.tags,
|
||||||
market.state
|
market.marketTimestamps.close,
|
||||||
)
|
marketState
|
||||||
: '-';
|
) || '-';
|
||||||
return <div data-testid="trading-expiry">{content}</div>;
|
return <div data-testid="trading-expiry">{content}</div>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -283,6 +281,7 @@ const ExpiryTooltipContent = ({
|
|||||||
market,
|
market,
|
||||||
explorerUrl,
|
explorerUrl,
|
||||||
}: ExpiryTooltipContentProps) => {
|
}: ExpiryTooltipContentProps) => {
|
||||||
|
const { data: state } = useMarketState(market.id);
|
||||||
const t = useT();
|
const t = useT();
|
||||||
if (market.marketTimestamps.close === null) {
|
if (market.marketTimestamps.close === null) {
|
||||||
const oracleId =
|
const oracleId =
|
||||||
@ -298,8 +297,8 @@ const ExpiryTooltipContent = ({
|
|||||||
const isExpired =
|
const isExpired =
|
||||||
metadataExpiryDate &&
|
metadataExpiryDate &&
|
||||||
Date.now() - metadataExpiryDate.valueOf() > 0 &&
|
Date.now() - metadataExpiryDate.valueOf() > 0 &&
|
||||||
(market.state === State.STATE_TRADING_TERMINATED ||
|
(state === State.STATE_TRADING_TERMINATED ||
|
||||||
market.state === State.STATE_SETTLED);
|
state === State.STATE_SETTLED);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<section data-testid="expiry-tooltip">
|
<section data-testid="expiry-tooltip">
|
||||||
|
@ -40,7 +40,6 @@ describe('Closed', () => {
|
|||||||
|
|
||||||
const market = createMarketFragment({
|
const market = createMarketFragment({
|
||||||
id: marketId,
|
id: marketId,
|
||||||
state: MarketState.STATE_SETTLED,
|
|
||||||
tradableInstrument: {
|
tradableInstrument: {
|
||||||
instrument: {
|
instrument: {
|
||||||
metadata: {
|
metadata: {
|
||||||
@ -96,6 +95,7 @@ describe('Closed', () => {
|
|||||||
|
|
||||||
const marketsData = createMarketsDataFragment({
|
const marketsData = createMarketsDataFragment({
|
||||||
__typename: 'MarketData',
|
__typename: 'MarketData',
|
||||||
|
marketState: MarketState.STATE_SETTLED,
|
||||||
market: {
|
market: {
|
||||||
__typename: 'Market',
|
__typename: 'Market',
|
||||||
id: marketId,
|
id: marketId,
|
||||||
@ -208,7 +208,7 @@ describe('Closed', () => {
|
|||||||
const cells = screen.getAllByRole('gridcell');
|
const cells = screen.getAllByRole('gridcell');
|
||||||
const expectedValues = [
|
const expectedValues = [
|
||||||
market.tradableInstrument.instrument.code,
|
market.tradableInstrument.instrument.code,
|
||||||
MarketStateMapping[market.state],
|
MarketStateMapping[marketsData.marketState],
|
||||||
'3 days ago',
|
'3 days ago',
|
||||||
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
||||||
addDecimalsFormatNumber(marketsData.bestBidPrice, market.decimalPlaces),
|
addDecimalsFormatNumber(marketsData.bestBidPrice, market.decimalPlaces),
|
||||||
@ -227,87 +227,6 @@ describe('Closed', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('only renders settled and terminated markets', async () => {
|
|
||||||
const mixedMarkets = [
|
|
||||||
{
|
|
||||||
// include as settled
|
|
||||||
__typename: 'MarketEdge' as const,
|
|
||||||
node: createMarketFragment({
|
|
||||||
id: 'include-0',
|
|
||||||
state: MarketState.STATE_SETTLED,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// omit this market
|
|
||||||
__typename: 'MarketEdge' as const,
|
|
||||||
node: createMarketFragment({
|
|
||||||
id: 'discard-0',
|
|
||||||
state: MarketState.STATE_SUSPENDED,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// include as terminated
|
|
||||||
__typename: 'MarketEdge' as const,
|
|
||||||
node: createMarketFragment({
|
|
||||||
id: 'include-1',
|
|
||||||
state: MarketState.STATE_TRADING_TERMINATED,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// omit this market
|
|
||||||
__typename: 'MarketEdge' as const,
|
|
||||||
node: createMarketFragment({
|
|
||||||
id: 'discard-1',
|
|
||||||
state: MarketState.STATE_ACTIVE,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
];
|
|
||||||
const mixedMarketsMock: MockedResponse<MarketsQuery> = {
|
|
||||||
request: {
|
|
||||||
query: MarketsDocument,
|
|
||||||
},
|
|
||||||
result: {
|
|
||||||
data: {
|
|
||||||
marketsConnection: {
|
|
||||||
__typename: 'MarketConnection',
|
|
||||||
edges: mixedMarkets,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
await renderComponent([mixedMarketsMock, marketsDataMock, oracleDataMock]);
|
|
||||||
|
|
||||||
// check that the number of rows in datagrid is 2
|
|
||||||
const container = within(
|
|
||||||
document.querySelector('.ag-center-cols-container') as HTMLElement
|
|
||||||
);
|
|
||||||
const expectedRows = mixedMarkets.filter((m) => {
|
|
||||||
return [
|
|
||||||
MarketState.STATE_SETTLED,
|
|
||||||
MarketState.STATE_TRADING_TERMINATED,
|
|
||||||
].includes(m.node.state);
|
|
||||||
});
|
|
||||||
|
|
||||||
await waitFor(() => {
|
|
||||||
// check rows length is correct
|
|
||||||
const rows = container.getAllByRole('row');
|
|
||||||
expect(rows).toHaveLength(expectedRows.length);
|
|
||||||
});
|
|
||||||
|
|
||||||
// check that only included ids are shown
|
|
||||||
const cells = screen
|
|
||||||
.getAllByRole('gridcell')
|
|
||||||
.filter((cell) => cell.getAttribute('col-id') === 'code')
|
|
||||||
.map((cell) => {
|
|
||||||
const marketCode = within(cell).getByTestId('stack-cell-primary');
|
|
||||||
return marketCode.textContent;
|
|
||||||
});
|
|
||||||
expect(cells).toEqual(
|
|
||||||
expectedRows.map((m) => m.node.tradableInstrument.instrument.code)
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('display market actions', async () => {
|
it('display market actions', async () => {
|
||||||
// Use market with a successor Id as the actions dropdown will optionally
|
// Use market with a successor Id as the actions dropdown will optionally
|
||||||
// show a link to the successor market
|
// show a link to the successor market
|
||||||
@ -315,8 +234,7 @@ describe('Closed', () => {
|
|||||||
{
|
{
|
||||||
__typename: 'MarketEdge' as const,
|
__typename: 'MarketEdge' as const,
|
||||||
node: createMarketFragment({
|
node: createMarketFragment({
|
||||||
id: 'include-0',
|
id: marketId,
|
||||||
state: MarketState.STATE_SETTLED,
|
|
||||||
successorMarketID: 'successor',
|
successorMarketID: 'successor',
|
||||||
parentMarketID: 'parent',
|
parentMarketID: 'parent',
|
||||||
}),
|
}),
|
||||||
@ -375,8 +293,7 @@ describe('Closed', () => {
|
|||||||
{
|
{
|
||||||
__typename: 'MarketEdge' as const,
|
__typename: 'MarketEdge' as const,
|
||||||
node: createMarketFragment({
|
node: createMarketFragment({
|
||||||
id: 'include-0',
|
id: marketId,
|
||||||
state: MarketState.STATE_SETTLED,
|
|
||||||
successorMarketID: 'successor',
|
successorMarketID: 'successor',
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
@ -15,7 +15,7 @@ import {
|
|||||||
addDecimalsFormatNumber,
|
addDecimalsFormatNumber,
|
||||||
getMarketExpiryDate,
|
getMarketExpiryDate,
|
||||||
} from '@vegaprotocol/utils';
|
} from '@vegaprotocol/utils';
|
||||||
import { closedMarketsWithDataProvider, getAsset } from '@vegaprotocol/markets';
|
import { closedMarketsProvider, getAsset } from '@vegaprotocol/markets';
|
||||||
import type { DataSourceFilterFragment } from '@vegaprotocol/markets';
|
import type { DataSourceFilterFragment } from '@vegaprotocol/markets';
|
||||||
import { useAssetDetailsDialogStore } from '@vegaprotocol/assets';
|
import { useAssetDetailsDialogStore } from '@vegaprotocol/assets';
|
||||||
import { useMarketClickHandler } from '../../lib/hooks/use-market-click-handler';
|
import { useMarketClickHandler } from '../../lib/hooks/use-market-click-handler';
|
||||||
@ -35,7 +35,7 @@ interface Row {
|
|||||||
code: string;
|
code: string;
|
||||||
name: string;
|
name: string;
|
||||||
decimalPlaces: number;
|
decimalPlaces: number;
|
||||||
state: MarketState;
|
state?: MarketState;
|
||||||
metadata: string[];
|
metadata: string[];
|
||||||
closeTimestamp: string | null;
|
closeTimestamp: string | null;
|
||||||
bestBidPrice: string | undefined;
|
bestBidPrice: string | undefined;
|
||||||
@ -53,7 +53,7 @@ interface Row {
|
|||||||
|
|
||||||
export const Closed = () => {
|
export const Closed = () => {
|
||||||
const { data: marketData, error } = useDataProvider({
|
const { data: marketData, error } = useDataProvider({
|
||||||
dataProvider: closedMarketsWithDataProvider,
|
dataProvider: closedMarketsProvider,
|
||||||
variables: undefined,
|
variables: undefined,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ export const Closed = () => {
|
|||||||
code: instrument.code,
|
code: instrument.code,
|
||||||
name: instrument.name,
|
name: instrument.name,
|
||||||
decimalPlaces: market.decimalPlaces,
|
decimalPlaces: market.decimalPlaces,
|
||||||
state: market.state,
|
state: market.data?.marketState,
|
||||||
metadata: instrument.metadata.tags ?? [],
|
metadata: instrument.metadata.tags ?? [],
|
||||||
closeTimestamp: market.marketTimestamps.close,
|
closeTimestamp: market.marketTimestamps.close,
|
||||||
bestBidPrice: market.data?.bestBidPrice,
|
bestBidPrice: market.data?.bestBidPrice,
|
||||||
|
@ -3,11 +3,17 @@ import type { MockedResponse } from '@apollo/client/testing';
|
|||||||
import { MockedProvider } from '@apollo/client/testing';
|
import { MockedProvider } from '@apollo/client/testing';
|
||||||
import { ProposalsList } from './proposals-list';
|
import { ProposalsList } from './proposals-list';
|
||||||
import { MarketState } from '@vegaprotocol/types';
|
import { MarketState } from '@vegaprotocol/types';
|
||||||
import { createMarketFragment } from '@vegaprotocol/mock';
|
import {
|
||||||
|
createMarketFragment,
|
||||||
|
createMarketsDataFragment,
|
||||||
|
} from '@vegaprotocol/mock';
|
||||||
import {
|
import {
|
||||||
type MarketsQuery,
|
type MarketsQuery,
|
||||||
MarketsDocument,
|
MarketsDocument,
|
||||||
type MarketsQueryVariables,
|
type MarketsQueryVariables,
|
||||||
|
type MarketsDataQuery,
|
||||||
|
type MarketsDataQueryVariables,
|
||||||
|
MarketsDataDocument,
|
||||||
} from '@vegaprotocol/markets';
|
} from '@vegaprotocol/markets';
|
||||||
|
|
||||||
const parentMarketName = 'Parent Market Name';
|
const parentMarketName = 'Parent Market Name';
|
||||||
@ -15,12 +21,13 @@ const ParentMarketCell = () => <span>{parentMarketName}</span>;
|
|||||||
|
|
||||||
describe('ProposalsList', () => {
|
describe('ProposalsList', () => {
|
||||||
const rowContainerSelector = '.ag-center-cols-container';
|
const rowContainerSelector = '.ag-center-cols-container';
|
||||||
const market = createMarketFragment({
|
const market = createMarketFragment();
|
||||||
state: MarketState.STATE_PROPOSED,
|
const marketData = createMarketsDataFragment({
|
||||||
|
marketState: MarketState.STATE_PROPOSED,
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be properly rendered', async () => {
|
it('should be properly rendered', async () => {
|
||||||
const mock: MockedResponse<MarketsQuery, MarketsQueryVariables> = {
|
const marketMock: MockedResponse<MarketsQuery, MarketsQueryVariables> = {
|
||||||
request: {
|
request: {
|
||||||
query: MarketsDocument,
|
query: MarketsDocument,
|
||||||
},
|
},
|
||||||
@ -37,8 +44,28 @@ describe('ProposalsList', () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const marketDataMock: MockedResponse<
|
||||||
|
MarketsDataQuery,
|
||||||
|
MarketsDataQueryVariables
|
||||||
|
> = {
|
||||||
|
request: {
|
||||||
|
query: MarketsDataDocument,
|
||||||
|
},
|
||||||
|
result: {
|
||||||
|
data: {
|
||||||
|
marketsConnection: {
|
||||||
|
edges: [
|
||||||
|
{
|
||||||
|
node: { data: marketData },
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
render(
|
render(
|
||||||
<MockedProvider mocks={[mock]}>
|
<MockedProvider mocks={[marketMock, marketDataMock]}>
|
||||||
<ProposalsList cellRenderers={{ ParentMarketCell }} />
|
<ProposalsList cellRenderers={{ ParentMarketCell }} />
|
||||||
</MockedProvider>
|
</MockedProvider>
|
||||||
);
|
);
|
||||||
@ -69,7 +96,7 @@ describe('ProposalsList', () => {
|
|||||||
|
|
||||||
expect(await container.findAllByRole('row')).toHaveLength(
|
expect(await container.findAllByRole('row')).toHaveLength(
|
||||||
// @ts-ignore data is mocked
|
// @ts-ignore data is mocked
|
||||||
mock?.result?.data.marketsConnection.edges.length
|
marketMock?.result?.data.marketsConnection.edges.length
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(
|
expect(
|
||||||
@ -81,7 +108,7 @@ describe('ProposalsList', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('empty response should causes no data message display', async () => {
|
it('empty response should causes no data message display', async () => {
|
||||||
const mock: MockedResponse<MarketsQuery, MarketsQueryVariables> = {
|
const marketMock: MockedResponse<MarketsQuery, MarketsQueryVariables> = {
|
||||||
request: {
|
request: {
|
||||||
query: MarketsDocument,
|
query: MarketsDocument,
|
||||||
},
|
},
|
||||||
@ -93,8 +120,23 @@ describe('ProposalsList', () => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
const marketDataMock: MockedResponse<
|
||||||
|
MarketsDataQuery,
|
||||||
|
MarketsDataQueryVariables
|
||||||
|
> = {
|
||||||
|
request: {
|
||||||
|
query: MarketsDataDocument,
|
||||||
|
},
|
||||||
|
result: {
|
||||||
|
data: {
|
||||||
|
marketsConnection: {
|
||||||
|
edges: [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
render(
|
render(
|
||||||
<MockedProvider mocks={[mock]}>
|
<MockedProvider mocks={[marketMock, marketDataMock]}>
|
||||||
<ProposalsList cellRenderers={{ ParentMarketCell }} />
|
<ProposalsList cellRenderers={{ ParentMarketCell }} />
|
||||||
</MockedProvider>
|
</MockedProvider>
|
||||||
);
|
);
|
||||||
|
@ -19,7 +19,7 @@ import {
|
|||||||
} from '@vegaprotocol/types';
|
} from '@vegaprotocol/types';
|
||||||
import { ProposalActionsDropdown } from './proposal-actions-dropdown';
|
import { ProposalActionsDropdown } from './proposal-actions-dropdown';
|
||||||
import {
|
import {
|
||||||
type MarketFieldsFragment,
|
type MarketMaybeWithData,
|
||||||
getProductType,
|
getProductType,
|
||||||
} from '@vegaprotocol/markets';
|
} from '@vegaprotocol/markets';
|
||||||
import { useT } from '../../../lib/use-t';
|
import { useT } from '../../../lib/use-t';
|
||||||
@ -40,7 +40,7 @@ export const useColumnDefs = () => {
|
|||||||
data,
|
data,
|
||||||
}: {
|
}: {
|
||||||
value: string;
|
value: string;
|
||||||
data: MarketFieldsFragment;
|
data: MarketMaybeWithData;
|
||||||
}) => {
|
}) => {
|
||||||
if (!value || !data) return '-';
|
if (!value || !data) return '-';
|
||||||
|
|
||||||
@ -70,10 +70,13 @@ export const useColumnDefs = () => {
|
|||||||
{
|
{
|
||||||
colId: 'state',
|
colId: 'state',
|
||||||
headerName: t('State'),
|
headerName: t('State'),
|
||||||
field: 'state',
|
field: 'data.marketState',
|
||||||
valueFormatter: ({
|
valueFormatter: ({
|
||||||
value,
|
value,
|
||||||
}: VegaValueFormatterParams<MarketFieldsFragment, 'state'>) => {
|
}: VegaValueFormatterParams<
|
||||||
|
MarketMaybeWithData,
|
||||||
|
'data.marketState'
|
||||||
|
>) => {
|
||||||
return value ? MarketStateMapping[value] : '-';
|
return value ? MarketStateMapping[value] : '-';
|
||||||
},
|
},
|
||||||
filter: SetFilter,
|
filter: SetFilter,
|
||||||
@ -93,7 +96,7 @@ export const useColumnDefs = () => {
|
|||||||
valueFormatter: ({
|
valueFormatter: ({
|
||||||
value,
|
value,
|
||||||
}: VegaValueFormatterParams<
|
}: VegaValueFormatterParams<
|
||||||
MarketFieldsFragment,
|
MarketMaybeWithData,
|
||||||
'marketTimestamps.pending'
|
'marketTimestamps.pending'
|
||||||
>) => {
|
>) => {
|
||||||
return value ? getDateTimeFormat().format(new Date(value)) : '-';
|
return value ? getDateTimeFormat().format(new Date(value)) : '-';
|
||||||
@ -107,7 +110,7 @@ export const useColumnDefs = () => {
|
|||||||
valueFormatter: ({
|
valueFormatter: ({
|
||||||
value,
|
value,
|
||||||
}: VegaValueFormatterParams<
|
}: VegaValueFormatterParams<
|
||||||
MarketFieldsFragment,
|
MarketMaybeWithData,
|
||||||
'marketTimestamps.open'
|
'marketTimestamps.open'
|
||||||
>) => (value ? getDateTimeFormat().format(new Date(value)) : '-'),
|
>) => (value ? getDateTimeFormat().format(new Date(value)) : '-'),
|
||||||
filter: DateRangeFilter,
|
filter: DateRangeFilter,
|
||||||
@ -117,7 +120,7 @@ export const useColumnDefs = () => {
|
|||||||
...COL_DEFS.actions,
|
...COL_DEFS.actions,
|
||||||
cellRenderer: ({
|
cellRenderer: ({
|
||||||
data,
|
data,
|
||||||
}: VegaICellRendererParams<MarketFieldsFragment>) => {
|
}: VegaICellRendererParams<MarketMaybeWithData>) => {
|
||||||
if (!data?.marketProposal?.id) return null;
|
if (!data?.marketProposal?.id) return null;
|
||||||
|
|
||||||
return <ProposalActionsDropdown id={data.marketProposal.id} />;
|
return <ProposalActionsDropdown id={data.marketProposal.id} />;
|
||||||
|
@ -9,7 +9,7 @@ export interface SettlementDataCellProps {
|
|||||||
oracleSpecId: string;
|
oracleSpecId: string;
|
||||||
metaDate: Date | null;
|
metaDate: Date | null;
|
||||||
closeTimestamp: string | null;
|
closeTimestamp: string | null;
|
||||||
marketState: MarketState;
|
marketState?: MarketState;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const SettlementDateCell = ({
|
export const SettlementDateCell = ({
|
||||||
|
@ -125,7 +125,9 @@ export const useMarketsColumnDefs = () => {
|
|||||||
valueFormatter: ({
|
valueFormatter: ({
|
||||||
data,
|
data,
|
||||||
}: VegaValueFormatterParams<MarketMaybeWithData, 'state'>) => {
|
}: VegaValueFormatterParams<MarketMaybeWithData, 'state'>) => {
|
||||||
return data?.state ? Schema.MarketStateMapping[data.state] : '-';
|
return data?.data?.marketState
|
||||||
|
? Schema.MarketStateMapping[data?.data?.marketState]
|
||||||
|
: '-';
|
||||||
},
|
},
|
||||||
filter: SetFilter,
|
filter: SetFilter,
|
||||||
filterParams: {
|
filterParams: {
|
||||||
|
@ -72,17 +72,17 @@ const MarketData = ({
|
|||||||
|
|
||||||
const marketTradingMode = marketData
|
const marketTradingMode = marketData
|
||||||
? marketData.marketTradingMode
|
? marketData.marketTradingMode
|
||||||
: market.data
|
: market.data?.marketTradingMode;
|
||||||
? market.data.marketTradingMode
|
|
||||||
: market.tradingMode;
|
|
||||||
|
|
||||||
const mode = [
|
const mode =
|
||||||
MarketTradingMode.TRADING_MODE_BATCH_AUCTION,
|
marketTradingMode &&
|
||||||
MarketTradingMode.TRADING_MODE_MONITORING_AUCTION,
|
[
|
||||||
MarketTradingMode.TRADING_MODE_OPENING_AUCTION,
|
MarketTradingMode.TRADING_MODE_BATCH_AUCTION,
|
||||||
].includes(marketTradingMode)
|
MarketTradingMode.TRADING_MODE_MONITORING_AUCTION,
|
||||||
? MarketTradingModeMapping[marketTradingMode]
|
MarketTradingMode.TRADING_MODE_OPENING_AUCTION,
|
||||||
: '';
|
].includes(marketTradingMode)
|
||||||
|
? MarketTradingModeMapping[marketTradingMode]
|
||||||
|
: '';
|
||||||
|
|
||||||
const { oneDayCandles } = useCandles({ marketId: market.id });
|
const { oneDayCandles } = useCandles({ marketId: market.id });
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ export const MarketSelector = ({
|
|||||||
<div data-testid="market-selector-list">
|
<div data-testid="market-selector-list">
|
||||||
<MarketList
|
<MarketList
|
||||||
data={markets}
|
data={markets}
|
||||||
loading={loading}
|
loading={loading && !data}
|
||||||
error={error}
|
error={error}
|
||||||
searchTerm={filter.searchTerm}
|
searchTerm={filter.searchTerm}
|
||||||
currentMarketId={currentMarketId}
|
currentMarketId={currentMarketId}
|
||||||
|
@ -409,7 +409,6 @@ describe('useMarketSelectorList', () => {
|
|||||||
}),
|
}),
|
||||||
createMarketFragment({
|
createMarketFragment({
|
||||||
id: 'market-1',
|
id: 'market-1',
|
||||||
state: MarketState.STATE_ACTIVE,
|
|
||||||
// @ts-ignore data not on fragment
|
// @ts-ignore data not on fragment
|
||||||
data: createMarketsDataFragment({
|
data: createMarketsDataFragment({
|
||||||
marketState: MarketState.STATE_ACTIVE,
|
marketState: MarketState.STATE_ACTIVE,
|
||||||
@ -424,7 +423,6 @@ describe('useMarketSelectorList', () => {
|
|||||||
}),
|
}),
|
||||||
createMarketFragment({
|
createMarketFragment({
|
||||||
id: 'market-2',
|
id: 'market-2',
|
||||||
state: MarketState.STATE_ACTIVE,
|
|
||||||
// @ts-ignore data not on fragment
|
// @ts-ignore data not on fragment
|
||||||
data: createMarketsDataFragment({
|
data: createMarketsDataFragment({
|
||||||
marketState: MarketState.STATE_ACTIVE,
|
marketState: MarketState.STATE_ACTIVE,
|
||||||
@ -439,7 +437,6 @@ describe('useMarketSelectorList', () => {
|
|||||||
}),
|
}),
|
||||||
createMarketFragment({
|
createMarketFragment({
|
||||||
id: 'market-3',
|
id: 'market-3',
|
||||||
state: MarketState.STATE_ACTIVE,
|
|
||||||
// @ts-ignore data not on fragment
|
// @ts-ignore data not on fragment
|
||||||
data: createMarketsDataFragment({
|
data: createMarketsDataFragment({
|
||||||
marketState: MarketState.STATE_ACTIVE,
|
marketState: MarketState.STATE_ACTIVE,
|
||||||
|
@ -1,48 +1,18 @@
|
|||||||
import throttle from 'lodash/throttle';
|
import { useMarketState } from '@vegaprotocol/markets';
|
||||||
import type { MarketData, Market } from '@vegaprotocol/markets';
|
|
||||||
import { marketDataProvider } from '@vegaprotocol/markets';
|
|
||||||
import { useDataProvider } from '@vegaprotocol/data-provider';
|
|
||||||
import * as Schema from '@vegaprotocol/types';
|
import * as Schema from '@vegaprotocol/types';
|
||||||
import { HeaderStat } from '../header';
|
import { HeaderStat } from '../header';
|
||||||
import { useCallback, useRef, useState } from 'react';
|
|
||||||
import * as constants from '../constants';
|
|
||||||
import { DocsLinks } from '@vegaprotocol/environment';
|
import { DocsLinks } from '@vegaprotocol/environment';
|
||||||
import { ExternalLink } from '@vegaprotocol/ui-toolkit';
|
import { ExternalLink } from '@vegaprotocol/ui-toolkit';
|
||||||
import { useT } from '../../lib/use-t';
|
import { useT } from '../../lib/use-t';
|
||||||
|
|
||||||
export const MarketState = ({ market }: { market: Market | null }) => {
|
export const MarketState = ({ marketId }: { marketId?: string }) => {
|
||||||
const t = useT();
|
const t = useT();
|
||||||
const [marketState, setMarketState] = useState<Schema.MarketState | null>(
|
const { data: marketState } = useMarketState(marketId);
|
||||||
null
|
|
||||||
);
|
|
||||||
|
|
||||||
const throttledSetMarketState = useRef(
|
|
||||||
throttle((state: Schema.MarketState) => {
|
|
||||||
setMarketState(state);
|
|
||||||
}, constants.THROTTLE_UPDATE_TIME)
|
|
||||||
).current;
|
|
||||||
|
|
||||||
const update = useCallback(
|
|
||||||
({ data: marketData }: { data: MarketData | null }) => {
|
|
||||||
if (marketData) {
|
|
||||||
throttledSetMarketState(marketData.marketState);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
[throttledSetMarketState]
|
|
||||||
);
|
|
||||||
|
|
||||||
useDataProvider({
|
|
||||||
dataProvider: marketDataProvider,
|
|
||||||
update,
|
|
||||||
variables: { marketId: market?.id || '' },
|
|
||||||
skip: !market?.id,
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<HeaderStat
|
<HeaderStat
|
||||||
heading={t('Status')}
|
heading={t('Status')}
|
||||||
description={useGetMarketStateTooltip(marketState)}
|
description={useGetMarketStateTooltip(marketState ?? undefined)}
|
||||||
testId="market-state"
|
testId="market-state"
|
||||||
>
|
>
|
||||||
{marketState ? Schema.MarketStateMapping[marketState] : '-'}
|
{marketState ? Schema.MarketStateMapping[marketState] : '-'}
|
||||||
@ -50,7 +20,7 @@ export const MarketState = ({ market }: { market: Market | null }) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const useGetMarketStateTooltip = (state: Schema.MarketState | null) => {
|
const useGetMarketStateTooltip = (state?: Schema.MarketState) => {
|
||||||
const t = useT();
|
const t = useT();
|
||||||
if (state === Schema.MarketState.STATE_ACTIVE) {
|
if (state === Schema.MarketState.STATE_ACTIVE) {
|
||||||
return t('Enactment date reached and usual auction exit checks pass');
|
return t('Enactment date reached and usual auction exit checks pass');
|
||||||
|
@ -26,20 +26,15 @@ const getTradingModeLabel = (
|
|||||||
interface HeaderStatMarketTradingModeProps {
|
interface HeaderStatMarketTradingModeProps {
|
||||||
marketId?: string;
|
marketId?: string;
|
||||||
onSelect?: (marketId: string, metaKey?: boolean) => void;
|
onSelect?: (marketId: string, metaKey?: boolean) => void;
|
||||||
initialTradingMode?: Schema.MarketTradingMode;
|
|
||||||
initialTrigger?: Schema.AuctionTrigger;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const HeaderStatMarketTradingMode = ({
|
export const HeaderStatMarketTradingMode = ({
|
||||||
marketId,
|
marketId,
|
||||||
onSelect,
|
onSelect,
|
||||||
initialTradingMode,
|
|
||||||
initialTrigger,
|
|
||||||
}: HeaderStatMarketTradingModeProps) => {
|
}: HeaderStatMarketTradingModeProps) => {
|
||||||
const t = useT();
|
const t = useT();
|
||||||
const { data } = useStaticMarketData(marketId);
|
const { data } = useStaticMarketData(marketId);
|
||||||
const marketTradingMode = data?.marketTradingMode ?? initialTradingMode;
|
const { marketTradingMode, trigger } = data || {};
|
||||||
const trigger = data?.trigger ?? initialTrigger;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<HeaderStat
|
<HeaderStat
|
||||||
@ -56,8 +51,6 @@ export const HeaderStatMarketTradingMode = ({
|
|||||||
|
|
||||||
export const MarketTradingMode = ({
|
export const MarketTradingMode = ({
|
||||||
marketId,
|
marketId,
|
||||||
initialTradingMode,
|
|
||||||
initialTrigger,
|
|
||||||
inViewRoot,
|
inViewRoot,
|
||||||
}: Omit<HeaderStatMarketTradingModeProps, 'onUpdate'> & {
|
}: Omit<HeaderStatMarketTradingModeProps, 'onUpdate'> & {
|
||||||
inViewRoot?: RefObject<Element>;
|
inViewRoot?: RefObject<Element>;
|
||||||
@ -72,10 +65,7 @@ export const MarketTradingMode = ({
|
|||||||
}
|
}
|
||||||
>
|
>
|
||||||
<span ref={ref}>
|
<span ref={ref}>
|
||||||
{getTradingModeLabel(
|
{getTradingModeLabel(data?.marketTradingMode, data?.trigger)}
|
||||||
data?.marketTradingMode ?? initialTradingMode,
|
|
||||||
data?.trigger ?? initialTrigger
|
|
||||||
)}
|
|
||||||
</span>
|
</span>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
);
|
);
|
||||||
|
@ -948,13 +948,13 @@ const EntityIcon = ({
|
|||||||
export const areAllMarketsSettled = (transferNode: EnrichedRewardTransfer) => {
|
export const areAllMarketsSettled = (transferNode: EnrichedRewardTransfer) => {
|
||||||
const settledMarkets = transferNode.markets?.filter(
|
const settledMarkets = transferNode.markets?.filter(
|
||||||
(m) =>
|
(m) =>
|
||||||
m?.state &&
|
m?.data?.marketState &&
|
||||||
[
|
[
|
||||||
MarketState.STATE_TRADING_TERMINATED,
|
MarketState.STATE_TRADING_TERMINATED,
|
||||||
MarketState.STATE_SETTLED,
|
MarketState.STATE_SETTLED,
|
||||||
MarketState.STATE_CANCELLED,
|
MarketState.STATE_CANCELLED,
|
||||||
MarketState.STATE_CLOSED,
|
MarketState.STATE_CLOSED,
|
||||||
].includes(m.state)
|
].includes(m?.data?.marketState)
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -969,8 +969,8 @@ export const areAllMarketsSuspended = (
|
|||||||
return (
|
return (
|
||||||
transferNode.markets?.filter(
|
transferNode.markets?.filter(
|
||||||
(m) =>
|
(m) =>
|
||||||
m?.state === MarketState.STATE_SUSPENDED ||
|
m?.data?.marketState === MarketState.STATE_SUSPENDED ||
|
||||||
m?.state === MarketState.STATE_SUSPENDED_VIA_GOVERNANCE
|
m?.data?.marketState === MarketState.STATE_SUSPENDED_VIA_GOVERNANCE
|
||||||
).length === transferNode.markets?.length &&
|
).length === transferNode.markets?.length &&
|
||||||
Boolean(transferNode.markets && transferNode.markets.length > 0)
|
Boolean(transferNode.markets && transferNode.markets.length > 0)
|
||||||
);
|
);
|
||||||
|
@ -7,6 +7,7 @@ from fixtures.market import setup_continuous_market
|
|||||||
from conftest import init_vega, cleanup_container, init_page, auth_setup, risk_accepted_setup
|
from conftest import init_vega, cleanup_container, init_page, auth_setup, risk_accepted_setup
|
||||||
from wallet_config import MM_WALLET, MM_WALLET2
|
from wallet_config import MM_WALLET, MM_WALLET2
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def setup_environment(request, browser) -> Generator[Tuple[Page, str, str], None, None]:
|
def setup_environment(request, browser) -> Generator[Tuple[Page, str, str], None, None]:
|
||||||
with init_vega(request) as vega:
|
with init_vega(request) as vega:
|
||||||
@ -22,7 +23,8 @@ def setup_environment(request, browser) -> Generator[Tuple[Page, str, str], None
|
|||||||
side="SIDE_BUY",
|
side="SIDE_BUY",
|
||||||
volume=10,
|
volume=10,
|
||||||
price=60,
|
price=60,
|
||||||
pegged_order=PeggedOrder(reference="PEGGED_REFERENCE_MID", offset=1),
|
pegged_order=PeggedOrder(
|
||||||
|
reference="PEGGED_REFERENCE_MID", offset=1),
|
||||||
)
|
)
|
||||||
vega.wait_fn(1)
|
vega.wait_fn(1)
|
||||||
vega.wait_for_total_catchup()
|
vega.wait_for_total_catchup()
|
||||||
@ -66,7 +68,8 @@ def setup_environment(request, browser) -> Generator[Tuple[Page, str, str], None
|
|||||||
1,
|
1,
|
||||||
1 + 0.1 / 2,
|
1 + 0.1 / 2,
|
||||||
)
|
)
|
||||||
submit_order(vega, MM_WALLET.name, market_id, "SIDE_SELL", 1, 1 + 0.1 / 2)
|
submit_order(vega, MM_WALLET.name, market_id,
|
||||||
|
"SIDE_SELL", 1, 1 + 0.1 / 2)
|
||||||
submit_order(vega, MM_WALLET2.name, market_id, "SIDE_SELL", 1, 1)
|
submit_order(vega, MM_WALLET2.name, market_id, "SIDE_SELL", 1, 1)
|
||||||
|
|
||||||
vega.wait_fn(1)
|
vega.wait_fn(1)
|
||||||
@ -89,31 +92,37 @@ def setup_environment(request, browser) -> Generator[Tuple[Page, str, str], None
|
|||||||
yield page, market_id
|
yield page, market_id
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_parked_order(
|
def test_parked_order(
|
||||||
setup_environment: Tuple[Page, str, str],
|
setup_environment: Tuple[Page, str, str],
|
||||||
) -> None:
|
) -> None:
|
||||||
page, market_id, = setup_environment
|
page, market_id, = setup_environment
|
||||||
|
page.goto(f"/#/markets/{market_id}")
|
||||||
page.get_by_test_id("All").click()
|
page.get_by_test_id("All").click()
|
||||||
expect(page.get_by_role("row").nth(5)).to_contain_text("0+10Mid - 1.00 Peg limitParked0.00GTC")
|
expect(page.get_by_role("row").nth(5)).to_contain_text(
|
||||||
|
"0+10Mid - 1.00 Peg limitParked0.00GTC")
|
||||||
|
|
||||||
|
|
||||||
def test_trading_mode(
|
def test_trading_mode(
|
||||||
setup_environment: Tuple[Page, str, str],
|
setup_environment: Tuple[Page, str, str],
|
||||||
) -> None:
|
) -> None:
|
||||||
page, market_id, = setup_environment
|
page, market_id, = setup_environment
|
||||||
expect(page.get_by_test_id("market-trading-mode")).to_have_text("Trading modeMonitoring auction - price")
|
page.goto(f"/#/markets/{market_id}")
|
||||||
|
expect(page.get_by_test_id("market-trading-mode")
|
||||||
|
).to_have_text("Trading modeMonitoring auction - price")
|
||||||
expect(page.get_by_test_id("market-state")).to_have_text("StatusSuspended")
|
expect(page.get_by_test_id("market-state")).to_have_text("StatusSuspended")
|
||||||
|
|
||||||
|
|
||||||
def test_market_info_price_monitoring_asd(
|
def test_market_info_price_monitoring_asd(
|
||||||
setup_environment: Tuple[Page, str, str],
|
setup_environment: Tuple[Page, str, str],
|
||||||
) -> None:
|
) -> None:
|
||||||
page, market_id, = setup_environment
|
page, market_id, = setup_environment
|
||||||
|
page.goto(f"/#/markets/{market_id}")
|
||||||
page.get_by_test_id("Info").click()
|
page.get_by_test_id("Info").click()
|
||||||
page.get_by_test_id("accordion-title").get_by_text(
|
page.get_by_test_id("accordion-title").get_by_text(
|
||||||
"Key details").click()
|
"Key details").click()
|
||||||
expect(
|
expect(
|
||||||
page.get_by_test_id(
|
page.get_by_test_id(
|
||||||
"key-value-table-row").nth(2)).to_contain_text("Suspended")
|
"key-value-table-row").nth(2)).to_contain_text("Suspended")
|
||||||
expect(
|
expect(
|
||||||
page.get_by_test_id(
|
page.get_by_test_id(
|
||||||
"key-value-table-row").nth(3)).to_contain_text("Monitoring auction")
|
"key-value-table-row").nth(3)).to_contain_text("Monitoring auction")
|
||||||
|
@ -4,9 +4,9 @@ import {
|
|||||||
} from '@vegaprotocol/assets';
|
} from '@vegaprotocol/assets';
|
||||||
import { useActiveRewardsQuery } from './__generated__/Rewards';
|
import { useActiveRewardsQuery } from './__generated__/Rewards';
|
||||||
import {
|
import {
|
||||||
type MarketFieldsFragment,
|
type MarketMaybeWithData,
|
||||||
useMarketsMapProvider,
|
|
||||||
getAsset,
|
getAsset,
|
||||||
|
marketsWithDataProvider,
|
||||||
} from '@vegaprotocol/markets';
|
} from '@vegaprotocol/markets';
|
||||||
import {
|
import {
|
||||||
type RecurringTransfer,
|
type RecurringTransfer,
|
||||||
@ -20,6 +20,7 @@ import {
|
|||||||
import { type ApolloError } from '@apollo/client';
|
import { type ApolloError } from '@apollo/client';
|
||||||
import compact from 'lodash/compact';
|
import compact from 'lodash/compact';
|
||||||
import { useEpochInfoQuery } from './__generated__/Epoch';
|
import { useEpochInfoQuery } from './__generated__/Epoch';
|
||||||
|
import { useDataProvider } from '@vegaprotocol/data-provider';
|
||||||
|
|
||||||
export type RewardTransfer = TransferNode & {
|
export type RewardTransfer = TransferNode & {
|
||||||
transfer: {
|
transfer: {
|
||||||
@ -35,7 +36,7 @@ export type EnrichedRewardTransfer = RewardTransfer & {
|
|||||||
/** A flag determining whether a reward asset is being traded on any of the active markets */
|
/** A flag determining whether a reward asset is being traded on any of the active markets */
|
||||||
isAssetTraded?: boolean;
|
isAssetTraded?: boolean;
|
||||||
/** A list of markets in scope */
|
/** A list of markets in scope */
|
||||||
markets?: MarketFieldsFragment[];
|
markets?: MarketMaybeWithData[];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -115,11 +116,15 @@ export const useRewards = ({
|
|||||||
loading: assetsLoading,
|
loading: assetsLoading,
|
||||||
error: assetsError,
|
error: assetsError,
|
||||||
} = useAssetsMapProvider();
|
} = useAssetsMapProvider();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
data: markets,
|
data: markets,
|
||||||
loading: marketsLoading,
|
loading: marketsLoading,
|
||||||
error: marketsError,
|
error: marketsError,
|
||||||
} = useMarketsMapProvider();
|
} = useDataProvider({
|
||||||
|
dataProvider: marketsWithDataProvider,
|
||||||
|
variables: undefined,
|
||||||
|
});
|
||||||
|
|
||||||
const enriched = compact(
|
const enriched = compact(
|
||||||
data?.transfersConnection?.edges?.map((n) => n?.node)
|
data?.transfersConnection?.edges?.map((n) => n?.node)
|
||||||
@ -140,7 +145,7 @@ export const useRewards = ({
|
|||||||
undefined;
|
undefined;
|
||||||
const marketsInScope = compact(
|
const marketsInScope = compact(
|
||||||
node.transfer.kind.dispatchStrategy.marketIdsInScope?.map(
|
node.transfer.kind.dispatchStrategy.marketIdsInScope?.map(
|
||||||
(id) => markets && markets[id]
|
(id) => markets && markets.find((m) => m.id === id)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
const isAssetTraded =
|
const isAssetTraded =
|
||||||
@ -151,7 +156,7 @@ export const useRewards = ({
|
|||||||
return (
|
return (
|
||||||
mAsset.id ===
|
mAsset.id ===
|
||||||
node.transfer.kind.dispatchStrategy.dispatchMetricAssetId &&
|
node.transfer.kind.dispatchStrategy.dispatchMetricAssetId &&
|
||||||
m.state === MarketState.STATE_ACTIVE
|
m.data?.marketState === MarketState.STATE_ACTIVE
|
||||||
);
|
);
|
||||||
} catch {
|
} catch {
|
||||||
// NOOP
|
// NOOP
|
||||||
|
@ -5,7 +5,9 @@ import { isMarketActive } from '../utils';
|
|||||||
export const useTopTradedMarkets = () => {
|
export const useTopTradedMarkets = () => {
|
||||||
const { data, loading, error } = useMarketList();
|
const { data, loading, error } = useMarketList();
|
||||||
|
|
||||||
const activeMarkets = data?.filter((m) => isMarketActive(m.state));
|
const activeMarkets = data?.filter(
|
||||||
|
(m) => m.data?.marketState && isMarketActive(m.data?.marketState)
|
||||||
|
);
|
||||||
const marketsByTopTraded = data
|
const marketsByTopTraded = data
|
||||||
? orderBy(activeMarkets, (m) => calcTradedFactor(m), 'desc')
|
? orderBy(activeMarkets, (m) => calcTradedFactor(m), 'desc')
|
||||||
: undefined;
|
: undefined;
|
||||||
|
@ -850,9 +850,8 @@ describe('DealTicket', () => {
|
|||||||
];
|
];
|
||||||
|
|
||||||
it.each(states)('handles state %s correctly', async (marketState) => {
|
it.each(states)('handles state %s correctly', async (marketState) => {
|
||||||
const marketOverrides = { state: marketState };
|
|
||||||
const marketDataOverrides = { marketState: marketState };
|
const marketDataOverrides = { marketState: marketState };
|
||||||
render(generateJsx([], marketOverrides, marketDataOverrides));
|
render(generateJsx([], {}, marketDataOverrides));
|
||||||
|
|
||||||
const text = `This market is ${marketState
|
const text = `This market is ${marketState
|
||||||
.split('_')
|
.split('_')
|
||||||
|
@ -9,8 +9,6 @@ export function generateMarket(override?: PartialDeep<Market>): Market {
|
|||||||
id: 'market-id',
|
id: 'market-id',
|
||||||
decimalPlaces: 2,
|
decimalPlaces: 2,
|
||||||
positionDecimalPlaces: 1,
|
positionDecimalPlaces: 1,
|
||||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
|
||||||
state: Schema.MarketState.STATE_ACTIVE,
|
|
||||||
tickSize: '1',
|
tickSize: '1',
|
||||||
marketTimestamps: {
|
marketTimestamps: {
|
||||||
__typename: 'MarketTimestamps',
|
__typename: 'MarketTimestamps',
|
||||||
|
@ -199,8 +199,6 @@ const mockMarket: MarketFieldsFragment = {
|
|||||||
id: 'marketId',
|
id: 'marketId',
|
||||||
decimalPlaces: 1,
|
decimalPlaces: 1,
|
||||||
positionDecimalPlaces: 4,
|
positionDecimalPlaces: 4,
|
||||||
state: Schema.MarketState.STATE_ACTIVE,
|
|
||||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
|
||||||
} as MarketFieldsFragment;
|
} as MarketFieldsFragment;
|
||||||
|
|
||||||
const orderFormValues: OrderFormValues = {
|
const orderFormValues: OrderFormValues = {
|
||||||
|
@ -3,8 +3,6 @@ import type { PartialDeep } from 'type-fest';
|
|||||||
import * as Schema from '@vegaprotocol/types';
|
import * as Schema from '@vegaprotocol/types';
|
||||||
import type { Trade } from './fills-data-provider';
|
import type { Trade } from './fills-data-provider';
|
||||||
|
|
||||||
const { MarketState, MarketTradingMode } = Schema;
|
|
||||||
|
|
||||||
export const generateFill = (override?: PartialDeep<Trade>) => {
|
export const generateFill = (override?: PartialDeep<Trade>) => {
|
||||||
const defaultFill: Trade = {
|
const defaultFill: Trade = {
|
||||||
__typename: 'Trade',
|
__typename: 'Trade',
|
||||||
@ -52,8 +50,6 @@ export const generateFill = (override?: PartialDeep<Trade>) => {
|
|||||||
id: 'market-id',
|
id: 'market-id',
|
||||||
positionDecimalPlaces: 0,
|
positionDecimalPlaces: 0,
|
||||||
decimalPlaces: 5,
|
decimalPlaces: 5,
|
||||||
state: MarketState.STATE_ACTIVE,
|
|
||||||
tradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
|
||||||
tickSize: '1',
|
tickSize: '1',
|
||||||
fees: {
|
fees: {
|
||||||
__typename: 'Fees',
|
__typename: 'Fees',
|
||||||
|
@ -1,10 +1,7 @@
|
|||||||
import merge from 'lodash/merge';
|
import merge from 'lodash/merge';
|
||||||
import type { PartialDeep } from 'type-fest';
|
import type { PartialDeep } from 'type-fest';
|
||||||
import * as Schema from '@vegaprotocol/types';
|
|
||||||
import type { FundingPayment } from './funding-payments-data-provider';
|
import type { FundingPayment } from './funding-payments-data-provider';
|
||||||
|
|
||||||
const { MarketState, MarketTradingMode } = Schema;
|
|
||||||
|
|
||||||
export const generateFundingPayment = (
|
export const generateFundingPayment = (
|
||||||
override?: PartialDeep<FundingPayment>
|
override?: PartialDeep<FundingPayment>
|
||||||
) => {
|
) => {
|
||||||
@ -20,8 +17,6 @@ export const generateFundingPayment = (
|
|||||||
id: 'market-id',
|
id: 'market-id',
|
||||||
positionDecimalPlaces: 0,
|
positionDecimalPlaces: 0,
|
||||||
decimalPlaces: 5,
|
decimalPlaces: 5,
|
||||||
state: MarketState.STATE_ACTIVE,
|
|
||||||
tradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
|
||||||
tickSize: '1',
|
tickSize: '1',
|
||||||
fees: {
|
fees: {
|
||||||
__typename: 'Fees',
|
__typename: 'Fees',
|
||||||
|
6
libs/markets/src/lib/__generated__/markets.ts
generated
6
libs/markets/src/lib/__generated__/markets.ts
generated
File diff suppressed because one or more lines are too long
@ -1,5 +1,9 @@
|
|||||||
import * as Schema from '@vegaprotocol/types';
|
import * as Schema from '@vegaprotocol/types';
|
||||||
import type { Market, MarketMaybeWithDataAndCandles } from './markets-provider';
|
import type {
|
||||||
|
Market,
|
||||||
|
MarketMaybeWithData,
|
||||||
|
MarketMaybeWithDataAndCandles,
|
||||||
|
} from './markets-provider';
|
||||||
import {
|
import {
|
||||||
calcCandleVolumePrice,
|
calcCandleVolumePrice,
|
||||||
calcTradedFactor,
|
calcTradedFactor,
|
||||||
@ -7,9 +11,10 @@ import {
|
|||||||
sumFeesFactors,
|
sumFeesFactors,
|
||||||
totalFeesFactorsPercentage,
|
totalFeesFactorsPercentage,
|
||||||
} from './market-utils';
|
} from './market-utils';
|
||||||
|
import type { MarketData } from './market-data-provider';
|
||||||
const { MarketState, MarketTradingMode } = Schema;
|
const { MarketState, MarketTradingMode } = Schema;
|
||||||
|
|
||||||
const MARKET_A: Partial<Market> = {
|
const MARKET_A: Partial<MarketMaybeWithData> = {
|
||||||
id: '1',
|
id: '1',
|
||||||
marketTimestamps: {
|
marketTimestamps: {
|
||||||
__typename: 'MarketTimestamps',
|
__typename: 'MarketTimestamps',
|
||||||
@ -18,11 +23,13 @@ const MARKET_A: Partial<Market> = {
|
|||||||
open: '2022-05-18T13:08:27.693537312Z',
|
open: '2022-05-18T13:08:27.693537312Z',
|
||||||
close: null,
|
close: null,
|
||||||
},
|
},
|
||||||
state: MarketState.STATE_ACTIVE,
|
data: {
|
||||||
tradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
marketState: MarketState.STATE_ACTIVE,
|
||||||
|
marketTradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||||
|
} as MarketData,
|
||||||
};
|
};
|
||||||
|
|
||||||
const MARKET_B: Partial<Market> = {
|
const MARKET_B: Partial<MarketMaybeWithData> = {
|
||||||
id: '2',
|
id: '2',
|
||||||
marketTimestamps: {
|
marketTimestamps: {
|
||||||
__typename: 'MarketTimestamps',
|
__typename: 'MarketTimestamps',
|
||||||
@ -31,11 +38,13 @@ const MARKET_B: Partial<Market> = {
|
|||||||
open: '2022-05-18T13:00:39.328347732Z',
|
open: '2022-05-18T13:00:39.328347732Z',
|
||||||
close: null,
|
close: null,
|
||||||
},
|
},
|
||||||
state: MarketState.STATE_ACTIVE,
|
data: {
|
||||||
tradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
marketState: MarketState.STATE_ACTIVE,
|
||||||
|
marketTradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||||
|
} as MarketData,
|
||||||
};
|
};
|
||||||
|
|
||||||
const MARKET_C: Partial<Market> = {
|
const MARKET_C: Partial<MarketMaybeWithData> = {
|
||||||
id: '3',
|
id: '3',
|
||||||
marketTimestamps: {
|
marketTimestamps: {
|
||||||
__typename: 'MarketTimestamps',
|
__typename: 'MarketTimestamps',
|
||||||
@ -44,11 +53,13 @@ const MARKET_C: Partial<Market> = {
|
|||||||
open: '2022-05-17T13:00:39.328347732Z',
|
open: '2022-05-17T13:00:39.328347732Z',
|
||||||
close: null,
|
close: null,
|
||||||
},
|
},
|
||||||
state: MarketState.STATE_REJECTED,
|
data: {
|
||||||
tradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
marketState: MarketState.STATE_REJECTED,
|
||||||
|
marketTradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||||
|
} as MarketData,
|
||||||
};
|
};
|
||||||
|
|
||||||
const MARKET_D: Partial<Market> = {
|
const MARKET_D: Partial<MarketMaybeWithData> = {
|
||||||
id: '4',
|
id: '4',
|
||||||
marketTimestamps: {
|
marketTimestamps: {
|
||||||
__typename: 'MarketTimestamps',
|
__typename: 'MarketTimestamps',
|
||||||
@ -57,8 +68,10 @@ const MARKET_D: Partial<Market> = {
|
|||||||
open: '2022-05-16T13:00:39.328347732Z',
|
open: '2022-05-16T13:00:39.328347732Z',
|
||||||
close: null,
|
close: null,
|
||||||
},
|
},
|
||||||
state: MarketState.STATE_ACTIVE,
|
data: {
|
||||||
tradingMode: MarketTradingMode.TRADING_MODE_NO_TRADING,
|
marketState: MarketState.STATE_ACTIVE,
|
||||||
|
marketTradingMode: MarketTradingMode.TRADING_MODE_NO_TRADING,
|
||||||
|
} as MarketData,
|
||||||
};
|
};
|
||||||
|
|
||||||
describe('mapDataToMarketList', () => {
|
describe('mapDataToMarketList', () => {
|
||||||
@ -68,7 +81,7 @@ describe('mapDataToMarketList', () => {
|
|||||||
MARKET_B,
|
MARKET_B,
|
||||||
MARKET_C,
|
MARKET_C,
|
||||||
MARKET_D,
|
MARKET_D,
|
||||||
] as unknown as Market[]);
|
] as unknown as MarketMaybeWithData[]);
|
||||||
expect(result).toEqual([MARKET_B, MARKET_A]);
|
expect(result).toEqual([MARKET_B, MARKET_A]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -89,8 +89,8 @@ export const filterAndSortMarkets = (markets: MarketMaybeWithData[]) => {
|
|||||||
];
|
];
|
||||||
const orderedMarkets = orderBy(
|
const orderedMarkets = orderBy(
|
||||||
markets?.filter((m) => {
|
markets?.filter((m) => {
|
||||||
const state = m.data?.marketState || m.state;
|
const state = m.data?.marketState;
|
||||||
const tradingMode = m.data?.marketTradingMode || m.tradingMode;
|
const tradingMode = m.data?.marketTradingMode;
|
||||||
return (
|
return (
|
||||||
state !== MarketState.STATE_REJECTED &&
|
state !== MarketState.STATE_REJECTED &&
|
||||||
tradingMode !== MarketTradingMode.TRADING_MODE_NO_TRADING
|
tradingMode !== MarketTradingMode.TRADING_MODE_NO_TRADING
|
||||||
@ -101,19 +101,26 @@ export const filterAndSortMarkets = (markets: MarketMaybeWithData[]) => {
|
|||||||
);
|
);
|
||||||
return orderedMarkets.sort(
|
return orderedMarkets.sort(
|
||||||
(a, b) =>
|
(a, b) =>
|
||||||
tradingModesOrdering.indexOf(a.data?.marketTradingMode || a.tradingMode) -
|
(a.data?.marketTradingMode
|
||||||
tradingModesOrdering.indexOf(b.data?.marketTradingMode || b.tradingMode)
|
? tradingModesOrdering.indexOf(a.data?.marketTradingMode)
|
||||||
|
: -1) -
|
||||||
|
(b.data?.marketTradingMode
|
||||||
|
? tradingModesOrdering.indexOf(b.data?.marketTradingMode)
|
||||||
|
: -1)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const filterAndSortClosedMarkets = (markets: MarketMaybeWithData[]) => {
|
export const filterAndSortClosedMarkets = (markets: MarketMaybeWithData[]) => {
|
||||||
return markets.filter((m) => {
|
return markets.filter((m) => {
|
||||||
return [
|
return (
|
||||||
MarketState.STATE_SETTLED,
|
m.data?.marketState &&
|
||||||
MarketState.STATE_TRADING_TERMINATED,
|
[
|
||||||
MarketState.STATE_CLOSED,
|
MarketState.STATE_SETTLED,
|
||||||
MarketState.STATE_CANCELLED,
|
MarketState.STATE_TRADING_TERMINATED,
|
||||||
].includes(m.data?.marketState || m.state);
|
MarketState.STATE_CLOSED,
|
||||||
|
MarketState.STATE_CANCELLED,
|
||||||
|
].includes(m.data.marketState)
|
||||||
|
);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -121,8 +128,9 @@ export const filterAndSortProposedMarkets = (
|
|||||||
markets: MarketMaybeWithData[]
|
markets: MarketMaybeWithData[]
|
||||||
) => {
|
) => {
|
||||||
return markets.filter((m) => {
|
return markets.filter((m) => {
|
||||||
return [MarketState.STATE_PROPOSED].includes(
|
return (
|
||||||
m.data?.marketState || m.state
|
m.data?.marketState &&
|
||||||
|
[MarketState.STATE_PROPOSED].includes(m.data?.marketState)
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -110,19 +110,30 @@ export const marketWithDataProvider = makeDerivedDataProvider<
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
export const activeMarketsProvider = makeDerivedDataProvider<Market[], never>(
|
export const marketsWithDataProvider = makeDerivedDataProvider<
|
||||||
[marketsProvider],
|
MarketMaybeWithData[],
|
||||||
([markets]) => filterAndSortMarkets(markets)
|
never
|
||||||
|
>([marketsProvider, marketsDataProvider], (parts) =>
|
||||||
|
addData(parts[0] as Market[], parts[1] as MarketData[])
|
||||||
);
|
);
|
||||||
|
|
||||||
export const closedMarketsProvider = makeDerivedDataProvider<Market[], never>(
|
export const activeMarketsProvider = makeDerivedDataProvider<
|
||||||
[marketsProvider],
|
MarketMaybeWithData[],
|
||||||
([markets]) => filterAndSortClosedMarkets(markets)
|
never
|
||||||
|
>([marketsWithDataProvider], ([markets]) => filterAndSortMarkets(markets));
|
||||||
|
|
||||||
|
export const closedMarketsProvider = makeDerivedDataProvider<
|
||||||
|
MarketMaybeWithData[],
|
||||||
|
never
|
||||||
|
>([marketsWithDataProvider], ([markets]) =>
|
||||||
|
filterAndSortClosedMarkets(markets)
|
||||||
);
|
);
|
||||||
|
|
||||||
export const proposedMarketsProvider = makeDerivedDataProvider<Market[], never>(
|
export const proposedMarketsProvider = makeDerivedDataProvider<
|
||||||
[marketsProvider],
|
MarketMaybeWithData[],
|
||||||
([markets]) => filterAndSortProposedMarkets(markets)
|
never
|
||||||
|
>([marketsWithDataProvider], ([markets]) =>
|
||||||
|
filterAndSortProposedMarkets(markets)
|
||||||
);
|
);
|
||||||
|
|
||||||
export type MarketMaybeWithCandles = Market & { candles?: Candle[] };
|
export type MarketMaybeWithCandles = Market & { candles?: Candle[] };
|
||||||
@ -157,28 +168,7 @@ const addData = <T extends Market>(markets: T[], marketsData: MarketData[]) =>
|
|||||||
data: marketsData.find((data) => data.market.id === market.id),
|
data: marketsData.find((data) => data.market.id === market.id),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
export const marketsWithDataProvider = makeDerivedDataProvider<
|
export const marketsWithLiveDataProvider = makeDerivedDataProvider<
|
||||||
MarketMaybeWithData[],
|
|
||||||
never
|
|
||||||
>([activeMarketsProvider, marketsDataProvider], (parts) =>
|
|
||||||
addData(parts[0] as Market[], parts[1] as MarketData[])
|
|
||||||
);
|
|
||||||
|
|
||||||
export const closedMarketsWithDataProvider = makeDerivedDataProvider<
|
|
||||||
MarketMaybeWithData[],
|
|
||||||
never
|
|
||||||
>([closedMarketsProvider, marketsDataProvider], (parts) =>
|
|
||||||
addData(parts[0] as Market[], parts[1] as MarketData[])
|
|
||||||
);
|
|
||||||
|
|
||||||
export const allMarketsWithDataProvider = makeDerivedDataProvider<
|
|
||||||
MarketMaybeWithData[],
|
|
||||||
never
|
|
||||||
>([marketsProvider, marketsDataProvider], (parts) =>
|
|
||||||
addData(parts[0] as Market[], parts[1] as MarketData[])
|
|
||||||
);
|
|
||||||
|
|
||||||
export const allMarketsWithLiveDataProvider = makeDerivedDataProvider<
|
|
||||||
MarketMaybeWithData[],
|
MarketMaybeWithData[],
|
||||||
MarketMaybeWithData,
|
MarketMaybeWithData,
|
||||||
{ marketIds: string[] }
|
{ marketIds: string[] }
|
||||||
|
@ -61,8 +61,6 @@ fragment MarketFields on Market {
|
|||||||
decimalPlaces
|
decimalPlaces
|
||||||
positionDecimalPlaces
|
positionDecimalPlaces
|
||||||
tickSize
|
tickSize
|
||||||
state
|
|
||||||
tradingMode
|
|
||||||
parentMarketID
|
parentMarketID
|
||||||
successorMarketID
|
successorMarketID
|
||||||
fees {
|
fees {
|
||||||
|
@ -36,8 +36,6 @@ export const createMarketFragment = (
|
|||||||
id: 'market-0',
|
id: 'market-0',
|
||||||
decimalPlaces: 5,
|
decimalPlaces: 5,
|
||||||
positionDecimalPlaces: 0,
|
positionDecimalPlaces: 0,
|
||||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
|
||||||
state: Schema.MarketState.STATE_ACTIVE,
|
|
||||||
tickSize: '1',
|
tickSize: '1',
|
||||||
marketTimestamps: {
|
marketTimestamps: {
|
||||||
__typename: 'MarketTimestamps',
|
__typename: 'MarketTimestamps',
|
||||||
@ -190,8 +188,6 @@ const marketFieldsFragments: MarketFieldsFragment[] = [
|
|||||||
}),
|
}),
|
||||||
createMarketFragment({
|
createMarketFragment({
|
||||||
id: 'market-2',
|
id: 'market-2',
|
||||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_MONITORING_AUCTION,
|
|
||||||
state: Schema.MarketState.STATE_SUSPENDED,
|
|
||||||
marketTimestamps: {
|
marketTimestamps: {
|
||||||
proposed: '2022-08-23T11:36:32.252490405Z',
|
proposed: '2022-08-23T11:36:32.252490405Z',
|
||||||
pending: '2022-08-24T11:36:32.252490405Z',
|
pending: '2022-08-24T11:36:32.252490405Z',
|
||||||
|
@ -29,7 +29,6 @@ export const generateOrder = (partialOrder?: PartialDeep<Order>) => {
|
|||||||
close: null,
|
close: null,
|
||||||
},
|
},
|
||||||
positionDecimalPlaces: 2,
|
positionDecimalPlaces: 2,
|
||||||
state: Schema.MarketState.STATE_ACTIVE,
|
|
||||||
tradableInstrument: {
|
tradableInstrument: {
|
||||||
__typename: 'TradableInstrument',
|
__typename: 'TradableInstrument',
|
||||||
instrument: {
|
instrument: {
|
||||||
@ -86,7 +85,6 @@ export const generateOrder = (partialOrder?: PartialDeep<Order>) => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
|
||||||
},
|
},
|
||||||
size: '10',
|
size: '10',
|
||||||
type: Schema.OrderType.TYPE_MARKET,
|
type: Schema.OrderType.TYPE_MARKET,
|
||||||
|
@ -39,7 +39,6 @@ export const generateStopOrder = (
|
|||||||
open: '',
|
open: '',
|
||||||
},
|
},
|
||||||
positionDecimalPlaces: 2,
|
positionDecimalPlaces: 2,
|
||||||
state: Schema.MarketState.STATE_ACTIVE,
|
|
||||||
tradableInstrument: {
|
tradableInstrument: {
|
||||||
__typename: 'TradableInstrument',
|
__typename: 'TradableInstrument',
|
||||||
instrument: {
|
instrument: {
|
||||||
@ -96,7 +95,6 @@ export const generateStopOrder = (
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
|
||||||
},
|
},
|
||||||
submission: {
|
submission: {
|
||||||
marketId: 'market-id',
|
marketId: 'market-id',
|
||||||
|
@ -3,8 +3,6 @@ import { OrderViewDialog } from './order-view-dialog';
|
|||||||
import type { Order } from '../order-data-provider';
|
import type { Order } from '../order-data-provider';
|
||||||
import { BrowserRouter } from 'react-router-dom';
|
import { BrowserRouter } from 'react-router-dom';
|
||||||
import {
|
import {
|
||||||
MarketState,
|
|
||||||
MarketTradingMode,
|
|
||||||
OrderStatus,
|
OrderStatus,
|
||||||
OrderTimeInForce,
|
OrderTimeInForce,
|
||||||
OrderType,
|
OrderType,
|
||||||
@ -20,8 +18,6 @@ describe('OrderViewDialog', () => {
|
|||||||
id: 'b66cd4be223dfd900a4750bb5175e17d8f678996877d262be4c749a99e22a970',
|
id: 'b66cd4be223dfd900a4750bb5175e17d8f678996877d262be4c749a99e22a970',
|
||||||
decimalPlaces: 5,
|
decimalPlaces: 5,
|
||||||
positionDecimalPlaces: 3,
|
positionDecimalPlaces: 3,
|
||||||
state: MarketState.STATE_ACTIVE,
|
|
||||||
tradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
|
||||||
tickSize: '1',
|
tickSize: '1',
|
||||||
fees: {
|
fees: {
|
||||||
__typename: 'Fees',
|
__typename: 'Fees',
|
||||||
|
@ -111,7 +111,6 @@ const marketsData = [
|
|||||||
__typename: 'Market',
|
__typename: 'Market',
|
||||||
id: '5e6035fe6a6df78c9ec44b333c231e63d357acef0a0620d2c243f5865d1dc0d8',
|
id: '5e6035fe6a6df78c9ec44b333c231e63d357acef0a0620d2c243f5865d1dc0d8',
|
||||||
decimalPlaces: 5,
|
decimalPlaces: 5,
|
||||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_MONITORING_AUCTION,
|
|
||||||
positionDecimalPlaces: 0,
|
positionDecimalPlaces: 0,
|
||||||
tradableInstrument: {
|
tradableInstrument: {
|
||||||
__typename: 'TradableInstrument',
|
__typename: 'TradableInstrument',
|
||||||
@ -131,6 +130,8 @@ const marketsData = [
|
|||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
__typename: 'MarketData',
|
__typename: 'MarketData',
|
||||||
|
marketTradingMode:
|
||||||
|
Schema.MarketTradingMode.TRADING_MODE_MONITORING_AUCTION,
|
||||||
markPrice: '9431775',
|
markPrice: '9431775',
|
||||||
market: {
|
market: {
|
||||||
__typename: 'Market',
|
__typename: 'Market',
|
||||||
@ -142,7 +143,6 @@ const marketsData = [
|
|||||||
__typename: 'Market',
|
__typename: 'Market',
|
||||||
id: '10c4b1114d2f6fda239b73d018bca55888b6018f0ac70029972a17fea0a6a56e',
|
id: '10c4b1114d2f6fda239b73d018bca55888b6018f0ac70029972a17fea0a6a56e',
|
||||||
decimalPlaces: 5,
|
decimalPlaces: 5,
|
||||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
|
||||||
positionDecimalPlaces: 0,
|
positionDecimalPlaces: 0,
|
||||||
tradableInstrument: {
|
tradableInstrument: {
|
||||||
__typename: 'TradableInstrument',
|
__typename: 'TradableInstrument',
|
||||||
@ -162,6 +162,7 @@ const marketsData = [
|
|||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
__typename: 'MarketData',
|
__typename: 'MarketData',
|
||||||
|
marketTradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||||
markPrice: '869762',
|
markPrice: '869762',
|
||||||
market: {
|
market: {
|
||||||
__typename: 'Market',
|
__typename: 'Market',
|
||||||
|
@ -17,7 +17,7 @@ import {
|
|||||||
import {
|
import {
|
||||||
type MarketMaybeWithData,
|
type MarketMaybeWithData,
|
||||||
type MarketDataQueryVariables,
|
type MarketDataQueryVariables,
|
||||||
allMarketsWithLiveDataProvider,
|
marketsWithLiveDataProvider,
|
||||||
getAsset,
|
getAsset,
|
||||||
marketInfoProvider,
|
marketInfoProvider,
|
||||||
type MarketInfo,
|
type MarketInfo,
|
||||||
@ -57,8 +57,8 @@ export interface Position {
|
|||||||
marketDecimalPlaces: number;
|
marketDecimalPlaces: number;
|
||||||
marketId: string;
|
marketId: string;
|
||||||
marketCode: string;
|
marketCode: string;
|
||||||
marketTradingMode: MarketTradingMode;
|
marketTradingMode?: MarketTradingMode;
|
||||||
marketState: MarketState;
|
marketState?: MarketState;
|
||||||
markPrice: string | undefined;
|
markPrice: string | undefined;
|
||||||
notional: string | undefined;
|
notional: string | undefined;
|
||||||
openVolume: string;
|
openVolume: string;
|
||||||
@ -171,8 +171,8 @@ export const getMetrics = (
|
|||||||
marketDecimalPlaces,
|
marketDecimalPlaces,
|
||||||
marketId: market.id,
|
marketId: market.id,
|
||||||
marketCode: market.tradableInstrument.instrument.code,
|
marketCode: market.tradableInstrument.instrument.code,
|
||||||
marketTradingMode: market.tradingMode,
|
marketTradingMode: market.data?.marketTradingMode,
|
||||||
marketState: market.state,
|
marketState: market.data?.marketState,
|
||||||
markPrice: marketData ? marketData.markPrice : undefined,
|
markPrice: marketData ? marketData.markPrice : undefined,
|
||||||
notional: notional
|
notional: notional
|
||||||
? notional.multipliedBy(10 ** marketDecimalPlaces).toFixed(0)
|
? notional.multipliedBy(10 ** marketDecimalPlaces).toFixed(0)
|
||||||
@ -325,6 +325,7 @@ export const preparePositions = (metrics: Position[], showClosed: boolean) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
p.marketState &&
|
||||||
[
|
[
|
||||||
MarketState.STATE_ACTIVE,
|
MarketState.STATE_ACTIVE,
|
||||||
MarketState.STATE_PENDING,
|
MarketState.STATE_PENDING,
|
||||||
@ -369,7 +370,7 @@ export const positionsMetricsProvider = makeDerivedDataProvider<
|
|||||||
partyId: firstOrSelf(variables.partyIds),
|
partyId: firstOrSelf(variables.partyIds),
|
||||||
}),
|
}),
|
||||||
(callback, client, variables) =>
|
(callback, client, variables) =>
|
||||||
allMarketsWithLiveDataProvider(callback, client, {
|
marketsWithLiveDataProvider(callback, client, {
|
||||||
marketIds: variables.marketIds,
|
marketIds: variables.marketIds,
|
||||||
}),
|
}),
|
||||||
(callback, client, variables) =>
|
(callback, client, variables) =>
|
||||||
|
@ -35,10 +35,10 @@ export const getMarketExpiryDateFormatted = (
|
|||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getExpiryDate = (
|
export const useExpiryDate = (
|
||||||
tags: ReadonlyArray<string> | null,
|
tags?: ReadonlyArray<string> | null,
|
||||||
close: string | null,
|
close?: string | null,
|
||||||
state: MarketState
|
state?: MarketState | null
|
||||||
): string => {
|
): string => {
|
||||||
const t = useT();
|
const t = useT();
|
||||||
const metadataExpiryDate = getMarketExpiryDate(tags);
|
const metadataExpiryDate = getMarketExpiryDate(tags);
|
||||||
|
@ -138,8 +138,6 @@ describe('WithdrawFormContainer', () => {
|
|||||||
id: 'marketId-1',
|
id: 'marketId-1',
|
||||||
decimalPlaces: 5,
|
decimalPlaces: 5,
|
||||||
positionDecimalPlaces: 0,
|
positionDecimalPlaces: 0,
|
||||||
state: Types.MarketState.STATE_SUSPENDED,
|
|
||||||
tradingMode: Types.MarketTradingMode.TRADING_MODE_MONITORING_AUCTION,
|
|
||||||
tickSize: '1',
|
tickSize: '1',
|
||||||
fees: {
|
fees: {
|
||||||
__typename: 'Fees',
|
__typename: 'Fees',
|
||||||
|
Loading…
Reference in New Issue
Block a user