MP-3362: added Toaster explorer link (#430)
This commit is contained in:
parent
5bb87b6d27
commit
74e7c7e6a9
@ -2,13 +2,16 @@ import classNames from 'classnames'
|
||||
import { toast as createToast, Slide, ToastContainer } from 'react-toastify'
|
||||
import { mutate } from 'swr'
|
||||
|
||||
import { CheckCircled, Cross, CrossCircled } from 'components/Icons'
|
||||
import { CheckCircled, Cross, CrossCircled, ExternalLink } from 'components/Icons'
|
||||
import Text from 'components/Text'
|
||||
import { DEFAULT_SETTINGS } from 'constants/defaultSettings'
|
||||
import { EXPLORER_NAME, EXPLORER_TX_URL } from 'constants/explorer'
|
||||
import { REDUCE_MOTION_KEY } from 'constants/localStore'
|
||||
import useLocalStorage from 'hooks/useLocalStorage'
|
||||
import useStore from 'store'
|
||||
|
||||
import { TextLink } from './TextLink'
|
||||
|
||||
export default function Toaster() {
|
||||
const [reduceMotion] = useLocalStorage<boolean>(REDUCE_MOTION_KEY, DEFAULT_SETTINGS.reduceMotion)
|
||||
const toast = useStore((s) => s.toast)
|
||||
@ -23,9 +26,9 @@ export default function Toaster() {
|
||||
isError ? 'bg-error-bg/20' : 'bg-success-bg/20',
|
||||
)}
|
||||
>
|
||||
<div className='mb-4 flex w-full gap-2'>
|
||||
<div className='flex w-full gap-2 mb-4'>
|
||||
<div className={classNames('rounded-sm p-1.5', isError ? 'bg-error' : 'bg-success')}>
|
||||
<span className='block h-4 w-4 text-white'>
|
||||
<span className='block w-4 h-4 text-white'>
|
||||
{isError ? <CrossCircled /> : <CheckCircled />}
|
||||
</span>
|
||||
</div>
|
||||
@ -42,6 +45,20 @@ export default function Toaster() {
|
||||
<Text size='sm' className='font-bold text-white'>
|
||||
{toast.message}
|
||||
</Text>
|
||||
{toast.hash && (
|
||||
<TextLink
|
||||
href={`${EXPLORER_TX_URL}${toast.hash}`}
|
||||
target='_blank'
|
||||
className={classNames(
|
||||
'leading-4 underline mt-4 hover:no-underline hover:text-white',
|
||||
isError ? 'text-error' : 'text-success',
|
||||
)}
|
||||
title={`View on ${EXPLORER_NAME}`}
|
||||
>
|
||||
{`View on ${EXPLORER_NAME}`}
|
||||
<ExternalLink className='-mt-0.5 ml-2 inline w-3.5' />
|
||||
</TextLink>
|
||||
)}
|
||||
<div className='absolute right-6 top-8 '>
|
||||
<Cross className={classNames('h-2 w-2', isError ? 'text-error' : 'text-success')} />
|
||||
</div>
|
||||
@ -69,7 +86,7 @@ export default function Toaster() {
|
||||
transition={reduceMotion ? undefined : Slide}
|
||||
className='p-0'
|
||||
toastClassName='top-[73px] z-20 m-0 mb-4 flex w-full bg-transparent p-0'
|
||||
bodyClassName='p-0 m-0 w-full flex'
|
||||
bodyClassName='p-0 m-0 w-full flex -z-1'
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
@ -172,6 +172,7 @@ export default function SwapForm(props: Props) {
|
||||
isMax: sellAssetAmount.isEqualTo(maxSellAmount),
|
||||
})
|
||||
}, [
|
||||
removedLends,
|
||||
account?.id,
|
||||
buyAsset.denom,
|
||||
sellSideMarginThreshold,
|
||||
@ -306,4 +307,4 @@ export default function SwapForm(props: Props) {
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
6
src/constants/explorer.ts
Normal file
6
src/constants/explorer.ts
Normal file
@ -0,0 +1,6 @@
|
||||
import { IS_TESTNET } from 'constants/env'
|
||||
|
||||
export const EXPLORER_NAME = 'Mintscan'
|
||||
export const EXPLORER_TX_URL = IS_TESTNET
|
||||
? 'https://testnet.mintscan.io/osmosis-testnet/txs/'
|
||||
: 'https://www.mintscan.io/osmosis/transactions/'
|
@ -20,7 +20,6 @@ import { formatAmountWithSymbol } from 'utils/formatters'
|
||||
import getTokenOutFromSwapResponse from 'utils/getTokenOutFromSwapResponse'
|
||||
import { BN } from 'utils/helpers'
|
||||
|
||||
|
||||
function generateExecutionMessage(
|
||||
sender: string | undefined = '',
|
||||
contract: string,
|
||||
@ -48,6 +47,7 @@ export default function createBroadcastSlice(
|
||||
set({
|
||||
toast: {
|
||||
message: successMessage,
|
||||
hash: response.result.hash,
|
||||
},
|
||||
})
|
||||
} else {
|
||||
@ -56,6 +56,7 @@ export default function createBroadcastSlice(
|
||||
toast: {
|
||||
message: errorMessage ?? `Transaction failed: ${error}`,
|
||||
isError: true,
|
||||
hash: response.result.hash,
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -136,13 +137,17 @@ export default function createBroadcastSlice(
|
||||
if (response.result) {
|
||||
set({ createAccountModal: false })
|
||||
const id = getSingleValueFromBroadcastResult(response.result, 'wasm', 'token_id')
|
||||
set({ fundAccountModal: true, toast: { message: `Credit Account ${id} created` } })
|
||||
set({
|
||||
fundAccountModal: true,
|
||||
toast: { message: `Credit Account ${id} created`, hash: response.result.hash },
|
||||
})
|
||||
return id
|
||||
} else {
|
||||
set({
|
||||
createAccountModal: false,
|
||||
toast: {
|
||||
message: response.error ?? `Transaction failed: ${response.error}`,
|
||||
hash: response.result.hash,
|
||||
isError: true,
|
||||
},
|
||||
})
|
||||
@ -529,4 +534,4 @@ export default function createBroadcastSlice(
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
4
src/types/interfaces/store/broadcast.d.ts
vendored
4
src/types/interfaces/store/broadcast.d.ts
vendored
@ -40,7 +40,7 @@ interface BroadcastSlice {
|
||||
slippage: number
|
||||
isMax?: boolean
|
||||
}) => ExecutableTx
|
||||
toast: { message: string; isError?: boolean; title?: string } | null
|
||||
toast: { message: string; isError?: boolean; title?: string; hash?: string } | null
|
||||
unlock: (options: {
|
||||
accountId: string
|
||||
vault: DepositedVault
|
||||
@ -53,4 +53,4 @@ interface BroadcastSlice {
|
||||
borrow: BNCoin[]
|
||||
reclaims: ActionCoin[]
|
||||
}) => Promise<boolean>
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user