Compare commits
No commits in common. "cc782b5eae30063dfde2eaa469fd3731767901eb" and "a77bb06b2f8eab981c41d0b67474bcc89aa6c7e0" have entirely different histories.
cc782b5eae
...
a77bb06b2f
@ -4,5 +4,6 @@ tmp/*
|
||||
.dockerignore
|
||||
dockerfiles
|
||||
node_modules
|
||||
.git
|
||||
.github
|
||||
.vscode
|
||||
|
2
.github/workflows/console-test-run.yml
vendored
2
.github/workflows/console-test-run.yml
vendored
@ -10,7 +10,7 @@ on:
|
||||
inputs:
|
||||
console-test-branch:
|
||||
type: choice
|
||||
description: 'main: v0.74.10, develop: v0.75.5'
|
||||
description: 'main: v0.74.10, develop: v0.75.1'
|
||||
options:
|
||||
- main
|
||||
- develop
|
||||
|
@ -1,5 +1,5 @@
|
||||
# App configuration variables
|
||||
NX_VEGA_ENV=VALIDATORS_TESTNET
|
||||
NX_VEGA_ENV=VALIDATOR_TESTNET
|
||||
NX_VEGA_CONFIG_URL=https://raw.githubusercontent.com/vegaprotocol/networks/master/testnet2/testnet2.toml
|
||||
NX_VEGA_URL=https://api-validators-testnet.vega.rocks/graphql
|
||||
NX_VEGA_REST=https://api-validators-testnet.vega.rocks/
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { useMemo } from 'react';
|
||||
import { getAsset, type MarketMaybeWithData } from '@vegaprotocol/markets';
|
||||
import { getAsset, type MarketFieldsFragment } from '@vegaprotocol/markets';
|
||||
import { t } from '@vegaprotocol/i18n';
|
||||
import { ButtonLink } from '@vegaprotocol/ui-toolkit';
|
||||
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';
|
||||
|
||||
type MarketsTableProps = {
|
||||
data: MarketMaybeWithData[] | null;
|
||||
data: MarketFieldsFragment[] | null;
|
||||
};
|
||||
export const MarketsTable = ({ data }: MarketsTableProps) => {
|
||||
const openAssetDetailsDialog = useAssetDetailsDialogStore(
|
||||
@ -56,10 +56,10 @@ export const MarketsTable = ({ data }: MarketsTableProps) => {
|
||||
headerName: t('Status'),
|
||||
field: 'state',
|
||||
hide: window.innerWidth <= BREAKPOINT_MD,
|
||||
valueGetter: ({ data }: VegaValueGetterParams<MarketMaybeWithData>) => {
|
||||
return data?.data?.marketState
|
||||
? MarketStateMapping[data?.data.marketState]
|
||||
: '-';
|
||||
valueGetter: ({
|
||||
data,
|
||||
}: VegaValueGetterParams<MarketFieldsFragment>) => {
|
||||
return data?.state ? MarketStateMapping[data?.state] : '-';
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -70,7 +70,7 @@ export const MarketsTable = ({ data }: MarketsTableProps) => {
|
||||
cellRenderer: ({
|
||||
data,
|
||||
}: VegaICellRendererParams<
|
||||
MarketMaybeWithData,
|
||||
MarketFieldsFragment,
|
||||
'tradableInstrument.instrument.product.settlementAsset.symbol'
|
||||
>) => {
|
||||
const value = data && getAsset(data);
|
||||
@ -99,7 +99,7 @@ export const MarketsTable = ({ data }: MarketsTableProps) => {
|
||||
field: 'id',
|
||||
cellRenderer: ({
|
||||
value,
|
||||
}: VegaICellRendererParams<MarketMaybeWithData, 'id'>) =>
|
||||
}: VegaICellRendererParams<MarketFieldsFragment, 'id'>) =>
|
||||
value ? (
|
||||
<Link className="underline" to={value}>
|
||||
{t('View details')}
|
||||
@ -116,7 +116,7 @@ export const MarketsTable = ({ data }: MarketsTableProps) => {
|
||||
<AgGrid
|
||||
ref={gridRef}
|
||||
rowData={data}
|
||||
getRowId={({ data }: { data: MarketMaybeWithData }) => data.id}
|
||||
getRowId={({ data }: { data: MarketFieldsFragment }) => data.id}
|
||||
overlayNoRowsTemplate={t('This chain has no markets')}
|
||||
domLayout="autoHeight"
|
||||
defaultColDef={{
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { useScrollToLocation } from '../../hooks/scroll-to-location';
|
||||
import { useDocumentTitle } from '../../hooks/use-document-title';
|
||||
import { marketsWithDataProvider } from '@vegaprotocol/markets';
|
||||
import { marketsProvider } from '@vegaprotocol/markets';
|
||||
import { RouteTitle } from '../../components/route-title';
|
||||
import { AsyncRenderer } from '@vegaprotocol/ui-toolkit';
|
||||
import { t } from '@vegaprotocol/i18n';
|
||||
@ -12,7 +12,7 @@ export const MarketsPage = () => {
|
||||
useScrollToLocation();
|
||||
|
||||
const { data, loading, error } = useDataProvider({
|
||||
dataProvider: marketsWithDataProvider,
|
||||
dataProvider: marketsProvider,
|
||||
variables: undefined,
|
||||
skipUpdates: true,
|
||||
});
|
||||
|
@ -1,5 +1,5 @@
|
||||
# App configuration variables
|
||||
NX_VEGA_ENV=VALIDATORS_TESTNET
|
||||
NX_VEGA_ENV=VALIDATOR_TESTNET
|
||||
NX_VEGA_CONFIG_URL=https://raw.githubusercontent.com/vegaprotocol/networks/master/testnet2/testnet2.toml
|
||||
NX_VEGA_URL=https://api-validators-testnet.vega.rocks/graphql
|
||||
NX_VEGA_REST=https://api-validators-testnet.vega.rocks/
|
||||
|
@ -47,7 +47,7 @@ export const SubHeading = ({
|
||||
|
||||
return (
|
||||
<h2
|
||||
className={classNames('text-2xl font-alpha calt break-words', {
|
||||
className={classNames('text-2xl font-alpha calt uppercase break-words', {
|
||||
'mx-auto': centerContent,
|
||||
'mb-0': !marginBottom,
|
||||
'mb-4': marginBottom,
|
||||
|
@ -41,7 +41,7 @@ export const ContractAddresses: {
|
||||
claimAddress: '0x8Cef746ab7C83B61F6461cC92882bD61AB65a994', // TODO not deployed to this env, but random address so app doesn't error
|
||||
lockedAddress: '0x0', // TODO not deployed to this env
|
||||
},
|
||||
VALIDATORS_TESTNET: {
|
||||
VALIDATOR_TESTNET: {
|
||||
claimAddress: '0x8Cef746ab7C83B61F6461cC92882bD61AB65a994', // TODO not deployed to this env, but random address so app doesn't error
|
||||
lockedAddress: '0x0', // TODO not deployed to this env
|
||||
// This is a fallback contract address for the validator testnet network which does not
|
||||
|
@ -6,7 +6,6 @@ import {
|
||||
ViewPartyConnector,
|
||||
createConfig,
|
||||
fairground,
|
||||
validatorsTestnet,
|
||||
stagnet,
|
||||
mainnet,
|
||||
} from '@vegaprotocol/wallet';
|
||||
@ -32,7 +31,7 @@ export const useVegaWalletConfig = () => {
|
||||
const viewParty = new ViewPartyConnector();
|
||||
|
||||
const config = createConfig({
|
||||
chains: [mainnet, fairground, validatorsTestnet, stagnet],
|
||||
chains: [mainnet, fairground, stagnet],
|
||||
defaultChainId: CHAIN_IDS[VEGA_ENV],
|
||||
connectors: [injected, snap, jsonRpc, viewParty],
|
||||
});
|
||||
|
@ -50,7 +50,7 @@ export const useMarketDataDialogStore = create<MarketDataDialogState>(
|
||||
const marketDataHeaderStyles =
|
||||
'font-alpha calt text-base border-b border-vega-dark-200 mt-2 py-2';
|
||||
|
||||
export const ProposalMarketData = ({ marketId }: { marketId: string }) => {
|
||||
export const ProposalMarketData = ({ proposalId }: { proposalId: string }) => {
|
||||
const { t } = useTranslation();
|
||||
const { isOpen, open, close } = useMarketDataDialogStore();
|
||||
const [showDetails, setShowDetails] = useState(false);
|
||||
@ -59,7 +59,7 @@ export const ProposalMarketData = ({ marketId }: { marketId: string }) => {
|
||||
dataProvider: marketInfoProvider,
|
||||
skipUpdates: true,
|
||||
variables: {
|
||||
marketId: marketId,
|
||||
marketId: proposalId,
|
||||
},
|
||||
});
|
||||
|
||||
@ -72,7 +72,7 @@ export const ProposalMarketData = ({ marketId }: { marketId: string }) => {
|
||||
},
|
||||
});
|
||||
|
||||
if (!marketData) {
|
||||
if (!marketData || !parentMarketData) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -134,13 +134,13 @@ export const ProposalMarketData = ({ marketId }: { marketId: string }) => {
|
||||
<h2 className={marketDataHeaderStyles}>{t('Key details')}</h2>
|
||||
<KeyDetailsInfoPanel
|
||||
market={marketData}
|
||||
parentMarket={parentMarketData ? parentMarketData : undefined}
|
||||
parentMarket={parentMarketData}
|
||||
/>
|
||||
|
||||
<h2 className={marketDataHeaderStyles}>{t('Instrument')}</h2>
|
||||
<InstrumentInfoPanel
|
||||
market={marketData}
|
||||
parentMarket={parentMarketData ? parentMarketData : undefined}
|
||||
parentMarket={parentMarketData}
|
||||
/>
|
||||
|
||||
{settlementData &&
|
||||
@ -156,7 +156,7 @@ export const ProposalMarketData = ({ marketId }: { marketId: string }) => {
|
||||
isParentSettlementDataEqual ||
|
||||
isParentSettlementScheduleDataEqual
|
||||
? undefined
|
||||
: parentMarketData || undefined
|
||||
: parentMarketData
|
||||
}
|
||||
/>
|
||||
</>
|
||||
@ -169,9 +169,7 @@ export const ProposalMarketData = ({ marketId }: { marketId: string }) => {
|
||||
market={marketData}
|
||||
type="settlementData"
|
||||
parentMarket={
|
||||
isParentSettlementDataEqual
|
||||
? undefined
|
||||
: parentMarketData || undefined
|
||||
isParentSettlementDataEqual ? undefined : parentMarketData
|
||||
}
|
||||
/>
|
||||
|
||||
@ -187,7 +185,7 @@ export const ProposalMarketData = ({ marketId }: { marketId: string }) => {
|
||||
parentMarket={
|
||||
isParentTerminationDataEqual
|
||||
? undefined
|
||||
: parentMarketData || undefined
|
||||
: parentMarketData
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
@ -205,7 +203,7 @@ export const ProposalMarketData = ({ marketId }: { marketId: string }) => {
|
||||
parentMarket={
|
||||
isParentSettlementScheduleDataEqual
|
||||
? undefined
|
||||
: parentMarketData || undefined
|
||||
: parentMarketData
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
@ -219,19 +217,19 @@ export const ProposalMarketData = ({ marketId }: { marketId: string }) => {
|
||||
<h2 className={marketDataHeaderStyles}>{t('Settlement assets')}</h2>
|
||||
<SettlementAssetInfoPanel
|
||||
market={marketData}
|
||||
parentMarket={parentMarketData || undefined}
|
||||
parentMarket={parentMarketData}
|
||||
/>
|
||||
|
||||
<h2 className={marketDataHeaderStyles}>{t('Metadata')}</h2>
|
||||
<MetadataInfoPanel
|
||||
market={marketData}
|
||||
parentMarket={parentMarketData || undefined}
|
||||
parentMarket={parentMarketData}
|
||||
/>
|
||||
|
||||
<h2 className={marketDataHeaderStyles}>{t('Risk model')}</h2>
|
||||
<RiskModelInfoPanel
|
||||
market={marketData}
|
||||
parentMarket={parentMarketData || undefined}
|
||||
parentMarket={parentMarketData}
|
||||
/>
|
||||
|
||||
<h2 className={marketDataHeaderStyles}>
|
||||
@ -239,13 +237,13 @@ export const ProposalMarketData = ({ marketId }: { marketId: string }) => {
|
||||
</h2>
|
||||
<MarginScalingFactorsPanel
|
||||
market={marketData}
|
||||
parentMarket={parentMarketData || undefined}
|
||||
parentMarket={parentMarketData}
|
||||
/>
|
||||
|
||||
<h2 className={marketDataHeaderStyles}>{t('Risk factors')}</h2>
|
||||
<RiskFactorsInfoPanel
|
||||
market={marketData}
|
||||
parentMarket={parentMarketData || undefined}
|
||||
parentMarket={parentMarketData}
|
||||
/>
|
||||
|
||||
{showParentPriceMonitoringBounds && (
|
||||
@ -270,14 +268,14 @@ export const ProposalMarketData = ({ marketId }: { marketId: string }) => {
|
||||
</h2>
|
||||
<LiquidityMonitoringParametersInfoPanel
|
||||
market={marketData}
|
||||
parentMarket={parentMarketData || undefined}
|
||||
parentMarket={parentMarketData}
|
||||
/>
|
||||
<h2 className={marketDataHeaderStyles}>
|
||||
{t('Liquidity price range')}
|
||||
</h2>
|
||||
<LiquidityPriceRangeInfoPanel
|
||||
market={marketData}
|
||||
parentMarket={parentMarketData || undefined}
|
||||
parentMarket={parentMarketData}
|
||||
/>
|
||||
|
||||
<h2 className={marketDataHeaderStyles}>
|
||||
@ -285,7 +283,7 @@ export const ProposalMarketData = ({ marketId }: { marketId: string }) => {
|
||||
</h2>
|
||||
<LiquiditySLAParametersInfoPanel
|
||||
market={marketData}
|
||||
parentMarket={parentMarketData || undefined}
|
||||
parentMarket={parentMarketData}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
|
@ -17,20 +17,17 @@ import { type ProposalNode } from './proposal-utils';
|
||||
import { Lozenge } from '@vegaprotocol/ui-toolkit';
|
||||
import { Indicator } from './indicator';
|
||||
import { SubHeading } from '../../../../components/heading';
|
||||
import { determineId } from '@vegaprotocol/wallet';
|
||||
|
||||
export const ProposalChangeDetails = ({
|
||||
proposal,
|
||||
terms,
|
||||
restData,
|
||||
indicator,
|
||||
termsCount = 0,
|
||||
}: {
|
||||
proposal: Proposal | BatchProposal;
|
||||
terms: ProposalTermsFieldsFragment;
|
||||
restData: ProposalNode | null;
|
||||
indicator?: number;
|
||||
termsCount?: number;
|
||||
}) => {
|
||||
const { t } = useTranslation();
|
||||
let details = null;
|
||||
@ -64,18 +61,7 @@ export const ProposalChangeDetails = ({
|
||||
}
|
||||
case 'NewMarket': {
|
||||
if (proposal.id) {
|
||||
let marketId = proposal.id;
|
||||
|
||||
// TODO: when https://github.com/vegaprotocol/vega/issues/11005 gets merged
|
||||
// this will need to be updated to loop forward from 0. Right now subProposals
|
||||
// are returned (when using GQL) in the reverse order
|
||||
if (proposal.__typename === 'BatchProposal') {
|
||||
for (let i = termsCount - 1; i >= 0; i--) {
|
||||
marketId = determineId(marketId);
|
||||
}
|
||||
}
|
||||
|
||||
details = <ProposalMarketData marketId={marketId} />;
|
||||
details = <ProposalMarketData proposalId={proposal.id} />;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -83,7 +69,7 @@ export const ProposalChangeDetails = ({
|
||||
if (proposal.id) {
|
||||
details = (
|
||||
<div className="flex flex-col gap-4">
|
||||
<ProposalMarketData marketId={proposal.id} />
|
||||
<ProposalMarketData proposalId={proposal.id} />
|
||||
<ProposalMarketChanges
|
||||
indicator={indicator}
|
||||
marketId={terms.change.marketId}
|
||||
|
@ -78,7 +78,6 @@ export const Proposal = ({ proposal, restData }: ProposalProps) => {
|
||||
proposal={proposal}
|
||||
terms={p.terms}
|
||||
restData={restData}
|
||||
termsCount={proposal.subProposals?.length}
|
||||
/>
|
||||
);
|
||||
})
|
||||
|
@ -13,7 +13,7 @@
|
||||
}
|
||||
|
||||
h1 {
|
||||
@apply text-2xl text-white mb-4;
|
||||
@apply text-2xl text-white uppercase mb-4;
|
||||
}
|
||||
h2 {
|
||||
@apply text-xl text-white mb-4;
|
||||
|
@ -2,4 +2,4 @@
|
||||
NX_VEGA_CONFIG_URL=https://raw.githubusercontent.com/vegaprotocol/networks/master/testnet2/testnet2.tom
|
||||
NX_VEGA_URL=https://api-validators-testnet.vega.rocks/graphql
|
||||
NX_VEGA_NETWORKS={'{"TESTNET":"https://multisig-signer.fairground.wtf","MAINNET":"https://multisig-signer.vega.xyz"}'
|
||||
NX_VEGA_ENV=VALIDATORS_TESTNET
|
||||
NX_VEGA_ENV=VALIDATOR_TESTNET
|
||||
|
@ -4,7 +4,7 @@ NX_GITHUB_FEEDBACK_URL=https://github.com/vegaprotocol/feedback/discussions
|
||||
NX_HOSTED_WALLET_URL=https://wallet.testnet.vega.xyz
|
||||
NX_SENTRY_DSN=https://2ffce43721964aafa78277c50654ece4@o286262.ingest.sentry.io/6300613
|
||||
NX_VEGA_CONFIG_URL=https://raw.githubusercontent.com/vegaprotocol/networks/master/testnet2/testnet2.toml
|
||||
NX_VEGA_ENV=VALIDATORS_TESTNET
|
||||
NX_VEGA_ENV=VALIDATOR_TESTNET
|
||||
NX_VEGA_EXPLORER_URL=https://explorer.validators-testnet.vega.rocks
|
||||
NX_VEGA_NETWORKS={\"MAINNET\":\"https://console.vega.xyz\",\"STAGNET1\":\"https://trading.stagnet1.vega.rocks\",\"TESTNET\":\"https://console.fairground.wtf\"}
|
||||
NX_VEGA_TOKEN_URL=https://governance.validators-testnet.vega.rocks
|
||||
|
@ -5,8 +5,8 @@ import type { Market } from '@vegaprotocol/markets';
|
||||
import {
|
||||
addDecimalsFormatNumber,
|
||||
fromNanoSeconds,
|
||||
getExpiryDate,
|
||||
getMarketExpiryDate,
|
||||
useExpiryDate,
|
||||
} from '@vegaprotocol/utils';
|
||||
import {
|
||||
Last24hPriceChange,
|
||||
@ -20,7 +20,6 @@ import {
|
||||
useMarketTradingMode,
|
||||
useExternalTwap,
|
||||
getQuoteName,
|
||||
useMarketState,
|
||||
} from '@vegaprotocol/markets';
|
||||
import { MarketState as State } from '@vegaprotocol/types';
|
||||
import { HeaderStat } from '../../components/header';
|
||||
@ -45,12 +44,6 @@ export const MarketHeaderStats = ({ market }: MarketHeaderStatsProps) => {
|
||||
const asset = getAsset(market);
|
||||
const quoteUnit = getQuoteName(market);
|
||||
|
||||
const dataSourceSpec = market.markPriceConfiguration?.dataSourcesSpec?.[1];
|
||||
const sourceType =
|
||||
dataSourceSpec?.sourceType.__typename === 'DataSourceDefinitionExternal' &&
|
||||
dataSourceSpec?.sourceType.sourceType.__typename === 'EthCallSpec' &&
|
||||
dataSourceSpec?.sourceType.sourceType;
|
||||
|
||||
return (
|
||||
<>
|
||||
<HeaderStat heading={t('Mark Price')} testId="market-price">
|
||||
@ -73,8 +66,11 @@ export const MarketHeaderStats = ({ market }: MarketHeaderStatsProps) => {
|
||||
quoteUnit={quoteUnit}
|
||||
/>
|
||||
</HeaderStat>
|
||||
<HeaderStatMarketTradingMode marketId={market.id} />
|
||||
<MarketState marketId={market.id} />
|
||||
<HeaderStatMarketTradingMode
|
||||
marketId={market.id}
|
||||
initialTradingMode={market.tradingMode}
|
||||
/>
|
||||
<MarketState market={market} />
|
||||
{asset ? (
|
||||
<HeaderStat
|
||||
heading={t('Settlement asset')}
|
||||
@ -131,25 +127,14 @@ export const MarketHeaderStats = ({ market }: MarketHeaderStatsProps) => {
|
||||
{t(
|
||||
'The external time weighted average price (TWAP) received from the data source defined in the data sourcing specification.'
|
||||
)}
|
||||
<div className="flex flex-col gap-1">
|
||||
{DocsLinks && (
|
||||
<ExternalLink
|
||||
href={DocsLinks.ETH_DATA_SOURCES}
|
||||
className="mt-2"
|
||||
>
|
||||
{t('Find out more')}
|
||||
</ExternalLink>
|
||||
)}
|
||||
{sourceType && (
|
||||
<ExternalLink
|
||||
data-testid="oracle-spec-links"
|
||||
href={`${VEGA_EXPLORER_URL}/markets/${market.id}/oracles#${sourceType.address}`}
|
||||
className="text-xs my-1"
|
||||
>
|
||||
{t('Oracle specification')}
|
||||
</ExternalLink>
|
||||
)}
|
||||
</div>
|
||||
{DocsLinks && (
|
||||
<ExternalLink
|
||||
href={DocsLinks.ETH_DATA_SOURCES}
|
||||
className="mt-2"
|
||||
>
|
||||
{t('Find out more')}
|
||||
</ExternalLink>
|
||||
)}
|
||||
</div>
|
||||
}
|
||||
testId="index-price"
|
||||
@ -279,13 +264,13 @@ export const FundingCountdown = ({ marketId }: { marketId: string }) => {
|
||||
};
|
||||
|
||||
const ExpiryLabel = ({ market }: ExpiryLabelProps) => {
|
||||
const { data: marketState } = useMarketState(market.id);
|
||||
const content =
|
||||
useExpiryDate(
|
||||
market.tradableInstrument.instrument.metadata.tags,
|
||||
market.marketTimestamps.close,
|
||||
marketState
|
||||
) || '-';
|
||||
const content = market.tradableInstrument.instrument.metadata.tags
|
||||
? getExpiryDate(
|
||||
market.tradableInstrument.instrument.metadata.tags,
|
||||
market.marketTimestamps.close,
|
||||
market.state
|
||||
)
|
||||
: '-';
|
||||
return <div data-testid="trading-expiry">{content}</div>;
|
||||
};
|
||||
|
||||
@ -298,7 +283,6 @@ const ExpiryTooltipContent = ({
|
||||
market,
|
||||
explorerUrl,
|
||||
}: ExpiryTooltipContentProps) => {
|
||||
const { data: state } = useMarketState(market.id);
|
||||
const t = useT();
|
||||
if (market.marketTimestamps.close === null) {
|
||||
const oracleId =
|
||||
@ -314,8 +298,8 @@ const ExpiryTooltipContent = ({
|
||||
const isExpired =
|
||||
metadataExpiryDate &&
|
||||
Date.now() - metadataExpiryDate.valueOf() > 0 &&
|
||||
(state === State.STATE_TRADING_TERMINATED ||
|
||||
state === State.STATE_SETTLED);
|
||||
(market.state === State.STATE_TRADING_TERMINATED ||
|
||||
market.state === State.STATE_SETTLED);
|
||||
|
||||
return (
|
||||
<section data-testid="expiry-tooltip">
|
||||
|
@ -40,6 +40,7 @@ describe('Closed', () => {
|
||||
|
||||
const market = createMarketFragment({
|
||||
id: marketId,
|
||||
state: MarketState.STATE_SETTLED,
|
||||
tradableInstrument: {
|
||||
instrument: {
|
||||
metadata: {
|
||||
@ -95,7 +96,6 @@ describe('Closed', () => {
|
||||
|
||||
const marketsData = createMarketsDataFragment({
|
||||
__typename: 'MarketData',
|
||||
marketState: MarketState.STATE_SETTLED,
|
||||
market: {
|
||||
__typename: 'Market',
|
||||
id: marketId,
|
||||
@ -208,7 +208,7 @@ describe('Closed', () => {
|
||||
const cells = screen.getAllByRole('gridcell');
|
||||
const expectedValues = [
|
||||
market.tradableInstrument.instrument.code,
|
||||
MarketStateMapping[marketsData.marketState],
|
||||
MarketStateMapping[market.state],
|
||||
'3 days ago',
|
||||
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
||||
addDecimalsFormatNumber(marketsData.bestBidPrice, market.decimalPlaces),
|
||||
@ -227,6 +227,87 @@ 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 () => {
|
||||
// Use market with a successor Id as the actions dropdown will optionally
|
||||
// show a link to the successor market
|
||||
@ -234,7 +315,8 @@ describe('Closed', () => {
|
||||
{
|
||||
__typename: 'MarketEdge' as const,
|
||||
node: createMarketFragment({
|
||||
id: marketId,
|
||||
id: 'include-0',
|
||||
state: MarketState.STATE_SETTLED,
|
||||
successorMarketID: 'successor',
|
||||
parentMarketID: 'parent',
|
||||
}),
|
||||
@ -293,7 +375,8 @@ describe('Closed', () => {
|
||||
{
|
||||
__typename: 'MarketEdge' as const,
|
||||
node: createMarketFragment({
|
||||
id: marketId,
|
||||
id: 'include-0',
|
||||
state: MarketState.STATE_SETTLED,
|
||||
successorMarketID: 'successor',
|
||||
}),
|
||||
},
|
||||
|
@ -15,7 +15,7 @@ import {
|
||||
addDecimalsFormatNumber,
|
||||
getMarketExpiryDate,
|
||||
} from '@vegaprotocol/utils';
|
||||
import { closedMarketsProvider, getAsset } from '@vegaprotocol/markets';
|
||||
import { closedMarketsWithDataProvider, getAsset } from '@vegaprotocol/markets';
|
||||
import type { DataSourceFilterFragment } from '@vegaprotocol/markets';
|
||||
import { useAssetDetailsDialogStore } from '@vegaprotocol/assets';
|
||||
import { useMarketClickHandler } from '../../lib/hooks/use-market-click-handler';
|
||||
@ -35,7 +35,7 @@ interface Row {
|
||||
code: string;
|
||||
name: string;
|
||||
decimalPlaces: number;
|
||||
state?: MarketState;
|
||||
state: MarketState;
|
||||
metadata: string[];
|
||||
closeTimestamp: string | null;
|
||||
bestBidPrice: string | undefined;
|
||||
@ -53,7 +53,7 @@ interface Row {
|
||||
|
||||
export const Closed = () => {
|
||||
const { data: marketData, error } = useDataProvider({
|
||||
dataProvider: closedMarketsProvider,
|
||||
dataProvider: closedMarketsWithDataProvider,
|
||||
variables: undefined,
|
||||
});
|
||||
|
||||
@ -87,7 +87,7 @@ export const Closed = () => {
|
||||
code: instrument.code,
|
||||
name: instrument.name,
|
||||
decimalPlaces: market.decimalPlaces,
|
||||
state: market.data?.marketState,
|
||||
state: market.state,
|
||||
metadata: instrument.metadata.tags ?? [],
|
||||
closeTimestamp: market.marketTimestamps.close,
|
||||
bestBidPrice: market.data?.bestBidPrice,
|
||||
|
@ -3,17 +3,11 @@ import type { MockedResponse } from '@apollo/client/testing';
|
||||
import { MockedProvider } from '@apollo/client/testing';
|
||||
import { ProposalsList } from './proposals-list';
|
||||
import { MarketState } from '@vegaprotocol/types';
|
||||
import {
|
||||
createMarketFragment,
|
||||
createMarketsDataFragment,
|
||||
} from '@vegaprotocol/mock';
|
||||
import { createMarketFragment } from '@vegaprotocol/mock';
|
||||
import {
|
||||
type MarketsQuery,
|
||||
MarketsDocument,
|
||||
type MarketsQueryVariables,
|
||||
type MarketsDataQuery,
|
||||
type MarketsDataQueryVariables,
|
||||
MarketsDataDocument,
|
||||
} from '@vegaprotocol/markets';
|
||||
|
||||
const parentMarketName = 'Parent Market Name';
|
||||
@ -21,13 +15,12 @@ const ParentMarketCell = () => <span>{parentMarketName}</span>;
|
||||
|
||||
describe('ProposalsList', () => {
|
||||
const rowContainerSelector = '.ag-center-cols-container';
|
||||
const market = createMarketFragment();
|
||||
const marketData = createMarketsDataFragment({
|
||||
marketState: MarketState.STATE_PROPOSED,
|
||||
const market = createMarketFragment({
|
||||
state: MarketState.STATE_PROPOSED,
|
||||
});
|
||||
|
||||
it('should be properly rendered', async () => {
|
||||
const marketMock: MockedResponse<MarketsQuery, MarketsQueryVariables> = {
|
||||
const mock: MockedResponse<MarketsQuery, MarketsQueryVariables> = {
|
||||
request: {
|
||||
query: MarketsDocument,
|
||||
},
|
||||
@ -44,28 +37,8 @@ describe('ProposalsList', () => {
|
||||
},
|
||||
};
|
||||
|
||||
const marketDataMock: MockedResponse<
|
||||
MarketsDataQuery,
|
||||
MarketsDataQueryVariables
|
||||
> = {
|
||||
request: {
|
||||
query: MarketsDataDocument,
|
||||
},
|
||||
result: {
|
||||
data: {
|
||||
marketsConnection: {
|
||||
edges: [
|
||||
{
|
||||
node: { data: marketData },
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
render(
|
||||
<MockedProvider mocks={[marketMock, marketDataMock]}>
|
||||
<MockedProvider mocks={[mock]}>
|
||||
<ProposalsList cellRenderers={{ ParentMarketCell }} />
|
||||
</MockedProvider>
|
||||
);
|
||||
@ -96,7 +69,7 @@ describe('ProposalsList', () => {
|
||||
|
||||
expect(await container.findAllByRole('row')).toHaveLength(
|
||||
// @ts-ignore data is mocked
|
||||
marketMock?.result?.data.marketsConnection.edges.length
|
||||
mock?.result?.data.marketsConnection.edges.length
|
||||
);
|
||||
|
||||
expect(
|
||||
@ -108,7 +81,7 @@ describe('ProposalsList', () => {
|
||||
});
|
||||
|
||||
it('empty response should causes no data message display', async () => {
|
||||
const marketMock: MockedResponse<MarketsQuery, MarketsQueryVariables> = {
|
||||
const mock: MockedResponse<MarketsQuery, MarketsQueryVariables> = {
|
||||
request: {
|
||||
query: MarketsDocument,
|
||||
},
|
||||
@ -120,23 +93,8 @@ describe('ProposalsList', () => {
|
||||
},
|
||||
},
|
||||
};
|
||||
const marketDataMock: MockedResponse<
|
||||
MarketsDataQuery,
|
||||
MarketsDataQueryVariables
|
||||
> = {
|
||||
request: {
|
||||
query: MarketsDataDocument,
|
||||
},
|
||||
result: {
|
||||
data: {
|
||||
marketsConnection: {
|
||||
edges: [],
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
render(
|
||||
<MockedProvider mocks={[marketMock, marketDataMock]}>
|
||||
<MockedProvider mocks={[mock]}>
|
||||
<ProposalsList cellRenderers={{ ParentMarketCell }} />
|
||||
</MockedProvider>
|
||||
);
|
||||
|
@ -19,7 +19,7 @@ import {
|
||||
} from '@vegaprotocol/types';
|
||||
import { ProposalActionsDropdown } from './proposal-actions-dropdown';
|
||||
import {
|
||||
type MarketMaybeWithData,
|
||||
type MarketFieldsFragment,
|
||||
getProductType,
|
||||
} from '@vegaprotocol/markets';
|
||||
import { useT } from '../../../lib/use-t';
|
||||
@ -40,7 +40,7 @@ export const useColumnDefs = () => {
|
||||
data,
|
||||
}: {
|
||||
value: string;
|
||||
data: MarketMaybeWithData;
|
||||
data: MarketFieldsFragment;
|
||||
}) => {
|
||||
if (!value || !data) return '-';
|
||||
|
||||
@ -70,13 +70,10 @@ export const useColumnDefs = () => {
|
||||
{
|
||||
colId: 'state',
|
||||
headerName: t('State'),
|
||||
field: 'data.marketState',
|
||||
field: 'state',
|
||||
valueFormatter: ({
|
||||
value,
|
||||
}: VegaValueFormatterParams<
|
||||
MarketMaybeWithData,
|
||||
'data.marketState'
|
||||
>) => {
|
||||
}: VegaValueFormatterParams<MarketFieldsFragment, 'state'>) => {
|
||||
return value ? MarketStateMapping[value] : '-';
|
||||
},
|
||||
filter: SetFilter,
|
||||
@ -96,7 +93,7 @@ export const useColumnDefs = () => {
|
||||
valueFormatter: ({
|
||||
value,
|
||||
}: VegaValueFormatterParams<
|
||||
MarketMaybeWithData,
|
||||
MarketFieldsFragment,
|
||||
'marketTimestamps.pending'
|
||||
>) => {
|
||||
return value ? getDateTimeFormat().format(new Date(value)) : '-';
|
||||
@ -110,7 +107,7 @@ export const useColumnDefs = () => {
|
||||
valueFormatter: ({
|
||||
value,
|
||||
}: VegaValueFormatterParams<
|
||||
MarketMaybeWithData,
|
||||
MarketFieldsFragment,
|
||||
'marketTimestamps.open'
|
||||
>) => (value ? getDateTimeFormat().format(new Date(value)) : '-'),
|
||||
filter: DateRangeFilter,
|
||||
@ -120,7 +117,7 @@ export const useColumnDefs = () => {
|
||||
...COL_DEFS.actions,
|
||||
cellRenderer: ({
|
||||
data,
|
||||
}: VegaICellRendererParams<MarketMaybeWithData>) => {
|
||||
}: VegaICellRendererParams<MarketFieldsFragment>) => {
|
||||
if (!data?.marketProposal?.id) return null;
|
||||
|
||||
return <ProposalActionsDropdown id={data.marketProposal.id} />;
|
||||
|
@ -9,7 +9,7 @@ export interface SettlementDataCellProps {
|
||||
oracleSpecId: string;
|
||||
metaDate: Date | null;
|
||||
closeTimestamp: string | null;
|
||||
marketState?: MarketState;
|
||||
marketState: MarketState;
|
||||
}
|
||||
|
||||
export const SettlementDateCell = ({
|
||||
|
@ -125,9 +125,7 @@ export const useMarketsColumnDefs = () => {
|
||||
valueFormatter: ({
|
||||
data,
|
||||
}: VegaValueFormatterParams<MarketMaybeWithData, 'state'>) => {
|
||||
return data?.data?.marketState
|
||||
? Schema.MarketStateMapping[data?.data?.marketState]
|
||||
: '-';
|
||||
return data?.state ? Schema.MarketStateMapping[data.state] : '-';
|
||||
},
|
||||
filter: SetFilter,
|
||||
filterParams: {
|
||||
@ -172,12 +170,7 @@ export const useMarketsColumnDefs = () => {
|
||||
const vol = candles ? calcCandleVolume(candles) : '0';
|
||||
const quoteName = getQuoteName(data);
|
||||
const volPrice =
|
||||
candles &&
|
||||
calcCandleVolumePrice(
|
||||
candles,
|
||||
data.decimalPlaces,
|
||||
data.positionDecimalPlaces
|
||||
);
|
||||
candles && calcCandleVolumePrice(candles, data.decimalPlaces);
|
||||
|
||||
const volume =
|
||||
data && vol && vol !== '0'
|
||||
|
@ -40,10 +40,7 @@ export const applyFilter = (
|
||||
return true;
|
||||
}
|
||||
|
||||
if (
|
||||
transfer.kind.__typename !== 'RecurringTransfer' &&
|
||||
transfer.kind.__typename !== 'RecurringGovernanceTransfer'
|
||||
) {
|
||||
if (transfer.kind.__typename !== 'RecurringTransfer') {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -72,17 +72,17 @@ const MarketData = ({
|
||||
|
||||
const marketTradingMode = marketData
|
||||
? marketData.marketTradingMode
|
||||
: market.data?.marketTradingMode;
|
||||
: market.data
|
||||
? market.data.marketTradingMode
|
||||
: market.tradingMode;
|
||||
|
||||
const mode =
|
||||
marketTradingMode &&
|
||||
[
|
||||
MarketTradingMode.TRADING_MODE_BATCH_AUCTION,
|
||||
MarketTradingMode.TRADING_MODE_MONITORING_AUCTION,
|
||||
MarketTradingMode.TRADING_MODE_OPENING_AUCTION,
|
||||
].includes(marketTradingMode)
|
||||
? MarketTradingModeMapping[marketTradingMode]
|
||||
: '';
|
||||
const mode = [
|
||||
MarketTradingMode.TRADING_MODE_BATCH_AUCTION,
|
||||
MarketTradingMode.TRADING_MODE_MONITORING_AUCTION,
|
||||
MarketTradingMode.TRADING_MODE_OPENING_AUCTION,
|
||||
].includes(marketTradingMode)
|
||||
? MarketTradingModeMapping[marketTradingMode]
|
||||
: '';
|
||||
|
||||
const { oneDayCandles } = useCandles({ marketId: market.id });
|
||||
|
||||
|
@ -120,7 +120,7 @@ export const MarketSelector = ({
|
||||
<div data-testid="market-selector-list">
|
||||
<MarketList
|
||||
data={markets}
|
||||
loading={loading && !data}
|
||||
loading={loading}
|
||||
error={error}
|
||||
searchTerm={filter.searchTerm}
|
||||
currentMarketId={currentMarketId}
|
||||
|
@ -409,6 +409,7 @@ describe('useMarketSelectorList', () => {
|
||||
}),
|
||||
createMarketFragment({
|
||||
id: 'market-1',
|
||||
state: MarketState.STATE_ACTIVE,
|
||||
// @ts-ignore data not on fragment
|
||||
data: createMarketsDataFragment({
|
||||
marketState: MarketState.STATE_ACTIVE,
|
||||
@ -423,6 +424,7 @@ describe('useMarketSelectorList', () => {
|
||||
}),
|
||||
createMarketFragment({
|
||||
id: 'market-2',
|
||||
state: MarketState.STATE_ACTIVE,
|
||||
// @ts-ignore data not on fragment
|
||||
data: createMarketsDataFragment({
|
||||
marketState: MarketState.STATE_ACTIVE,
|
||||
@ -437,6 +439,7 @@ describe('useMarketSelectorList', () => {
|
||||
}),
|
||||
createMarketFragment({
|
||||
id: 'market-3',
|
||||
state: MarketState.STATE_ACTIVE,
|
||||
// @ts-ignore data not on fragment
|
||||
data: createMarketsDataFragment({
|
||||
marketState: MarketState.STATE_ACTIVE,
|
||||
|
@ -1,18 +1,48 @@
|
||||
import { useMarketState } from '@vegaprotocol/markets';
|
||||
import throttle from 'lodash/throttle';
|
||||
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 { HeaderStat } from '../header';
|
||||
import { useCallback, useRef, useState } from 'react';
|
||||
import * as constants from '../constants';
|
||||
import { DocsLinks } from '@vegaprotocol/environment';
|
||||
import { ExternalLink } from '@vegaprotocol/ui-toolkit';
|
||||
import { useT } from '../../lib/use-t';
|
||||
|
||||
export const MarketState = ({ marketId }: { marketId?: string }) => {
|
||||
export const MarketState = ({ market }: { market: Market | null }) => {
|
||||
const t = useT();
|
||||
const { data: marketState } = useMarketState(marketId);
|
||||
const [marketState, setMarketState] = useState<Schema.MarketState | null>(
|
||||
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 (
|
||||
<HeaderStat
|
||||
heading={t('Status')}
|
||||
description={useGetMarketStateTooltip(marketState ?? undefined)}
|
||||
description={useGetMarketStateTooltip(marketState)}
|
||||
testId="market-state"
|
||||
>
|
||||
{marketState ? Schema.MarketStateMapping[marketState] : '-'}
|
||||
@ -20,7 +50,7 @@ export const MarketState = ({ marketId }: { marketId?: string }) => {
|
||||
);
|
||||
};
|
||||
|
||||
const useGetMarketStateTooltip = (state?: Schema.MarketState) => {
|
||||
const useGetMarketStateTooltip = (state: Schema.MarketState | null) => {
|
||||
const t = useT();
|
||||
if (state === Schema.MarketState.STATE_ACTIVE) {
|
||||
return t('Enactment date reached and usual auction exit checks pass');
|
||||
|
@ -26,15 +26,20 @@ const getTradingModeLabel = (
|
||||
interface HeaderStatMarketTradingModeProps {
|
||||
marketId?: string;
|
||||
onSelect?: (marketId: string, metaKey?: boolean) => void;
|
||||
initialTradingMode?: Schema.MarketTradingMode;
|
||||
initialTrigger?: Schema.AuctionTrigger;
|
||||
}
|
||||
|
||||
export const HeaderStatMarketTradingMode = ({
|
||||
marketId,
|
||||
onSelect,
|
||||
initialTradingMode,
|
||||
initialTrigger,
|
||||
}: HeaderStatMarketTradingModeProps) => {
|
||||
const t = useT();
|
||||
const { data } = useStaticMarketData(marketId);
|
||||
const { marketTradingMode, trigger } = data || {};
|
||||
const marketTradingMode = data?.marketTradingMode ?? initialTradingMode;
|
||||
const trigger = data?.trigger ?? initialTrigger;
|
||||
|
||||
return (
|
||||
<HeaderStat
|
||||
@ -51,6 +56,8 @@ export const HeaderStatMarketTradingMode = ({
|
||||
|
||||
export const MarketTradingMode = ({
|
||||
marketId,
|
||||
initialTradingMode,
|
||||
initialTrigger,
|
||||
inViewRoot,
|
||||
}: Omit<HeaderStatMarketTradingModeProps, 'onUpdate'> & {
|
||||
inViewRoot?: RefObject<Element>;
|
||||
@ -65,7 +72,10 @@ export const MarketTradingMode = ({
|
||||
}
|
||||
>
|
||||
<span ref={ref}>
|
||||
{getTradingModeLabel(data?.marketTradingMode, data?.trigger)}
|
||||
{getTradingModeLabel(
|
||||
data?.marketTradingMode ?? initialTradingMode,
|
||||
data?.trigger ?? initialTrigger
|
||||
)}
|
||||
</span>
|
||||
</Tooltip>
|
||||
);
|
||||
|
@ -38,10 +38,7 @@ export const applyFilter = (
|
||||
return true;
|
||||
}
|
||||
|
||||
if (
|
||||
transfer.kind.__typename !== 'RecurringTransfer' &&
|
||||
transfer.kind.__typename !== 'RecurringGovernanceTransfer'
|
||||
) {
|
||||
if (transfer.kind.__typename !== 'RecurringTransfer') {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -948,13 +948,13 @@ const EntityIcon = ({
|
||||
export const areAllMarketsSettled = (transferNode: EnrichedRewardTransfer) => {
|
||||
const settledMarkets = transferNode.markets?.filter(
|
||||
(m) =>
|
||||
m?.data?.marketState &&
|
||||
m?.state &&
|
||||
[
|
||||
MarketState.STATE_TRADING_TERMINATED,
|
||||
MarketState.STATE_SETTLED,
|
||||
MarketState.STATE_CANCELLED,
|
||||
MarketState.STATE_CLOSED,
|
||||
].includes(m?.data?.marketState)
|
||||
].includes(m.state)
|
||||
);
|
||||
|
||||
return (
|
||||
@ -969,8 +969,8 @@ export const areAllMarketsSuspended = (
|
||||
return (
|
||||
transferNode.markets?.filter(
|
||||
(m) =>
|
||||
m?.data?.marketState === MarketState.STATE_SUSPENDED ||
|
||||
m?.data?.marketState === MarketState.STATE_SUSPENDED_VIA_GOVERNANCE
|
||||
m?.state === MarketState.STATE_SUSPENDED ||
|
||||
m?.state === MarketState.STATE_SUSPENDED_VIA_GOVERNANCE
|
||||
).length === transferNode.markets?.length &&
|
||||
Boolean(transferNode.markets && transferNode.markets.length > 0)
|
||||
);
|
||||
|
@ -1,4 +1,4 @@
|
||||
CONSOLE_IMAGE_NAME=vegaprotocol/trading:latest
|
||||
VEGA_VERSION=v0.75.5
|
||||
VEGA_VERSION=v0.75.1
|
||||
LOCAL_SERVER=false
|
||||
VEGA_ENV=STAGNET1
|
||||
|
@ -1,4 +1,4 @@
|
||||
CONSOLE_IMAGE_NAME=vegaprotocol/trading:develop
|
||||
VEGA_VERSION=v0.75.5
|
||||
VEGA_VERSION=v0.75.1
|
||||
LOCAL_SERVER=false
|
||||
VEGA_ENV=STAGNET1
|
8
apps/trading/e2e/poetry.lock
generated
8
apps/trading/e2e/poetry.lock
generated
@ -1,4 +1,4 @@
|
||||
# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
|
||||
# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand.
|
||||
|
||||
[[package]]
|
||||
name = "certifi"
|
||||
@ -1165,8 +1165,8 @@ profile = ["pytest-profiling", "snakeviz"]
|
||||
[package.source]
|
||||
type = "git"
|
||||
url = "https://github.com/vegaprotocol/vega-market-sim.git/"
|
||||
reference = "pre-release/vega-v0.75.5"
|
||||
resolved_reference = "b2a3437fc13ced2b7ecd582ca4778bbc4b0fe3a6"
|
||||
reference = "HEAD"
|
||||
resolved_reference = "b2b4cd004800ba2732448f329b0fa8f0746d4d0b"
|
||||
|
||||
[[package]]
|
||||
name = "websocket-client"
|
||||
@ -1347,4 +1347,4 @@ files = [
|
||||
[metadata]
|
||||
lock-version = "2.0"
|
||||
python-versions = ">=3.9,<3.11"
|
||||
content-hash = "80e87cbde486e7bb150fce0b1c974de38501bc16732952b455d43cb843426623"
|
||||
content-hash = "39ce8400de7bf060857447281ef27bd78c9b1d9639da063b051e3ae6e7887a67"
|
||||
|
@ -13,7 +13,7 @@ pytest-playwright = "^0.4.2"
|
||||
docker = "^6.1.3"
|
||||
pytest-xdist = "^3.3.1"
|
||||
python-dotenv = "^1.0.0"
|
||||
vega-sim = { git = "https://github.com/vegaprotocol/vega-market-sim.git/", branch = "pre-release/vega-v0.75.5"}
|
||||
vega-sim = { git = "https://github.com/vegaprotocol/vega-market-sim.git/" }
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core"]
|
||||
|
@ -13,7 +13,7 @@ pytest-playwright = "^0.4.2"
|
||||
docker = "^6.1.3"
|
||||
pytest-xdist = "^3.3.1"
|
||||
python-dotenv = "^1.0.0"
|
||||
vega-sim = { git = "https://github.com/vegaprotocol/vega-market-sim.git/", branch = "pre-release/vega-v0.75.5"}
|
||||
vega-sim = { git = "https://github.com/vegaprotocol/vega-market-sim.git/" }
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core"]
|
||||
|
@ -43,8 +43,7 @@ class TestSettledMarket:
|
||||
"",
|
||||
]
|
||||
|
||||
page.wait_for_selector(
|
||||
'[data-testid="tab-closed-markets"]', state="visible")
|
||||
page.wait_for_selector('[data-testid="tab-closed-markets"]', state="visible")
|
||||
page_headers = (
|
||||
page.get_by_test_id("tab-closed-markets")
|
||||
.locator(".ag-header-cell-text")
|
||||
@ -65,19 +64,16 @@ class TestSettledMarket:
|
||||
).first
|
||||
|
||||
# 6001-MARK-001
|
||||
expect(row_selector.locator('[col-id="code"]')
|
||||
).to_have_text("BTC:DAI_2023Futr")
|
||||
expect(row_selector.locator('[col-id="code"]')).to_have_text("BTC:DAI_2023Futr")
|
||||
# 6001-MARK-003
|
||||
expect(row_selector.locator(
|
||||
'[col-id="state"]')).to_have_text("Settled")
|
||||
expect(row_selector.locator('[col-id="state"]')).to_have_text("Settled")
|
||||
# 6001-MARK-004
|
||||
# 6001-MARK-005
|
||||
# 6001-MARK-009
|
||||
# 6001-MARK-008
|
||||
# 6001-MARK-010
|
||||
pattern = r"(\d+)\s+(months|hours|days|minutes)\s+ago"
|
||||
date_text = row_selector.locator(
|
||||
'[col-id="settlementDate"]').inner_text()
|
||||
date_text = row_selector.locator('[col-id="settlementDate"]').inner_text()
|
||||
assert re.match(
|
||||
pattern, date_text
|
||||
), f"Expected text to match pattern but got {date_text}"
|
||||
@ -90,14 +86,11 @@ class TestSettledMarket:
|
||||
actual_href
|
||||
), f"Expected href to match {expected_pattern.pattern}, but got {actual_href}"
|
||||
# 6001-MARK-011
|
||||
expect(row_selector.locator(
|
||||
'[col-id="bestBidPrice"]')).to_have_text("0.00")
|
||||
expect(row_selector.locator('[col-id="bestBidPrice"]')).to_have_text("0.00")
|
||||
# 6001-MARK-012
|
||||
expect(row_selector.locator(
|
||||
'[col-id="bestOfferPrice"]')).to_have_text("0.00")
|
||||
expect(row_selector.locator('[col-id="bestOfferPrice"]')).to_have_text("0.00")
|
||||
# 6001-MARK-013
|
||||
expect(row_selector.locator(
|
||||
'[col-id="markPrice"]')).to_have_text("110.00")
|
||||
expect(row_selector.locator('[col-id="markPrice"]')).to_have_text("110.00")
|
||||
# 6001-MARK-014
|
||||
# 6001-MARK-015
|
||||
# 6001-MARK-016
|
||||
@ -114,8 +107,7 @@ class TestSettledMarket:
|
||||
), f"Expected href to match {expected_pattern.pattern}, but got {actual_href}"
|
||||
|
||||
# 6001-MARK-018
|
||||
expect(row_selector.locator(
|
||||
'[col-id="settlementAsset"]')).to_have_text("tDAI")
|
||||
expect(row_selector.locator('[col-id="settlementAsset"]')).to_have_text("tDAI")
|
||||
# 6001-MARK-020
|
||||
assert re.match(
|
||||
pattern, date_text
|
||||
@ -137,10 +129,8 @@ def test_terminated_market_no_settlement_date(page: Page, vega: VegaServiceNull)
|
||||
row_selector = page.locator(
|
||||
'[data-testid="tab-closed-markets"] .ag-center-cols-container .ag-row'
|
||||
).first
|
||||
expect(row_selector.locator('[col-id="state"]')
|
||||
).to_have_text("Trading Terminated")
|
||||
expect(row_selector.locator(
|
||||
'[col-id="settlementDate"]')).to_have_text("Unknown")
|
||||
expect(row_selector.locator('[col-id="state"]')).to_have_text("Trading Terminated")
|
||||
expect(row_selector.locator('[col-id="settlementDate"]')).to_have_text("Unknown")
|
||||
|
||||
# TODO Create test for terminated market with settlement date in future
|
||||
# TODO Create test for terminated market with settlement date in past
|
||||
|
@ -7,7 +7,6 @@ from fixtures.market import setup_continuous_market
|
||||
from conftest import init_vega, cleanup_container, init_page, auth_setup, risk_accepted_setup
|
||||
from wallet_config import MM_WALLET, MM_WALLET2
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def setup_environment(request, browser) -> Generator[Tuple[Page, str, str], None, None]:
|
||||
with init_vega(request) as vega:
|
||||
@ -23,8 +22,7 @@ def setup_environment(request, browser) -> Generator[Tuple[Page, str, str], None
|
||||
side="SIDE_BUY",
|
||||
volume=10,
|
||||
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_for_total_catchup()
|
||||
@ -68,8 +66,7 @@ def setup_environment(request, browser) -> Generator[Tuple[Page, str, str], None
|
||||
1,
|
||||
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)
|
||||
|
||||
vega.wait_fn(1)
|
||||
@ -92,37 +89,31 @@ def setup_environment(request, browser) -> Generator[Tuple[Page, str, str], None
|
||||
yield page, market_id
|
||||
|
||||
|
||||
|
||||
def test_parked_order(
|
||||
setup_environment: Tuple[Page, str, str],
|
||||
) -> None:
|
||||
page, market_id, = setup_environment
|
||||
page.goto(f"/#/markets/{market_id}")
|
||||
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(
|
||||
setup_environment: Tuple[Page, str, str],
|
||||
setup_environment: Tuple[Page, str, str],
|
||||
) -> None:
|
||||
page, market_id, = setup_environment
|
||||
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-trading-mode")).to_have_text("Trading modeMonitoring auction - price")
|
||||
expect(page.get_by_test_id("market-state")).to_have_text("StatusSuspended")
|
||||
|
||||
|
||||
def test_market_info_price_monitoring_asd(
|
||||
setup_environment: Tuple[Page, str, str],
|
||||
setup_environment: Tuple[Page, str, str],
|
||||
) -> None:
|
||||
page, market_id, = setup_environment
|
||||
page.goto(f"/#/markets/{market_id}")
|
||||
page.get_by_test_id("Info").click()
|
||||
page.get_by_test_id("accordion-title").get_by_text(
|
||||
"Key details").click()
|
||||
expect(
|
||||
page.get_by_test_id(
|
||||
"key-value-table-row").nth(2)).to_contain_text("Suspended")
|
||||
page.get_by_test_id(
|
||||
"key-value-table-row").nth(2)).to_contain_text("Suspended")
|
||||
expect(
|
||||
page.get_by_test_id(
|
||||
"key-value-table-row").nth(3)).to_contain_text("Monitoring auction")
|
||||
page.get_by_test_id(
|
||||
"key-value-table-row").nth(3)).to_contain_text("Monitoring auction")
|
@ -20,52 +20,46 @@ from wallet_config import MM_WALLET, MM_WALLET2, TERMINATE_WALLET
|
||||
row_selector = '[data-testid="tab-funding-payments"] .ag-center-cols-container .ag-row'
|
||||
col_amount = '[col-id="amount"]'
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def setup_environment(
|
||||
request, browser
|
||||
) -> Generator[Tuple[Page, VegaServiceNull, str], None, None]:
|
||||
with init_vega(request) as vega:
|
||||
request.addfinalizer(lambda: cleanup_container(vega))
|
||||
perps_market = setup_perps_market(vega)
|
||||
submit_multiple_orders(
|
||||
vega, MM_WALLET.name, perps_market, "SIDE_SELL", [
|
||||
[1, 110], [1, 105]]
|
||||
)
|
||||
submit_multiple_orders(
|
||||
vega, MM_WALLET2.name, perps_market, "SIDE_BUY", [[1, 90], [1, 95]]
|
||||
)
|
||||
vega.submit_settlement_data(
|
||||
settlement_key=TERMINATE_WALLET.name,
|
||||
settlement_price=110,
|
||||
market_id=perps_market,
|
||||
)
|
||||
vega.wait_fn(1)
|
||||
vega.wait_for_total_catchup()
|
||||
submit_multiple_orders(
|
||||
vega, MM_WALLET.name, perps_market, "SIDE_SELL", [
|
||||
[1, 110], [1, 105]]
|
||||
)
|
||||
submit_multiple_orders(
|
||||
vega, MM_WALLET2.name, perps_market, "SIDE_BUY", [
|
||||
[1, 112], [1, 115]]
|
||||
)
|
||||
vega.submit_settlement_data(
|
||||
settlement_key=TERMINATE_WALLET.name,
|
||||
settlement_price=110,
|
||||
market_id=perps_market,
|
||||
)
|
||||
vega.wait_fn(10)
|
||||
vega.wait_for_total_catchup()
|
||||
|
||||
with init_page(vega, browser, request) as page:
|
||||
risk_accepted_setup(page)
|
||||
auth_setup(vega, page)
|
||||
yield page, vega, perps_market
|
||||
|
||||
request, browser
|
||||
) -> Generator[Tuple[Page, VegaServiceNull, str], None, None]:
|
||||
with init_vega(request) as vega:
|
||||
request.addfinalizer(lambda: cleanup_container(vega))
|
||||
perps_market = setup_perps_market(vega)
|
||||
submit_multiple_orders(
|
||||
vega, MM_WALLET.name, perps_market, "SIDE_SELL", [[1, 110], [1, 105]]
|
||||
)
|
||||
submit_multiple_orders(
|
||||
vega, MM_WALLET2.name, perps_market, "SIDE_BUY", [[1, 90], [1, 95]]
|
||||
)
|
||||
vega.submit_settlement_data(
|
||||
settlement_key=TERMINATE_WALLET.name,
|
||||
settlement_price=110,
|
||||
market_id=perps_market,
|
||||
)
|
||||
vega.wait_fn(1)
|
||||
vega.wait_for_total_catchup()
|
||||
submit_multiple_orders(
|
||||
vega, MM_WALLET.name, perps_market, "SIDE_SELL", [[1, 110], [1, 105]]
|
||||
)
|
||||
submit_multiple_orders(
|
||||
vega, MM_WALLET2.name, perps_market, "SIDE_BUY", [[1, 112], [1, 115]]
|
||||
)
|
||||
vega.submit_settlement_data(
|
||||
settlement_key=TERMINATE_WALLET.name,
|
||||
settlement_price=110,
|
||||
market_id=perps_market,
|
||||
)
|
||||
vega.wait_fn(10)
|
||||
vega.wait_for_total_catchup()
|
||||
|
||||
with init_page(vega, browser, request) as page:
|
||||
risk_accepted_setup(page)
|
||||
auth_setup(vega, page)
|
||||
yield page, vega, perps_market
|
||||
class TestPerpetuals:
|
||||
def test_funding_payment_profit(self,
|
||||
def test_funding_payment_profit(self,
|
||||
setup_environment: Tuple[Page, str, str],
|
||||
) -> None:
|
||||
page, vega, perps_market = setup_environment
|
||||
@ -74,7 +68,7 @@ class TestPerpetuals:
|
||||
row = page.locator(row_selector)
|
||||
expect(row.locator(col_amount)).to_have_text("4.45 tDAI")
|
||||
|
||||
def test_funding_payment_loss(self,
|
||||
def test_funding_payment_loss(self,
|
||||
setup_environment: Tuple[Page, str, str],
|
||||
) -> None:
|
||||
page, vega, perps_market = setup_environment
|
||||
@ -84,7 +78,7 @@ class TestPerpetuals:
|
||||
row = page.locator(row_selector)
|
||||
expect(row.locator(col_amount)).to_have_text("-13.35 tDAI")
|
||||
|
||||
def test_funding_header(self,
|
||||
def test_funding_header(self,
|
||||
setup_environment: Tuple[Page, str, str],
|
||||
) -> None:
|
||||
page, vega, perps_market = setup_environment
|
||||
@ -92,8 +86,7 @@ class TestPerpetuals:
|
||||
expect(page.get_by_test_id("market-funding")).to_contain_text(
|
||||
"Funding Rate / Countdown-8.1818%"
|
||||
)
|
||||
expect(page.get_by_test_id("index-price")
|
||||
).to_have_text("Index Price110.00")
|
||||
expect(page.get_by_test_id("index-price")).to_have_text("Index Price110.00")
|
||||
|
||||
@pytest.mark.skip("Skipped due to issue #5421")
|
||||
def test_funding_payment_history(perps_market, page: Page, vega):
|
||||
@ -113,7 +106,6 @@ class TestPerpetuals:
|
||||
print("Bounding box not found for the element")
|
||||
|
||||
|
||||
@pytest.mark.skip("need to be clarify")
|
||||
@pytest.mark.usefixtures("risk_accepted", "auth")
|
||||
def test_perps_market_termination_proposed(page: Page, vega: VegaServiceNull):
|
||||
perpetual_market = setup_perps_market(vega)
|
||||
@ -123,7 +115,7 @@ def test_perps_market_termination_proposed(page: Page, vega: VegaServiceNull):
|
||||
market_id=perpetual_market,
|
||||
market_state=MarketStateUpdateType.Terminate,
|
||||
price=100,
|
||||
vote_closing_time=datetime.now() + timedelta(seconds=30),
|
||||
vote_closing_time=datetime.now() + timedelta(seconds=15),
|
||||
vote_enactment_time=datetime.now() + timedelta(seconds=60),
|
||||
approve_proposal=True,
|
||||
forward_time_to_enactment=False,
|
||||
@ -158,12 +150,9 @@ def test_perps_market_terminated(page: Page, vega: VegaServiceNull):
|
||||
|
||||
page.goto(f"/#/markets/{perpetual_market}")
|
||||
# TODO change back to have text once bug #5465 is fixed
|
||||
expect(page.get_by_test_id("market-price")
|
||||
).to_have_text("Mark Price100.00")
|
||||
expect(page.get_by_test_id("market-change")
|
||||
).to_contain_text("Change (24h)")
|
||||
expect(page.get_by_test_id("market-volume")
|
||||
).to_contain_text("Volume (24h)")
|
||||
expect(page.get_by_test_id("market-price")).to_have_text("Mark Price100.00")
|
||||
expect(page.get_by_test_id("market-change")).to_contain_text("Change (24h)")
|
||||
expect(page.get_by_test_id("market-volume")).to_contain_text("Volume (24h)")
|
||||
expect(page.get_by_test_id("market-trading-mode")).to_have_text(
|
||||
"Trading modeNo trading"
|
||||
)
|
||||
|
@ -41,55 +41,6 @@ query RewardsPage($partyId: ID!) {
|
||||
}
|
||||
}
|
||||
|
||||
fragment RecurringTransferFields on TransferKind {
|
||||
... on RecurringGovernanceTransfer {
|
||||
startEpoch
|
||||
endEpoch
|
||||
dispatchStrategy {
|
||||
capRewardFeeMultiple
|
||||
dispatchMetric
|
||||
dispatchMetricAssetId
|
||||
marketIdsInScope
|
||||
entityScope
|
||||
individualScope
|
||||
teamScope
|
||||
nTopPerformers
|
||||
stakingRequirement
|
||||
notionalTimeWeightedAveragePositionRequirement
|
||||
windowLength
|
||||
lockPeriod
|
||||
distributionStrategy
|
||||
rankTable {
|
||||
startRank
|
||||
shareRatio
|
||||
}
|
||||
}
|
||||
}
|
||||
... on RecurringTransfer {
|
||||
startEpoch
|
||||
endEpoch
|
||||
dispatchStrategy {
|
||||
capRewardFeeMultiple
|
||||
dispatchMetric
|
||||
dispatchMetricAssetId
|
||||
marketIdsInScope
|
||||
entityScope
|
||||
individualScope
|
||||
teamScope
|
||||
nTopPerformers
|
||||
stakingRequirement
|
||||
notionalTimeWeightedAveragePositionRequirement
|
||||
windowLength
|
||||
lockPeriod
|
||||
distributionStrategy
|
||||
rankTable {
|
||||
startRank
|
||||
shareRatio
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
query ActiveRewards(
|
||||
$isReward: Boolean
|
||||
$partyId: ID
|
||||
@ -124,7 +75,29 @@ query ActiveRewards(
|
||||
timestamp
|
||||
gameId
|
||||
kind {
|
||||
...RecurringTransferFields
|
||||
... on RecurringTransfer {
|
||||
startEpoch
|
||||
endEpoch
|
||||
dispatchStrategy {
|
||||
capRewardFeeMultiple
|
||||
dispatchMetric
|
||||
dispatchMetricAssetId
|
||||
marketIdsInScope
|
||||
entityScope
|
||||
individualScope
|
||||
teamScope
|
||||
nTopPerformers
|
||||
stakingRequirement
|
||||
notionalTimeWeightedAveragePositionRequirement
|
||||
windowLength
|
||||
lockPeriod
|
||||
distributionStrategy
|
||||
rankTable {
|
||||
startRank
|
||||
shareRatio
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
reason
|
||||
}
|
||||
|
89
apps/trading/lib/hooks/__generated__/Rewards.ts
generated
89
apps/trading/lib/hooks/__generated__/Rewards.ts
generated
@ -10,16 +10,6 @@ export type RewardsPageQueryVariables = Types.Exact<{
|
||||
|
||||
export type RewardsPageQuery = { __typename?: 'Query', party?: { __typename?: 'Party', id: string, vestingStats?: { __typename?: 'PartyVestingStats', rewardBonusMultiplier: string, quantumBalance: string, epochSeq: number } | null, activityStreak?: { __typename?: 'PartyActivityStreak', activeFor: number, isActive: boolean, inactiveFor: number, rewardDistributionMultiplier: string, rewardVestingMultiplier: string, epoch: number, tradedVolume: string, openVolume: string } | null, vestingBalancesSummary: { __typename?: 'PartyVestingBalancesSummary', epoch?: number | null, vestingBalances?: Array<{ __typename?: 'PartyVestingBalance', balance: string, asset: { __typename?: 'Asset', id: string, symbol: string, decimals: number, quantum: string } }> | null, lockedBalances?: Array<{ __typename?: 'PartyLockedBalance', balance: string, untilEpoch: number, asset: { __typename?: 'Asset', id: string, symbol: string, decimals: number, quantum: string } }> | null } } | null };
|
||||
|
||||
export type RecurringTransferFields_OneOffGovernanceTransfer_Fragment = { __typename?: 'OneOffGovernanceTransfer' };
|
||||
|
||||
export type RecurringTransferFields_OneOffTransfer_Fragment = { __typename?: 'OneOffTransfer' };
|
||||
|
||||
export type RecurringTransferFields_RecurringGovernanceTransfer_Fragment = { __typename?: 'RecurringGovernanceTransfer', startEpoch: number, endEpoch?: number | null, dispatchStrategy?: { __typename?: 'DispatchStrategy', capRewardFeeMultiple?: string | null, dispatchMetric: Types.DispatchMetric, dispatchMetricAssetId: string, marketIdsInScope?: Array<string> | null, entityScope: Types.EntityScope, individualScope?: Types.IndividualScope | null, teamScope?: Array<string | null> | null, nTopPerformers?: string | null, stakingRequirement: string, notionalTimeWeightedAveragePositionRequirement: string, windowLength: number, lockPeriod: number, distributionStrategy: Types.DistributionStrategy, rankTable?: Array<{ __typename?: 'RankTable', startRank: number, shareRatio: number } | null> | null } | null };
|
||||
|
||||
export type RecurringTransferFields_RecurringTransfer_Fragment = { __typename?: 'RecurringTransfer', startEpoch: number, endEpoch?: number | null, dispatchStrategy?: { __typename?: 'DispatchStrategy', capRewardFeeMultiple?: string | null, dispatchMetric: Types.DispatchMetric, dispatchMetricAssetId: string, marketIdsInScope?: Array<string> | null, entityScope: Types.EntityScope, individualScope?: Types.IndividualScope | null, teamScope?: Array<string | null> | null, nTopPerformers?: string | null, stakingRequirement: string, notionalTimeWeightedAveragePositionRequirement: string, windowLength: number, lockPeriod: number, distributionStrategy: Types.DistributionStrategy, rankTable?: Array<{ __typename?: 'RankTable', startRank: number, shareRatio: number } | null> | null } | null };
|
||||
|
||||
export type RecurringTransferFieldsFragment = RecurringTransferFields_OneOffGovernanceTransfer_Fragment | RecurringTransferFields_OneOffTransfer_Fragment | RecurringTransferFields_RecurringGovernanceTransfer_Fragment | RecurringTransferFields_RecurringTransfer_Fragment;
|
||||
|
||||
export type ActiveRewardsQueryVariables = Types.Exact<{
|
||||
isReward?: Types.InputMaybe<Types.Scalars['Boolean']>;
|
||||
partyId?: Types.InputMaybe<Types.Scalars['ID']>;
|
||||
@ -28,7 +18,7 @@ export type ActiveRewardsQueryVariables = Types.Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type ActiveRewardsQuery = { __typename?: 'Query', transfersConnection?: { __typename?: 'TransferConnection', edges?: Array<{ __typename?: 'TransferEdge', node: { __typename?: 'TransferNode', transfer: { __typename?: 'Transfer', amount: string, id: string, from: string, fromAccountType: Types.AccountType, to: string, toAccountType: Types.AccountType, reference?: string | null, status: Types.TransferStatus, timestamp: any, gameId?: string | null, reason?: string | null, asset?: { __typename?: 'Asset', id: string, symbol: string, decimals: number, name: string, quantum: string, status: Types.AssetStatus } | null, kind: { __typename?: 'OneOffGovernanceTransfer' } | { __typename?: 'OneOffTransfer' } | { __typename?: 'RecurringGovernanceTransfer', startEpoch: number, endEpoch?: number | null, dispatchStrategy?: { __typename?: 'DispatchStrategy', capRewardFeeMultiple?: string | null, dispatchMetric: Types.DispatchMetric, dispatchMetricAssetId: string, marketIdsInScope?: Array<string> | null, entityScope: Types.EntityScope, individualScope?: Types.IndividualScope | null, teamScope?: Array<string | null> | null, nTopPerformers?: string | null, stakingRequirement: string, notionalTimeWeightedAveragePositionRequirement: string, windowLength: number, lockPeriod: number, distributionStrategy: Types.DistributionStrategy, rankTable?: Array<{ __typename?: 'RankTable', startRank: number, shareRatio: number } | null> | null } | null } | { __typename?: 'RecurringTransfer', startEpoch: number, endEpoch?: number | null, dispatchStrategy?: { __typename?: 'DispatchStrategy', capRewardFeeMultiple?: string | null, dispatchMetric: Types.DispatchMetric, dispatchMetricAssetId: string, marketIdsInScope?: Array<string> | null, entityScope: Types.EntityScope, individualScope?: Types.IndividualScope | null, teamScope?: Array<string | null> | null, nTopPerformers?: string | null, stakingRequirement: string, notionalTimeWeightedAveragePositionRequirement: string, windowLength: number, lockPeriod: number, distributionStrategy: Types.DistributionStrategy, rankTable?: Array<{ __typename?: 'RankTable', startRank: number, shareRatio: number } | null> | null } | null } }, fees?: Array<{ __typename?: 'TransferFee', transferId: string, amount: string, epoch: number } | null> | null } } | null> | null } | null };
|
||||
export type ActiveRewardsQuery = { __typename?: 'Query', transfersConnection?: { __typename?: 'TransferConnection', edges?: Array<{ __typename?: 'TransferEdge', node: { __typename?: 'TransferNode', transfer: { __typename?: 'Transfer', amount: string, id: string, from: string, fromAccountType: Types.AccountType, to: string, toAccountType: Types.AccountType, reference?: string | null, status: Types.TransferStatus, timestamp: any, gameId?: string | null, reason?: string | null, asset?: { __typename?: 'Asset', id: string, symbol: string, decimals: number, name: string, quantum: string, status: Types.AssetStatus } | null, kind: { __typename?: 'OneOffGovernanceTransfer' } | { __typename?: 'OneOffTransfer' } | { __typename?: 'RecurringGovernanceTransfer' } | { __typename?: 'RecurringTransfer', startEpoch: number, endEpoch?: number | null, dispatchStrategy?: { __typename?: 'DispatchStrategy', capRewardFeeMultiple?: string | null, dispatchMetric: Types.DispatchMetric, dispatchMetricAssetId: string, marketIdsInScope?: Array<string> | null, entityScope: Types.EntityScope, individualScope?: Types.IndividualScope | null, teamScope?: Array<string | null> | null, nTopPerformers?: string | null, stakingRequirement: string, notionalTimeWeightedAveragePositionRequirement: string, windowLength: number, lockPeriod: number, distributionStrategy: Types.DistributionStrategy, rankTable?: Array<{ __typename?: 'RankTable', startRank: number, shareRatio: number } | null> | null } | null } }, fees?: Array<{ __typename?: 'TransferFee', transferId: string, amount: string, epoch: number } | null> | null } } | null> | null } | null };
|
||||
|
||||
export type TWAPQueryVariables = Types.Exact<{
|
||||
partyId: Types.Scalars['ID'];
|
||||
@ -63,56 +53,7 @@ export type MarketForRewardsQueryVariables = Types.Exact<{
|
||||
|
||||
export type MarketForRewardsQuery = { __typename?: 'Query', market?: { __typename?: 'Market', tradableInstrument: { __typename?: 'TradableInstrument', instrument: { __typename?: 'Instrument', id: string, name: string, code: string, metadata: { __typename?: 'InstrumentMetadata', tags?: Array<string> | null } } } } | null };
|
||||
|
||||
export const RecurringTransferFieldsFragmentDoc = gql`
|
||||
fragment RecurringTransferFields on TransferKind {
|
||||
... on RecurringGovernanceTransfer {
|
||||
startEpoch
|
||||
endEpoch
|
||||
dispatchStrategy {
|
||||
capRewardFeeMultiple
|
||||
dispatchMetric
|
||||
dispatchMetricAssetId
|
||||
marketIdsInScope
|
||||
entityScope
|
||||
individualScope
|
||||
teamScope
|
||||
nTopPerformers
|
||||
stakingRequirement
|
||||
notionalTimeWeightedAveragePositionRequirement
|
||||
windowLength
|
||||
lockPeriod
|
||||
distributionStrategy
|
||||
rankTable {
|
||||
startRank
|
||||
shareRatio
|
||||
}
|
||||
}
|
||||
}
|
||||
... on RecurringTransfer {
|
||||
startEpoch
|
||||
endEpoch
|
||||
dispatchStrategy {
|
||||
capRewardFeeMultiple
|
||||
dispatchMetric
|
||||
dispatchMetricAssetId
|
||||
marketIdsInScope
|
||||
entityScope
|
||||
individualScope
|
||||
teamScope
|
||||
nTopPerformers
|
||||
stakingRequirement
|
||||
notionalTimeWeightedAveragePositionRequirement
|
||||
windowLength
|
||||
lockPeriod
|
||||
distributionStrategy
|
||||
rankTable {
|
||||
startRank
|
||||
shareRatio
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const RewardsPageDocument = gql`
|
||||
query RewardsPage($partyId: ID!) {
|
||||
party(id: $partyId) {
|
||||
@ -215,7 +156,29 @@ export const ActiveRewardsDocument = gql`
|
||||
timestamp
|
||||
gameId
|
||||
kind {
|
||||
...RecurringTransferFields
|
||||
... on RecurringTransfer {
|
||||
startEpoch
|
||||
endEpoch
|
||||
dispatchStrategy {
|
||||
capRewardFeeMultiple
|
||||
dispatchMetric
|
||||
dispatchMetricAssetId
|
||||
marketIdsInScope
|
||||
entityScope
|
||||
individualScope
|
||||
teamScope
|
||||
nTopPerformers
|
||||
stakingRequirement
|
||||
notionalTimeWeightedAveragePositionRequirement
|
||||
windowLength
|
||||
lockPeriod
|
||||
distributionStrategy
|
||||
rankTable {
|
||||
startRank
|
||||
shareRatio
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
reason
|
||||
}
|
||||
@ -228,7 +191,7 @@ export const ActiveRewardsDocument = gql`
|
||||
}
|
||||
}
|
||||
}
|
||||
${RecurringTransferFieldsFragmentDoc}`;
|
||||
`;
|
||||
|
||||
/**
|
||||
* __useActiveRewardsQuery__
|
||||
|
@ -4,9 +4,9 @@ import {
|
||||
} from '@vegaprotocol/assets';
|
||||
import { useActiveRewardsQuery } from './__generated__/Rewards';
|
||||
import {
|
||||
type MarketMaybeWithData,
|
||||
type MarketFieldsFragment,
|
||||
useMarketsMapProvider,
|
||||
getAsset,
|
||||
marketsWithDataProvider,
|
||||
} from '@vegaprotocol/markets';
|
||||
import {
|
||||
type RecurringTransfer,
|
||||
@ -20,7 +20,6 @@ import {
|
||||
import { type ApolloError } from '@apollo/client';
|
||||
import compact from 'lodash/compact';
|
||||
import { useEpochInfoQuery } from './__generated__/Epoch';
|
||||
import { useDataProvider } from '@vegaprotocol/data-provider';
|
||||
|
||||
export type RewardTransfer = TransferNode & {
|
||||
transfer: {
|
||||
@ -36,7 +35,7 @@ export type EnrichedRewardTransfer = RewardTransfer & {
|
||||
/** A flag determining whether a reward asset is being traded on any of the active markets */
|
||||
isAssetTraded?: boolean;
|
||||
/** A list of markets in scope */
|
||||
markets?: MarketMaybeWithData[];
|
||||
markets?: MarketFieldsFragment[];
|
||||
};
|
||||
|
||||
/**
|
||||
@ -47,8 +46,7 @@ export type EnrichedRewardTransfer = RewardTransfer & {
|
||||
*/
|
||||
export const isReward = (node: TransferNode): node is RewardTransfer => {
|
||||
if (
|
||||
((node.transfer.kind.__typename === 'RecurringTransfer' ||
|
||||
node.transfer.kind.__typename === 'RecurringGovernanceTransfer') &&
|
||||
(node.transfer.kind.__typename === 'RecurringTransfer' &&
|
||||
node.transfer.kind.dispatchStrategy != null) ||
|
||||
node.transfer.toAccountType === AccountType.ACCOUNT_TYPE_GLOBAL_REWARD
|
||||
) {
|
||||
@ -117,15 +115,11 @@ export const useRewards = ({
|
||||
loading: assetsLoading,
|
||||
error: assetsError,
|
||||
} = useAssetsMapProvider();
|
||||
|
||||
const {
|
||||
data: markets,
|
||||
loading: marketsLoading,
|
||||
error: marketsError,
|
||||
} = useDataProvider({
|
||||
dataProvider: marketsWithDataProvider,
|
||||
variables: undefined,
|
||||
});
|
||||
} = useMarketsMapProvider();
|
||||
|
||||
const enriched = compact(
|
||||
data?.transfersConnection?.edges?.map((n) => n?.node)
|
||||
@ -146,7 +140,7 @@ export const useRewards = ({
|
||||
undefined;
|
||||
const marketsInScope = compact(
|
||||
node.transfer.kind.dispatchStrategy.marketIdsInScope?.map(
|
||||
(id) => markets && markets.find((m) => m.id === id)
|
||||
(id) => markets && markets[id]
|
||||
)
|
||||
);
|
||||
const isAssetTraded =
|
||||
@ -157,7 +151,7 @@ export const useRewards = ({
|
||||
return (
|
||||
mAsset.id ===
|
||||
node.transfer.kind.dispatchStrategy.dispatchMetricAssetId &&
|
||||
m.data?.marketState === MarketState.STATE_ACTIVE
|
||||
m.state === MarketState.STATE_ACTIVE
|
||||
);
|
||||
} catch {
|
||||
// NOOP
|
||||
|
@ -5,9 +5,7 @@ import { isMarketActive } from '../utils';
|
||||
export const useTopTradedMarkets = () => {
|
||||
const { data, loading, error } = useMarketList();
|
||||
|
||||
const activeMarkets = data?.filter(
|
||||
(m) => m.data?.marketState && isMarketActive(m.data?.marketState)
|
||||
);
|
||||
const activeMarkets = data?.filter((m) => isMarketActive(m.state));
|
||||
const marketsByTopTraded = data
|
||||
? orderBy(activeMarkets, (m) => calcTradedFactor(m), 'desc')
|
||||
: undefined;
|
||||
|
@ -5,7 +5,6 @@ import {
|
||||
ViewPartyConnector,
|
||||
createConfig,
|
||||
fairground,
|
||||
validatorsTestnet,
|
||||
mainnet,
|
||||
stagnet,
|
||||
} from '@vegaprotocol/wallet';
|
||||
@ -37,7 +36,7 @@ export const useVegaWalletConfig = () => {
|
||||
const viewParty = new ViewPartyConnector();
|
||||
|
||||
const config = createConfig({
|
||||
chains: [mainnet, fairground, validatorsTestnet, stagnet],
|
||||
chains: [mainnet, fairground, stagnet],
|
||||
defaultChainId: CHAIN_IDS[VEGA_ENV],
|
||||
connectors: [injected, snap, jsonRpc, viewParty],
|
||||
});
|
||||
|
@ -39,8 +39,6 @@ const nextConfig = {
|
||||
GIT_COMMIT: commitHash,
|
||||
GIT_TAG: tag,
|
||||
},
|
||||
basePath: '/apps/vegas', // Set the base path
|
||||
assetPrefix: '/apps/vegas', // Set the asset prefix
|
||||
};
|
||||
|
||||
module.exports = SENTRY_AUTH_TOKEN
|
||||
|
@ -850,8 +850,9 @@ describe('DealTicket', () => {
|
||||
];
|
||||
|
||||
it.each(states)('handles state %s correctly', async (marketState) => {
|
||||
const marketOverrides = { state: marketState };
|
||||
const marketDataOverrides = { marketState: marketState };
|
||||
render(generateJsx([], {}, marketDataOverrides));
|
||||
render(generateJsx([], marketOverrides, marketDataOverrides));
|
||||
|
||||
const text = `This market is ${marketState
|
||||
.split('_')
|
||||
|
@ -9,6 +9,8 @@ export function generateMarket(override?: PartialDeep<Market>): Market {
|
||||
id: 'market-id',
|
||||
decimalPlaces: 2,
|
||||
positionDecimalPlaces: 1,
|
||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
state: Schema.MarketState.STATE_ACTIVE,
|
||||
tickSize: '1',
|
||||
marketTimestamps: {
|
||||
__typename: 'MarketTimestamps',
|
||||
@ -17,14 +19,6 @@ export function generateMarket(override?: PartialDeep<Market>): Market {
|
||||
close: '',
|
||||
open: '',
|
||||
},
|
||||
markPriceConfiguration: {
|
||||
decayWeight: '',
|
||||
decayPower: 0,
|
||||
cashAmount: '',
|
||||
SourceStalenessTolerance: [],
|
||||
CompositePriceType:
|
||||
Schema.CompositePriceType.COMPOSITE_PRICE_TYPE_LAST_TRADE,
|
||||
},
|
||||
tradableInstrument: {
|
||||
__typename: 'TradableInstrument',
|
||||
instrument: {
|
||||
|
@ -199,6 +199,8 @@ const mockMarket: MarketFieldsFragment = {
|
||||
id: 'marketId',
|
||||
decimalPlaces: 1,
|
||||
positionDecimalPlaces: 4,
|
||||
state: Schema.MarketState.STATE_ACTIVE,
|
||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
} as MarketFieldsFragment;
|
||||
|
||||
const orderFormValues: OrderFormValues = {
|
||||
|
@ -7,7 +7,7 @@ export const CHAIN_IDS: {
|
||||
[Networks.STAGNET1]: 'vega-stagnet1-202307191148',
|
||||
[Networks.TESTNET]: 'vega-fairground-202305051805',
|
||||
[Networks.MAINNET_MIRROR]: '',
|
||||
[Networks.VALIDATORS_TESTNET]: 'vega-testnet-0002-v4',
|
||||
[Networks.VALIDATOR_TESTNET]: 'testnet-001',
|
||||
[Networks.CUSTOM]: 'vega-stagnet1-202307191148',
|
||||
[Networks.MAINNET]: 'vega-mainnet-0011',
|
||||
};
|
||||
|
@ -160,7 +160,7 @@ describe('Network switcher', () => {
|
||||
[Networks.CUSTOM]: undefined,
|
||||
[Networks.MAINNET]: 'https://main.net',
|
||||
[Networks.TESTNET]: 'https://test.net',
|
||||
[Networks.VALIDATORS_TESTNET]: 'https://validator-test.net',
|
||||
[Networks.VALIDATOR_TESTNET]: 'https://validator-test.net',
|
||||
[Networks.MAINNET_MIRROR]: 'https://mainnet-mirror.net',
|
||||
[Networks.DEVNET]: 'https://dev.net',
|
||||
[Networks.STAGNET1]: 'https://stag1.net',
|
||||
@ -196,7 +196,7 @@ describe('Network switcher', () => {
|
||||
const VEGA_NETWORKS: Record<Networks, string | undefined> = {
|
||||
[Networks.CUSTOM]: undefined,
|
||||
[Networks.MAINNET]: 'https://main.net',
|
||||
[Networks.VALIDATORS_TESTNET]: 'https://validator-test.net',
|
||||
[Networks.VALIDATOR_TESTNET]: 'https://validator-test.net',
|
||||
[Networks.MAINNET_MIRROR]: 'https://mainnet-mirror.net',
|
||||
[Networks.TESTNET]: 'https://test.net',
|
||||
[Networks.DEVNET]: 'https://dev.net',
|
||||
@ -226,7 +226,7 @@ describe('Network switcher', () => {
|
||||
const VEGA_NETWORKS: Record<Networks, string | undefined> = {
|
||||
[Networks.CUSTOM]: undefined,
|
||||
[Networks.MAINNET]: undefined,
|
||||
[Networks.VALIDATORS_TESTNET]: 'https://validator-test.net',
|
||||
[Networks.VALIDATOR_TESTNET]: 'https://validator-test.net',
|
||||
[Networks.MAINNET_MIRROR]: 'https://mainnet-mirror.net',
|
||||
[Networks.TESTNET]: 'https://test.net',
|
||||
[Networks.DEVNET]: 'https://dev.net',
|
||||
|
@ -17,7 +17,7 @@ import { useT } from '../../use-t';
|
||||
export const useEnvNameMapping: () => Record<Networks, string> = () => {
|
||||
const t = useT();
|
||||
return {
|
||||
[Networks.VALIDATORS_TESTNET]: t('VALIDATORS_TESTNET', {
|
||||
[Networks.VALIDATOR_TESTNET]: t('VALIDATOR_TESTNET', {
|
||||
contextSeparator: '|',
|
||||
}),
|
||||
[Networks.MAINNET_MIRROR]: t('Mainnet-mirror'),
|
||||
@ -41,7 +41,7 @@ export const useEnvDescriptionMapping: () => Record<Networks, string> = () => {
|
||||
const t = useT();
|
||||
return {
|
||||
[Networks.CUSTOM]: '',
|
||||
[Networks.VALIDATORS_TESTNET]: t('The validator deployed testnet'),
|
||||
[Networks.VALIDATOR_TESTNET]: t('The validator deployed testnet'),
|
||||
[Networks.MAINNET_MIRROR]: t('The mainnet-mirror network'),
|
||||
[Networks.DEVNET]: t('The latest Vega code auto-deployed'),
|
||||
[Networks.STAGNET1]: t('A release candidate for the staging environment'),
|
||||
|
@ -20,7 +20,7 @@ type DAppLinks = {
|
||||
};
|
||||
|
||||
const EmptyLinks: DAppLinks = {
|
||||
[Networks.VALIDATORS_TESTNET]: '',
|
||||
[Networks.VALIDATOR_TESTNET]: '',
|
||||
[Networks.MAINNET_MIRROR]: '',
|
||||
[Networks.DEVNET]: '',
|
||||
[Networks.STAGNET1]: '',
|
||||
@ -32,7 +32,7 @@ const ExplorerLinks = {
|
||||
...EmptyLinks,
|
||||
[Networks.STAGNET1]: 'https://explorer.stagnet1.vega.rocks',
|
||||
[Networks.TESTNET]: 'https://explorer.fairground.wtf',
|
||||
[Networks.VALIDATORS_TESTNET]:
|
||||
[Networks.VALIDATOR_TESTNET]:
|
||||
'https://explorer.validators-testnet.vega.rocks',
|
||||
[Networks.MAINNET_MIRROR]: 'https://explorer.mainnet-mirror.vega.rocks/',
|
||||
[Networks.MAINNET]: 'https://explorer.vega.xyz',
|
||||
@ -51,7 +51,7 @@ const GovernanceLinks = {
|
||||
[Networks.DEVNET]: 'https://dev.governance.vega.xyz',
|
||||
[Networks.STAGNET1]: 'https://governance.stagnet1.vega.rocks',
|
||||
[Networks.TESTNET]: 'https://governance.fairground.wtf',
|
||||
[Networks.VALIDATORS_TESTNET]:
|
||||
[Networks.VALIDATOR_TESTNET]:
|
||||
'https://governance.validators-testnet.vega.rocks',
|
||||
[Networks.MAINNET_MIRROR]: 'https://governance.mainnet-mirror.vega.rocks',
|
||||
[Networks.MAINNET]: 'https://governance.vega.xyz',
|
||||
|
@ -6,7 +6,7 @@ import type {
|
||||
} from './utils/validate-environment';
|
||||
|
||||
export enum Networks {
|
||||
VALIDATORS_TESTNET = 'VALIDATORS_TESTNET',
|
||||
VALIDATOR_TESTNET = 'VALIDATOR_TESTNET',
|
||||
MAINNET_MIRROR = 'MAINNET_MIRROR',
|
||||
CUSTOM = 'CUSTOM',
|
||||
TESTNET = 'TESTNET',
|
||||
|
@ -3,6 +3,8 @@ import type { PartialDeep } from 'type-fest';
|
||||
import * as Schema from '@vegaprotocol/types';
|
||||
import type { Trade } from './fills-data-provider';
|
||||
|
||||
const { MarketState, MarketTradingMode } = Schema;
|
||||
|
||||
export const generateFill = (override?: PartialDeep<Trade>) => {
|
||||
const defaultFill: Trade = {
|
||||
__typename: 'Trade',
|
||||
@ -50,15 +52,9 @@ export const generateFill = (override?: PartialDeep<Trade>) => {
|
||||
id: 'market-id',
|
||||
positionDecimalPlaces: 0,
|
||||
decimalPlaces: 5,
|
||||
state: MarketState.STATE_ACTIVE,
|
||||
tradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
tickSize: '1',
|
||||
markPriceConfiguration: {
|
||||
decayWeight: '',
|
||||
decayPower: 0,
|
||||
cashAmount: '',
|
||||
SourceStalenessTolerance: [],
|
||||
CompositePriceType:
|
||||
Schema.CompositePriceType.COMPOSITE_PRICE_TYPE_LAST_TRADE,
|
||||
},
|
||||
fees: {
|
||||
__typename: 'Fees',
|
||||
factors: {
|
||||
|
@ -1,7 +1,9 @@
|
||||
import merge from 'lodash/merge';
|
||||
import type { PartialDeep } from 'type-fest';
|
||||
import * as Schema from '@vegaprotocol/types';
|
||||
import type { FundingPayment } from './funding-payments-data-provider';
|
||||
import { CompositePriceType } from '@vegaprotocol/types';
|
||||
|
||||
const { MarketState, MarketTradingMode } = Schema;
|
||||
|
||||
export const generateFundingPayment = (
|
||||
override?: PartialDeep<FundingPayment>
|
||||
@ -18,6 +20,8 @@ export const generateFundingPayment = (
|
||||
id: 'market-id',
|
||||
positionDecimalPlaces: 0,
|
||||
decimalPlaces: 5,
|
||||
state: MarketState.STATE_ACTIVE,
|
||||
tradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
tickSize: '1',
|
||||
fees: {
|
||||
__typename: 'Fees',
|
||||
@ -28,13 +32,6 @@ export const generateFundingPayment = (
|
||||
makerFee: '0.1',
|
||||
},
|
||||
},
|
||||
markPriceConfiguration: {
|
||||
decayWeight: '',
|
||||
decayPower: 0,
|
||||
cashAmount: '',
|
||||
SourceStalenessTolerance: [],
|
||||
CompositePriceType: CompositePriceType.COMPOSITE_PRICE_TYPE_LAST_TRADE,
|
||||
},
|
||||
marketTimestamps: {
|
||||
__typename: 'MarketTimestamps',
|
||||
proposed: '2005-03-31T19:37:00.000Z',
|
||||
|
@ -154,7 +154,7 @@
|
||||
"TYPE_SELECTOR_LIQUIDITY_MONITORING_AUCTION": "This market is in auction until it reaches <0>sufficient liquidity</0>. Only limit orders are permitted when market is in auction.",
|
||||
"TYPE_SELECTOR_PRICE_MONITORING_AUCTION": "This market is in auction due to <0>high price volatility</0>. Only limit orders are permitted when market is in auction.",
|
||||
"Until the auction ends, you can only place GFA, GTT, or GTC limit orders": "Until the auction ends, you can only place GFA, GTT, or GTC limit orders",
|
||||
"VALIDATORS_TESTNET": "VALIDATORS_TESTNET",
|
||||
"VALIDATOR_TESTNET": "VALIDATOR_TESTNET",
|
||||
"Volume discount": "Volume discount",
|
||||
"When the order trades and its size falls below this threshold, it will be reset to the peak size and moved to the back of the priority order. Must be less than or equal to peak size, and greater than 0.": "When the order trades and its size falls below this threshold, it will be reset to the peak size and moved to the back of the priority order. Must be less than or equal to peak size, and greater than 0.",
|
||||
"You are setting this market to cross-margin mode.": "You are setting this market to cross-margin mode.",
|
||||
|
@ -36,7 +36,7 @@
|
||||
"The validator deployed testnet": "The validator deployed testnet",
|
||||
"The vega mainnet": "The vega mainnet",
|
||||
"This app will only work on {{VEGA_ENV}}. Select a node to connect to.": "This app will only work on {{VEGA_ENV}}. Select a node to connect to.",
|
||||
"VALIDATORS_TESTNET": "VALIDATORS_TESTNET",
|
||||
"VALIDATOR_TESTNET": "VALIDATOR_TESTNET",
|
||||
"View on Etherscan (opens in a new tab)": "View on Etherscan (opens in a new tab)",
|
||||
"View on {{chainLabel}} (opens in a new tab)": "View on {{chainLabel}} (opens in a new tab)",
|
||||
"Warning delay ( >{{warningLatency}} sec): {{blockUpdateLatency}} sec": "Warning delay ( >{{warningLatency}} sec): {{blockUpdateLatency}} sec",
|
||||
|
File diff suppressed because one or more lines are too long
14
libs/markets/src/lib/__generated__/markets.ts
generated
14
libs/markets/src/lib/__generated__/markets.ts
generated
File diff suppressed because one or more lines are too long
@ -10,10 +10,10 @@ import { useT } from '../../use-t';
|
||||
|
||||
interface Props {
|
||||
marketId?: string;
|
||||
positionDecimalPlaces?: number;
|
||||
formatDecimals?: number;
|
||||
initialValue?: string;
|
||||
marketDecimals: number;
|
||||
positionDecimalPlaces: number;
|
||||
quoteUnit?: string;
|
||||
}
|
||||
|
||||
@ -41,11 +41,7 @@ export const Last24hVolume = ({
|
||||
: initialValue;
|
||||
|
||||
const candleVolumePrice = oneDayCandles
|
||||
? calcCandleVolumePrice(
|
||||
oneDayCandles,
|
||||
marketDecimals,
|
||||
positionDecimalPlaces
|
||||
)
|
||||
? calcCandleVolumePrice(oneDayCandles, marketDecimals)
|
||||
: initialValue;
|
||||
|
||||
return (
|
||||
|
@ -1,9 +1,5 @@
|
||||
import * as Schema from '@vegaprotocol/types';
|
||||
import type {
|
||||
Market,
|
||||
MarketMaybeWithData,
|
||||
MarketMaybeWithDataAndCandles,
|
||||
} from './markets-provider';
|
||||
import type { Market, MarketMaybeWithDataAndCandles } from './markets-provider';
|
||||
import {
|
||||
calcCandleVolumePrice,
|
||||
calcTradedFactor,
|
||||
@ -11,10 +7,9 @@ import {
|
||||
sumFeesFactors,
|
||||
totalFeesFactorsPercentage,
|
||||
} from './market-utils';
|
||||
import type { MarketData } from './market-data-provider';
|
||||
const { MarketState, MarketTradingMode } = Schema;
|
||||
|
||||
const MARKET_A: Partial<MarketMaybeWithData> = {
|
||||
const MARKET_A: Partial<Market> = {
|
||||
id: '1',
|
||||
marketTimestamps: {
|
||||
__typename: 'MarketTimestamps',
|
||||
@ -23,13 +18,11 @@ const MARKET_A: Partial<MarketMaybeWithData> = {
|
||||
open: '2022-05-18T13:08:27.693537312Z',
|
||||
close: null,
|
||||
},
|
||||
data: {
|
||||
marketState: MarketState.STATE_ACTIVE,
|
||||
marketTradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
} as MarketData,
|
||||
state: MarketState.STATE_ACTIVE,
|
||||
tradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
};
|
||||
|
||||
const MARKET_B: Partial<MarketMaybeWithData> = {
|
||||
const MARKET_B: Partial<Market> = {
|
||||
id: '2',
|
||||
marketTimestamps: {
|
||||
__typename: 'MarketTimestamps',
|
||||
@ -38,13 +31,11 @@ const MARKET_B: Partial<MarketMaybeWithData> = {
|
||||
open: '2022-05-18T13:00:39.328347732Z',
|
||||
close: null,
|
||||
},
|
||||
data: {
|
||||
marketState: MarketState.STATE_ACTIVE,
|
||||
marketTradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
} as MarketData,
|
||||
state: MarketState.STATE_ACTIVE,
|
||||
tradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
};
|
||||
|
||||
const MARKET_C: Partial<MarketMaybeWithData> = {
|
||||
const MARKET_C: Partial<Market> = {
|
||||
id: '3',
|
||||
marketTimestamps: {
|
||||
__typename: 'MarketTimestamps',
|
||||
@ -53,13 +44,11 @@ const MARKET_C: Partial<MarketMaybeWithData> = {
|
||||
open: '2022-05-17T13:00:39.328347732Z',
|
||||
close: null,
|
||||
},
|
||||
data: {
|
||||
marketState: MarketState.STATE_REJECTED,
|
||||
marketTradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
} as MarketData,
|
||||
state: MarketState.STATE_REJECTED,
|
||||
tradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
};
|
||||
|
||||
const MARKET_D: Partial<MarketMaybeWithData> = {
|
||||
const MARKET_D: Partial<Market> = {
|
||||
id: '4',
|
||||
marketTimestamps: {
|
||||
__typename: 'MarketTimestamps',
|
||||
@ -68,10 +57,8 @@ const MARKET_D: Partial<MarketMaybeWithData> = {
|
||||
open: '2022-05-16T13:00:39.328347732Z',
|
||||
close: null,
|
||||
},
|
||||
data: {
|
||||
marketState: MarketState.STATE_ACTIVE,
|
||||
marketTradingMode: MarketTradingMode.TRADING_MODE_NO_TRADING,
|
||||
} as MarketData,
|
||||
state: MarketState.STATE_ACTIVE,
|
||||
tradingMode: MarketTradingMode.TRADING_MODE_NO_TRADING,
|
||||
};
|
||||
|
||||
describe('mapDataToMarketList', () => {
|
||||
@ -81,7 +68,7 @@ describe('mapDataToMarketList', () => {
|
||||
MARKET_B,
|
||||
MARKET_C,
|
||||
MARKET_D,
|
||||
] as unknown as MarketMaybeWithData[]);
|
||||
] as unknown as Market[]);
|
||||
expect(result).toEqual([MARKET_B, MARKET_A]);
|
||||
});
|
||||
});
|
||||
@ -190,11 +177,7 @@ describe('calcCandleVolumePrice', () => {
|
||||
periodStart: '2022-05-18T14:08:27.693537312Z',
|
||||
},
|
||||
];
|
||||
|
||||
const marketDecimals = 3;
|
||||
const positionDecimalPlaces = 2;
|
||||
expect(
|
||||
calcCandleVolumePrice(candles, marketDecimals, positionDecimalPlaces)
|
||||
).toEqual('0.002');
|
||||
const decimalPlaces = 2;
|
||||
expect(calcCandleVolumePrice(candles, decimalPlaces)).toEqual('2');
|
||||
});
|
||||
});
|
||||
|
@ -89,8 +89,8 @@ export const filterAndSortMarkets = (markets: MarketMaybeWithData[]) => {
|
||||
];
|
||||
const orderedMarkets = orderBy(
|
||||
markets?.filter((m) => {
|
||||
const state = m.data?.marketState;
|
||||
const tradingMode = m.data?.marketTradingMode;
|
||||
const state = m.data?.marketState || m.state;
|
||||
const tradingMode = m.data?.marketTradingMode || m.tradingMode;
|
||||
return (
|
||||
state !== MarketState.STATE_REJECTED &&
|
||||
tradingMode !== MarketTradingMode.TRADING_MODE_NO_TRADING
|
||||
@ -101,26 +101,19 @@ export const filterAndSortMarkets = (markets: MarketMaybeWithData[]) => {
|
||||
);
|
||||
return orderedMarkets.sort(
|
||||
(a, b) =>
|
||||
(a.data?.marketTradingMode
|
||||
? tradingModesOrdering.indexOf(a.data?.marketTradingMode)
|
||||
: -1) -
|
||||
(b.data?.marketTradingMode
|
||||
? tradingModesOrdering.indexOf(b.data?.marketTradingMode)
|
||||
: -1)
|
||||
tradingModesOrdering.indexOf(a.data?.marketTradingMode || a.tradingMode) -
|
||||
tradingModesOrdering.indexOf(b.data?.marketTradingMode || b.tradingMode)
|
||||
);
|
||||
};
|
||||
|
||||
export const filterAndSortClosedMarkets = (markets: MarketMaybeWithData[]) => {
|
||||
return markets.filter((m) => {
|
||||
return (
|
||||
m.data?.marketState &&
|
||||
[
|
||||
MarketState.STATE_SETTLED,
|
||||
MarketState.STATE_TRADING_TERMINATED,
|
||||
MarketState.STATE_CLOSED,
|
||||
MarketState.STATE_CANCELLED,
|
||||
].includes(m.data.marketState)
|
||||
);
|
||||
return [
|
||||
MarketState.STATE_SETTLED,
|
||||
MarketState.STATE_TRADING_TERMINATED,
|
||||
MarketState.STATE_CLOSED,
|
||||
MarketState.STATE_CANCELLED,
|
||||
].includes(m.data?.marketState || m.state);
|
||||
});
|
||||
};
|
||||
|
||||
@ -128,9 +121,8 @@ export const filterAndSortProposedMarkets = (
|
||||
markets: MarketMaybeWithData[]
|
||||
) => {
|
||||
return markets.filter((m) => {
|
||||
return (
|
||||
m.data?.marketState &&
|
||||
[MarketState.STATE_PROPOSED].includes(m.data?.marketState)
|
||||
return [MarketState.STATE_PROPOSED].includes(
|
||||
m.data?.marketState || m.state
|
||||
);
|
||||
});
|
||||
};
|
||||
@ -186,16 +178,12 @@ export const calcCandleVolume = (candles: Candle[]): string | undefined =>
|
||||
*/
|
||||
export const calcCandleVolumePrice = (
|
||||
candles: Candle[],
|
||||
marketDecimals: number,
|
||||
positionDecimals: number
|
||||
decimalPlaces: number
|
||||
): string | undefined =>
|
||||
candles &&
|
||||
candles.reduce(
|
||||
(acc, c) =>
|
||||
new BigNumber(acc)
|
||||
// Using notional both price and size need conversion with decimals, we can acheive the same result by just combining them
|
||||
.plus(toBigNum(c.notional, marketDecimals + positionDecimals))
|
||||
.toString(),
|
||||
new BigNumber(acc).plus(toBigNum(c.notional, decimalPlaces)).toString(),
|
||||
'0'
|
||||
);
|
||||
|
||||
|
@ -110,30 +110,19 @@ export const marketWithDataProvider = makeDerivedDataProvider<
|
||||
};
|
||||
});
|
||||
|
||||
export const marketsWithDataProvider = makeDerivedDataProvider<
|
||||
MarketMaybeWithData[],
|
||||
never
|
||||
>([marketsProvider, marketsDataProvider], (parts) =>
|
||||
addData(parts[0] as Market[], parts[1] as MarketData[])
|
||||
export const activeMarketsProvider = makeDerivedDataProvider<Market[], never>(
|
||||
[marketsProvider],
|
||||
([markets]) => filterAndSortMarkets(markets)
|
||||
);
|
||||
|
||||
export const activeMarketsProvider = makeDerivedDataProvider<
|
||||
MarketMaybeWithData[],
|
||||
never
|
||||
>([marketsWithDataProvider], ([markets]) => filterAndSortMarkets(markets));
|
||||
|
||||
export const closedMarketsProvider = makeDerivedDataProvider<
|
||||
MarketMaybeWithData[],
|
||||
never
|
||||
>([marketsWithDataProvider], ([markets]) =>
|
||||
filterAndSortClosedMarkets(markets)
|
||||
export const closedMarketsProvider = makeDerivedDataProvider<Market[], never>(
|
||||
[marketsProvider],
|
||||
([markets]) => filterAndSortClosedMarkets(markets)
|
||||
);
|
||||
|
||||
export const proposedMarketsProvider = makeDerivedDataProvider<
|
||||
MarketMaybeWithData[],
|
||||
never
|
||||
>([marketsWithDataProvider], ([markets]) =>
|
||||
filterAndSortProposedMarkets(markets)
|
||||
export const proposedMarketsProvider = makeDerivedDataProvider<Market[], never>(
|
||||
[marketsProvider],
|
||||
([markets]) => filterAndSortProposedMarkets(markets)
|
||||
);
|
||||
|
||||
export type MarketMaybeWithCandles = Market & { candles?: Candle[] };
|
||||
@ -168,7 +157,28 @@ const addData = <T extends Market>(markets: T[], marketsData: MarketData[]) =>
|
||||
data: marketsData.find((data) => data.market.id === market.id),
|
||||
}));
|
||||
|
||||
export const marketsWithLiveDataProvider = makeDerivedDataProvider<
|
||||
export const marketsWithDataProvider = 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,
|
||||
{ marketIds: string[] }
|
||||
|
@ -61,11 +61,10 @@ fragment MarketFields on Market {
|
||||
decimalPlaces
|
||||
positionDecimalPlaces
|
||||
tickSize
|
||||
state
|
||||
tradingMode
|
||||
parentMarketID
|
||||
successorMarketID
|
||||
markPriceConfiguration {
|
||||
...PriceConfiguration
|
||||
}
|
||||
fees {
|
||||
factors {
|
||||
makerFee
|
||||
|
@ -36,6 +36,8 @@ export const createMarketFragment = (
|
||||
id: 'market-0',
|
||||
decimalPlaces: 5,
|
||||
positionDecimalPlaces: 0,
|
||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
state: Schema.MarketState.STATE_ACTIVE,
|
||||
tickSize: '1',
|
||||
marketTimestamps: {
|
||||
__typename: 'MarketTimestamps',
|
||||
@ -159,14 +161,6 @@ export const createMarketFragment = (
|
||||
__typename: 'TradableInstrument',
|
||||
},
|
||||
__typename: 'Market',
|
||||
markPriceConfiguration: {
|
||||
decayWeight: '',
|
||||
decayPower: 0,
|
||||
cashAmount: '',
|
||||
SourceStalenessTolerance: [],
|
||||
CompositePriceType:
|
||||
Schema.CompositePriceType.COMPOSITE_PRICE_TYPE_LAST_TRADE,
|
||||
},
|
||||
};
|
||||
|
||||
return merge(cloneDeep(defaultFragment), override);
|
||||
@ -196,6 +190,8 @@ const marketFieldsFragments: MarketFieldsFragment[] = [
|
||||
}),
|
||||
createMarketFragment({
|
||||
id: 'market-2',
|
||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_MONITORING_AUCTION,
|
||||
state: Schema.MarketState.STATE_SUSPENDED,
|
||||
marketTimestamps: {
|
||||
proposed: '2022-08-23T11:36:32.252490405Z',
|
||||
pending: '2022-08-24T11:36:32.252490405Z',
|
||||
|
@ -21,14 +21,6 @@ export const generateOrder = (partialOrder?: PartialDeep<Order>) => {
|
||||
makerFee: '0.1',
|
||||
},
|
||||
},
|
||||
markPriceConfiguration: {
|
||||
decayWeight: '',
|
||||
decayPower: 0,
|
||||
cashAmount: '',
|
||||
SourceStalenessTolerance: [],
|
||||
CompositePriceType:
|
||||
Schema.CompositePriceType.COMPOSITE_PRICE_TYPE_LAST_TRADE,
|
||||
},
|
||||
marketTimestamps: {
|
||||
__typename: 'MarketTimestamps',
|
||||
proposed: '2022-08-23T11:36:32.252490405Z',
|
||||
@ -37,6 +29,7 @@ export const generateOrder = (partialOrder?: PartialDeep<Order>) => {
|
||||
close: null,
|
||||
},
|
||||
positionDecimalPlaces: 2,
|
||||
state: Schema.MarketState.STATE_ACTIVE,
|
||||
tradableInstrument: {
|
||||
__typename: 'TradableInstrument',
|
||||
instrument: {
|
||||
@ -93,6 +86,7 @@ export const generateOrder = (partialOrder?: PartialDeep<Order>) => {
|
||||
},
|
||||
},
|
||||
},
|
||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
},
|
||||
size: '10',
|
||||
type: Schema.OrderType.TYPE_MARKET,
|
||||
|
@ -31,14 +31,6 @@ export const generateStopOrder = (
|
||||
makerFee: '0.1',
|
||||
},
|
||||
},
|
||||
markPriceConfiguration: {
|
||||
decayWeight: '',
|
||||
decayPower: 0,
|
||||
cashAmount: '',
|
||||
SourceStalenessTolerance: [],
|
||||
CompositePriceType:
|
||||
Schema.CompositePriceType.COMPOSITE_PRICE_TYPE_LAST_TRADE,
|
||||
},
|
||||
marketTimestamps: {
|
||||
__typename: 'MarketTimestamps',
|
||||
proposed: '2005-04-02T19:37:00.000Z',
|
||||
@ -47,6 +39,7 @@ export const generateStopOrder = (
|
||||
open: '',
|
||||
},
|
||||
positionDecimalPlaces: 2,
|
||||
state: Schema.MarketState.STATE_ACTIVE,
|
||||
tradableInstrument: {
|
||||
__typename: 'TradableInstrument',
|
||||
instrument: {
|
||||
@ -103,6 +96,7 @@ export const generateStopOrder = (
|
||||
},
|
||||
},
|
||||
},
|
||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
},
|
||||
submission: {
|
||||
marketId: 'market-id',
|
||||
|
@ -132,8 +132,7 @@ export const update = <T extends Omit<OrderFieldsFragment, 'market'> & Cursor>(
|
||||
): T[] => {
|
||||
const updatedData = data ? [...data] : ([] as T[]);
|
||||
delta.forEach((orderUpdate) => {
|
||||
const index =
|
||||
data?.findIndex((order) => order?.id === orderUpdate.id) ?? -1;
|
||||
const index = data?.findIndex((order) => order.id === orderUpdate.id) ?? -1;
|
||||
const newer = !data?.length || orderUpdate.createdAt >= data[0].createdAt;
|
||||
const doesFilterPass =
|
||||
!variables || orderMatchFilters(orderUpdate, variables);
|
||||
@ -205,7 +204,7 @@ export const activeOrdersProvider = makeDerivedDataProvider<
|
||||
}
|
||||
const orders = partsData[0] as ReturnType<typeof getData>;
|
||||
return variables.marketId
|
||||
? orders.filter((order) => variables.marketId === order?.market.id)
|
||||
? orders.filter((order) => variables.marketId === order.market.id)
|
||||
: orders;
|
||||
}
|
||||
);
|
||||
|
@ -3,7 +3,8 @@ import { OrderViewDialog } from './order-view-dialog';
|
||||
import type { Order } from '../order-data-provider';
|
||||
import { BrowserRouter } from 'react-router-dom';
|
||||
import {
|
||||
CompositePriceType,
|
||||
MarketState,
|
||||
MarketTradingMode,
|
||||
OrderStatus,
|
||||
OrderTimeInForce,
|
||||
OrderType,
|
||||
@ -19,14 +20,8 @@ describe('OrderViewDialog', () => {
|
||||
id: 'b66cd4be223dfd900a4750bb5175e17d8f678996877d262be4c749a99e22a970',
|
||||
decimalPlaces: 5,
|
||||
positionDecimalPlaces: 3,
|
||||
markPriceConfiguration: {
|
||||
decayWeight: '',
|
||||
decayPower: 0,
|
||||
cashAmount: '',
|
||||
SourceStalenessTolerance: [],
|
||||
CompositePriceType:
|
||||
CompositePriceType.COMPOSITE_PRICE_TYPE_LAST_TRADE,
|
||||
},
|
||||
state: MarketState.STATE_ACTIVE,
|
||||
tradingMode: MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
tickSize: '1',
|
||||
fees: {
|
||||
__typename: 'Fees',
|
||||
|
@ -111,6 +111,7 @@ const marketsData = [
|
||||
__typename: 'Market',
|
||||
id: '5e6035fe6a6df78c9ec44b333c231e63d357acef0a0620d2c243f5865d1dc0d8',
|
||||
decimalPlaces: 5,
|
||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_MONITORING_AUCTION,
|
||||
positionDecimalPlaces: 0,
|
||||
tradableInstrument: {
|
||||
__typename: 'TradableInstrument',
|
||||
@ -130,8 +131,6 @@ const marketsData = [
|
||||
},
|
||||
data: {
|
||||
__typename: 'MarketData',
|
||||
marketTradingMode:
|
||||
Schema.MarketTradingMode.TRADING_MODE_MONITORING_AUCTION,
|
||||
markPrice: '9431775',
|
||||
market: {
|
||||
__typename: 'Market',
|
||||
@ -143,6 +142,7 @@ const marketsData = [
|
||||
__typename: 'Market',
|
||||
id: '10c4b1114d2f6fda239b73d018bca55888b6018f0ac70029972a17fea0a6a56e',
|
||||
decimalPlaces: 5,
|
||||
tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
positionDecimalPlaces: 0,
|
||||
tradableInstrument: {
|
||||
__typename: 'TradableInstrument',
|
||||
@ -162,7 +162,6 @@ const marketsData = [
|
||||
},
|
||||
data: {
|
||||
__typename: 'MarketData',
|
||||
marketTradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
|
||||
markPrice: '869762',
|
||||
market: {
|
||||
__typename: 'Market',
|
||||
|
@ -17,7 +17,7 @@ import {
|
||||
import {
|
||||
type MarketMaybeWithData,
|
||||
type MarketDataQueryVariables,
|
||||
marketsWithLiveDataProvider,
|
||||
allMarketsWithLiveDataProvider,
|
||||
getAsset,
|
||||
marketInfoProvider,
|
||||
type MarketInfo,
|
||||
@ -57,8 +57,8 @@ export interface Position {
|
||||
marketDecimalPlaces: number;
|
||||
marketId: string;
|
||||
marketCode: string;
|
||||
marketTradingMode?: MarketTradingMode;
|
||||
marketState?: MarketState;
|
||||
marketTradingMode: MarketTradingMode;
|
||||
marketState: MarketState;
|
||||
markPrice: string | undefined;
|
||||
notional: string | undefined;
|
||||
openVolume: string;
|
||||
@ -171,8 +171,8 @@ export const getMetrics = (
|
||||
marketDecimalPlaces,
|
||||
marketId: market.id,
|
||||
marketCode: market.tradableInstrument.instrument.code,
|
||||
marketTradingMode: market.data?.marketTradingMode,
|
||||
marketState: market.data?.marketState,
|
||||
marketTradingMode: market.tradingMode,
|
||||
marketState: market.state,
|
||||
markPrice: marketData ? marketData.markPrice : undefined,
|
||||
notional: notional
|
||||
? notional.multipliedBy(10 ** marketDecimalPlaces).toFixed(0)
|
||||
@ -325,7 +325,6 @@ export const preparePositions = (metrics: Position[], showClosed: boolean) => {
|
||||
}
|
||||
|
||||
if (
|
||||
p.marketState &&
|
||||
[
|
||||
MarketState.STATE_ACTIVE,
|
||||
MarketState.STATE_PENDING,
|
||||
@ -370,7 +369,7 @@ export const positionsMetricsProvider = makeDerivedDataProvider<
|
||||
partyId: firstOrSelf(variables.partyIds),
|
||||
}),
|
||||
(callback, client, variables) =>
|
||||
marketsWithLiveDataProvider(callback, client, {
|
||||
allMarketsWithLiveDataProvider(callback, client, {
|
||||
marketIds: variables.marketIds,
|
||||
}),
|
||||
(callback, client, variables) =>
|
||||
|
@ -35,10 +35,10 @@ export const getMarketExpiryDateFormatted = (
|
||||
return null;
|
||||
};
|
||||
|
||||
export const useExpiryDate = (
|
||||
tags?: ReadonlyArray<string> | null,
|
||||
close?: string | null,
|
||||
state?: MarketState | null
|
||||
export const getExpiryDate = (
|
||||
tags: ReadonlyArray<string> | null,
|
||||
close: string | null,
|
||||
state: MarketState
|
||||
): string => {
|
||||
const t = useT();
|
||||
const metadataExpiryDate = getMarketExpiryDate(tags);
|
||||
|
@ -16,12 +16,6 @@ export const fairground = {
|
||||
name: 'Fairground',
|
||||
};
|
||||
|
||||
export const validatorsTestnet = {
|
||||
id: 'vega-testnet-0002-v4',
|
||||
testnet: true,
|
||||
name: 'Validators Testnet',
|
||||
};
|
||||
|
||||
export const stagnet = {
|
||||
id: 'vega-stagnet1-202307191148',
|
||||
testnet: true,
|
||||
|
@ -3,14 +3,7 @@ export * from './types';
|
||||
export * from './transaction-types';
|
||||
|
||||
// Core
|
||||
export {
|
||||
mainnet,
|
||||
fairground,
|
||||
validatorsTestnet,
|
||||
stagnet,
|
||||
mockChain,
|
||||
type Chain,
|
||||
} from './chains';
|
||||
export { mainnet, fairground, stagnet, mockChain, type Chain } from './chains';
|
||||
export { createConfig, coreStoreSlice, singleKeyStoreSlice } from './wallet';
|
||||
|
||||
// Connectors
|
||||
|
@ -138,6 +138,8 @@ describe('WithdrawFormContainer', () => {
|
||||
id: 'marketId-1',
|
||||
decimalPlaces: 5,
|
||||
positionDecimalPlaces: 0,
|
||||
state: Types.MarketState.STATE_SUSPENDED,
|
||||
tradingMode: Types.MarketTradingMode.TRADING_MODE_MONITORING_AUCTION,
|
||||
tickSize: '1',
|
||||
fees: {
|
||||
__typename: 'Fees',
|
||||
@ -148,14 +150,6 @@ describe('WithdrawFormContainer', () => {
|
||||
liquidityFee: '0.001',
|
||||
},
|
||||
},
|
||||
markPriceConfiguration: {
|
||||
decayWeight: '',
|
||||
decayPower: 0,
|
||||
cashAmount: '',
|
||||
SourceStalenessTolerance: [],
|
||||
CompositePriceType:
|
||||
Types.CompositePriceType.COMPOSITE_PRICE_TYPE_LAST_TRADE,
|
||||
},
|
||||
tradableInstrument: {
|
||||
__typename: 'TradableInstrument',
|
||||
instrument: {
|
||||
|
@ -16,7 +16,7 @@ bucket_name = ''
|
||||
if 'release/' in args.github_ref:
|
||||
if 'mainnet-mirror' in args.github_ref:
|
||||
env_name = 'mainnet-mirror'
|
||||
elif 'validators-testnet' in args.github_ref:
|
||||
elif 'validators-testnet' in args.github_ref or 'validator-testnet' in args.github_ref:
|
||||
env_name = 'validators-testnet'
|
||||
else:
|
||||
# remove prefixing release/ and take the first string limited by - which is supposed to be name of the environment for releasing (format: release/testnet-trading)
|
||||
|
Loading…
Reference in New Issue
Block a user