mirror of
https://github.com/basicswap/basicswap.git
synced 2025-05-06 12:52:17 +00:00
141 lines
4.6 KiB
JavaScript
141 lines
4.6 KiB
JavaScript
const BidExporter = {
|
|
toCSV(bids, type) {
|
|
if (!bids || !bids.length) {
|
|
return 'No data to export';
|
|
}
|
|
|
|
const isSent = type === 'sent';
|
|
|
|
const headers = [
|
|
'Date/Time',
|
|
'Bid ID',
|
|
'Offer ID',
|
|
'From Address',
|
|
isSent ? 'You Send Amount' : 'You Receive Amount',
|
|
isSent ? 'You Send Coin' : 'You Receive Coin',
|
|
isSent ? 'You Receive Amount' : 'You Send Amount',
|
|
isSent ? 'You Receive Coin' : 'You Send Coin',
|
|
'Status',
|
|
'Created At',
|
|
'Expires At'
|
|
];
|
|
|
|
let csvContent = headers.join(',') + '\n';
|
|
|
|
bids.forEach(bid => {
|
|
const row = [
|
|
`"${formatTime(bid.created_at)}"`,
|
|
`"${bid.bid_id}"`,
|
|
`"${bid.offer_id}"`,
|
|
`"${bid.addr_from}"`,
|
|
isSent ? bid.amount_from : bid.amount_to,
|
|
`"${isSent ? bid.coin_from : bid.coin_to}"`,
|
|
isSent ? bid.amount_to : bid.amount_from,
|
|
`"${isSent ? bid.coin_to : bid.coin_from}"`,
|
|
`"${bid.bid_state}"`,
|
|
bid.created_at,
|
|
bid.expire_at
|
|
];
|
|
|
|
csvContent += row.join(',') + '\n';
|
|
});
|
|
|
|
return csvContent;
|
|
},
|
|
|
|
download(content, filename) {
|
|
try {
|
|
const blob = new Blob([content], { type: 'text/csv;charset=utf-8;' });
|
|
|
|
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
|
|
window.navigator.msSaveOrOpenBlob(blob, filename);
|
|
return;
|
|
}
|
|
|
|
const url = URL.createObjectURL(blob);
|
|
const link = document.createElement('a');
|
|
|
|
link.href = url;
|
|
link.download = filename;
|
|
link.style.display = 'none';
|
|
|
|
document.body.appendChild(link);
|
|
link.click();
|
|
document.body.removeChild(link);
|
|
|
|
setTimeout(() => {
|
|
URL.revokeObjectURL(url);
|
|
}, 100);
|
|
} catch (error) {
|
|
console.error('Error downloading CSV:', error);
|
|
|
|
const csvData = 'data:text/csv;charset=utf-8,' + encodeURIComponent(content);
|
|
const link = document.createElement('a');
|
|
link.setAttribute('href', csvData);
|
|
link.setAttribute('download', filename);
|
|
link.style.display = 'none';
|
|
|
|
document.body.appendChild(link);
|
|
link.click();
|
|
document.body.removeChild(link);
|
|
}
|
|
},
|
|
|
|
exportCurrentView() {
|
|
const type = state.currentTab;
|
|
const data = state.data[type];
|
|
|
|
if (!data || !data.length) {
|
|
alert('No data to export');
|
|
return;
|
|
}
|
|
|
|
const csvContent = this.toCSV(data, type);
|
|
|
|
const now = new Date();
|
|
const dateStr = now.toISOString().split('T')[0];
|
|
const filename = `bsx_${type}_bids_${dateStr}.csv`;
|
|
|
|
this.download(csvContent, filename);
|
|
}
|
|
};
|
|
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
setTimeout(function() {
|
|
if (typeof state !== 'undefined' && typeof EventManager !== 'undefined') {
|
|
const exportSentButton = document.getElementById('exportSentBids');
|
|
if (exportSentButton) {
|
|
EventManager.add(exportSentButton, 'click', (e) => {
|
|
e.preventDefault();
|
|
state.currentTab = 'sent';
|
|
BidExporter.exportCurrentView();
|
|
});
|
|
}
|
|
|
|
const exportReceivedButton = document.getElementById('exportReceivedBids');
|
|
if (exportReceivedButton) {
|
|
EventManager.add(exportReceivedButton, 'click', (e) => {
|
|
e.preventDefault();
|
|
state.currentTab = 'received';
|
|
BidExporter.exportCurrentView();
|
|
});
|
|
}
|
|
}
|
|
}, 500);
|
|
});
|
|
|
|
const originalCleanup = window.cleanup || function(){};
|
|
window.cleanup = function() {
|
|
originalCleanup();
|
|
|
|
const exportSentButton = document.getElementById('exportSentBids');
|
|
const exportReceivedButton = document.getElementById('exportReceivedBids');
|
|
|
|
if (exportSentButton && typeof EventManager !== 'undefined') {
|
|
EventManager.remove(exportSentButton, 'click');
|
|
}
|
|
|
|
if (exportReceivedButton && typeof EventManager !== 'undefined') {
|
|
EventManager.remove(exportReceivedButton, 'click');
|
|
}
|
|
};
|