46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
// imports
|
|
|
|
import { useMutation } from "@tanstack/vue-query";
|
|
import axios from "~/configs/axios.config";
|
|
import { API_ENDPOINTS } from "~/constants";
|
|
|
|
// types
|
|
|
|
export type AddDocRequest = {
|
|
name: string,
|
|
parent?: string,
|
|
branch: string | undefined,
|
|
type: {
|
|
title: "File" | "Folder",
|
|
icon: "bi:folder" | "bi:file-earmark"
|
|
},
|
|
content: File | undefined
|
|
};
|
|
|
|
// methods
|
|
|
|
export const handleAddDoc = async (variables: AddDocRequest & { updateUploadProgress: (p: number) => void }) => {
|
|
const { data } = await axios.post<AddDocRequest>(`${API_ENDPOINTS.branch.getDoc}/`, {
|
|
...variables,
|
|
type: variables.type.title.toLocaleLowerCase()
|
|
}, {
|
|
onUploadProgress: (progressEvent) => {
|
|
variables.updateUploadProgress(progressEvent.progress!);
|
|
},
|
|
headers: {
|
|
"Content-Type": "multipart/form-data"
|
|
}
|
|
});
|
|
return data;
|
|
};
|
|
|
|
// composable
|
|
|
|
const useAddDoc = () => {
|
|
return useMutation({
|
|
mutationFn: (variables: AddDocRequest & { updateUploadProgress: (p: number) => void }) => handleAddDoc(variables)
|
|
});
|
|
};
|
|
|
|
export default useAddDoc;
|