68
68
</div >
69
69
70
70
<!-- incoming file transfer offer -->
71
- <div v-if =" fileTransfer.direction === 'incoming' && fileTransfer.status === 'offering'" class =" flex space-x-1" >
72
- <TextButton @click =" acceptFileTransfer(fileTransfer)" class =" bg-green-500 hover:bg-green-400" >Accept</TextButton >
73
- <TextButton @click =" rejectFileTransfer(fileTransfer)" class =" bg-red-500 hover:bg-red-400" >Reject</TextButton >
71
+ <div v-if =" fileTransfer.direction === 'incoming' && fileTransfer.status === 'offering'" >
72
+ <div v-if =" !isAcceptingFileTransfer(fileTransfer.id)" class =" flex space-x-1" >
73
+ <TextButton @click =" acceptFileTransfer(fileTransfer)" class =" bg-green-500 hover:bg-green-400" >Accept</TextButton >
74
+ <TextButton @click =" rejectFileTransfer(fileTransfer)" class =" bg-red-500 hover:bg-red-400" >Reject</TextButton >
75
+ </div >
76
+ <div v-else class =" flex text-gray-500 space-x-1" >
77
+ <div class =" my-auto" >
78
+ <svg class =" animate-spin size-5" xmlns =" http://www.w3.org/2000/svg" fill =" none" viewBox =" 0 0 24 24" >
79
+ <circle class =" opacity-25" cx =" 12" cy =" 12" r =" 10" stroke =" currentColor" stroke-width =" 4" ></circle >
80
+ <path class =" opacity-75" fill =" currentColor" d =" M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" ></path >
81
+ </svg >
82
+ </div >
83
+ <div class =" my-auto" >
84
+ Accepting
85
+ </div >
86
+ </div >
74
87
</div >
75
88
76
89
<!-- action buttons -->
@@ -149,6 +162,11 @@ export default {
149
162
}
150
163
151
164
},
165
+ data () {
166
+ return {
167
+ isAcceptingFileTransferIds: [],
168
+ };
169
+ },
152
170
methods: {
153
171
hasPublicKey : (nodeId ) => NodeUtils .hasPublicKey (nodeId),
154
172
getNodeLongName : (nodeId ) => NodeUtils .getNodeLongName (nodeId),
@@ -188,6 +206,20 @@ export default {
188
206
setTimeout (() => URL .revokeObjectURL (objectUrl), 10000 );
189
207
190
208
},
209
+ isAcceptingFileTransfer (fileTransferId ) {
210
+ return this .isAcceptingFileTransferIds .includes (fileTransferId);
211
+ },
212
+ setIsAcceptingFileTransfer (fileTransferId , isAcceptingFileTransfer ) {
213
+ if (isAcceptingFileTransfer){
214
+ // add to list of ids
215
+ this .isAcceptingFileTransferIds .push (fileTransferId);
216
+ } else {
217
+ // remove from list of ids
218
+ this .isAcceptingFileTransferIds = this .isAcceptingFileTransferIds .filter ((existingFileTransferId ) => {
219
+ return existingFileTransferId !== fileTransferId;
220
+ });
221
+ }
222
+ },
191
223
async offerFileTransfer () {
192
224
193
225
// do nothing if file is not selected
@@ -207,9 +239,12 @@ export default {
207
239
},
208
240
async acceptFileTransfer (fileTransfer ) {
209
241
try {
242
+ this .setIsAcceptingFileTransfer (fileTransfer .id , true );
210
243
await FileTransferrer .acceptFileTransfer (fileTransfer);
211
244
} catch (e) {
212
245
DialogUtils .showErrorAlert (e);
246
+ } finally {
247
+ this .setIsAcceptingFileTransfer (fileTransfer .id , false );
213
248
}
214
249
},
215
250
async rejectFileTransfer (fileTransfer ) {
0 commit comments