handlerExportData.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import browser from 'webextension-polyfill';
  2. import { default as dataExporter, files } from '@/utils/dataExporter';
  3. async function exportData({ data, id }, { refData }) {
  4. const dataToExport = data.dataToExport || 'data-columns';
  5. let payload = refData.table;
  6. if (dataToExport === 'google-sheets') {
  7. payload = refData.googleSheets[data.refKey] || [];
  8. } else if (dataToExport === 'variable') {
  9. payload = refData.variables[data.variableName] || [];
  10. if (!Array.isArray(payload)) {
  11. payload = [payload];
  12. if (data.type === 'csv' && typeof payload[0] !== 'object')
  13. payload = [payload];
  14. }
  15. }
  16. const hasDownloadAccess = await browser.permissions.contains({
  17. permissions: ['downloads'],
  18. });
  19. const blobUrl = dataExporter(payload, {
  20. ...data,
  21. csvOptions: {
  22. delimiter: data.csvDelimiter || ',',
  23. },
  24. returnUrl: hasDownloadAccess,
  25. });
  26. if (hasDownloadAccess) {
  27. const filename = `${data.name || 'unnamed'}${files[data.type].ext}`;
  28. const options = {
  29. filename,
  30. conflictAction: data.onConflict || 'uniquify',
  31. };
  32. await browser.downloads.download({
  33. ...options,
  34. url: blobUrl,
  35. });
  36. }
  37. return {
  38. data: '',
  39. nextBlockId: this.getBlockConnections(id),
  40. };
  41. }
  42. export default exportData;