- {useValue}
- {type === 'to' && !!value && (
+ {valueLoading ? (
+
+ ) : (
+ {useValue}
+ )}
+ {isToken && !!value && (
openFeePopup(true)}
viewBox="0 0 14 14"
From 1ff0092bf860f0211254a86cf7234cc1b3758ec8 Mon Sep 17 00:00:00 2001
From: DMY <147dmy@gmail.com>
Date: Mon, 11 Nov 2024 12:37:32 +0800
Subject: [PATCH 08/10] fix
---
src/ui/views/Bridge/Component/BridgeContent.tsx | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/ui/views/Bridge/Component/BridgeContent.tsx b/src/ui/views/Bridge/Component/BridgeContent.tsx
index 3aa4ee87da8..2769f44148e 100644
--- a/src/ui/views/Bridge/Component/BridgeContent.tsx
+++ b/src/ui/views/Bridge/Component/BridgeContent.tsx
@@ -144,7 +144,7 @@ export const BridgeContent = () => {
setFetchingBridgeQuote(true);
const { tx } = await pRetry(
() =>
- wallet.openapi.getBridgeQuote({
+ wallet.openapi.getBridgeQuoteTxV2({
aggregator_id: selectedBridgeQuote.aggregator.id,
bridge_id: selectedBridgeQuote.bridge_id,
from_token_id: fromToken.id,
@@ -156,6 +156,7 @@ export const BridgeContent = () => {
.toString(),
to_chain_id: toToken.chain,
to_token_id: toToken.id,
+ slippage: new BigNumber(slippageState).div(100).toString(10),
}),
{ retries: 1 }
);
@@ -233,6 +234,7 @@ export const BridgeContent = () => {
wallet,
amount,
rbiSource,
+ slippageState,
]);
const buildTxs = useMemoizedFn(async () => {
From b993edd4777a34d5ff38c081f7c8d19f21488c77 Mon Sep 17 00:00:00 2001
From: DMY <147dmy@gmail.com>
Date: Mon, 11 Nov 2024 13:06:32 +0800
Subject: [PATCH 09/10] fix: bridge slippage
---
src/background/controller/wallet.ts | 3 -
src/background/service/bridge.ts | 20 -------
src/ui/hooks/contextState.tsx | 2 +-
src/ui/models/bridge.ts | 18 ------
.../views/Bridge/Component/BridgeContent.tsx | 59 ++++---------------
.../views/Bridge/Component/BridgeShowMore.tsx | 15 ++++-
.../views/Bridge/Component/BridgeSlippage.tsx | 20 ++++---
src/ui/views/Bridge/hooks/slippage.tsx | 47 +++------------
src/ui/views/Bridge/hooks/token.tsx | 13 ++--
9 files changed, 55 insertions(+), 142 deletions(-)
diff --git a/src/background/controller/wallet.ts b/src/background/controller/wallet.ts
index e2e92c371dc..57e89aad4c1 100644
--- a/src/background/controller/wallet.ts
+++ b/src/background/controller/wallet.ts
@@ -1760,9 +1760,6 @@ export class WalletController extends BaseController {
getBridgeSortIncludeGasFee = bridgeService.getBridgeSortIncludeGasFee;
setBridgeSortIncludeGasFee = bridgeService.setBridgeSortIncludeGasFee;
setBridgeSettingFirstOpen = bridgeService.setBridgeSettingFirstOpen;
- setBridgeAutoSlippage = bridgeService.setAutoSlippage;
- setBridgeIsCustomSlippage = bridgeService.setIsCustomSlippage;
- setBridgeSlippage = bridgeService.setSlippage;
getGasAccountData = gasAccountService.getGasAccountData;
getGasAccountSig = gasAccountService.getGasAccountSig;
diff --git a/src/background/service/bridge.ts b/src/background/service/bridge.ts
index 7027fbe4959..87fdac7f756 100644
--- a/src/background/service/bridge.ts
+++ b/src/background/service/bridge.ts
@@ -19,10 +19,6 @@ export type BridgeRecord = {
};
export type BridgeServiceStore = {
- autoSlippage: boolean;
- isCustomSlippage?: boolean;
- slippage: string;
-
selectedChain: CHAINS_ENUM | null;
selectedFromToken?: TokenItem;
selectedToToken?: TokenItem;
@@ -52,8 +48,6 @@ class BridgeService {
unlimitedAllowance: false,
sortIncludeGasFee: true,
firstOpen: true,
- autoSlippage: true,
- slippage: '1',
};
init = async () => {
@@ -65,8 +59,6 @@ class BridgeService {
sortIncludeGasFee: true,
txQuotes: {},
firstOpen: true,
- autoSlippage: true,
- slippage: '1',
},
});
@@ -148,18 +140,6 @@ class BridgeService {
});
}
};
-
- setAutoSlippage = (auto: boolean) => {
- this.store.autoSlippage = auto;
- };
-
- setIsCustomSlippage = (isCustomSlippage: boolean) => {
- this.store.isCustomSlippage = isCustomSlippage;
- };
-
- setSlippage = (slippage: string) => {
- this.store.slippage = slippage;
- };
}
export default new BridgeService();
diff --git a/src/ui/hooks/contextState.tsx b/src/ui/hooks/contextState.tsx
index b9695dbf722..4efb0788ab8 100644
--- a/src/ui/hooks/contextState.tsx
+++ b/src/ui/hooks/contextState.tsx
@@ -1,6 +1,6 @@
import React from 'react';
import { noop } from 'lodash';
-import { createContext, useContext, useState } from 'react';
+import { createContext, useContext, useState, cloneElement, memo } from 'react';
export function createContextState(initialState: T) {
const StateContext = createContext(initialState);
diff --git a/src/ui/models/bridge.ts b/src/ui/models/bridge.ts
index ae41f8e98ee..bf0f1ace121 100644
--- a/src/ui/models/bridge.ts
+++ b/src/ui/models/bridge.ts
@@ -13,8 +13,6 @@ export const bridge = createModel()({
name: 'bridge',
state: {
- slippage: '1',
- autoSlippage: true,
supportedChains: DEFAULT_BRIDGE_SUPPORTED_CHAIN,
aggregatorsListInit: false,
aggregatorsList: DEFAULT_BRIDGE_AGGREGATOR,
@@ -128,21 +126,5 @@ export const bridge = createModel()({
});
}
},
-
- async setAutoSlippage(autoSlippage: boolean, store) {
- await store.app.wallet.setBridgeAutoSlippage(autoSlippage);
- console.log('autoSlippage set', autoSlippage);
- this.setField({ autoSlippage });
- },
-
- async setIsCustomSlippage(isCustomSlippage: boolean, store) {
- await store.app.wallet.setBridgeIsCustomSlippage(isCustomSlippage);
- this.setField({ isCustomSlippage });
- },
-
- async setSlippage(slippage: string, store) {
- await store.app.wallet.setBridgeSlippage(slippage);
- this.setField({ slippage });
- },
}),
});
diff --git a/src/ui/views/Bridge/Component/BridgeContent.tsx b/src/ui/views/Bridge/Component/BridgeContent.tsx
index 2769f44148e..4648b9a2dc0 100644
--- a/src/ui/views/Bridge/Component/BridgeContent.tsx
+++ b/src/ui/views/Bridge/Component/BridgeContent.tsx
@@ -1,18 +1,15 @@
import React, { useCallback, useMemo, useState } from 'react';
import { useRabbySelector } from '@/ui/store';
import { useBridge } from '../hooks/token';
-import { Alert, Button, Input, message, Modal } from 'antd';
+import { Alert, Button, message, Modal } from 'antd';
import BigNumber from 'bignumber.js';
import { useWallet } from '@/ui/utils';
-import styled from 'styled-components';
import clsx from 'clsx';
import { QuoteList } from './BridgeQuotes';
import { useQuoteVisible, useSetQuoteVisible, useSetRefreshId } from '../hooks';
import { useRbiSource } from '@/ui/utils/ga-event';
import { useCss } from 'react-use';
-import { findChainByEnum, findChainByServerID } from '@/utils/chain';
-import type { SelectChainItemProps } from '@/ui/component/ChainSelector/components/SelectChainItem';
-import i18n from '@/i18n';
+import { findChainByEnum } from '@/utils/chain';
import { useTranslation } from 'react-i18next';
import pRetry from 'p-retry';
@@ -27,49 +24,6 @@ import { BridgeShowMore, RecommendFromToken } from './BridgeShowMore';
import { BridgeSwitchBtn } from './BridgeSwitchButton';
import { ReactComponent as RcIconWarningCC } from '@/ui/assets/warning-cc.svg';
-const tipsClassName = clsx('text-r-neutral-body text-12 mb-8 pt-14');
-
-const StyledInput = styled(Input)`
- height: 46px;
- font-weight: 500;
- font-size: 18px;
- box-shadow: none;
- border-radius: 4px;
- border: 1px solid var(--r-neutral-line, #d3d8e0);
- background: transparent !important;
- & > .ant-input {
- font-weight: 500;
- font-size: 18px;
- border-width: 0px !important;
- border-color: transparent;
- }
- &.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover {
- border-width: 1px !important;
- }
- &:active {
- border: 1px solid transparent;
- }
- &:focus,
- &:focus-within {
- border-width: 1px !important;
- border-color: var(--r-blue-default, #7084ff) !important;
- }
- &:hover {
- border-width: 1px !important;
- border-color: var(--r-blue-default, #7084ff) !important;
- box-shadow: none;
- }
-
- &:placeholder-shown {
- color: #707280;
- }
- &::-webkit-inner-spin-button,
- &::-webkit-outer-spin-button {
- -webkit-appearance: none;
- margin: 0;
- }
-`;
-
export const BridgeContent = () => {
const { userAddress } = useRabbySelector((state) => ({
userAddress: state.account.currentAccount?.address || '',
@@ -108,6 +62,11 @@ export const BridgeContent = () => {
setSlippageChanged,
isSlippageHigh,
isSlippageLow,
+
+ autoSlippage,
+ isCustomSlippage,
+ setAutoSlippage,
+ setIsCustomSlippage,
} = useBridge();
const amountAvailable = useMemo(() => Number(amount) > 0, [amount]);
@@ -446,6 +405,10 @@ export const BridgeContent = () => {
openQuotesList={openQuotesList}
quoteLoading={quoteLoading}
slippageError={isSlippageHigh || isSlippageLow}
+ autoSlippage={autoSlippage}
+ isCustomSlippage={isCustomSlippage}
+ setAutoSlippage={setAutoSlippage}
+ setIsCustomSlippage={setIsCustomSlippage}
/>
)}
{noQuote && recommendFromToken && (
diff --git a/src/ui/views/Bridge/Component/BridgeShowMore.tsx b/src/ui/views/Bridge/Component/BridgeShowMore.tsx
index 268c3e1de7c..98de7be1587 100644
--- a/src/ui/views/Bridge/Component/BridgeShowMore.tsx
+++ b/src/ui/views/Bridge/Component/BridgeShowMore.tsx
@@ -4,8 +4,9 @@ import { TokenItem } from '@rabby-wallet/rabby-api/dist/types';
import { Button, Skeleton, Tooltip } from 'antd';
import clsx from 'clsx';
import React, {
+ Dispatch,
PropsWithChildren,
- ReactNode,
+ SetStateAction,
useEffect,
useMemo,
useState,
@@ -32,6 +33,10 @@ export const BridgeShowMore = ({
toAmount,
quoteLoading,
slippageError,
+ autoSlippage,
+ isCustomSlippage,
+ setAutoSlippage,
+ setIsCustomSlippage,
}: {
openQuotesList: () => void;
sourceName: string;
@@ -46,6 +51,10 @@ export const BridgeShowMore = ({
toAmount?: string | number;
quoteLoading?: boolean;
slippageError?: boolean;
+ autoSlippage: boolean;
+ isCustomSlippage: boolean;
+ setAutoSlippage: Dispatch>;
+ setIsCustomSlippage: Dispatch>;
}) => {
const { t } = useTranslation();
const [show, setShow] = useState(false);
@@ -163,6 +172,10 @@ export const BridgeShowMore = ({
value={slippage}
displaySlippage={displaySlippage}
onChange={onSlippageChange}
+ autoSlippage={autoSlippage}
+ isCustomSlippage={isCustomSlippage}
+ setAutoSlippage={setAutoSlippage}
+ setIsCustomSlippage={setIsCustomSlippage}
/>