+
{primaryContent}
diff --git a/apps/trading/components/select-market/index.ts b/apps/trading/components/select-market/index.ts
index 48ae3cc35..5330316ed 100644
--- a/apps/trading/components/select-market/index.ts
+++ b/apps/trading/components/select-market/index.ts
@@ -1,3 +1,2 @@
export * from './select-market-columns';
export * from './select-market-table';
-export * from './select-market';
diff --git a/apps/trading/components/select-market/select-market-columns.tsx b/apps/trading/components/select-market/select-market-columns.tsx
index 73df026b7..acec64645 100644
--- a/apps/trading/components/select-market/select-market-columns.tsx
+++ b/apps/trading/components/select-market/select-market-columns.tsx
@@ -7,7 +7,7 @@ import {
} from '@vegaprotocol/market-list';
import { addDecimalsFormatNumber } from '@vegaprotocol/utils';
import { t } from '@vegaprotocol/i18n';
-import { PriceCell, signedNumberCssClass } from '@vegaprotocol/datagrid';
+import { PriceCell } from '@vegaprotocol/datagrid';
import { Link as UILink, Sparkline, Tooltip } from '@vegaprotocol/ui-toolkit';
import isNil from 'lodash/isNil';
import type { CandleClose } from '@vegaprotocol/types';
@@ -341,187 +341,3 @@ export const columns = (
];
return selectMarketColumns;
};
-
-export const columnsPositionMarkets = (
- market: MarketMaybeWithDataAndCandles,
- onSelect: (id: string, metaKey?: boolean) => void,
- inViewRoot?: RefObject
,
- openVolume?: string,
- onCellClick?: OnCellClickHandler
-) => {
- const candlesClose = market.candles
- ?.map((candle) => candle?.close)
- .filter((c: string | undefined): c is CandleClose => !isNil(c));
- const candleLow = market.candles && calcCandleLow(market.candles);
- const candleHigh = market.candles && calcCandleHigh(market.candles);
- const candleVolume = market.candles && calcCandleVolume(market.candles);
- const selectMarketColumns: Column[] = [
- {
- kind: ColumnKind.Market,
- value: (
- {
- e.preventDefault();
- e.stopPropagation();
- onSelect(market.id, e.metaKey || e.ctrlKey);
- }}
- >
- {market.tradableInstrument.instrument.code}
-
- ),
- className: cellClassNames,
- onlyOnDetailed: false,
- },
- {
- kind: ColumnKind.ProductType,
- value: market.tradableInstrument.instrument.product.__typename,
- className: `py-2 first:text-left hidden sm:table-cell`,
- onlyOnDetailed: false,
- },
- {
- kind: ColumnKind.LastPrice,
- value: (
-
- ),
- className: cellClassNames,
- onlyOnDetailed: false,
- },
- {
- kind: ColumnKind.Change24,
- value: (
-
- ),
- className: cellClassNames,
- onlyOnDetailed: false,
- },
- {
- kind: ColumnKind.Sparkline,
- value: candlesClose && (
- Number(c))}
- />
- ),
- className: `${cellClassNames} hidden lg:table-cell`,
- onlyOnDetailed: false,
- },
- {
- kind: ColumnKind.Asset,
- value: (
-
- ),
- className: `${cellClassNames} hidden sm:table-cell`,
- onlyOnDetailed: false,
- },
- {
- kind: ColumnKind.High24,
- value: candleHigh ? (
-
- ) : (
- '-'
- ),
- className: `${cellClassNames} hidden xl:table-cell font-mono`,
- onlyOnDetailed: true,
- },
- {
- kind: ColumnKind.Low24,
- value: candleLow ? (
-
- ) : (
- '-'
- ),
- className: `${cellClassNames} hidden xl:table-cell font-mono`,
- onlyOnDetailed: true,
- },
- {
- kind: ColumnKind.Volume,
- value: (
-
- ),
- className: `${cellClassNames} hidden lg:table-cell font-mono`,
- onlyOnDetailed: true,
- dataTestId: 'market-volume',
- },
- {
- kind: ColumnKind.TradingMode,
- value: (
-
- ),
- className: `${cellClassNames} hidden lg:table-cell`,
- onlyOnDetailed: true,
- dataTestId: 'trading-mode-col',
- },
- {
- kind: ColumnKind.Fee,
- value: ,
- className: `${cellClassNames} hidden xl:table-cell font-mono`,
- onlyOnDetailed: true,
- },
- {
- kind: ColumnKind.Position,
- value: (
-
- {openVolume &&
- addDecimalsFormatNumber(openVolume, market.positionDecimalPlaces)}
-
- ),
- className: `${cellClassNames} hidden xxl:table-cell font-mono`,
- onlyOnDetailed: true,
- },
- ];
- return selectMarketColumns;
-};
diff --git a/apps/trading/components/select-market/select-market-table.tsx b/apps/trading/components/select-market/select-market-table.tsx
index 005318939..b7136ce3f 100644
--- a/apps/trading/components/select-market/select-market-table.tsx
+++ b/apps/trading/components/select-market/select-market-table.tsx
@@ -1,7 +1,6 @@
import { columnHeaders } from './select-market-columns';
import classNames from 'classnames';
import type { Column } from './select-market-columns';
-import type { ReactNode } from 'react';
export const SelectMarketTableHeader = ({
detailed = false,
@@ -62,23 +61,3 @@ export const SelectMarketTableRow = ({
);
};
-
-export const SelectMarketTableRowSplash = ({
- children,
- colSpan,
-}: {
- children: ReactNode;
- colSpan: number;
-}) => {
- return (
-
- |
- {children}
- |
-
- );
-};
diff --git a/apps/trading/components/select-market/select-market.spec.tsx b/apps/trading/components/select-market/select-market.spec.tsx
deleted file mode 100644
index 4340bb1e5..000000000
--- a/apps/trading/components/select-market/select-market.spec.tsx
+++ /dev/null
@@ -1,203 +0,0 @@
-import { fireEvent, render, screen } from '@testing-library/react';
-import * as Schema from '@vegaprotocol/types';
-
-import { SelectAllMarketsTableBody } from './select-market';
-
-import type {
- MarketMaybeWithCandles,
- MarketMaybeWithData,
- MarketData,
-} from '@vegaprotocol/market-list';
-import { MemoryRouter } from 'react-router-dom';
-import { MockedProvider } from '@apollo/client/testing';
-type Market = MarketMaybeWithCandles & MarketMaybeWithData;
-
-type PartialMarket = Partial<
- Omit & { data: Partial }
->;
-
-const MARKET_A: PartialMarket = {
- __typename: 'Market',
- id: '1',
- decimalPlaces: 2,
- tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
- tradableInstrument: {
- __typename: 'TradableInstrument',
- instrument: {
- __typename: 'Instrument',
- id: '1',
- code: 'ABCDEF',
- name: 'ABCDEF 1-Day',
- product: {
- __typename: 'Future',
- quoteName: 'ABCDEF',
- settlementAsset: {
- __typename: 'Asset',
- id: 'asset-ABC',
- name: '',
- decimals: 2,
- symbol: 'ABC',
- },
- dataSourceSpecForTradingTermination: {
- __typename: 'DataSourceSpec',
- id: 'oracleId',
- },
- dataSourceSpecForSettlementData: {
- __typename: 'DataSourceSpec',
- id: 'oracleId',
- },
- dataSourceSpecBinding: {
- __typename: 'DataSourceSpecToFutureBinding',
- tradingTerminationProperty: 'trading-termination-property',
- settlementDataProperty: 'settlement-data-property',
- },
- },
- metadata: {
- __typename: 'InstrumentMetadata',
- tags: ['ABC', 'DEF'],
- },
- },
- },
- fees: {
- __typename: 'Fees',
- factors: {
- __typename: 'FeeFactors',
- infrastructureFee: '0.01',
- liquidityFee: '0.01',
- makerFee: '0.01',
- },
- },
- data: {
- __typename: 'MarketData',
- market: {
- __typename: 'Market',
- id: '1',
- },
- markPrice: '90',
- trigger: Schema.AuctionTrigger.AUCTION_TRIGGER_OPENING,
- marketState: Schema.MarketState.STATE_PENDING,
- marketTradingMode: Schema.MarketTradingMode.TRADING_MODE_OPENING_AUCTION,
- indicativeVolume: '1000',
- },
- candles: [
- {
- __typename: 'Candle',
- high: '100',
- low: '10',
- open: '10',
- close: '80',
- volume: '1000',
- periodStart: '2022-11-01T15:49:00Z',
- },
- {
- __typename: 'Candle',
- high: '10',
- low: '1',
- open: '1',
- close: '100',
- volume: '1000',
- periodStart: '2022-11-01T15:50:00Z',
- },
- ],
-};
-
-const MARKET_B: PartialMarket = {
- __typename: 'Market',
- id: '2',
- decimalPlaces: 2,
- positionDecimalPlaces: 0,
- tradingMode: Schema.MarketTradingMode.TRADING_MODE_CONTINUOUS,
- tradableInstrument: {
- __typename: 'TradableInstrument',
- instrument: {
- __typename: 'Instrument',
- id: '2',
- code: 'XYZ',
- name: 'XYZ 1-Day',
- product: {
- __typename: 'Future',
- quoteName: 'XYZ',
- settlementAsset: {
- __typename: 'Asset',
- id: 'asset-XYZ',
- name: 'asset-XYZ',
- decimals: 2,
- symbol: 'XYZ',
- },
- dataSourceSpecForTradingTermination: {
- __typename: 'DataSourceSpec',
- id: 'oracleId',
- },
- dataSourceSpecForSettlementData: {
- __typename: 'DataSourceSpec',
- id: 'oracleId',
- },
- dataSourceSpecBinding: {
- __typename: 'DataSourceSpecToFutureBinding',
- tradingTerminationProperty: 'trading-termination-property',
- settlementDataProperty: 'settlement-data-property',
- },
- },
- metadata: {
- __typename: 'InstrumentMetadata',
- tags: ['XYZ'],
- },
- },
- },
- fees: {
- __typename: 'Fees',
- factors: {
- __typename: 'FeeFactors',
- infrastructureFee: '0.01',
- liquidityFee: '0.01',
- makerFee: '0.01',
- },
- },
- data: {
- __typename: 'MarketData',
- market: {
- __typename: 'Market',
- id: '2',
- },
- markPrice: '123.123',
- trigger: Schema.AuctionTrigger.AUCTION_TRIGGER_OPENING,
- marketState: Schema.MarketState.STATE_PENDING,
- marketTradingMode: Schema.MarketTradingMode.TRADING_MODE_OPENING_AUCTION,
- indicativeVolume: '2000',
- },
- candles: [
- {
- __typename: 'Candle',
- high: '100',
- low: '10',
- open: '10',
- close: '80',
- volume: '1000',
- periodStart: '2022-11-01T15:49:00Z',
- },
- ],
-};
-
-describe('SelectMarket', () => {
- const table = document.createElement('table');
-
- it('should render the SelectAllMarketsTableBody', () => {
- const onSelect = jest.fn();
- const onCellClick = jest.fn();
- const { container } = render(
-
-
- ,
- { wrapper: MockedProvider, container: document.body.appendChild(table) }
- );
- expect(screen.getByText('ABCDEF')).toBeTruthy(); // name
- expect(screen.getByText('25.00%')).toBeTruthy(); // price change
- expect(container).toHaveTextContent(/1,000/); // volume
- fireEvent.click(screen.getAllByTestId(`market-link-1`)[0]);
- expect(onSelect).toHaveBeenCalledWith('1', false);
- });
-});
diff --git a/apps/trading/components/select-market/select-market.tsx b/apps/trading/components/select-market/select-market.tsx
deleted file mode 100644
index e5bd07b30..000000000
--- a/apps/trading/components/select-market/select-market.tsx
+++ /dev/null
@@ -1,214 +0,0 @@
-import { useCallback, useEffect, useMemo, useState, useRef } from 'react';
-import type { RefObject } from 'react';
-import { useMarketList } from '@vegaprotocol/market-list';
-import { positionsDataProvider } from '@vegaprotocol/positions';
-import { t } from '@vegaprotocol/i18n';
-import { useDataProvider } from '@vegaprotocol/data-provider';
-import { ExternalLink, Icon, Loader, Popover } from '@vegaprotocol/ui-toolkit';
-import { useVegaWallet } from '@vegaprotocol/wallet';
-import {
- columnHeaders,
- columnHeadersPositionMarkets,
- columns,
- columnsPositionMarkets,
-} from './select-market-columns';
-import {
- SelectMarketTableHeader,
- SelectMarketTableRow,
- SelectMarketTableRowSplash,
-} from './select-market-table';
-import type { ReactNode } from 'react';
-import type { MarketMaybeWithDataAndCandles } from '@vegaprotocol/market-list';
-import type { PositionFieldsFragment } from '@vegaprotocol/positions';
-import type { Column, OnCellClickHandler } from './select-market-columns';
-import {
- DApp,
- TOKEN_NEW_MARKET_PROPOSAL,
- useLinks,
-} from '@vegaprotocol/environment';
-import { HeaderTitle } from '../header';
-
-export const SelectAllMarketsTableBody = ({
- markets,
- positions,
- onSelect,
- onCellClick,
- inViewRoot,
- headers = columnHeaders,
- tableColumns = (market) => columns(market, onSelect, onCellClick, inViewRoot),
-}: {
- markets?: MarketMaybeWithDataAndCandles[] | null;
- positions?: PositionFieldsFragment[];
- title?: string;
- onSelect: (id: string, metaKey?: boolean) => void;
- onCellClick: OnCellClickHandler;
- headers?: Column[];
- tableColumns?: (
- market: MarketMaybeWithDataAndCandles,
- inViewRoot?: RefObject,
- openVolume?: string
- ) => Column[];
- inViewRoot?: RefObject;
-}) => {
- const tokenLink = useLinks(DApp.Token);
- if (!markets) return null;
- return (
- <>
-
-
-
- {/* Border styles required to create space between tbody elements margin/padding don't work */}
-
- {markets.length > 0 ? (
- markets?.map((market, i) => (
- p.market.id === market.id)?.openVolume
- )}
- />
- ))
- ) : (
-
- {t('No markets ')}
-
- {t('Propose a new market')}
-
-
- )}
-
- >
- );
-};
-
-export const SelectMarketPopover = ({
- marketCode,
- marketName,
- onSelect,
- onCellClick,
-}: {
- marketCode: string;
- marketName: string;
- onSelect: (id: string, metaKey?: boolean) => void;
- onCellClick: OnCellClickHandler;
-}) => {
- const { pubKey } = useVegaWallet();
- const [open, setOpen] = useState(false);
- const inViewRoot = useRef(null);
- const {
- data,
- loading: marketsLoading,
- reload: marketListReload,
- } = useMarketList();
- const {
- data: positions,
- loading: positionsLoading,
- reload,
- } = useDataProvider({
- dataProvider: positionsDataProvider,
- variables: { partyId: pubKey || '' },
- skip: !pubKey,
- });
- const onSelectMarket = useCallback(
- (marketId: string, metaKey?: boolean) => {
- onSelect(marketId, metaKey);
- setOpen(false);
- },
- [onSelect]
- );
-
- const iconClass = open ? 'rotate-180' : '';
- const markets = useMemo(
- () =>
- data?.filter((market) =>
- positions?.find((node) => node.market.id === market.id)
- ),
- [data, positions]
- );
-
- useEffect(() => {
- if (open) {
- reload();
- marketListReload();
- }
- }, [open, marketListReload, reload]);
-
- return (
-
-
-
-
- }
- >
-
- {marketsLoading || (pubKey && positionsLoading) ? (
-
-
- {t('Loading market data')}
-
- ) : (
-
- {pubKey && (positions?.length ?? 0) && (markets?.length ?? 0) ? (
- <>
- {t('My markets')}
-
- columnsPositionMarkets(
- market,
- onSelectMarket,
- inViewRoot,
- openVolume,
- onCellClick
- )
- }
- />
- >
- ) : null}
- {t('All markets')}
-
-
- )}
-
-
- );
-};
-
-const TableTitle = ({ children }: { children: ReactNode }) => {
- return (
-
-
-
- {children}
- |
-
-
- );
-};
diff --git a/apps/trading/pages/_app.page.tsx b/apps/trading/pages/_app.page.tsx
index 1d1074b86..f9c898474 100644
--- a/apps/trading/pages/_app.page.tsx
+++ b/apps/trading/pages/_app.page.tsx
@@ -81,7 +81,7 @@ function AppBody({ Component }: AppProps) {
const gridClasses = classNames(
'h-full relative z-0 grid',
- 'grid-rows-[repeat(3,min-content),1fr]'
+ 'grid-rows-[repeat(3,min-content),minmax(0,1fr)]'
);
return (
@@ -93,7 +93,7 @@ function AppBody({ Component }: AppProps) {
-
+
(
onClickDeposit && onClickDeposit(data.asset.id);
}}
>
-
+
(
onClickWithdraw && onClickWithdraw(data.asset.id)
}
>
-
+
(
setRow(data);
}}
>
-
+
{
- const change = priceChange(candles);
- if (change && candles && candles.length > 0) {
- const yesterdayLastPrice = candles[0] && BigInt(candles[0]);
- if (yesterdayLastPrice) {
- return new BigNumber(change.toString())
- .dividedBy(new BigNumber(yesterdayLastPrice.toString()))
- .multipliedBy(100)
- .toNumber();
- }
- return 0;
- }
- return 0;
-};
-
-export const priceChange = (candles: string[]) => {
- return candles &&
- candles[candles.length - 1] !== undefined &&
- candles[0] !== undefined
- ? BigInt(candles[candles.length - 1] ?? 0) - BigInt(candles[0] ?? 0)
- : 0;
-};
-
export const PriceChangeCell = memo(
forwardRef(
({ candles, decimalPlaces }: PriceChangeCellProps, ref) => {
diff --git a/libs/deal-ticket/src/components/deal-ticket/index.ts b/libs/deal-ticket/src/components/deal-ticket/index.ts
index e28d29132..f2c27a654 100644
--- a/libs/deal-ticket/src/components/deal-ticket/index.ts
+++ b/libs/deal-ticket/src/components/deal-ticket/index.ts
@@ -4,7 +4,6 @@ export * from './deal-ticket-limit-amount';
export * from './deal-ticket-market-amount';
export * from './deal-ticket';
export * from './expiry-selector';
-export * from './market-selector';
export * from './side-selector';
export * from './time-in-force-selector';
export * from './type-selector';
diff --git a/libs/deal-ticket/src/components/deal-ticket/market-selector.tsx b/libs/deal-ticket/src/components/deal-ticket/market-selector.tsx
deleted file mode 100644
index 04e4851ac..000000000
--- a/libs/deal-ticket/src/components/deal-ticket/market-selector.tsx
+++ /dev/null
@@ -1,328 +0,0 @@
-import type { ReactNode } from 'react';
-import React, {
- useCallback,
- useState,
- useEffect,
- useRef,
- useMemo,
-} from 'react';
-import * as DialogPrimitives from '@radix-ui/react-dialog';
-import classNames from 'classnames';
-import {
- ButtonLink,
- Icon,
- Input,
- Loader,
- Splash,
-} from '@vegaprotocol/ui-toolkit';
-import {
- useScreenDimensions,
- useOutsideClick,
-} from '@vegaprotocol/react-helpers';
-import { useDataProvider } from '@vegaprotocol/data-provider';
-import { t } from '@vegaprotocol/i18n';
-import { IconNames } from '@blueprintjs/icons';
-import * as Schema from '@vegaprotocol/types';
-import type { Market } from '@vegaprotocol/market-list';
-import { marketsProvider } from '@vegaprotocol/market-list';
-
-interface Props {
- market: Market;
- setMarket: (marketId: string) => void;
- ItemRenderer?: React.FC<{
- market: Market;
- isMobile?: boolean;
- }>;
-}
-
-function escapeRegExp(str: string) {
- return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
-}
-
-export const MarketSelector = ({ market, setMarket, ItemRenderer }: Props) => {
- const { isMobile } = useScreenDimensions();
- const contRef = useRef(null);
- const inputRef = useRef(null);
- const arrowButtonRef = useRef(null);
- const [results, setResults] = useState([]);
- const [showPane, setShowPane] = useState(false);
- const [lookup, setLookup] = useState(
- market.tradableInstrument.instrument.name || ''
- );
- const [dialogContent, setDialogContent] = useState(
- null
- );
-
- const { data, loading, error } = useDataProvider({
- dataProvider: marketsProvider,
- variables: undefined,
- skipUpdates: true,
- });
-
- const outsideClickCb = useCallback(() => {
- if (!isMobile) {
- setShowPane(false);
- }
- }, [setShowPane, isMobile]);
-
- useOutsideClick({ refs: [contRef, arrowButtonRef], func: outsideClickCb });
-
- const handleOnChange = useCallback(
- (event: React.ChangeEvent) => {
- const {
- target: { value },
- } = event;
- setLookup(value);
- setShowPane(true);
- },
- [setLookup, setShowPane]
- );
-
- const handleMarketSelect = useCallback(
- (market: {
- id: string;
- tradableInstrument: { instrument: { name: string } };
- }) => {
- setLookup(market.tradableInstrument.instrument.name);
- setShowPane(false);
- setMarket(market.id);
- inputRef.current?.focus();
- },
- [setLookup, setShowPane, setMarket, inputRef]
- );
-
- const handleItemKeyDown = useCallback(
- (event: React.KeyboardEvent, market: Market, index: number) => {
- switch (event.key) {
- case 'ArrowDown':
- if (index < results.length - 1) {
- (contRef.current?.children[index + 1] as HTMLDivElement).focus();
- }
- break;
-
- case 'ArrowUp':
- if (!index) {
- inputRef.current?.focus();
- inputRef.current?.setSelectionRange(
- inputRef.current?.value.length,
- inputRef.current?.value.length
- );
- return;
- }
- (contRef.current?.children[index - 1] as HTMLDivElement).focus();
- break;
-
- case 'Enter':
- event.preventDefault();
- handleMarketSelect(market);
- break;
- default:
- setShowPane(false);
- setLookup(market.tradableInstrument.instrument.name);
- }
- },
- [results, handleMarketSelect]
- );
-
- const handleInputKeyDown = useCallback(
- (event: React.KeyboardEvent) => {
- if (event.key === 'ArrowDown') {
- (contRef.current?.children[0] as HTMLDivElement)?.focus();
- }
- },
- [contRef]
- );
-
- const handleOnBlur = useCallback(() => {
- if (!lookup && !showPane) {
- setLookup(market.tradableInstrument.instrument.name);
- }
- }, [market, lookup, showPane, setLookup]);
-
- const openPane = useCallback(() => {
- setShowPane(!showPane);
- inputRef.current?.focus();
- }, [showPane, setShowPane, inputRef]);
-
- const handleDialogOnchange = useCallback(
- (isOpen: boolean) => {
- setShowPane(isOpen);
- if (!isOpen) {
- setLookup(lookup || market.tradableInstrument.instrument.name);
- inputRef.current?.focus();
- }
- },
- [
- setShowPane,
- lookup,
- setLookup,
- market.tradableInstrument.instrument.name,
- inputRef,
- ]
- );
-
- const selectorContent = useMemo(() => {
- return (
-
-
-
-
-
-
-
-
-
-
-
- {loading && (
-
-
-
- )}
- {error && (
-
{t(`Something went wrong: ${error.message}`)}
- )}
-
- {results.map((market, i) => (
-
handleMarketSelect(market)}
- onKeyDown={(e) => handleItemKeyDown(e, market, i)}
- >
- {ItemRenderer ? (
-
- ) : (
- market.tradableInstrument.instrument.name
- )}
-
- ))}
-
-
-
- );
- }, [
- ItemRenderer,
- error,
- handleInputKeyDown,
- handleItemKeyDown,
- handleMarketSelect,
- handleOnBlur,
- handleOnChange,
- loading,
- lookup,
- openPane,
- results,
- showPane,
- ]);
-
- useEffect(() => {
- setResults(
- data?.filter(
- (item) =>
- item.state === Schema.MarketState.STATE_ACTIVE &&
- item.tradableInstrument.instrument.name.match(
- new RegExp(escapeRegExp(lookup), 'i')
- )
- ) || []
- );
- }, [data, lookup]);
-
- useEffect(() => {
- inputRef.current?.focus();
- }, [inputRef]);
-
- useEffect(() => {
- if (showPane && isMobile) {
- setDialogContent(selectorContent);
- inputRef.current?.focus();
- window.scrollTo(0, 0);
- } else {
- setDialogContent(null);
- }
- }, [selectorContent, showPane, isMobile, setDialogContent]);
-
- return (
- <>
- {!dialogContent && selectorContent}
-
- {dialogContent}
-
- >
- );
-};
-
-interface MarketDrawerProps {
- children: ReactNode;
- open: boolean;
- onChange?: (isOpen: boolean) => void;
-}
-
-export const MarketDrawer = ({
- children,
- open,
- onChange,
-}: MarketDrawerProps) => {
- const contentClasses = classNames(
- // Positions the modal in the center of screen
- 'z-20 fixed p-8 inset-x-1/2 dark:text-white w-screen',
- // Need to apply background and text colors again as content is rendered in a portal
- 'dark:bg-black bg-white',
- 'left-[0px] top-[99px] h-[calc(100%-99px)] overflow-y-auto'
- );
- return (
- onChange?.(x)}>
-
-
-
-
-
-
-
-
-
- {t('Select market')}
-
-
{children}
-
-
-
-
-
- );
-};
diff --git a/libs/deposits/src/lib/use-deposit-balances.ts b/libs/deposits/src/lib/use-deposit-balances.ts
index f22eedb22..b02974470 100644
--- a/libs/deposits/src/lib/use-deposit-balances.ts
+++ b/libs/deposits/src/lib/use-deposit-balances.ts
@@ -1,12 +1,11 @@
import { useBridgeContract, useTokenContract } from '@vegaprotocol/web3';
import { useCallback, useEffect, useState } from 'react';
import BigNumber from 'bignumber.js';
-import * as Sentry from '@sentry/react';
import { useGetAllowance } from './use-get-allowance';
import { useGetBalanceOfERC20Token } from './use-get-balance-of-erc20-token';
import { useGetDepositMaximum } from './use-get-deposit-maximum';
import { useGetDepositedAmount } from './use-get-deposited-amount';
-import { isAssetTypeERC20 } from '@vegaprotocol/utils';
+import { isAssetTypeERC20, localLoggerFactory } from '@vegaprotocol/utils';
import { useAccountBalance } from '@vegaprotocol/accounts';
import type { Asset } from '@vegaprotocol/assets';
@@ -43,7 +42,9 @@ export const useDepositBalances = (asset: Asset | undefined) => {
const getBalances = useCallback(async () => {
if (!asset) return;
+ const logger = localLoggerFactory({ application: 'deposits' });
try {
+ logger.info('get deposit balances', { asset: asset.id });
setState(null);
const [max, deposited, balance, allowance] = await Promise.all([
getDepositMaximum(),
@@ -59,7 +60,7 @@ export const useDepositBalances = (asset: Asset | undefined) => {
allowance: allowance ?? initialState.allowance,
});
} catch (err) {
- Sentry.captureException(err);
+ logger.error('get deposit balances', err);
setState(null);
}
}, [asset, getAllowance, getBalance, getDepositMaximum, getDepositedAmount]);
diff --git a/libs/deposits/src/lib/use-get-allowance.ts b/libs/deposits/src/lib/use-get-allowance.ts
index 7e6db2f7d..53548a55b 100644
--- a/libs/deposits/src/lib/use-get-allowance.ts
+++ b/libs/deposits/src/lib/use-get-allowance.ts
@@ -1,11 +1,10 @@
import type { Token } from '@vegaprotocol/smart-contracts';
-import * as Sentry from '@sentry/react';
import { useWeb3React } from '@web3-react/core';
import { useCallback } from 'react';
import { useEthereumConfig } from '@vegaprotocol/web3';
import BigNumber from 'bignumber.js';
import type { Asset } from '@vegaprotocol/assets';
-import { addDecimal } from '@vegaprotocol/utils';
+import { addDecimal, localLoggerFactory } from '@vegaprotocol/utils';
export const useGetAllowance = (
contract: Token | null,
@@ -18,15 +17,20 @@ export const useGetAllowance = (
if (!contract || !account || !config || !asset) {
return;
}
+
+ const logger = localLoggerFactory({ application: 'deposits' });
try {
+ logger.info('get allowance', {
+ account,
+ contractAddress: config.collateral_bridge_contract.address,
+ });
const res = await contract.allowance(
account,
config.collateral_bridge_contract.address
);
-
return new BigNumber(addDecimal(res.toString(), asset.decimals));
} catch (err) {
- Sentry.captureException(err);
+ logger.error('get allowance', err);
return;
}
}, [contract, account, config, asset]);
diff --git a/libs/deposits/src/lib/use-get-deposit-maximum.ts b/libs/deposits/src/lib/use-get-deposit-maximum.ts
index 2c343c5de..a81a5530a 100644
--- a/libs/deposits/src/lib/use-get-deposit-maximum.ts
+++ b/libs/deposits/src/lib/use-get-deposit-maximum.ts
@@ -1,8 +1,7 @@
import { useCallback } from 'react';
-import * as Sentry from '@sentry/react';
import BigNumber from 'bignumber.js';
import type { Asset } from '@vegaprotocol/assets';
-import { addDecimal } from '@vegaprotocol/utils';
+import { addDecimal, localLoggerFactory } from '@vegaprotocol/utils';
import type { CollateralBridge } from '@vegaprotocol/smart-contracts';
export const useGetDepositMaximum = (
@@ -13,14 +12,16 @@ export const useGetDepositMaximum = (
if (!contract || !asset || asset.source.__typename !== 'ERC20') {
return;
}
+ const logger = localLoggerFactory({ application: 'deposits' });
try {
+ logger.info('get deposit maximum', { asset: asset.id });
const res = await contract.get_deposit_maximum(
asset.source.contractAddress
);
const max = new BigNumber(addDecimal(res.toString(), asset.decimals));
return max.isEqualTo(0) ? new BigNumber(Infinity) : max;
} catch (err) {
- Sentry.captureException(err);
+ logger.error('get deposit maximum', err);
return;
}
}, [contract, asset]);
diff --git a/libs/deposits/src/lib/use-get-deposited-amount.ts b/libs/deposits/src/lib/use-get-deposited-amount.ts
index 89ed89ba3..d8814b91a 100644
--- a/libs/deposits/src/lib/use-get-deposited-amount.ts
+++ b/libs/deposits/src/lib/use-get-deposited-amount.ts
@@ -1,10 +1,9 @@
import { useCallback } from 'react';
-import * as Sentry from '@sentry/react';
import { ethers } from 'ethers';
import { useEthereumConfig } from '@vegaprotocol/web3';
import BigNumber from 'bignumber.js';
import type { Asset } from '@vegaprotocol/assets';
-import { addDecimal } from '@vegaprotocol/utils';
+import { addDecimal, localLoggerFactory } from '@vegaprotocol/utils';
import { useWeb3React } from '@web3-react/core';
export const useGetDepositedAmount = (asset: Asset | undefined) => {
@@ -22,8 +21,9 @@ export const useGetDepositedAmount = (asset: Asset | undefined) => {
) {
return;
}
-
+ const logger = localLoggerFactory({ application: 'deposits' });
try {
+ logger.info('get deposited amount', { asset: asset.id });
const abicoder = new ethers.utils.AbiCoder();
const innerHash = ethers.utils.keccak256(
abicoder.encode(['address', 'uint256'], [account, 4])
@@ -41,7 +41,7 @@ export const useGetDepositedAmount = (asset: Asset | undefined) => {
const value = new BigNumber(res, 16).toString();
return new BigNumber(addDecimal(value, asset.decimals));
} catch (err) {
- Sentry.captureException(err);
+ logger.error('get deposited amount', err);
return;
}
}, [provider, asset, config, account]);
diff --git a/libs/market-info/src/lib/components/oracle-basic-profile/oracle-basic-profile.tsx b/libs/market-info/src/lib/components/oracle-basic-profile/oracle-basic-profile.tsx
index 49a19533a..b58d1576c 100644
--- a/libs/market-info/src/lib/components/oracle-basic-profile/oracle-basic-profile.tsx
+++ b/libs/market-info/src/lib/components/oracle-basic-profile/oracle-basic-profile.tsx
@@ -132,7 +132,7 @@ export const OracleBasicProfile = ({
data-testid={link.url}
className="flex align-items-bottom underline text-sm"
>
-
+
diff --git a/libs/market-info/src/lib/components/oracle-full-profile/oracle-full-profile.tsx b/libs/market-info/src/lib/components/oracle-full-profile/oracle-full-profile.tsx
index 8800d5864..dc2048149 100644
--- a/libs/market-info/src/lib/components/oracle-full-profile/oracle-full-profile.tsx
+++ b/libs/market-info/src/lib/components/oracle-full-profile/oracle-full-profile.tsx
@@ -139,7 +139,7 @@ export const OracleFullProfile = ({
href={link.url}
className="flex align-items-bottom underline text-sm"
>
-
+
diff --git a/libs/market-list/src/lib/markets-candles.mock.ts b/libs/market-list/src/lib/markets-candles.mock.ts
index 1e5aab348..4be43986d 100644
--- a/libs/market-list/src/lib/markets-candles.mock.ts
+++ b/libs/market-list/src/lib/markets-candles.mock.ts
@@ -20,7 +20,15 @@ export const marketsCandlesQuery = (
edges: [
{
__typename: 'CandleEdge',
- node: marketCandlesField,
+ node: createCandle({ close: '100' }),
+ },
+ {
+ __typename: 'CandleEdge',
+ node: createCandle({ close: '200' }),
+ },
+ {
+ __typename: 'CandleEdge',
+ node: createCandle({ close: '300' }),
},
],
},
@@ -32,12 +40,17 @@ export const marketsCandlesQuery = (
return merge(defaultResult, override);
};
-const marketCandlesField: MarketCandlesFieldsFragment = {
- __typename: 'Candle',
- open: '100',
- close: '100',
- high: '110',
- low: '90',
- volume: '1',
- periodStart: '2022-11-01T15:49:00Z',
+const createCandle = (
+ override?: Partial
+): MarketCandlesFieldsFragment => {
+ const defaultCandle = {
+ __typename: 'Candle',
+ open: '100',
+ close: '100',
+ high: '110',
+ low: '90',
+ volume: '1',
+ periodStart: '2022-11-01T15:49:00Z',
+ };
+ return merge(defaultCandle, override);
};
diff --git a/libs/market-list/src/lib/markets-data.mock.ts b/libs/market-list/src/lib/markets-data.mock.ts
index 39aab494e..8e083b44c 100644
--- a/libs/market-list/src/lib/markets-data.mock.ts
+++ b/libs/market-list/src/lib/markets-data.mock.ts
@@ -28,7 +28,7 @@ export const marketsDataQuery = (
export const createMarketsDataFragment = (
override?: PartialDeep
): MarketsDataFieldsFragment => {
- const defaultResult = {
+ const defaultResult: MarketsDataFieldsFragment = {
market: {
id: 'market-0',
__typename: 'Market',
@@ -42,6 +42,10 @@ export const createMarketsDataFragment = (
bestBidPrice: '0',
bestOfferPrice: '0',
markPrice: '4612690058',
+ targetStake: '0',
+ suppliedStake: '0',
+ auctionStart: new Date().toISOString(),
+ auctionEnd: null,
trigger: Schema.AuctionTrigger.AUCTION_TRIGGER_UNSPECIFIED,
__typename: 'MarketData',
};
diff --git a/libs/orders/src/lib/components/order-list-container.tsx b/libs/orders/src/lib/components/order-list-container.tsx
index 9f745f427..2667625ca 100644
--- a/libs/orders/src/lib/components/order-list-container.tsx
+++ b/libs/orders/src/lib/components/order-list-container.tsx
@@ -1,8 +1,8 @@
import { t } from '@vegaprotocol/i18n';
import { Splash } from '@vegaprotocol/ui-toolkit';
import { useVegaWallet } from '@vegaprotocol/wallet';
-import { OrderListManager } from './order-list-manager';
import type { Filter } from './order-list-manager';
+import { OrderListManager } from './order-list-manager';
export interface OrderListContainerProps {
marketId?: string;
diff --git a/libs/react-helpers/src/hooks/use-yesterday.ts b/libs/react-helpers/src/hooks/use-yesterday.ts
index 195e11e25..3b7b0cbc8 100644
--- a/libs/react-helpers/src/hooks/use-yesterday.ts
+++ b/libs/react-helpers/src/hooks/use-yesterday.ts
@@ -3,9 +3,9 @@ import { useEffect, useRef } from 'react';
const DEFAULT_ROUND_BY_MS = 5 * 60 * 1000;
const TWENTY_FOUR_HOURS_MS = 24 * 60 * 60 * 1000;
-export const now = (roundBy = 1) =>
- Math.floor((Math.round(new Date().getTime() / 1000) * 1000) / roundBy) *
- roundBy;
+export const now = (roundBy = 1) => {
+ return Math.floor((Math.round(Date.now() / 1000) * 1000) / roundBy) * roundBy;
+};
/**
* Returns the yesterday's timestamp rounded by given number (in milliseconds; 5 minutes by default)
diff --git a/libs/ui-toolkit/src/components/dropdown-menu/dropdown-menu.tsx b/libs/ui-toolkit/src/components/dropdown-menu/dropdown-menu.tsx
index 70d48778e..f62778f71 100644
--- a/libs/ui-toolkit/src/components/dropdown-menu/dropdown-menu.tsx
+++ b/libs/ui-toolkit/src/components/dropdown-menu/dropdown-menu.tsx
@@ -45,8 +45,11 @@ export const DropdownMenuTrigger = forwardRef<
React.ElementRef,
DropdownTriggerProps
>(({ className, children, iconName, ...props }, forwardedRef) => {
- const defaultClasses =
- 'text-sm py-1 px-2 rounded bg-transparent border border-vega-dark-200 whitespace-nowrap dark:hover:bg-vega-dark-500/20 hover:bg-vega-light-500/40';
+ const defaultClasses = [
+ 'text-sm py-1 px-2 rounded bg-transparent border whitespace-nowrap',
+ 'border-vega-light-200 dark:border-vega-dark-200',
+ 'hover:border-vega-light-300 dark:hover:border-vega-dark-300',
+ ].join(' ');
return (
);
@@ -77,7 +80,7 @@ export const DropdownMenuContent = forwardRef<
@@ -155,7 +158,7 @@ export const DropdownMenuSeparator = forwardRef<
{...separatorProps}
ref={forwardedRef}
className={classNames(
- 'h-px my-1 mx-2 bg-vega-dark-400 dark:bg-vega-dark-300',
+ 'h-px my-1 mx-2 bg-vega-light-150 dark:bg-vega-dark-150',
className
)}
/>
diff --git a/libs/ui-toolkit/src/components/icon/vega-icons/svg-icons/icon-arrow-right.tsx b/libs/ui-toolkit/src/components/icon/vega-icons/svg-icons/icon-arrow-right.tsx
new file mode 100644
index 000000000..1e278259b
--- /dev/null
+++ b/libs/ui-toolkit/src/components/icon/vega-icons/svg-icons/icon-arrow-right.tsx
@@ -0,0 +1,7 @@
+export const IconArrowRight = ({ size = 16 }: { size: number }) => {
+ return (
+
+ );
+};
diff --git a/libs/ui-toolkit/src/components/icon/vega-icons/svg-icons/icon-chevron-up.tsx b/libs/ui-toolkit/src/components/icon/vega-icons/svg-icons/icon-chevron-up.tsx
new file mode 100644
index 000000000..f51d8a4c7
--- /dev/null
+++ b/libs/ui-toolkit/src/components/icon/vega-icons/svg-icons/icon-chevron-up.tsx
@@ -0,0 +1,7 @@
+export const IconChevronUp = ({ size = 16 }: { size: number }) => {
+ return (
+
+ );
+};
diff --git a/libs/ui-toolkit/src/components/icon/vega-icons/svg-icons/icon-cross.tsx b/libs/ui-toolkit/src/components/icon/vega-icons/svg-icons/icon-cross.tsx
new file mode 100644
index 000000000..3f7439afb
--- /dev/null
+++ b/libs/ui-toolkit/src/components/icon/vega-icons/svg-icons/icon-cross.tsx
@@ -0,0 +1,8 @@
+export const IconCross = ({ size = 16 }: { size: number }) => {
+ return (
+
+ );
+};
diff --git a/libs/ui-toolkit/src/components/icon/vega-icons/svg-icons/icon-trend-up.tsx b/libs/ui-toolkit/src/components/icon/vega-icons/svg-icons/icon-trend-up.tsx
new file mode 100644
index 000000000..e8ea37957
--- /dev/null
+++ b/libs/ui-toolkit/src/components/icon/vega-icons/svg-icons/icon-trend-up.tsx
@@ -0,0 +1,7 @@
+export const IconTrendUp = ({ size = 16 }: { size: number }) => {
+ return (
+
+ );
+};
diff --git a/libs/ui-toolkit/src/components/icon/vega-icons/vega-icon-record.ts b/libs/ui-toolkit/src/components/icon/vega-icons/vega-icon-record.ts
index 2b4723cbb..38efd4aba 100644
--- a/libs/ui-toolkit/src/components/icon/vega-icons/vega-icon-record.ts
+++ b/libs/ui-toolkit/src/components/icon/vega-icons/vega-icon-record.ts
@@ -11,6 +11,10 @@ import { IconTwitter } from './svg-icons/icon-twitter';
import { IconQuestionMark } from './svg-icons/icon-question-mark';
import { IconForum } from './svg-icons/icon-forum';
import { IconOpenExternal } from './svg-icons/icon-open-external';
+import { IconArrowRight } from './svg-icons/icon-arrow-right';
+import { IconChevronUp } from './svg-icons/icon-chevron-up';
+import { IconTrendUp } from './svg-icons/icon-trend-up';
+import { IconCross } from './svg-icons/icon-cross';
export enum VegaIconNames {
BREAKDOWN = 'breakdown',
@@ -26,6 +30,10 @@ export enum VegaIconNames {
MOON = 'moon',
OPEN_EXTERNAL = 'open-external',
QUESTION_MARK = 'question-mark',
+ ARROW_RIGHT = 'arrow-right',
+ CHEVRON_UP = 'chevron-up',
+ TREND_UP = 'trend-up',
+ CROSS = 'cross',
}
export const VegaIconNameMap: Record<
@@ -45,4 +53,8 @@ export const VegaIconNameMap: Record<
'question-mark': IconQuestionMark,
forum: IconForum,
'open-external': IconOpenExternal,
+ 'arrow-right': IconArrowRight,
+ 'chevron-up': IconChevronUp,
+ 'trend-up': IconTrendUp,
+ cross: IconCross,
};
diff --git a/libs/ui-toolkit/src/components/icon/vega-icons/vega-icon.tsx b/libs/ui-toolkit/src/components/icon/vega-icons/vega-icon.tsx
index c82e7e229..496b1bcd9 100644
--- a/libs/ui-toolkit/src/components/icon/vega-icons/vega-icon.tsx
+++ b/libs/ui-toolkit/src/components/icon/vega-icons/vega-icon.tsx
@@ -12,7 +12,6 @@ export const VegaIcon = ({ size = 16, name }: VegaIconProps) => {
const effectiveClassName = classNames(
'inline-block',
'align-text-bottom',
- 'pr-1',
'stroke-current'
);
const Element = VegaIconNameMap[name];
diff --git a/libs/ui-toolkit/src/components/input/input.tsx b/libs/ui-toolkit/src/components/input/input.tsx
index 318a51bf0..8dde3f9f9 100644
--- a/libs/ui-toolkit/src/components/input/input.tsx
+++ b/libs/ui-toolkit/src/components/input/input.tsx
@@ -85,8 +85,8 @@ const getAffixElement = ({
const className = classNames(
['fill-black dark:fill-white', 'absolute', 'z-10'],
{
- 'left-4': position === 'pre',
- 'right-4': position === 'post',
+ 'left-3': position === 'pre',
+ 'right-3': position === 'post',
}
);
@@ -134,8 +134,8 @@ export const Input = forwardRef(
'appearance-none dark:color-scheme-dark',
className,
{
- 'pl-10': hasPrepended,
- 'pr-10': hasAppended,
+ 'pl-9': hasPrepended,
+ 'pr-9': hasAppended,
}
);
diff --git a/libs/ui-toolkit/src/utils/shared.ts b/libs/ui-toolkit/src/utils/shared.ts
index e1dd19165..f607f12ee 100644
--- a/libs/ui-toolkit/src/utils/shared.ts
+++ b/libs/ui-toolkit/src/utils/shared.ts
@@ -6,9 +6,10 @@ export const defaultSelectElement = (hasError?: boolean) =>
export const defaultFormElement = (hasError?: boolean) =>
classnames(
'flex items-center w-full text-sm',
- 'p-2 border-2 rounded-none',
+ 'p-2 border-2 rounded',
'bg-transparent',
- 'border border-neutral-500 focus:border-black dark:focus:border-white',
+ 'border border-vega-light-200 dark:border-vega-dark-200',
+ 'focus:border-vega-light-300 dark:focus:border-vega-dark-300',
'disabled:opacity-60',
{
'border-vega-pink': hasError,
diff --git a/libs/utils/src/index.ts b/libs/utils/src/index.ts
index 9a8509526..3d7927235 100644
--- a/libs/utils/src/index.ts
+++ b/libs/utils/src/index.ts
@@ -9,6 +9,7 @@ export * from './lib/is-valid-url';
export * from './lib/local-logger';
export * from './lib/local-storage';
export * from './lib/markets';
+export * from './lib/price-change';
export * from './lib/remove-0x';
export * from './lib/remove-pagination-wrapper';
export * from './lib/time';
diff --git a/libs/utils/src/lib/local-logger.spec.ts b/libs/utils/src/lib/local-logger.spec.ts
index 3dd21c184..02769629d 100644
--- a/libs/utils/src/lib/local-logger.spec.ts
+++ b/libs/utils/src/lib/local-logger.spec.ts
@@ -1,4 +1,4 @@
-import * as Sentry from '@sentry/browser';
+import * as Sentry from '@sentry/react';
import type { Severity } from '@sentry/types/types/severity';
import { LocalLogger, localLoggerFactory } from './local-logger';
diff --git a/libs/utils/src/lib/local-logger.ts b/libs/utils/src/lib/local-logger.ts
index 1525cad65..59c84a214 100644
--- a/libs/utils/src/lib/local-logger.ts
+++ b/libs/utils/src/lib/local-logger.ts
@@ -1,7 +1,12 @@
-import * as Sentry from '@sentry/browser';
+import * as Sentry from '@sentry/react';
import type { Scope } from '@sentry/browser';
import type { Severity, Breadcrumb, Primitive } from '@sentry/types';
+declare global {
+ // eslint-disable-next-line no-var
+ var __LOGGER_SILENT_MODE__: boolean;
+}
+
const LogLevels = [
'fatal',
'error',
@@ -13,7 +18,14 @@ const LogLevels = [
'silent',
];
type LogLevelsType = typeof LogLevels[number];
-type ConsoleArg = string | number | boolean | bigint | symbol | object;
+type ConsoleArg =
+ | string
+ | number
+ | boolean
+ | bigint
+ | symbol
+ | object
+ | unknown;
type ConsoleMethod = {
[K in keyof Console]: Console[K] extends (...args: ConsoleArg[]) => unknown
? K
@@ -83,7 +95,10 @@ export class LocalLogger {
logMethod: ConsoleMethod,
args: ConsoleArg[]
) {
- if (this.numberLogLevel <= LocalLogger.levelLogMap[level]) {
+ if (
+ this.numberLogLevel <= LocalLogger.levelLogMap[level] &&
+ !global.__LOGGER_SILENT_MODE__
+ ) {
console[logMethod].apply(console, [
`${this._application}:${level}: `,
...args,
@@ -110,7 +125,7 @@ export class LocalLogger {
if (this.tags.length) {
this.tags.forEach((tag) => {
const found = args.reduce((aggr, arg) => {
- if (typeof arg === 'object' && tag in arg) {
+ if (arg && typeof arg === 'object' && tag in arg) {
// @ts-ignore change object to record
aggr = arg[tag] as unknown as Primitive | object;
}
diff --git a/libs/utils/src/lib/price-change.ts b/libs/utils/src/lib/price-change.ts
new file mode 100644
index 000000000..82dbfc551
--- /dev/null
+++ b/libs/utils/src/lib/price-change.ts
@@ -0,0 +1,24 @@
+import BigNumber from 'bignumber.js';
+
+export const priceChangePercentage = (candles: string[]) => {
+ const change = priceChange(candles);
+ if (change && candles && candles.length > 0) {
+ const yesterdayLastPrice = candles[0] && BigInt(candles[0]);
+ if (yesterdayLastPrice) {
+ return new BigNumber(change.toString())
+ .dividedBy(new BigNumber(yesterdayLastPrice.toString()))
+ .multipliedBy(100)
+ .toNumber();
+ }
+ return 0;
+ }
+ return 0;
+};
+
+export const priceChange = (candles: string[]) => {
+ return candles &&
+ candles[candles.length - 1] !== undefined &&
+ candles[0] !== undefined
+ ? BigInt(candles[candles.length - 1] ?? 0) - BigInt(candles[0] ?? 0)
+ : 0;
+};
diff --git a/libs/web3/src/lib/use-get-withdraw-delay.ts b/libs/web3/src/lib/use-get-withdraw-delay.ts
index e44d67d17..e11f84201 100644
--- a/libs/web3/src/lib/use-get-withdraw-delay.ts
+++ b/libs/web3/src/lib/use-get-withdraw-delay.ts
@@ -1,6 +1,6 @@
-import * as Sentry from '@sentry/react';
import { useBridgeContract } from './use-bridge-contract';
import { useCallback } from 'react';
+import { localLoggerFactory } from '@vegaprotocol/utils';
/**
* Gets the delay in seconds thats required if the withdrawal amount is
@@ -9,11 +9,13 @@ import { useCallback } from 'react';
export const useGetWithdrawDelay = () => {
const contract = useBridgeContract();
const getDelay = useCallback(async () => {
+ const logger = localLoggerFactory({ application: 'web3' });
try {
+ logger.info('get withdraw delay', { contract: contract?.toString() });
const res = await contract?.default_withdraw_delay();
return res.toNumber();
} catch (err) {
- Sentry.captureException(err);
+ logger.error('get withdraw delay', err);
}
}, [contract]);
diff --git a/libs/withdraws/src/lib/use-complete-withdraw.ts b/libs/withdraws/src/lib/use-complete-withdraw.ts
index 5c81d5973..e826f1e6b 100644
--- a/libs/withdraws/src/lib/use-complete-withdraw.ts
+++ b/libs/withdraws/src/lib/use-complete-withdraw.ts
@@ -1,5 +1,4 @@
import { useApolloClient } from '@apollo/client';
-import { captureException } from '@sentry/react';
import type { CollateralBridge } from '@vegaprotocol/smart-contracts';
import {
EthTxStatus,
@@ -7,6 +6,7 @@ import {
useEthereumTransaction,
} from '@vegaprotocol/web3';
import { useCallback, useEffect, useState } from 'react';
+import { localLoggerFactory } from '@vegaprotocol/utils';
import { Erc20ApprovalDocument } from './__generated__/Erc20Approval';
import type {
Erc20ApprovalQuery,
@@ -28,10 +28,12 @@ export const useCompleteWithdraw = () => {
async (withdrawalId: string) => {
setId(withdrawalId);
+ const logger = localLoggerFactory({ application: 'deposits' });
try {
if (!contract) {
return;
}
+ logger.info('get withdraw approval', { withdrawalId });
const res = await query<
Erc20ApprovalQuery,
Erc20ApprovalQueryVariables
@@ -45,7 +47,7 @@ export const useCompleteWithdraw = () => {
if (!approval) {
throw new Error('Could not retrieve withdrawal approval');
}
-
+ logger.info('withdraw transaction', { approval });
perform(
approval.assetSource,
approval.amount,
@@ -55,7 +57,7 @@ export const useCompleteWithdraw = () => {
approval.signatures
);
} catch (err) {
- captureException(err);
+ logger.error('withdraw transaction', err);
}
},
[contract, query, perform]
diff --git a/libs/withdraws/src/lib/use-verify-withdrawal.ts b/libs/withdraws/src/lib/use-verify-withdrawal.ts
index 153701159..28596f613 100644
--- a/libs/withdraws/src/lib/use-verify-withdrawal.ts
+++ b/libs/withdraws/src/lib/use-verify-withdrawal.ts
@@ -1,7 +1,6 @@
import { useCallback, useState } from 'react';
-import { captureException } from '@sentry/react';
import BigNumber from 'bignumber.js';
-import { addDecimal } from '@vegaprotocol/utils';
+import { addDecimal, localLoggerFactory } from '@vegaprotocol/utils';
import { t } from '@vegaprotocol/i18n';
import {
ApprovalStatus,
@@ -54,7 +53,9 @@ export const useVerifyWithdrawal = () => {
const verify = useCallback(
async (withdrawal: WithdrawalFieldsFragment) => {
+ const logger = localLoggerFactory({ application: 'withdraws' });
try {
+ logger.info('verify withdrawal', withdrawal);
setState({ dialogOpen: true });
if (withdrawal.asset.source.__typename !== 'ERC20') {
@@ -120,7 +121,7 @@ export const useVerifyWithdrawal = () => {
return true;
} catch (err) {
- captureException(err);
+ logger.error('use verify withdrawal', err);
setState({
status: ApprovalStatus.Error,
});
diff --git a/libs/withdraws/src/lib/use-withdraw-asset.tsx b/libs/withdraws/src/lib/use-withdraw-asset.tsx
index 3cb6759bc..9611ec31f 100644
--- a/libs/withdraws/src/lib/use-withdraw-asset.tsx
+++ b/libs/withdraws/src/lib/use-withdraw-asset.tsx
@@ -1,6 +1,5 @@
-import { captureException } from '@sentry/react';
import type { Asset } from '@vegaprotocol/assets';
-import { addDecimal } from '@vegaprotocol/utils';
+import { addDecimal, localLoggerFactory } from '@vegaprotocol/utils';
import * as Schema from '@vegaprotocol/types';
import BigNumber from 'bignumber.js';
import { useCallback, useEffect } from 'react';
@@ -41,13 +40,14 @@ export const useWithdrawAsset = (
// and subsequent delay if withdrawal amount is larger than it
let threshold = new BigNumber(0);
let delay = 0;
-
+ const logger = localLoggerFactory({ application: 'withdraws' });
try {
+ logger.info('get withdraw asset data', { asset: asset?.id });
const result = await Promise.all([getThreshold(asset), getDelay()]);
threshold = result[0];
delay = result[1];
} catch (err) {
- captureException(err);
+ logger.error('get withdraw asset data', err);
}
update({ asset, balance, min, threshold, delay });
diff --git a/libs/withdraws/src/setup-tests.ts b/libs/withdraws/src/setup-tests.ts
index 68773380a..6002fef6c 100644
--- a/libs/withdraws/src/setup-tests.ts
+++ b/libs/withdraws/src/setup-tests.ts
@@ -1,4 +1,10 @@
import '@testing-library/jest-dom';
import ResizeObserver from 'resize-observer-polyfill';
-
global.ResizeObserver = ResizeObserver;
+
+declare global {
+ // eslint-disable-next-line no-var
+ var __LOGGER_SILENT_MODE__: boolean;
+}
+
+global.__LOGGER_SILENT_MODE__ = true;