import type { Requests, Responses, UploadFile } from '@/dto'; import { get_token, post_token, post_token_form, isErrorResponse } from './base'; import axios from 'axios'; export const get_root = ( token: string ): Promise => get_token('/api/fs/root', token); export const get_node = ( token: string, node: number ): Promise => get_token(`/api/fs/node/${node}`, token); export const get_path = ( token: string, node: number ): Promise => get_token(`/api/fs/path/${node}`, token); export const create_folder = ( token: string, parent: number, name: string ): Promise< Responses.CreateFolder | Responses.CreateFolderExists | Responses.Error > => post_token( '/api/fs/create_folder', { parent: parent, name: name }, token ); export const create_file = ( token: string, parent: number, name: string ): Promise< Responses.CreateFolder | Responses.CreateFolderExists | Responses.Error > => post_token( '/api/fs/create_file', { parent: parent, name: name }, token ); export const create_zip = ( token: string, nodes: number[] ): Promise => post_token( '/api/fs/create_zip', { nodes: nodes }, token ); export const download_preview = ( token: string, node: number ): Promise => get_token(`/api/fs/download_preview/${node}`, token); export const get_type = ( token: string, node: number ): Promise => 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]> { const node = await create_file(token, file.parent, file.file.name); if (isErrorResponse(node)) return [node, false]; if ('exists' in node && !node.isFile) return [{ statusCode: 400, message: 'File exists as folder' }, false]; 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 ]; } export function download_file(token: string, id: number) { const form = document.createElement('form'); form.method = 'post'; form.target = '_blank'; form.action = '/api/fs/download'; form.innerHTML = ``; 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 = ``; document.body.appendChild(form); form.submit(); document.body.removeChild(form); }