Files
myDrive/src/api/foldersAPI.ts
T
2024-12-22 19:58:33 -05:00

148 lines
3.3 KiB
TypeScript

import { QueryFunctionContext } from "react-query";
import axios from "../axiosInterceptor";
import { getUserToken } from "./user";
import getBackendURL from "../utils/getBackendURL";
interface QueryKeyParams {
parent: string;
search?: string;
sortBy?: string;
limit?: number;
trashMode?: boolean;
}
// GET
export const getFoldersListAPI = async ({
queryKey,
}: QueryFunctionContext<[string, QueryKeyParams]>) => {
const [_key, { parent, search, sortBy, limit, trashMode }] = queryKey;
const response = await axios.get(`/folder-service/list`, {
params: {
parent,
search,
sortBy,
limit,
trashMode,
},
});
return response.data;
};
export const getFolderInfoAPI = async ({
queryKey,
}: QueryFunctionContext<[string, { id: string | undefined }]>) => {
const [_key, { id }] = queryKey;
if (!id) return undefined;
const response = await axios.get(`/folder-service/info/${id}`);
return response.data;
};
export const getMoveFolderListAPI = async ({
queryKey,
}: QueryFunctionContext<
[
string,
{
parent: string;
search: string;
folderIDs?: string[];
currentParent: string;
}
]
>) => {
const [_key, { parent, search, folderIDs, currentParent }] = queryKey;
const response = await axios.get(`/folder-service/move-folder-list`, {
params: {
parent,
search,
folderIDs,
currentParent,
},
});
return response.data;
};
export const downloadZIPAPI = async (
folderIDs: string[],
fileIDs: string[]
) => {
await getUserToken();
let url = `${getBackendURL()}/folder-service/download-zip?`;
for (const folderID of folderIDs) {
url += `folderIDs[]=${folderID}&`;
}
for (const fileID of fileIDs) {
url += `fileIDs[]=${fileID}&`;
}
const link = document.createElement("a");
document.body.appendChild(link);
link.href = url;
link.setAttribute("type", "hidden");
link.setAttribute("download", "true");
link.click();
};
// POST
export const createFolderAPI = async (name: string, parent?: string) => {
const response = await axios.post("/folder-service/create", {
name,
parent,
});
return response.data;
};
export const uploadFolderAPI = async (data: FormData, config: any) => {
const url = "/folder-service/upload";
const response = await axios.post(url, data, config);
return response.data;
};
// PATCH
export const renameFolder = async (folderID: string, name: string) => {
const response = await axios.patch("/folder-service/rename", {
id: folderID,
title: name,
});
return response.data;
};
export const trashFolderAPI = async (folderID: string) => {
const response = await axios.patch("/folder-service/trash", {
id: folderID,
});
return response.data;
};
export const restoreFolderAPI = async (folderID: string) => {
const response = await axios.patch("/folder-service/restore", {
id: folderID,
});
return response.data;
};
export const moveFolderAPI = async (folderID: string, parentID: string) => {
const response = await axios.patch(`/folder-service/move`, {
id: folderID,
parentID,
});
return response.data;
};
// DELETE
export const deleteFolderAPI = async (folderID: string) => {
const response = await axios.delete("/folder-service/remove", {
data: {
id: folderID,
},
});
return response.data;
};