chore(deal-ticket): 4743 preserve estimate position cache in deal ticket (#4770)
This commit is contained in:
parent
ba39720f05
commit
f7037bca80
@ -26,10 +26,7 @@ import {
|
|||||||
Pill,
|
Pill,
|
||||||
} from '@vegaprotocol/ui-toolkit';
|
} from '@vegaprotocol/ui-toolkit';
|
||||||
|
|
||||||
import {
|
import { useOpenVolume } from '@vegaprotocol/positions';
|
||||||
useEstimatePositionQuery,
|
|
||||||
useOpenVolume,
|
|
||||||
} from '@vegaprotocol/positions';
|
|
||||||
import {
|
import {
|
||||||
toBigNum,
|
toBigNum,
|
||||||
removeDecimal,
|
removeDecimal,
|
||||||
@ -63,13 +60,14 @@ import {
|
|||||||
useAccountBalance,
|
useAccountBalance,
|
||||||
} from '@vegaprotocol/accounts';
|
} from '@vegaprotocol/accounts';
|
||||||
import { useDataProvider } from '@vegaprotocol/data-provider';
|
import { useDataProvider } from '@vegaprotocol/data-provider';
|
||||||
|
import type { OrderFormValues } from '../../hooks';
|
||||||
import {
|
import {
|
||||||
DealTicketType,
|
DealTicketType,
|
||||||
dealTicketTypeToOrderType,
|
dealTicketTypeToOrderType,
|
||||||
isStopOrderType,
|
isStopOrderType,
|
||||||
} from '../../hooks/use-form-values';
|
useDealTicketFormValues,
|
||||||
import type { OrderFormValues } from '../../hooks/use-form-values';
|
usePositionEstimate,
|
||||||
import { useDealTicketFormValues } from '../../hooks/use-form-values';
|
} from '../../hooks';
|
||||||
import { DealTicketSizeIceberg } from './deal-ticket-size-iceberg';
|
import { DealTicketSizeIceberg } from './deal-ticket-size-iceberg';
|
||||||
import noop from 'lodash/noop';
|
import noop from 'lodash/noop';
|
||||||
import { isNonPersistentOrder } from '../../utils/time-in-force-persistance';
|
import { isNonPersistentOrder } from '../../utils/time-in-force-persistance';
|
||||||
@ -253,16 +251,14 @@ export const DealTicket = ({
|
|||||||
side: normalizedOrder.side,
|
side: normalizedOrder.side,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const { data: positionEstimate } = useEstimatePositionQuery({
|
|
||||||
variables: {
|
const positionEstimate = usePositionEstimate({
|
||||||
marketId: market.id,
|
marketId: market.id,
|
||||||
openVolume,
|
openVolume,
|
||||||
orders,
|
orders,
|
||||||
collateralAvailable:
|
collateralAvailable:
|
||||||
marginAccountBalance || generalAccountBalance ? balance : undefined,
|
marginAccountBalance || generalAccountBalance ? balance : undefined,
|
||||||
},
|
|
||||||
skip: !normalizedOrder,
|
skip: !normalizedOrder,
|
||||||
fetchPolicy: 'no-cache',
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const assetSymbol =
|
const assetSymbol =
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
export * from './__generated__/EstimateOrder';
|
export * from './__generated__/EstimateOrder';
|
||||||
export * from './use-estimate-fees';
|
export * from './use-estimate-fees';
|
||||||
export * from './use-form-values';
|
export * from './use-form-values';
|
||||||
|
export * from './use-position-estimate';
|
||||||
|
33
libs/deal-ticket/src/hooks/use-position-estimate.spec.ts
Normal file
33
libs/deal-ticket/src/hooks/use-position-estimate.spec.ts
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import { renderHook } from '@testing-library/react';
|
||||||
|
import { usePositionEstimate } from './use-position-estimate';
|
||||||
|
import * as positionsModule from '@vegaprotocol/positions';
|
||||||
|
import type {
|
||||||
|
EstimatePositionQuery,
|
||||||
|
EstimatePositionQueryVariables,
|
||||||
|
} from '@vegaprotocol/positions';
|
||||||
|
import type { QueryResult } from '@apollo/client';
|
||||||
|
|
||||||
|
let mockData: object | undefined = {};
|
||||||
|
|
||||||
|
describe('usePositionEstimate', () => {
|
||||||
|
const args = {
|
||||||
|
marketId: 'marketId',
|
||||||
|
openVolume: '10',
|
||||||
|
orders: [],
|
||||||
|
collateralAvailable: '200',
|
||||||
|
skip: false,
|
||||||
|
};
|
||||||
|
it('should return proper data', () => {
|
||||||
|
jest
|
||||||
|
.spyOn(positionsModule, 'useEstimatePositionQuery')
|
||||||
|
.mockReturnValue({ data: mockData } as unknown as QueryResult<
|
||||||
|
EstimatePositionQuery,
|
||||||
|
EstimatePositionQueryVariables
|
||||||
|
>);
|
||||||
|
const { result, rerender } = renderHook(() => usePositionEstimate(args));
|
||||||
|
expect(result.current).toEqual(mockData);
|
||||||
|
mockData = undefined;
|
||||||
|
rerender(true);
|
||||||
|
expect(result.current).toEqual({});
|
||||||
|
});
|
||||||
|
});
|
38
libs/deal-ticket/src/hooks/use-position-estimate.ts
Normal file
38
libs/deal-ticket/src/hooks/use-position-estimate.ts
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import type {
|
||||||
|
EstimatePositionQueryVariables,
|
||||||
|
EstimatePositionQuery,
|
||||||
|
} from '@vegaprotocol/positions';
|
||||||
|
import { useEstimatePositionQuery } from '@vegaprotocol/positions';
|
||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
|
||||||
|
interface PositionEstimateProps extends EstimatePositionQueryVariables {
|
||||||
|
skip: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const usePositionEstimate = ({
|
||||||
|
marketId,
|
||||||
|
openVolume,
|
||||||
|
orders,
|
||||||
|
collateralAvailable,
|
||||||
|
skip,
|
||||||
|
}: PositionEstimateProps) => {
|
||||||
|
const [estimates, setEstimates] = useState<EstimatePositionQuery | undefined>(
|
||||||
|
undefined
|
||||||
|
);
|
||||||
|
const { data } = useEstimatePositionQuery({
|
||||||
|
variables: {
|
||||||
|
marketId,
|
||||||
|
openVolume,
|
||||||
|
orders,
|
||||||
|
collateralAvailable,
|
||||||
|
},
|
||||||
|
skip,
|
||||||
|
fetchPolicy: 'no-cache',
|
||||||
|
});
|
||||||
|
useEffect(() => {
|
||||||
|
if (data) {
|
||||||
|
setEstimates(data);
|
||||||
|
}
|
||||||
|
}, [data]);
|
||||||
|
return estimates;
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user