Browse Source

feat: export variable

Ahmad Kholid 3 years ago
parent
commit
4aa1b961cc

+ 9 - 0
src/background/workflow-engine/blocks-handler/handler-export-data.js

@@ -11,6 +11,15 @@ async function exportData({ data, outputs }) {
 
     if (dataToExport === 'google-sheets') {
       payload = this.referenceData.googleSheets[data.refKey] || [];
+    } else if (dataToExport === 'variable') {
+      payload = this.referenceData.variables[data.variableName] || [];
+
+      if (!Array.isArray(payload)) {
+        payload = [payload];
+
+        if (data.type === 'csv' && typeof payload[0] !== 'object')
+          payload = [payload];
+      }
     }
 
     const hasDownloadAccess = await browser.permissions.contains({

+ 17 - 9
src/components/newtab/workflow/edit/EditExportData.vue

@@ -16,6 +16,22 @@
         {{ t(`workflow.blocks.export-data.dataToExport.options.${option}`) }}
       </option>
     </ui-select>
+    <ui-input
+      v-if="data.dataToExport === 'google-sheets'"
+      :model-value="data.refKey"
+      :title="t('workflow.blocks.export-data.refKey')"
+      :placeholder="t('workflow.blocks.export-data.refKey')"
+      class="w-full mt-2"
+      @change="updateData({ refKey: $event })"
+    />
+    <ui-input
+      v-if="data.dataToExport === 'variable'"
+      :model-value="data.variableName"
+      :title="t('workflow.variables.name')"
+      :placeholder="t('workflow.variables.name')"
+      class="w-full mt-2"
+      @change="updateData({ variableName: $event })"
+    />
     <ui-autocomplete
       :items="autocomplete"
       :trigger-char="['{{', '}}']"
@@ -43,14 +59,6 @@
         {{ t(`workflow.blocks.base.downloads.onConflict.${item}`) }}
       </option>
     </ui-select>
-    <ui-input
-      v-if="data.dataToExport === 'google-sheets'"
-      :model-value="data.refKey"
-      :title="t('workflow.blocks.export-data.refKey')"
-      :placeholder="t('workflow.blocks.export-data.refKey')"
-      class="w-full mt-2"
-      @change="updateData({ refKey: $event })"
-    />
     <ui-select
       :model-value="data.type"
       :label="t('workflow.blocks.export-data.exportAs')"
@@ -88,7 +96,7 @@ const props = defineProps({
 });
 const emit = defineEmits(['update:data']);
 
-const dataToExport = ['data-columns', 'google-sheets'];
+const dataToExport = ['data-columns', 'google-sheets', 'variable'];
 const onConflict = ['uniquify', 'overwrite', 'prompt'];
 
 const { t } = useI18n();

+ 3 - 4
src/lib/drawflow.js

@@ -13,14 +13,13 @@ export default function (element, { context, options = {} }) {
     startPosY,
     endPosX,
     endPosY,
-    curvature,
+    curvatureValue,
     type
   ) => {
+    const curvature = options.disableCurvature ? 0 : curvatureValue;
     const generateCurvature = (start = false) => {
-      const curvatureVal = options.disableCurvature ? 0 : curvature;
-
       if (start) {
-        return startPosX + Math.abs(endPosX - startPosX) * curvatureVal;
+        return startPosX + Math.abs(endPosX - startPosX) * curvature;
       }
 
       return endPosX - Math.abs(endPosX - startPosX) * curvature;

+ 1 - 0
src/locales/en/blocks.json

@@ -306,6 +306,7 @@
           "options": {
             "data-columns": "Table",
             "google-sheets": "Google sheets",
+            "variable": "Variable"
           },
         }
       },

+ 8 - 2
src/utils/data-exporter.js

@@ -51,10 +51,16 @@ export default function (
         ? Papa.unparse(jsonData)
         : JSON.stringify(jsonData, null, 2);
   } else if (type === 'plain-text') {
+    const extractObj = (obj) => {
+      if (typeof obj !== 'object') return [obj];
+
+      return Object.values(obj);
+    };
+
     result = (
       Array.isArray(data)
-        ? data.map((item) => Object.values(item)).flat()
-        : Object.values(data)
+        ? data.flatMap((item) => extractObj(item))
+        : extractObj(data)
     ).join(' ');
   }
 

+ 1 - 0
src/utils/shared.js

@@ -321,6 +321,7 @@ export const tasks = {
       refKey: '',
       type: 'json',
       description: '',
+      variableName: '',
       addBOMHeader: false,
       onConflict: 'uniquify',
       dataToExport: 'data-columns',