handler-export-data.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import browser from 'webextension-polyfill';
  2. import { default as dataExporter, files } from '@/utils/data-exporter';
  3. import { getBlockConnection } from '../helper';
  4. async function exportData({ data, outputs }, { refData }) {
  5. const nextBlockId = getBlockConnection({ outputs });
  6. try {
  7. const dataToExport = data.dataToExport || 'data-columns';
  8. let payload = refData.table;
  9. if (dataToExport === 'google-sheets') {
  10. payload = refData.googleSheets[data.refKey] || [];
  11. } else if (dataToExport === 'variable') {
  12. payload = refData.variables[data.variableName] || [];
  13. if (!Array.isArray(payload)) {
  14. payload = [payload];
  15. if (data.type === 'csv' && typeof payload[0] !== 'object')
  16. payload = [payload];
  17. }
  18. }
  19. const hasDownloadAccess = await browser.permissions.contains({
  20. permissions: ['downloads'],
  21. });
  22. const blobUrl = dataExporter(payload, {
  23. ...data,
  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,
  40. };
  41. } catch (error) {
  42. error.nextBlockId = nextBlockId;
  43. throw error;
  44. }
  45. }
  46. export default exportData;