chore(trading): 4947 cant view settled market main (#4964)
This commit is contained in:
parent
2a7574bd8e
commit
f74687d30c
@ -0,0 +1,5 @@
|
|||||||
|
import MarketPage from '../market';
|
||||||
|
|
||||||
|
export const ClosedMarketPage = () => {
|
||||||
|
return <MarketPage closed />;
|
||||||
|
};
|
1
apps/trading/client-pages/closed-market/index.ts
Normal file
1
apps/trading/client-pages/closed-market/index.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export { ClosedMarketPage as default } from './closed-market';
|
@ -12,6 +12,7 @@ import { useNavigate, useParams } from 'react-router-dom';
|
|||||||
import { Links, Routes } from '../../pages/client-router';
|
import { Links, Routes } from '../../pages/client-router';
|
||||||
import { ViewType, useSidebar } from '../../components/sidebar';
|
import { ViewType, useSidebar } from '../../components/sidebar';
|
||||||
import { useGetCurrentRouteId } from '../../lib/hooks/use-get-current-route-id';
|
import { useGetCurrentRouteId } from '../../lib/hooks/use-get-current-route-id';
|
||||||
|
import { MarketState } from '@vegaprotocol/types';
|
||||||
|
|
||||||
const calculatePrice = (markPrice?: string, decimalPlaces?: number) => {
|
const calculatePrice = (markPrice?: string, decimalPlaces?: number) => {
|
||||||
return markPrice && decimalPlaces
|
return markPrice && decimalPlaces
|
||||||
@ -56,7 +57,7 @@ const TitleUpdater = ({
|
|||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const MarketPage = () => {
|
export const MarketPage = ({ closed }: { closed?: boolean }) => {
|
||||||
const { marketId } = useParams();
|
const { marketId } = useParams();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const currentRouteId = useGetCurrentRouteId();
|
const currentRouteId = useGetCurrentRouteId();
|
||||||
@ -70,16 +71,33 @@ export const MarketPage = () => {
|
|||||||
const { data, error, loading } = useMarket(marketId);
|
const { data, error, loading } = useMarket(marketId);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (data?.id && data.id !== lastMarketId) {
|
if (
|
||||||
|
data?.state &&
|
||||||
|
[
|
||||||
|
MarketState.STATE_SETTLED,
|
||||||
|
MarketState.STATE_TRADING_TERMINATED,
|
||||||
|
].includes(data.state) &&
|
||||||
|
currentRouteId !== Routes.CLOSED_MARKETS &&
|
||||||
|
marketId
|
||||||
|
) {
|
||||||
|
navigate(Links[Routes.CLOSED_MARKETS](marketId));
|
||||||
|
}
|
||||||
|
}, [data?.state, currentRouteId, navigate, marketId]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (data?.id && data.id !== lastMarketId && !closed) {
|
||||||
update({ marketId: data.id });
|
update({ marketId: data.id });
|
||||||
}
|
}
|
||||||
}, [update, lastMarketId, data?.id]);
|
}, [update, lastMarketId, data?.id, closed]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (largeScreen && view === undefined) {
|
if (largeScreen && view === undefined) {
|
||||||
setViews({ type: ViewType.Order }, currentRouteId);
|
setViews(
|
||||||
|
{ type: closed ? ViewType.Info : ViewType.Order },
|
||||||
|
currentRouteId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}, [setViews, view, currentRouteId, largeScreen]);
|
}, [setViews, view, currentRouteId, largeScreen, closed]);
|
||||||
|
|
||||||
const tradeView = useMemo(() => {
|
const tradeView = useMemo(() => {
|
||||||
if (largeScreen) {
|
if (largeScreen) {
|
||||||
|
@ -24,6 +24,8 @@ import { SettlementPriceCell } from './settlement-price-cell';
|
|||||||
import { useDataProvider } from '@vegaprotocol/data-provider';
|
import { useDataProvider } from '@vegaprotocol/data-provider';
|
||||||
import { MarketActionsDropdown } from './market-table-actions';
|
import { MarketActionsDropdown } from './market-table-actions';
|
||||||
import { MarketCodeCell } from './market-code-cell';
|
import { MarketCodeCell } from './market-code-cell';
|
||||||
|
import type { CellClickedEvent } from 'ag-grid-community';
|
||||||
|
import { useClosedMarketClickHandler } from '../../lib/hooks/use-market-click-handler';
|
||||||
|
|
||||||
type SettlementAsset =
|
type SettlementAsset =
|
||||||
MarketMaybeWithData['tradableInstrument']['instrument']['product']['settlementAsset'];
|
MarketMaybeWithData['tradableInstrument']['instrument']['product']['settlementAsset'];
|
||||||
@ -112,6 +114,7 @@ const ClosedMarketsDataGrid = ({
|
|||||||
rowData: Row[];
|
rowData: Row[];
|
||||||
error: Error | undefined;
|
error: Error | undefined;
|
||||||
}) => {
|
}) => {
|
||||||
|
const handleOnSelect = useClosedMarketClickHandler();
|
||||||
const openAssetDialog = useAssetDetailsDialogStore((store) => store.open);
|
const openAssetDialog = useAssetDetailsDialogStore((store) => store.open);
|
||||||
|
|
||||||
const colDefs = useMemo(() => {
|
const colDefs = useMemo(() => {
|
||||||
@ -268,6 +271,27 @@ const ClosedMarketsDataGrid = ({
|
|||||||
overlayNoRowsTemplate={error ? error.message : t('No markets')}
|
overlayNoRowsTemplate={error ? error.message : t('No markets')}
|
||||||
components={components}
|
components={components}
|
||||||
rowHeight={45}
|
rowHeight={45}
|
||||||
|
onCellClicked={({ data, column, event }: CellClickedEvent<Row>) => {
|
||||||
|
if (!data) return;
|
||||||
|
|
||||||
|
// prevent navigating to the market page if any of the below cells are clicked
|
||||||
|
// event.preventDefault or event.stopPropagation dont seem to apply for aggird
|
||||||
|
const colId = column.getColId();
|
||||||
|
|
||||||
|
if (
|
||||||
|
[
|
||||||
|
'settlementDate',
|
||||||
|
'settlementDataOracleId',
|
||||||
|
'settlementAsset',
|
||||||
|
'market-actions',
|
||||||
|
].includes(colId)
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @ts-ignore metaKey exists
|
||||||
|
handleOnSelect(data.id, event ? event.metaKey : false);
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -24,6 +24,7 @@ export const LayoutWithSidebar = () => {
|
|||||||
<div className="col-span-full">
|
<div className="col-span-full">
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path={AppRoutes.MARKET} element={<MarketHeader />} />
|
<Route path={AppRoutes.MARKET} element={<MarketHeader />} />
|
||||||
|
<Route path={AppRoutes.CLOSED_MARKETS} element={<MarketHeader />} />
|
||||||
<Route path={AppRoutes.LIQUIDITY} element={<LiquidityHeader />} />
|
<Route path={AppRoutes.LIQUIDITY} element={<LiquidityHeader />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
</div>
|
</div>
|
||||||
|
@ -110,6 +110,20 @@ export const Sidebar = () => {
|
|||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
<Route
|
||||||
|
path={AppRoutes.CLOSED_MARKETS}
|
||||||
|
element={
|
||||||
|
<>
|
||||||
|
<SidebarDivider />
|
||||||
|
<SidebarButton
|
||||||
|
view={ViewType.Info}
|
||||||
|
icon={VegaIconNames.BREAKDOWN}
|
||||||
|
tooltip={t('Market specification')}
|
||||||
|
routeId={currentRouteId}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
/>
|
||||||
</Routes>
|
</Routes>
|
||||||
</nav>
|
</nav>
|
||||||
<nav className={classNames(navClasses, 'ml-auto lg:mt-auto lg:ml-0')}>
|
<nav className={classNames(navClasses, 'ml-auto lg:mt-auto lg:ml-0')}>
|
||||||
|
@ -20,3 +20,16 @@ export const useMarketLiquidityClickHandler = () => {
|
|||||||
window.open(`/#/liquidity/${selectedId}`, metaKey ? '_blank' : '_self');
|
window.open(`/#/liquidity/${selectedId}`, metaKey ? '_blank' : '_self');
|
||||||
}, []);
|
}, []);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const useClosedMarketClickHandler = (replace = false) => {
|
||||||
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
return (selectedId: string, metaKey?: boolean) => {
|
||||||
|
const link = Links[Routes.CLOSED_MARKETS](selectedId);
|
||||||
|
if (metaKey) {
|
||||||
|
window.open(`/#${link}`, '_blank');
|
||||||
|
} else {
|
||||||
|
navigate(link, { replace });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
@ -23,6 +23,10 @@ const LazyMarket = dynamic(() => import('../client-pages/market'), {
|
|||||||
ssr: false,
|
ssr: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const ClosedMarket = dynamic(() => import('../client-pages/closed-market'), {
|
||||||
|
ssr: false,
|
||||||
|
});
|
||||||
|
|
||||||
const LazyPortfolio = dynamic(() => import('../client-pages/portfolio'), {
|
const LazyPortfolio = dynamic(() => import('../client-pages/portfolio'), {
|
||||||
ssr: false,
|
ssr: false,
|
||||||
});
|
});
|
||||||
@ -39,6 +43,7 @@ export enum Routes {
|
|||||||
HOME = '/',
|
HOME = '/',
|
||||||
MARKET = '/markets/:marketId',
|
MARKET = '/markets/:marketId',
|
||||||
MARKETS = '/markets/all',
|
MARKETS = '/markets/all',
|
||||||
|
CLOSED_MARKETS = '/markets/all/closed/:marketId',
|
||||||
PORTFOLIO = '/portfolio',
|
PORTFOLIO = '/portfolio',
|
||||||
LIQUIDITY = '/liquidity/:marketId',
|
LIQUIDITY = '/liquidity/:marketId',
|
||||||
DISCLAIMER = '/disclaimer',
|
DISCLAIMER = '/disclaimer',
|
||||||
@ -52,6 +57,8 @@ export const Links: ConsoleLinks = {
|
|||||||
[Routes.MARKET]: (marketId: string) =>
|
[Routes.MARKET]: (marketId: string) =>
|
||||||
trimEnd(Routes.MARKET.replace(':marketId', marketId)),
|
trimEnd(Routes.MARKET.replace(':marketId', marketId)),
|
||||||
[Routes.MARKETS]: () => Routes.MARKETS,
|
[Routes.MARKETS]: () => Routes.MARKETS,
|
||||||
|
[Routes.CLOSED_MARKETS]: (marketId: string) =>
|
||||||
|
trimEnd(Routes.CLOSED_MARKETS.replace(':marketId', marketId)),
|
||||||
[Routes.PORTFOLIO]: () => Routes.PORTFOLIO,
|
[Routes.PORTFOLIO]: () => Routes.PORTFOLIO,
|
||||||
[Routes.LIQUIDITY]: (marketId: string) =>
|
[Routes.LIQUIDITY]: (marketId: string) =>
|
||||||
trimEnd(Routes.LIQUIDITY.replace(':marketId', marketId)),
|
trimEnd(Routes.LIQUIDITY.replace(':marketId', marketId)),
|
||||||
@ -84,6 +91,11 @@ export const routerConfig: RouteObject[] = [
|
|||||||
element: <LazyMarket />,
|
element: <LazyMarket />,
|
||||||
id: Routes.MARKET,
|
id: Routes.MARKET,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'all/closed/:marketId',
|
||||||
|
element: <ClosedMarket />,
|
||||||
|
id: Routes.CLOSED_MARKETS,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user