瀏覽代碼

feat: support base64 in upload file block

Ahmad Kholid 3 年之前
父節點
當前提交
835bb212c8
共有 2 個文件被更改,包括 17 次插入45 次删除
  1. 17 6
      src/content/blocksHandler/handlerUploadFile.js
  2. 0 39
      src/newtab/pages/workflows/[id].vue

+ 17 - 6
src/content/blocksHandler/handlerUploadFile.js

@@ -7,7 +7,6 @@ function injectFiles(element, files) {
   if (element.tagName !== 'INPUT' || notFileTypeAttr) return;
 
   element.files = files;
-
   element.dispatchEvent(new Event('change', { bubbles: true }));
 }
 
@@ -17,13 +16,25 @@ export default async function (block) {
   if (!elements) throw new Error('element-not-found');
 
   const getFile = async (path) => {
-    const file = await sendMessage('get:file', path, 'background');
-    const name = file.path?.replace(/^.*[\\/]/, '') || '';
-    const blob = await fetch(file.objUrl).then((response) => response.blob());
+    let fileObject;
+
+    if (!path.startsWith('file') && !path.startsWith('http')) {
+      const [filename, mime, base64] = path.split('|');
+      const response = await fetch(base64);
+      const arrayBuffer = await response.arrayBuffer();
+
+      fileObject = new File([arrayBuffer], filename, { type: mime });
+    } else {
+      const file = await sendMessage('get:file', path, 'background');
+      const name = file.path?.replace(/^.*[\\/]/, '') || '';
+      const blob = await fetch(file.objUrl).then((response) => response.blob());
+
+      URL.revokeObjectURL(file.objUrl);
 
-    URL.revokeObjectURL(file.objUrl);
+      fileObject = new File([blob], name, { type: file.type });
+    }
 
-    return new File([blob], name, { type: file.type });
+    return fileObject;
   };
   const filesPromises = await Promise.all(block.data.filePaths.map(getFile));
   const dataTransfer = filesPromises.reduce((acc, file) => {

+ 0 - 39
src/newtab/pages/workflows/[id].vue

@@ -218,7 +218,6 @@ import {
   onBeforeUnmount,
 } from 'vue';
 import cloneDeep from 'lodash.clonedeep';
-import { getNodesInside } from '@braks/vue-flow';
 import { useI18n } from 'vue-i18n';
 import { useRoute, useRouter, onBeforeRouteLeave } from 'vue-router';
 import { customAlphabet } from 'nanoid';
@@ -694,42 +693,6 @@ function onActionUpdated({ data, changedIndicator }) {
   workflowPayload.data = { ...workflowPayload.data, ...data };
   updateHostedWorkflow();
 }
-function isNodesInGroup(nodes) {
-  const groupNodes = editor.value.getNodes.value.filter(
-    (node) => node.label === 'blocks-group-2'
-  );
-
-  const nodeInGroup = new Set();
-  const filteredNodes = nodes.filter((node) => node.label !== 'blocks-group-2');
-
-  groupNodes.forEach(({ computedPosition, dimensions, id }) => {
-    const rect = { ...computedPosition, ...dimensions };
-    const nodesInGroup = getNodesInside(filteredNodes, rect);
-
-    nodesInGroup.forEach((node) => {
-      state.dataChanged = true;
-
-      if (node.parentNode === id) {
-        nodeInGroup.add(node.id);
-        return;
-      }
-
-      nodeInGroup.add(node.id);
-
-      const currentNode = editor.value.getNode.value(node.id);
-      currentNode.parentNode = id;
-      currentNode.position.x -= 450;
-    });
-  });
-  filteredNodes.forEach((node) => {
-    if (nodeInGroup.has(node.id)) return;
-
-    const currentNode = editor.value.getNode.value(node.id);
-    if (!currentNode.parentNode) return;
-
-    currentNode.parentNode = undefined;
-  });
-}
 function onEditorInit(instance) {
   editor.value = instance;
 
@@ -743,8 +706,6 @@ function onEditorInit(instance) {
   // });
 
   instance.onNodeDragStop(({ nodes }) => {
-    isNodesInGroup(nodes);
-
     nodes.forEach((node) => {
       editorCommands.state.nodes[node.id] = node;
     });