chore(trading): 4947 cant view settled market main (#4964)

This commit is contained in:
Maciek 2023-10-03 13:31:05 +02:00 committed by GitHub
parent 2a7574bd8e
commit f74687d30c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 93 additions and 5 deletions

View File

@ -0,0 +1,5 @@
import MarketPage from '../market';
export const ClosedMarketPage = () => {
return <MarketPage closed />;
};

View File

@ -0,0 +1 @@
export { ClosedMarketPage as default } from './closed-market';

View File

@ -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) {

View File

@ -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);
}}
/> />
); );
}; };

View File

@ -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>

View File

@ -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')}>

View File

@ -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 });
}
};
};

View File

@ -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,
},
], ],
}, },
{ {