1+ import { useState } from 'react' ;
2+ import Separator from '../Separator' ;
3+ import { CoNET_Data } from '../../utils/globals' ;
4+ import Skeleton from '../Skeleton' ;
5+
6+ import { ReactComponent as VisibilityOnIcon } from "./assets/visibility-on.svg" ;
7+ import { ReactComponent as VisibilityOffIcon } from "./assets/visibility-off.svg" ;
8+
9+ let copyTimeoutId : NodeJS . Timeout ;
10+
11+ export default function CopyAccountInfo ( { wallet } : any ) {
12+ const [ copied , setCopied ] = useState ( {
13+ address : "" ,
14+ info : "" ,
15+ } ) ;
16+
17+ const [ isAddressHidden , setIsAddressHidden ] = useState ( true ) ;
18+ const [ isKeyHidden , setIsKeyHidden ] = useState ( true ) ;
19+ const [ isWordsHidden , setIsWordsHidden ] = useState ( true ) ;
20+
21+ function handleCopy ( info : string ) {
22+ let value = '' ;
23+
24+ if ( info === 'address' )
25+ value = wallet . keyID
26+ else if ( info === 'key' )
27+ value = wallet . privateKeyArmor
28+ else if ( info === 'words' )
29+ value = CoNET_Data ?. mnemonicPhrase || ''
30+
31+ navigator . clipboard . writeText ( value ) ;
32+ setCopied ( { address : value , info } ) ;
33+
34+ if ( copyTimeoutId )
35+ clearTimeout ( copyTimeoutId )
36+
37+ copyTimeoutId = setTimeout ( ( ) => setCopied ( {
38+ address : '' ,
39+ info : '' ,
40+ } ) , 3000 ) ;
41+ }
42+
43+ return (
44+ < >
45+ < div className = "copy-div" >
46+ { wallet ?. keyID ?
47+ < >
48+ < div className = "copy-text" >
49+ < p > Wallet Address</ p >
50+ {
51+ isAddressHidden ?
52+ < div style = { { filter : 'blur(3px)' } } >
53+ < span > { wallet . keyID } </ span >
54+ </ div >
55+ :
56+ < span > { wallet . keyID } </ span >
57+ }
58+ </ div >
59+ < div className = "button-list" >
60+ < button onClick = { ( ) => handleCopy ( "address" ) } >
61+ {
62+ ( copied . address === wallet ?. keyID && copied . info === "address" ) ? (
63+ < img src = "/assets/check.svg" alt = "Copy icon" />
64+ ) : (
65+ < img src = "/assets/copy-purple.svg" alt = "Copy icon" />
66+ )
67+ }
68+ </ button >
69+ < button className = { isAddressHidden ? "hidden" : "" } onClick = { ( ) => setIsAddressHidden ( ( prev ) => ! prev ) } >
70+ {
71+ isAddressHidden ? < VisibilityOffIcon /> : < VisibilityOnIcon />
72+ }
73+ </ button >
74+ </ div >
75+ </ >
76+ : < Skeleton width = '100%' height = '20px' />
77+ }
78+ </ div >
79+ < Separator />
80+ < div className = "copy-div" >
81+ { wallet ?. privateKeyArmor ?
82+ < >
83+ < div className = "copy-text" >
84+ < p > Private Key</ p >
85+ {
86+ isKeyHidden ?
87+ < div style = { { filter : 'blur(3px)' } } >
88+ < span > { wallet . privateKeyArmor } </ span >
89+ </ div >
90+ : < span > { wallet . privateKeyArmor } </ span >
91+ }
92+ </ div >
93+ < div className = "button-list" >
94+ < button onClick = { ( ) => handleCopy ( "key" ) } >
95+ {
96+ ( copied . address === wallet ?. privateKeyArmor && copied . info === "key" ) ? (
97+ < img src = "/assets/check.svg" alt = "Copy icon" />
98+ ) : (
99+ < img src = "/assets/copy-purple.svg" alt = "Copy icon" />
100+ )
101+ }
102+ </ button >
103+ < button className = { isKeyHidden ? "hidden" : "" } onClick = { ( ) => setIsKeyHidden ( ( prev ) => ! prev ) } >
104+ {
105+ isKeyHidden ? < VisibilityOffIcon /> : < VisibilityOnIcon />
106+ }
107+ </ button >
108+ </ div >
109+ </ >
110+ : < Skeleton width = '100%' height = '20px' />
111+ }
112+ </ div >
113+ < Separator />
114+ < div className = "copy-div" >
115+ { CoNET_Data ?. mnemonicPhrase ?
116+ < >
117+ < div className = "copy-text" >
118+ < p > Recovery Phrase</ p >
119+ {
120+ isWordsHidden ?
121+ < div style = { { filter : 'blur(3px)' } } >
122+ < span > { CoNET_Data ?. mnemonicPhrase || '' } </ span >
123+ </ div >
124+ :
125+ < span > { CoNET_Data ?. mnemonicPhrase || '' } </ span >
126+ }
127+ </ div >
128+ < div className = "button-list" >
129+ < button onClick = { ( ) => handleCopy ( "words" ) } >
130+ {
131+ ( copied . address === CoNET_Data ?. mnemonicPhrase && copied . info === "words" ) ? (
132+ < img src = "/assets/check.svg" alt = "Copy icon" />
133+ ) : (
134+ < img src = "/assets/copy-purple.svg" alt = "Copy icon" />
135+ )
136+ }
137+ </ button >
138+ < button className = { isWordsHidden ? "hidden" : "" } onClick = { ( ) => setIsWordsHidden ( ( prev ) => ! prev ) } >
139+ {
140+ isWordsHidden ? < VisibilityOffIcon /> : < VisibilityOnIcon />
141+ }
142+ </ button >
143+ </ div >
144+ </ >
145+ : < Skeleton width = '20px' height = '20px' />
146+ }
147+ </ div >
148+ </ >
149+ )
150+ }
0 commit comments