diff --git a/frontend/app/[asset]/components/positions/UserPositions.tsx b/frontend/app/[asset]/components/positions/UserPositions.tsx
index 272f478..edf0fdd 100644
--- a/frontend/app/[asset]/components/positions/UserPositions.tsx
+++ b/frontend/app/[asset]/components/positions/UserPositions.tsx
@@ -3,8 +3,9 @@ import { DefaultToastTransactionMeta } from '@pcnv/txs-react/dist/toasts/ToastsV
import { Spinner } from '@tradex/icons'
import { Modal, Skeleton, cx } from '@tradex/interface'
import { useTranslation } from '@tradex/languages'
+import { optimism, optimismGoerli } from '@wagmi/core/chains'
import { TRACKING_CODE, calculatePriceImpact } from 'app/[asset]/constants/perps-config'
-import { useRouteMarket } from 'app/[asset]/lib/market/useMarket'
+import { useMarketSettings, useRouteMarket } from 'app/[asset]/lib/market/useMarket'
import { useMarketPrice } from 'app/[asset]/lib/price/price'
import { MarketKey } from 'app/[asset]/lib/price/pyth'
import { useIsHydrated } from 'app/providers/IsHydratedProvider'
@@ -21,7 +22,7 @@ import { parsePositionDetails } from 'perps-hooks/parsers'
import React, { useEffect, useMemo, useState } from 'react'
import { useInterval } from 'usehooks-ts'
import { toBigNumber } from 'utils/toBigNumber'
-import { deepEqual, useAccount } from 'wagmi'
+import { deepEqual, useAccount, useNetwork, useSwitchNetwork } from 'wagmi'
type Position = {
id: bigint
@@ -89,6 +90,7 @@ export function UserPositions() {
const isHydrated = useIsHydrated()
const marketDataPosition = useMarketDataPositionDetails({
+ chainId: optimism.id,
args: market && address && [market.address, address],
select: parsePositionDetails,
enabled: !!market && !!address,
@@ -130,10 +132,12 @@ export function UserPositions() {
if (!hasPosition) {
return (
-
-
- {t('you have no positions yet')}
-
+
+
+
+ {t('you have no positions yet')}
+
+
)
}
@@ -174,10 +178,53 @@ export function UserPositions() {
)
}
+
+const CancelPrevius = ({ market, children }) => {
+ const account = useAccount()
+ const [pending, setPending] = useState(false)
+ const prepareCancel = usePrepareMarketCancelOffchainDelayedOrder({
+ address: market?.address,
+ chainId: optimism.id,
+ args: account.address && [account.address],
+ enabled: !!account.address,
+ })
+
+ const cancel = useMarketCancelOffchainDelayedOrder({
+ ...prepareCancel.config,
+ onSuccess: () => {
+ prepareCancel.refetch()
+ setPending(false)
+ },
+ })
+
+ if (prepareCancel.isLoading) {
+ return
+ }
+ if (prepareCancel.isError) {
+ return children
+ }
+
+ return (
+
+ Review your operation
+ Previous order failed
+
+
+ )
+}
function SideNAsset(side: string, asset: string) {
return (
- {side}{' '}
+ {side}
{asset}
)
@@ -206,6 +253,7 @@ const ConfirmClosePosition = ({
)
const prepareClose = usePrepareMarketSubmitOffchainDelayedOrderWithTracking({
address: market?.address,
+ chainId: optimism.id,
args: [closePositionsizeDelta, priceImpact, TRACKING_CODE],
})
const closePosition = useMarketSubmitOffchainDelayedOrderWithTracking({
@@ -233,11 +281,28 @@ const ConfirmClosePosition = ({
const cancel = useMarketCancelOffchainDelayedOrder({
...prepareCancel.config,
})
+ const network = useNetwork()
+
+ const { switchNetwork } = useSwitchNetwork()
+ if (network.chain?.id !== optimism.id && network.chain?.id !== optimismGoerli.id)
+ return (
+
+ Review your operation
+ Previous order failed
+
+
+ )
+
if (reason === 'previous order exists') {
return (
Review your operation
-
Previous order failed, cancel it
+
Previous order failed
{prepareCancel.isSuccess && (