@@ -32,6 +32,8 @@ import { ExternalLink } from '../../../components/icon';
3232import { Amount } from '../../../components/amount/amount' ;
3333import { FiatConversion } from '../../../components/rates/rates' ;
3434import { getScriptName } from '../utils' ;
35+ import { Message } from '../../../components/message/message' ;
36+ import { Badge } from '../../../components/badge/badge' ;
3537import style from './utxos.module.css' ;
3638
3739export type TSelectedUTXOs = {
@@ -56,6 +58,7 @@ export const UTXOs = ({
5658 const { t } = useTranslation ( ) ;
5759 const [ utxos , setUtxos ] = useState < TUTXO [ ] > ( [ ] ) ;
5860 const [ selectedUTXOs , setSelectedUTXOs ] = useState < TSelectedUTXOs > ( { } ) ;
61+ const [ reusedAddressUTXOs , setReusedAddressUTXOs ] = useState ( 0 ) ;
5962
6063 useEffect ( ( ) => {
6164 getUTXOs ( accountCode ) . then ( setUtxos ) ;
@@ -71,14 +74,22 @@ export const UTXOs = ({
7174 return ( ) => unsubscribe ( ) ;
7275 } , [ accountCode ] ) ;
7376
74- const handleUTXOChange = ( event : ChangeEvent < HTMLInputElement > ) => {
77+ const handleUTXOChange = (
78+ event : ChangeEvent < HTMLInputElement > ,
79+ utxo : TUTXO ,
80+ ) => {
7581 const target = event . target ;
76- const outPoint = target . dataset . outpoint as string ;
7782 const proposedUTXOs = Object . assign ( { } , selectedUTXOs ) ;
7883 if ( target . checked ) {
79- proposedUTXOs [ outPoint ] = true ;
84+ proposedUTXOs [ utxo . outPoint ] = true ;
85+ if ( utxo . addressReused ) {
86+ setReusedAddressUTXOs ( reusedAddressUTXOs + 1 ) ;
87+ }
8088 } else {
81- delete proposedUTXOs [ outPoint ] ;
89+ delete proposedUTXOs [ utxo . outPoint ] ;
90+ if ( utxo . addressReused ) {
91+ setReusedAddressUTXOs ( reusedAddressUTXOs - 1 ) ;
92+ }
8293 }
8394 setSelectedUTXOs ( proposedUTXOs ) ;
8495 onChange ( proposedUTXOs ) ;
@@ -98,8 +109,7 @@ export const UTXOs = ({
98109 < Checkbox
99110 checked = { ! ! selectedUTXOs [ utxo . outPoint ] }
100111 id = { 'utxo-' + utxo . outPoint }
101- data-outpoint = { utxo . outPoint }
102- onChange = { handleUTXOChange } >
112+ onChange = { event => handleUTXOChange ( event , utxo ) } >
103113 { utxo . note && (
104114 < div className = { style . note } >
105115 < strong > { utxo . note } { ' ' } </ strong >
@@ -124,6 +134,14 @@ export const UTXOs = ({
124134 < span className = { style . shrink } >
125135 { utxo . address }
126136 </ span >
137+ < div className = "m-left-quarter" >
138+ { utxo . addressReused ?
139+ < Badge type = "danger" >
140+ { t ( 'send.coincontrol.addressReused' ) }
141+ </ Badge > :
142+ null
143+ }
144+ </ div >
127145 </ div >
128146 < div className = { style . transaction } >
129147 < span className = { style . label } >
@@ -155,6 +173,13 @@ export const UTXOs = ({
155173 title = { t ( 'send.coincontrol.title' ) }
156174 large
157175 onClose = { onClose } >
176+ < div >
177+ { ( reusedAddressUTXOs > 0 ) && (
178+ < Message type = "warning" >
179+ { t ( 'warning.coincontrol' ) }
180+ </ Message >
181+ ) }
182+ </ div >
158183 < div >
159184 { allScriptTypes . map ( renderUTXOs ) }
160185 < div className = "buttons text-center m-top-none m-bottom-half" >
0 commit comments