diff --git a/apps/console-lite/src/app/components/portfolio/accounts/accounts.tsx b/apps/console-lite/src/app/components/portfolio/accounts/accounts.tsx index 42d9eacb6..cd4770497 100644 --- a/apps/console-lite/src/app/components/portfolio/accounts/accounts.tsx +++ b/apps/console-lite/src/app/components/portfolio/accounts/accounts.tsx @@ -28,11 +28,7 @@ interface Props { } const AccountsManager = ({ partyId }: Props) => { - const { - isAssetDetailsDialogOpen, - assetDetailsDialogSymbol, - setAssetDetailsDialogOpen, - } = useAssetDetailsDialogStore(); + const { isOpen, symbol, setOpen } = useAssetDetailsDialogStore(); const gridRef = useRef(null); const variables = useMemo(() => ({ partyId }), [partyId]); const update = useMemo(() => accountsManagerUpdate(gridRef), []); @@ -58,9 +54,9 @@ const AccountsManager = ({ partyId }: Props) => { /> setAssetDetailsDialogOpen(open)} + assetSymbol={symbol} + open={isOpen} + onChange={(open) => setOpen(open)} /> ); diff --git a/apps/console-lite/src/app/components/portfolio/accounts/use-column-definitions.tsx b/apps/console-lite/src/app/components/portfolio/accounts/use-column-definitions.tsx index 0954e78f3..9947b6eec 100644 --- a/apps/console-lite/src/app/components/portfolio/accounts/use-column-definitions.tsx +++ b/apps/console-lite/src/app/components/portfolio/accounts/use-column-definitions.tsx @@ -42,8 +42,7 @@ const comparator = ( }; const useAccountColumnDefinitions = () => { - const { setAssetDetailsDialogOpen, setAssetDetailsDialogSymbol } = - useAssetDetailsDialogStore(); + const { open } = useAssetDetailsDialogStore(); const columnDefs: ColDef[] = useMemo(() => { return [ { @@ -60,8 +59,7 @@ const useAccountColumnDefinitions = () => { diff --git a/libs/deposits/src/lib/deposit-form.tsx b/libs/deposits/src/lib/deposit-form.tsx index 1396225ff..db7f67061 100644 --- a/libs/deposits/src/lib/deposit-form.tsx +++ b/libs/deposits/src/lib/deposit-form.tsx @@ -65,8 +65,7 @@ export const DepositForm = ({ allowance, isFaucetable, }: DepositFormProps) => { - const { setAssetDetailsDialogOpen, setAssetDetailsDialogSymbol } = - useAssetDetailsDialogStore(); + const { open: openAssetDetailsDialog } = useAssetDetailsDialogStore(); const { account } = useWeb3React(); const { keypair } = useVegaWallet(); const { @@ -185,9 +184,8 @@ export const DepositForm = ({ + ), dataTestId: 'settlement-asset', className: `${cellClassNames} hidden sm:table-cell`, onlyOnDetailed: false, }, { + kind: ColumnKind.Sparkline, value: candles && ( , className: `${cellClassNames} hidden xl:table-cell font-mono`, onlyOnDetailed: true, dataTestId: 'taker-fee', }, { + kind: ColumnKind.FullName, value: market.tradableInstrument.instrument.name, className: `${cellClassNames} hidden xxl:block`, onlyOnDetailed: true, @@ -329,7 +344,8 @@ export const columnsPositionMarkets = ( marketData: MarketData | undefined, candles: Candle[] | undefined, onSelect: (id: string) => void, - openVolume?: string + openVolume?: string, + onCellClick?: OnCellClickHandler ) => { const candlesClose = candles ?.map((candle) => candle?.close) @@ -346,6 +362,7 @@ export const columnsPositionMarkets = ( }; const selectMarketColumns: Column[] = [ { + kind: ColumnKind.Market, value: ( {/* eslint-disable-next-line jsx-a11y/anchor-is-valid,jsx-a11y/no-static-element-interactions */} @@ -364,6 +381,7 @@ export const columnsPositionMarkets = ( onlyOnDetailed: false, }, { + kind: ColumnKind.LastPrice, value: marketData?.markPrice ? ( { + if (!onCellClick) return; + onCellClick( + e, + ColumnKind.Asset, + market.tradableInstrument.instrument.product.settlementAsset + .symbol + ); + }} + > + {market.tradableInstrument.instrument.product.settlementAsset.symbol} + + ), className: `${cellClassNames} hidden sm:table-cell`, onlyOnDetailed: false, }, { + kind: ColumnKind.Sparkline, value: candlesClose && ( , className: `${cellClassNames} hidden xl:table-cell font-mono`, onlyOnDetailed: true, }, { + kind: ColumnKind.Position, value: (

{openVolume}

), diff --git a/libs/market-list/src/lib/components/select-market-table.tsx b/libs/market-list/src/lib/components/select-market-table.tsx index 3539d754f..27e87ee56 100644 --- a/libs/market-list/src/lib/components/select-market-table.tsx +++ b/libs/market-list/src/lib/components/select-market-table.tsx @@ -8,7 +8,7 @@ export const SelectMarketTableHeader = ({ }) => { return ( - {headers.map(({ value, className, onlyOnDetailed }, i) => { + {headers.map(({ kind, value, className, onlyOnDetailed }) => { const thClass = classNames( 'font-normal text-neutral-500 dark:text-neutral-400', className @@ -16,7 +16,7 @@ export const SelectMarketTableHeader = ({ if (!onlyOnDetailed || detailed === onlyOnDetailed) { return ( - + {value} ); @@ -39,11 +39,11 @@ export const SelectMarketTableRow = ({ - {columns.map(({ value, className, dataTestId, onlyOnDetailed }, i) => { + {columns.map(({ kind, value, className, dataTestId, onlyOnDetailed }) => { if (!onlyOnDetailed || detailed === onlyOnDetailed) { const tdClass = classNames(className); return ( - + {value} ); diff --git a/libs/market-list/src/lib/components/select-market.tsx b/libs/market-list/src/lib/components/select-market.tsx index 51f8d3e5c..ce262c8af 100644 --- a/libs/market-list/src/lib/components/select-market.tsx +++ b/libs/market-list/src/lib/components/select-market.tsx @@ -10,7 +10,7 @@ import { import type { ReactNode } from 'react'; import { useMemo, useState } from 'react'; -import type { Column } from './select-market-columns'; +import type { Column, OnCellClickHandler } from './select-market-columns'; import { columnHeadersPositionMarkets, columnsPositionMarkets, @@ -36,11 +36,13 @@ export const SelectMarketLandingTable = ({ marketsData, marketsCandles, onSelect, + onCellClick, }: { markets: Market[] | undefined; marketsData: MarketData[] | undefined; marketsCandles: MarketCandles[] | undefined; onSelect: (id: string) => void; + onCellClick: OnCellClickHandler; }) => { return ( <> @@ -65,7 +67,8 @@ export const SelectMarketLandingTable = ({ marketsCandles?.find( (marketCandles) => marketCandles.marketId === market.id )?.candles, - onSelect + onSelect, + onCellClick )} /> ))} @@ -83,9 +86,10 @@ export const SelectAllMarketsTableBody = ({ marketsCandles, positions, onSelect, + onCellClick, headers = columnHeaders, tableColumns = (market, marketData, candles) => - columns(market, marketData, candles, onSelect), + columns(market, marketData, candles, onSelect, onCellClick), }: { markets: Market[] | undefined; marketsData: MarketData[] | undefined; @@ -93,6 +97,7 @@ export const SelectAllMarketsTableBody = ({ positions?: Positions_party_positionsConnection_edges_node[]; title?: string; onSelect: (id: string) => void; + onCellClick: OnCellClickHandler; headers?: Column[]; tableColumns?: ( market: Market, @@ -134,9 +139,11 @@ export const SelectAllMarketsTableBody = ({ export const SelectMarketPopover = ({ marketName, onSelect, + onCellClick, }: { marketName: string; onSelect: (id: string) => void; + onCellClick: OnCellClickHandler; }) => { const triggerClasses = 'sm:text-lg md:text-xl lg:text-2xl flex items-center gap-2 whitespace-nowrap hover:text-neutral-500 dark:hover:text-neutral-300'; @@ -203,6 +210,7 @@ export const SelectMarketPopover = ({ ?.filter((edge) => edge.node) .map((edge) => edge.node)} onSelect={onSelectMarket} + onCellClick={onCellClick} headers={columnHeadersPositionMarkets} tableColumns={(market, marketData, candles, openVolume) => columnsPositionMarkets( @@ -210,7 +218,8 @@ export const SelectMarketPopover = ({ marketData, candles, onSelectMarket, - openVolume + openVolume, + onCellClick ) } /> @@ -223,6 +232,7 @@ export const SelectMarketPopover = ({ marketsData={data?.marketsData} marketsCandles={data?.marketsCandles} onSelect={onSelectMarket} + onCellClick={onCellClick} /> @@ -248,11 +258,13 @@ export const SelectMarketDialog = ({ dialogOpen, setDialogOpen, onSelect, + onCellClick, }: { dialogOpen: boolean; setDialogOpen: (open: boolean) => void; title?: string; onSelect: (id: string) => void; + onCellClick: OnCellClickHandler; }) => { const onSelectMarket = (id: string) => { onSelect(id); @@ -267,16 +279,23 @@ export const SelectMarketDialog = ({ onChange={() => setDialogOpen(false)} size="small" > - + ); }; interface LandingDialogContainerProps { onSelect: (id: string) => void; + onCellClick: OnCellClickHandler; } -const LandingDialogContainer = ({ onSelect }: LandingDialogContainerProps) => { +const LandingDialogContainer = ({ + onSelect, + onCellClick, +}: LandingDialogContainerProps) => { const { data, loading, error } = useMarketList(); if (error) { return ( @@ -300,6 +319,7 @@ const LandingDialogContainer = ({ onSelect }: LandingDialogContainerProps) => { marketsData={data?.marketsData} marketsCandles={data?.marketsCandles} onSelect={onSelect} + onCellClick={onCellClick} /> ); }; diff --git a/libs/ui-toolkit/src/components/dialog/dialog.tsx b/libs/ui-toolkit/src/components/dialog/dialog.tsx index 1818906cf..bf52a8e27 100644 --- a/libs/ui-toolkit/src/components/dialog/dialog.tsx +++ b/libs/ui-toolkit/src/components/dialog/dialog.tsx @@ -11,6 +11,7 @@ interface DialogProps { children: ReactNode; open: boolean; onChange?: (isOpen: boolean) => void; + onCloseAutoFocus?: (e: Event) => void; title?: string; icon?: ReactNode; intent?: Intent; @@ -21,6 +22,7 @@ export function Dialog({ children, open, onChange, + onCloseAutoFocus, title, icon, intent, @@ -59,7 +61,10 @@ export function Dialog({ className="fixed inset-0 bg-black/50 z-10" data-testid="dialog-overlay" /> - +
{onChange && (