137 lines
3.3 KiB
TypeScript
Raw Normal View History

2022-09-03 23:32:20 +02:00
import type { Requests, Responses, UploadFile } from '@/dto';
import {
2022-09-03 23:32:20 +02:00
get_token,
post_token,
post_token_form,
isErrorResponse
} from './base';
2022-10-10 23:07:40 +02:00
import axios from 'axios';
export const get_root = (
2022-09-03 23:32:20 +02:00
token: string
): Promise<Responses.GetRoot | Responses.Error> =>
get_token('/api/fs/root', token);
export const get_node = (
2022-09-03 23:32:20 +02:00
token: string,
node: number
): Promise<Responses.GetNode | Responses.Error> =>
get_token(`/api/fs/node/${node}`, token);
export const get_path = (
2022-09-03 23:32:20 +02:00
token: string,
node: number
): Promise<Responses.GetPath | Responses.Error> =>
get_token(`/api/fs/path/${node}`, token);
export const create_folder = (
2022-09-03 23:32:20 +02:00
token: string,
parent: number,
name: string
): Promise<
Responses.CreateFolder | Responses.CreateFolderExists | Responses.Error
> =>
post_token<Requests.CreateFolder>(
2022-10-10 23:07:40 +02:00
'/api/fs/create_folder',
2022-09-03 23:32:20 +02:00
{
parent: parent,
name: name
},
token
);
export const create_file = (
2022-09-03 23:32:20 +02:00
token: string,
parent: number,
name: string
): Promise<
Responses.CreateFolder | Responses.CreateFolderExists | Responses.Error
> =>
post_token<Requests.CreateFolder>(
2022-10-10 23:07:40 +02:00
'/api/fs/create_file',
2022-09-03 23:32:20 +02:00
{
parent: parent,
name: name
},
token
);
2022-09-03 23:32:20 +02:00
export const create_zip = (
token: string,
nodes: number[]
): Promise<Responses.CreateZip | Responses.Error> =>
post_token<Requests.CreateZip>(
'/api/fs/create_zip',
{
nodes: nodes
},
token
);
2022-09-03 23:32:20 +02:00
export const download_preview = (
token: string,
node: number
): Promise<Responses.DownloadBase64 | Responses.Error> =>
get_token(`/api/fs/download_preview/${node}`, token);
2022-09-03 23:32:20 +02:00
export const get_type = (
token: string,
node: number
): Promise<Responses.GetType | Responses.Error> =>
get_token(`/api/fs/get_type/${node}`, token);
export async function upload_file(
token: string,
file: UploadFile,
onProgress: (progressEvent: ProgressEvent) => void
): Promise<[Responses.Success | Responses.Error, boolean]> {
2022-09-03 23:32:20 +02:00
const node = await create_file(token, file.parent, file.file.name);
if (isErrorResponse(node)) return [node, false];
2022-09-03 23:32:20 +02:00
if ('exists' in node && !node.isFile)
return [{ statusCode: 400, message: 'File exists as folder' }, false];
2022-09-03 23:32:20 +02:00
return [
await axios
.post(`/api/fs/upload/${node.id}`, file.file, {
headers: {
Authorization: 'Bearer ' + token,
'Content-type': 'multipart/form-data'
},
onUploadProgress: onProgress
})
.then((res) => {
console.log(res);
return res.data;
})
.catch((err) => {
console.log(err);
return err.response.data;
}),
'exists' in node
];
2022-09-03 23:32:20 +02:00
}
export function download_file(token: string, id: number) {
2022-09-03 23:32:20 +02:00
const form = document.createElement('form');
form.method = 'post';
form.target = '_blank';
form.action = '/api/fs/download';
form.innerHTML = `<input type="hidden" name="jwtToken" value="${token}"><input type="hidden" name="id" value="${id}">`;
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
}
export function download_multi_file(token: string, ids: number[]) {
const form = document.createElement('form');
form.method = 'post';
form.target = '_blank';
form.action = '/api/fs/download_multi';
form.innerHTML = `<input type="hidden" name="jwtToken" value="${token}"><input type="hidden" name="id" value="${ids.join(
','
)}">`;
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
}