"use strict";
class Export_Button extends Component {
on_ready() {
const that = this;
this.$.find('[data-format]').on('click', e => {
e.preventDefault();
const format = $(e.currentTarget).attr('data-format');
that.export_data(format);
});
}
async export_data(format) {
if (this.args.on_export) {
// Custom export handler
this.args.on_export(format);
} else if (this.args.data) {
// Auto-export provided data
this.auto_export(format, this.args.data);
} else if (this.args.export_url) {
// Fetch export from URL
const url = `${this.args.export_url}?format=${format}`;
window.location.href = url;
}
}
auto_export(format, data) {
if (format === 'csv') {
this.export_csv(data);
} else if (format === 'json') {
this.export_json(data);
} else {
console.warn('Auto-export only supports CSV and JSON. Implement custom handler for other formats.');
}
}
export_csv(data) {
if (data.length === 0) return;
// Generate CSV
const headers = Object.keys(data[0]);
let csv = headers.join(',') + '\n';
data.forEach(row => {
const values = headers.map(header => {
const value = row[header] || '';
return `"${str(value).replace(/"/g, '""')}"`;
});
csv += values.join(',') + '\n';
});
// Download
const blob = new Blob([csv], {
type: 'text/csv'
});
const url = window.URL.createObjectURL(blob);
const $a = $('');
$a.attr('href', url);
$a.attr('download', `export_${Date.now()}.csv`);
$a[0].click();
window.URL.revokeObjectURL(url);
}
export_json(data) {
const json = json_encode(data);
const blob = new Blob([json], {
type: 'application/json'
});
const url = window.URL.createObjectURL(blob);
const $a = $('');
$a.attr('href', url);
$a.attr('download', `export_${Date.now()}.json`);
$a[0].click();
window.URL.revokeObjectURL(url);
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHBvcnRfQnV0dG9uIiwiSnFodG1sX0NvbXBvbmVudCIsIm9uX3JlYWR5IiwidGhhdCIsIiQiLCJmaW5kIiwib24iLCJlIiwicHJldmVudERlZmF1bHQiLCJmb3JtYXQiLCJjdXJyZW50VGFyZ2V0IiwiYXR0ciIsImV4cG9ydF9kYXRhIiwiYXJncyIsIm9uX2V4cG9ydCIsImRhdGEiLCJhdXRvX2V4cG9ydCIsImV4cG9ydF91cmwiLCJ1cmwiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJleHBvcnRfY3N2IiwiZXhwb3J0X2pzb24iLCJjb25zb2xlIiwid2FybiIsImxlbmd0aCIsImhlYWRlcnMiLCJPYmplY3QiLCJrZXlzIiwiY3N2Iiwiam9pbiIsImZvckVhY2giLCJyb3ciLCJ2YWx1ZXMiLCJtYXAiLCJoZWFkZXIiLCJ2YWx1ZSIsInN0ciIsInJlcGxhY2UiLCJibG9iIiwiQmxvYiIsInR5cGUiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCIkYSIsIkRhdGUiLCJub3ciLCJjbGljayIsInJldm9rZU9iamVjdFVSTCIsImpzb24iLCJqc29uX2VuY29kZSJdLCJzb3VyY2VzIjpbInJzeC90aGVtZS9jb21wb25lbnRzL19hcmNoaXZlZC91bmZpbmlzaGVkL0V4cG9ydF9CdXR0b24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgRXhwb3J0X0J1dHRvbiBleHRlbmRzIEpxaHRtbF9Db21wb25lbnQge1xuICAgIG9uX3JlYWR5KCkge1xuICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICAgICAgdGhpcy4kLmZpbmQoJ1tkYXRhLWZvcm1hdF0nKS5vbignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gJChlLmN1cnJlbnRUYXJnZXQpLmF0dHIoJ2RhdGEtZm9ybWF0Jyk7XG4gICAgICAgICAgICB0aGF0LmV4cG9ydF9kYXRhKGZvcm1hdCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGV4cG9ydF9kYXRhKGZvcm1hdCkge1xuICAgICAgICBpZiAodGhpcy5hcmdzLm9uX2V4cG9ydCkge1xuICAgICAgICAgICAgLy8gQ3VzdG9tIGV4cG9ydCBoYW5kbGVyXG4gICAgICAgICAgICB0aGlzLmFyZ3Mub25fZXhwb3J0KGZvcm1hdCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcmdzLmRhdGEpIHtcbiAgICAgICAgICAgIC8vIEF1dG8tZXhwb3J0IHByb3ZpZGVkIGRhdGFcbiAgICAgICAgICAgIHRoaXMuYXV0b19leHBvcnQoZm9ybWF0LCB0aGlzLmFyZ3MuZGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcmdzLmV4cG9ydF91cmwpIHtcbiAgICAgICAgICAgIC8vIEZldGNoIGV4cG9ydCBmcm9tIFVSTFxuICAgICAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5hcmdzLmV4cG9ydF91cmx9P2Zvcm1hdD0ke2Zvcm1hdH1gO1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhdXRvX2V4cG9ydChmb3JtYXQsIGRhdGEpIHtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2NzdicpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0X2NzdihkYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICAgICAgdGhpcy5leHBvcnRfanNvbihkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQXV0by1leHBvcnQgb25seSBzdXBwb3J0cyBDU1YgYW5kIEpTT04uIEltcGxlbWVudCBjdXN0b20gaGFuZGxlciBmb3Igb3RoZXIgZm9ybWF0cy4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydF9jc3YoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICAvLyBHZW5lcmF0ZSBDU1ZcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xuICAgICAgICBsZXQgY3N2ID0gaGVhZGVycy5qb2luKCcsJykgKyAnXFxuJztcblxuICAgICAgICBkYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGhlYWRlcnMubWFwKGhlYWRlciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByb3dbaGVhZGVyXSB8fCAnJztcbiAgICAgICAgICAgICAgICByZXR1cm4gYFwiJHtzdHIodmFsdWUpLnJlcGxhY2UoL1wiL2csICdcIlwiJyl9XCJgO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjc3YgKz0gdmFsdWVzLmpvaW4oJywnKSArICdcXG4nO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBEb3dubG9hZFxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2Nzdl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgIGNvbnN0ICRhID0gJCgnPGE+Jyk7XG4gICAgICAgICRhLmF0dHIoJ2hyZWYnLCB1cmwpO1xuICAgICAgICAkYS5hdHRyKCdkb3dubG9hZCcsIGBleHBvcnRfJHtEYXRlLm5vdygpfS5jc3ZgKTtcbiAgICAgICAgJGFbMF0uY2xpY2soKTtcbiAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICB9XG5cbiAgICBleHBvcnRfanNvbihkYXRhKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBqc29uX2VuY29kZShkYXRhKTtcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtqc29uXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XG4gICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICBjb25zdCAkYSA9ICQoJzxhPicpO1xuICAgICAgICAkYS5hdHRyKCdocmVmJywgdXJsKTtcbiAgICAgICAgJGEuYXR0cignZG93bmxvYWQnLCBgZXhwb3J0XyR7RGF0ZS5ub3coKX0uanNvbmApO1xuICAgICAgICAkYVswXS5jbGljaygpO1xuICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFNQSxhQUFhLFNBQVNDLGdCQUFnQixDQUFDO0VBQ3pDQyxRQUFRQSxDQUFBLEVBQUc7SUFDUCxNQUFNQyxJQUFJLEdBQUcsSUFBSTtJQUNqQixJQUFJLENBQUNDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDQyxFQUFFLENBQUMsT0FBTyxFQUFHQyxDQUFDLElBQUs7TUFDNUNBLENBQUMsQ0FBQ0MsY0FBYyxDQUFDLENBQUM7TUFDbEIsTUFBTUMsTUFBTSxHQUFHTCxDQUFDLENBQUNHLENBQUMsQ0FBQ0csYUFBYSxDQUFDLENBQUNDLElBQUksQ0FBQyxhQUFhLENBQUM7TUFDckRSLElBQUksQ0FBQ1MsV0FBVyxDQUFDSCxNQUFNLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0VBQ047RUFFQSxNQUFNRyxXQUFXQSxDQUFDSCxNQUFNLEVBQUU7SUFDdEIsSUFBSSxJQUFJLENBQUNJLElBQUksQ0FBQ0MsU0FBUyxFQUFFO01BQ3JCO01BQ0EsSUFBSSxDQUFDRCxJQUFJLENBQUNDLFNBQVMsQ0FBQ0wsTUFBTSxDQUFDO0lBQy9CLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ0ksSUFBSSxDQUFDRSxJQUFJLEVBQUU7TUFDdkI7TUFDQSxJQUFJLENBQUNDLFdBQVcsQ0FBQ1AsTUFBTSxFQUFFLElBQUksQ0FBQ0ksSUFBSSxDQUFDRSxJQUFJLENBQUM7SUFDNUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDRixJQUFJLENBQUNJLFVBQVUsRUFBRTtN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