148 lines
3.3 KiB
TypeScript
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;
|
|
};
|