1+ import { useIsMutating } from '@tanstack/react-query' ;
12import styled from 'styled-components' ;
23
34import Button from 'src/domains/misc/components/Button' ;
45import { useModal } from 'src/domains/misc/components/Modal' ;
56import Skeleton from 'src/domains/misc/components/Skeleton' ;
67import TokenIcon from 'src/domains/misc/components/TokenIcon' ;
8+ import { MUTATION_KEYS } from 'src/domains/misc/utils/getQueryKey.ts' ;
79import isPresent from 'src/domains/misc/utils/isPresent' ;
810import formatBalance from 'src/domains/numbers/utils/formatBalance' ;
911import useShielderStore from 'src/domains/shielder/stores/shielder' ;
@@ -37,11 +39,32 @@ const TokenListItem = ({ token }: Props) => {
3739
3840 const selectedToken = { ...token , symbol, decimals, balance : activeBalance } ;
3941
40- const { open : openShieldModal } = useModal (
41-
42- ) ;
42+ const { open : openShieldModal } = useModal ( ) ;
4343 const { open : openSendModal } = useModal ( ) ;
4444
45+ const isShielding = ! ! useIsMutating ( {
46+ predicate : mutation => {
47+ const variables = mutation . state . variables as { token : Token } | undefined ;
48+ if ( ! variables ?. token ) return false ;
49+ return mutation . options . mutationKey ?. [ 0 ] === MUTATION_KEYS . shield &&
50+ variables . token . address === token . address &&
51+ variables . token . isNative === token . isNative ;
52+ } ,
53+ } ) ;
54+
55+ const isWithdrawing = ! ! useIsMutating ( {
56+ predicate : mutation => {
57+ const variables = mutation . state . variables as { token : Token } | undefined ;
58+ if ( ! variables ?. token ) return false ;
59+ return mutation . options . mutationKey ?. [ 0 ] === MUTATION_KEYS . withdraw &&
60+ variables . token . address === token . address &&
61+ variables . token . isNative === token . isNative ;
62+ } ,
63+ } ) ;
64+
65+ const isProcessing = isShielding || isWithdrawing ;
66+ const processingText = isShielding ? 'Shielding' : isWithdrawing ? 'Sending privately' : undefined ;
67+
4568 return (
4669 < Container >
4770 < TokenIcon size = { 40 } Icon = { token . icon } />
@@ -60,21 +83,23 @@ const TokenListItem = ({ token }: Props) => {
6083 < Button
6184 variant = "primary"
6285 size = "small"
86+ isLoading = { isProcessing }
6387 leftIcon = "Shielded"
64- disabled = { isDisabled }
88+ disabled = { isDisabled || isProcessing }
6589 onClick = { ( ) => void openShieldModal ( < ShieldModal token = { selectedToken } /> ) }
6690 >
67- Shield
91+ { processingText ?? ' Shield' }
6892 </ Button >
6993 ) : (
7094 < Button
7195 variant = "primary"
7296 size = "small"
7397 leftIcon = "ArrowUpRight"
74- disabled = { isDisabled }
98+ isLoading = { isProcessing }
99+ disabled = { isDisabled || isProcessing }
75100 onClick = { ( ) => void openSendModal ( < SendModal token = { selectedToken } /> ) }
76101 >
77- Send
102+ { processingText ?? ' Send' }
78103 </ Button >
79104 ) }
80105 </ Container >
0 commit comments