From 49f977911e14ec7d7af1b98f25cd52f43681b3fe Mon Sep 17 00:00:00 2001 From: Lucas Oliveira Date: Thu, 6 Jun 2024 18:32:30 -0300 Subject: [PATCH] Added logic to upload flows and folders at the same place --- src/frontend/src/stores/foldersStore.tsx | 41 ++++++++++++++++++------ 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/src/frontend/src/stores/foldersStore.tsx b/src/frontend/src/stores/foldersStore.tsx index ce063e032..3f3208e24 100644 --- a/src/frontend/src/stores/foldersStore.tsx +++ b/src/frontend/src/stores/foldersStore.tsx @@ -7,6 +7,7 @@ import { } from "../pages/MainPage/services"; import { FoldersStoreType } from "../types/zustand/folders"; import useFlowsManagerStore from "./flowsManagerStore"; +import { uploadFlowsToDatabase } from "../controllers/API"; export const useFolderStore = create((set, get) => ({ folders: [], @@ -17,18 +18,18 @@ export const useFolderStore = create((set, get) => ({ getFolders().then( (res) => { const foldersWithoutStarterProjects = res.filter( - (folder) => folder.name !== STARTER_FOLDER_NAME + (folder) => folder.name !== STARTER_FOLDER_NAME, ); const starterProjects = res.find( - (folder) => folder.name === STARTER_FOLDER_NAME + (folder) => folder.name === STARTER_FOLDER_NAME, ); set({ starterProjectId: starterProjects!.id ?? "" }); set({ folders: foldersWithoutStarterProjects }); const myCollectionId = res?.find( - (f) => f.name === DEFAULT_FOLDER + (f) => f.name === DEFAULT_FOLDER, )?.id; set({ myCollectionId }); @@ -45,7 +46,7 @@ export const useFolderStore = create((set, get) => ({ set({ folders: [] }); get().setLoading(false); reject(); - } + }, ); } }); @@ -65,7 +66,7 @@ export const useFolderStore = create((set, get) => ({ }, () => { get().setLoadingById(false); - } + }, ); } }, @@ -100,7 +101,7 @@ export const useFolderStore = create((set, get) => ({ folderIdDragging: "", setFolderIdDragging: (id) => set(() => ({ folderIdDragging: id })), uploadFolder: () => { - return new Promise(() => { + return new Promise((resolve) => { const input = document.createElement("input"); input.type = "file"; input.onchange = (event: Event) => { @@ -111,9 +112,31 @@ export const useFolderStore = create((set, get) => ({ const file = (event.target as HTMLInputElement).files![0]; const formData = new FormData(); formData.append("file", file); - uploadFlowsFromFolders(formData).then(() => { - get().getFoldersApi(true); - }); + const fileReader = new FileReader(); + fileReader.readAsText(file, "UTF-8"); + fileReader.onload = (e) => { + if (e && e.target) { + const data = JSON.parse(e.target.result as string); + if (data.data?.nodes) { + uploadFlowsToDatabase(formData).then(() => { + useFlowsManagerStore + .getState() + .refreshFlows() + .then(() => { + resolve(); + }); + }); + } else { + uploadFlowsFromFolders(formData).then(() => { + get() + .getFoldersApi(true) + .then(() => { + resolve(); + }); + }); + } + } + }; } }; input.click();