@@ -19,6 +19,7 @@ interface Asset {
19
19
}
20
20
21
21
function ReleaseDropdown ( ) {
22
+ const [ copy , setCopy ] = useState < string > ( "" ) ;
22
23
const [ releases , setReleases ] = useState < Release [ ] > ( [ ] ) ;
23
24
const [ selectedRelease , setSelectedRelease ] = useState < number | null > ( null ) ;
24
25
const [ selectedOS , setSelectedOS ] = useState < string > ( "" ) ;
@@ -42,6 +43,11 @@ function ReleaseDropdown() {
42
43
fetchReleases ( ) ;
43
44
} , [ ] ) ;
44
45
46
+ const onCopy = ( text ) => {
47
+ navigator . clipboard . writeText ( text ) ;
48
+ setCopy ( ( ) => text ) ;
49
+ } ;
50
+
45
51
useEffect ( ( ) => {
46
52
// Fetch OS names for the selected release
47
53
const fetchOSOptions = async ( ) => {
@@ -122,10 +128,11 @@ function ReleaseDropdown() {
122
128
} ;
123
129
124
130
const handleArchChange = ( event : React . ChangeEvent < HTMLSelectElement > ) => {
131
+ setCopy ( "" ) ;
125
132
setSelectedArch ( event . target . value ) ;
126
133
} ;
127
134
128
- const handleDownloadClick = ( ) => {
135
+ const handleDownloadClick = ( isCopy ?: boolean ) => {
129
136
if ( selectedRelease && selectedOS && selectedArch ) {
130
137
const fileName = `${ selectedOS } -${ selectedArch } .tar.gz` ;
131
138
const selectedReleaseData = releases . find (
@@ -138,10 +145,14 @@ function ReleaseDropdown() {
138
145
) ?. browser_download_url ;
139
146
if ( downloadUrl ) {
140
147
// Create a temporary link element and simulate click to trigger download
141
- const link = document . createElement ( "a" ) ;
142
- link . href = downloadUrl ;
143
- link . download = fileName ;
144
- link . click ( ) ;
148
+ if ( isCopy ) {
149
+ onCopy ( `wget ${ downloadUrl } ` ) ;
150
+ } else {
151
+ const link = document . createElement ( "a" ) ;
152
+ link . href = downloadUrl ;
153
+ link . download = fileName ;
154
+ link . click ( ) ;
155
+ }
145
156
} else {
146
157
console . error ( "Download URL not found for selected options." ) ;
147
158
}
@@ -193,11 +204,18 @@ function ReleaseDropdown() {
193
204
</ Box >
194
205
< Button
195
206
colorScheme = "primary"
196
- onClick = { handleDownloadClick }
207
+ onClick = { ( ) => handleDownloadClick ( ) }
197
208
isDisabled = { ! selectedArch }
198
209
>
199
210
Download
200
211
</ Button >
212
+ < Button
213
+ onClick = { ( ) => {
214
+ handleDownloadClick ( true ) ;
215
+ } }
216
+ >
217
+ { copy ? "Copied!" : "Copy Url" }
218
+ </ Button >
201
219
</ HStack >
202
220
) ;
203
221
}
0 commit comments