Commit 4dc4620b authored by Jordan Frankfurt's avatar Jordan Frankfurt Committed by GitHub

feat: integrate widget tx states (#4553)

* feat(widget): sync transaction states

* s

* waiting on type release

* slippage is all that remains

* finalize tx integration

* pr feedback

* pr feedback - else if

* update @uniswap/widgets to 2.7

* add slippage tolerance from transaction.info
parent 202c2662
import { TransactionReceipt } from '@ethersproject/abstract-provider' import {
import { TransactionEventHandlers } from '@uniswap/widgets' TradeType,
import { useMemo } from 'react' Transaction,
TransactionEventHandlers,
TransactionInfo,
TransactionType as WidgetTransactionType,
} from '@uniswap/widgets'
import { useWeb3React } from '@web3-react/core'
import { useCallback, useMemo } from 'react'
import { useTransactionAdder } from 'state/transactions/hooks'
import {
ExactInputSwapTransactionInfo,
ExactOutputSwapTransactionInfo,
TransactionType as AppTransactionType,
WrapTransactionInfo,
} from 'state/transactions/types'
import { currencyId } from 'utils/currencyId'
/** Integrates the Widget's transactions, showing the widget's transactions in the app. */ /** Integrates the Widget's transactions, showing the widget's transactions in the app. */
export function useSyncWidgetTransactions() { export function useSyncWidgetTransactions() {
// TODO(jfrankfurt): Integrate widget transactions with app transaction tracking. const { chainId } = useWeb3React()
const txHandlers: TransactionEventHandlers = useMemo( const addTransaction = useTransactionAdder()
() => ({
onTxSubmit: (hash: string, tx: unknown) => console.log('onTxSubmit'), const onTxSubmit = useCallback(
onTxSuccess: (hash: string, receipt: TransactionReceipt) => console.log('onTxSuccess'), (_hash: string, transaction: Transaction<TransactionInfo>) => {
onTxFail: (hash: string, receipt: TransactionReceipt) => console.log('onTxFail'), const { type, response } = transaction.info
}),
[] if (!type || !response) {
return
} else if (type === WidgetTransactionType.WRAP || type === WidgetTransactionType.UNWRAP) {
const { amount } = transaction.info
addTransaction(response, {
type: AppTransactionType.WRAP,
unwrapped: type === WidgetTransactionType.UNWRAP,
currencyAmountRaw: amount.quotient.toString(),
chainId,
} as WrapTransactionInfo)
} else if (type === WidgetTransactionType.SWAP) {
const { slippageTolerance, trade, tradeType } = transaction.info
const baseTxInfo = {
type: AppTransactionType.SWAP,
tradeType,
inputCurrencyId: currencyId(trade.inputAmount.currency),
outputCurrencyId: currencyId(trade.outputAmount.currency),
}
if (tradeType === TradeType.EXACT_OUTPUT) {
addTransaction(response, {
...baseTxInfo,
maximumInputCurrencyAmountRaw: trade.maximumAmountIn(slippageTolerance).quotient.toString(),
outputCurrencyAmountRaw: trade.outputAmount.quotient.toString(),
expectedInputCurrencyAmountRaw: trade.inputAmount.quotient.toString(),
} as ExactOutputSwapTransactionInfo)
} else {
addTransaction(response, {
...baseTxInfo,
inputCurrencyAmountRaw: trade.inputAmount.quotient.toString(),
expectedOutputCurrencyAmountRaw: trade.outputAmount.quotient.toString(),
minimumOutputCurrencyAmountRaw: trade.minimumAmountOut(slippageTolerance).quotient.toString(),
} as ExactInputSwapTransactionInfo)
}
}
},
[addTransaction, chainId]
) )
const txHandlers: TransactionEventHandlers = useMemo(() => ({ onTxSubmit }), [onTxSubmit])
return { transactions: { ...txHandlers } } return { transactions: { ...txHandlers } }
} }
...@@ -13,7 +13,7 @@ import { InterfaceTrade } from 'state/routing/types' ...@@ -13,7 +13,7 @@ import { InterfaceTrade } from 'state/routing/types'
import useGasPrice from './useGasPrice' import useGasPrice from './useGasPrice'
import useStablecoinPrice, { useStablecoinValue } from './useStablecoinPrice' import useStablecoinPrice, { useStablecoinValue } from './useStablecoinPrice'
const V3_SWAP_DEFAULT_SLIPPAGE = new Percent(50, 10_000) // .50% export const V3_SWAP_DEFAULT_SLIPPAGE = new Percent(50, 10_000) // .50%
const ONE_TENTHS_PERCENT = new Percent(10, 10_000) // .10% const ONE_TENTHS_PERCENT = new Percent(10, 10_000) // .10%
export const DEFAULT_AUTO_SLIPPAGE = ONE_TENTHS_PERCENT export const DEFAULT_AUTO_SLIPPAGE = ONE_TENTHS_PERCENT
const GAS_ESTIMATE_BUFFER = new Percent(10, 100) // 10% const GAS_ESTIMATE_BUFFER = new Percent(10, 100) // 10%
......
...@@ -149,7 +149,7 @@ export function LoadingTokenDetails() { ...@@ -149,7 +149,7 @@ export function LoadingTokenDetails() {
return ( return (
<TokenDetailsLayout> <TokenDetailsLayout>
<LoadingTokenDetail /> <LoadingTokenDetail />
<RightPanel></RightPanel> <RightPanel />
<Footer /> <Footer />
</TokenDetailsLayout> </TokenDetailsLayout>
) )
......
...@@ -4212,10 +4212,10 @@ ...@@ -4212,10 +4212,10 @@
"@uniswap/v3-core" "1.0.0" "@uniswap/v3-core" "1.0.0"
"@uniswap/v3-periphery" "^1.0.1" "@uniswap/v3-periphery" "^1.0.1"
"@uniswap/widgets@^2.5.0": "@uniswap/widgets@^2.7.0":
version "2.5.0" version "2.7.0"
resolved "https://registry.yarnpkg.com/@uniswap/widgets/-/widgets-2.5.0.tgz#61d72da0ca7bf2091b339df6e3546c9066b34245" resolved "https://registry.yarnpkg.com/@uniswap/widgets/-/widgets-2.7.0.tgz#01c306e0ce736383dd2a9b1acec6371d07c9ba80"
integrity sha512-uGFOTf5mzJPhccBf99RRQ4ExQqmgAKn5WbNr3ZrXm1yfjT8Qf4xI3TTa5BrpMlGYr5If4v0vDA3q4WpcQ3isyg== integrity sha512-PVcQRzjtJqcTMXArCQSe2BmQdq9hhBM7u0nQlj+d2V918mFhi4rVSET3UurwQEegcSNlTrZhGvXKEFeNEhpmFA==
dependencies: dependencies:
"@babel/runtime" "^7.17.0" "@babel/runtime" "^7.17.0"
"@fontsource/ibm-plex-mono" "^4.5.1" "@fontsource/ibm-plex-mono" "^4.5.1"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment