feat: Refactor Upload Folders to Use Mutations for HTTP Request Management (#2810)
* ✨ (frontend): Add new API queries for user authentication and messages handling 📝 (frontend): Update API queries for user authentication to include new functionalities like logout, reset password, update user, add user, login user, and refresh access token 📝 (frontend): Update API queries for messages to change the update messages functionality to use PUT method instead of PATCH * ✨ (sideBarFolderButtons/index.tsx): Add usePostUploadFolders query to handle uploading folders and files 🔧 (constants.ts): Add FOLDERS constant to API URLs for folder-related endpoints 🔧 (folders/index.tsx): Add use-post-upload-folders query to handle uploading folders and files 🔧 (use-update-messages.ts): Remove unused file use-update-messages.ts to clean up the project 🔧 (foldersStore.tsx): Remove unused uploadFolder function to improve code maintainability and reduce complexity 🔧 (folders/index.ts): Remove unused uploadFolder function to simplify the codebase and improve readability * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
90508b25e5
commit
65acbd50a3
15 changed files with 86 additions and 60 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { usePostUploadFolders } from "@/controllers/API/queries/folders";
|
||||||
import { useEffect, useRef, useState } from "react";
|
import { useEffect, useRef, useState } from "react";
|
||||||
import { useLocation } from "react-router-dom";
|
import { useLocation } from "react-router-dom";
|
||||||
import { FolderType } from "../../../../pages/MainPage/entities";
|
import { FolderType } from "../../../../pages/MainPage/entities";
|
||||||
|
|
@ -33,7 +34,6 @@ const SideBarFoldersButtonsComponent = ({
|
||||||
const [editFolders, setEditFolderName] = useState(
|
const [editFolders, setEditFolderName] = useState(
|
||||||
folders.map((obj) => ({ name: obj.name, edit: false })),
|
folders.map((obj) => ({ name: obj.name, edit: false })),
|
||||||
);
|
);
|
||||||
const uploadFolder = useFolderStore((state) => state.uploadFolder);
|
|
||||||
const currentFolder = pathname.split("/");
|
const currentFolder = pathname.split("/");
|
||||||
const urlWithoutPath = pathname.split("/").length < 4;
|
const urlWithoutPath = pathname.split("/").length < 4;
|
||||||
const myCollectionId = useFolderStore((state) => state.myCollectionId);
|
const myCollectionId = useFolderStore((state) => state.myCollectionId);
|
||||||
|
|
@ -61,21 +61,49 @@ const SideBarFoldersButtonsComponent = ({
|
||||||
handleFolderChange,
|
handleFolderChange,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const { mutate } = usePostUploadFolders();
|
||||||
|
|
||||||
const handleUploadFlowsToFolder = () => {
|
const handleUploadFlowsToFolder = () => {
|
||||||
uploadFolder(folderId)
|
const input = document.createElement("input");
|
||||||
.then(() => {
|
input.type = "file";
|
||||||
getFolderById(folderId);
|
input.accept = ".json";
|
||||||
setSuccessData({
|
input.click();
|
||||||
title: "Uploaded successfully",
|
|
||||||
|
input.onchange = (event: Event) => {
|
||||||
|
if (
|
||||||
|
(event.target as HTMLInputElement).files![0].type === "application/json"
|
||||||
|
) {
|
||||||
|
const file = (event.target as HTMLInputElement).files![0];
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("file", file);
|
||||||
|
file.text().then(async (text) => {
|
||||||
|
const data = JSON.parse(text);
|
||||||
|
if (data.data?.nodes) {
|
||||||
|
await useFlowsManagerStore.getState().addFlow(true, data);
|
||||||
|
getFolderById(folderId);
|
||||||
|
} else {
|
||||||
|
mutate(
|
||||||
|
{ formData },
|
||||||
|
{
|
||||||
|
onSuccess: () => {
|
||||||
|
getFolderById(folderId);
|
||||||
|
setSuccessData({
|
||||||
|
title: "Uploaded successfully",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
onError: (err) => {
|
||||||
|
console.log(err);
|
||||||
|
setErrorData({
|
||||||
|
title: `Error on upload`,
|
||||||
|
list: [err["response"]["data"]],
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
})
|
}
|
||||||
.catch((err) => {
|
};
|
||||||
console.log(err);
|
|
||||||
setErrorData({
|
|
||||||
title: `Error on upload`,
|
|
||||||
list: [err["response"]["data"]],
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDownloadFolder = (id: string) => {
|
const handleDownloadFolder = (id: string) => {
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ export const URLs = {
|
||||||
AUTOLOGIN: "auto_login",
|
AUTOLOGIN: "auto_login",
|
||||||
REFRESH: "refresh",
|
REFRESH: "refresh",
|
||||||
BUILD: `build`,
|
BUILD: `build`,
|
||||||
|
FOLDERS: `folders`,
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export function getURL(key: keyof typeof URLs, params: any = {}) {
|
export function getURL(key: keyof typeof URLs, params: any = {}) {
|
||||||
|
|
|
||||||
|
|
@ -1 +1,10 @@
|
||||||
|
export * from "./use-delete-users";
|
||||||
|
export * from "./use-get-autologin";
|
||||||
export * from "./use-get-user";
|
export * from "./use-get-user";
|
||||||
|
export * from "./use-get-users-page";
|
||||||
|
export * from "./use-patch-logout";
|
||||||
|
export * from "./use-patch-reset-password";
|
||||||
|
export * from "./use-patch-update-user";
|
||||||
|
export * from "./use-post-add-user";
|
||||||
|
export * from "./use-post-login-user";
|
||||||
|
export * from "./use-post-refresh-access";
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
export * from "./use-post-upload-folders";
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
import useFlowsManagerStore from "@/stores/flowsManagerStore";
|
||||||
|
import { useFolderStore } from "@/stores/foldersStore";
|
||||||
|
import { Users, useMutationFunctionType } from "@/types/api";
|
||||||
|
import { api } from "../../api";
|
||||||
|
import { getURL } from "../../helpers/constants";
|
||||||
|
import { UseRequestProcessor } from "../../services/request-processor";
|
||||||
|
|
||||||
|
interface IPostAddUploadFolders {
|
||||||
|
formData: FormData;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const usePostUploadFolders: useMutationFunctionType<
|
||||||
|
undefined,
|
||||||
|
IPostAddUploadFolders
|
||||||
|
> = (options?) => {
|
||||||
|
const { mutate } = UseRequestProcessor();
|
||||||
|
|
||||||
|
const uploadFoldersFn = async (
|
||||||
|
payload: IPostAddUploadFolders,
|
||||||
|
): Promise<void> => {
|
||||||
|
const res = await api.post(
|
||||||
|
`${getURL("FOLDERS")}/upload/`,
|
||||||
|
payload.formData,
|
||||||
|
);
|
||||||
|
await useFolderStore.getState().getFoldersApi(true);
|
||||||
|
return res.data;
|
||||||
|
};
|
||||||
|
|
||||||
|
const mutation = mutate(["usePostUploadFolders"], uploadFoldersFn, options);
|
||||||
|
|
||||||
|
return mutation;
|
||||||
|
};
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
export * from "./use-delete-messages";
|
export * from "./use-delete-messages";
|
||||||
export * from "./use-get-messages";
|
export * from "./use-get-messages";
|
||||||
export * from "./use-update-messages";
|
export * from "./use-put-update-messages";
|
||||||
|
|
|
||||||
|
|
@ -133,50 +133,6 @@ export const useFolderStore = create<FoldersStoreType>((set, get) => ({
|
||||||
setFolderDragging: (folder) => set(() => ({ folderDragging: folder })),
|
setFolderDragging: (folder) => set(() => ({ folderDragging: folder })),
|
||||||
folderIdDragging: "",
|
folderIdDragging: "",
|
||||||
setFolderIdDragging: (id) => set(() => ({ folderIdDragging: id })),
|
setFolderIdDragging: (id) => set(() => ({ folderIdDragging: id })),
|
||||||
uploadFolder: () => {
|
|
||||||
return new Promise<void>((resolve, reject) => {
|
|
||||||
const input = document.createElement("input");
|
|
||||||
input.type = "file";
|
|
||||||
input.accept = ".json";
|
|
||||||
input.onchange = (event: Event) => {
|
|
||||||
if (
|
|
||||||
(event.target as HTMLInputElement).files![0].type ===
|
|
||||||
"application/json"
|
|
||||||
) {
|
|
||||||
const file = (event.target as HTMLInputElement).files![0];
|
|
||||||
const formData = new FormData();
|
|
||||||
formData.append("file", file);
|
|
||||||
file.text().then((text) => {
|
|
||||||
const data = JSON.parse(text);
|
|
||||||
if (data.data?.nodes) {
|
|
||||||
useFlowsManagerStore
|
|
||||||
.getState()
|
|
||||||
.addFlow(true, data)
|
|
||||||
.then(() => {
|
|
||||||
resolve();
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
reject(error);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
uploadFlowsFromFolders(formData)
|
|
||||||
.then(() => {
|
|
||||||
get()
|
|
||||||
.getFoldersApi(true)
|
|
||||||
.then(() => {
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
reject(error);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
input.click();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
starterProjectId: "",
|
starterProjectId: "",
|
||||||
setStarterProjectId: (id) => set(() => ({ starterProjectId: id })),
|
setStarterProjectId: (id) => set(() => ({ starterProjectId: id })),
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ export type FoldersStoreType = {
|
||||||
setFolderUrl: (folderUrl: string) => void;
|
setFolderUrl: (folderUrl: string) => void;
|
||||||
folderDragging: boolean;
|
folderDragging: boolean;
|
||||||
setFolderDragging: (set: boolean) => void;
|
setFolderDragging: (set: boolean) => void;
|
||||||
uploadFolder: (folderId: string) => Promise<void>;
|
|
||||||
folderIdDragging: string;
|
folderIdDragging: string;
|
||||||
setFolderIdDragging: (id: string) => void;
|
setFolderIdDragging: (id: string) => void;
|
||||||
starterProjectId: string;
|
starterProjectId: string;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue