From 577f6f3ddfa63a8fdf7d3a570a730ef88da681ff Mon Sep 17 00:00:00 2001 From: L-Nafaryus Date: Wed, 10 Jul 2024 01:21:21 +0500 Subject: [PATCH] materia-web-client: repository view --- .../src/materia-frontend/src/api/directory.ts | 13 +++ .../src/materia-frontend/src/api/file.ts | 13 +++ .../src/materia-frontend/src/api/index.ts | 2 + .../materia-frontend/src/api/repository.ts | 12 +++ .../src/components/ContextMenu.vue | 37 +++++++++ .../src/components/DropdownItem.vue | 9 ++ .../src/components/icons/IconDirectory.vue | 9 ++ .../src/components/icons/IconFile.vue | 9 ++ .../materia-frontend/src/views/Repository.vue | 82 ++++++++++++++++++- 9 files changed, 185 insertions(+), 1 deletion(-) create mode 100644 materia-web-client/src/materia-frontend/src/api/directory.ts create mode 100644 materia-web-client/src/materia-frontend/src/api/file.ts create mode 100644 materia-web-client/src/materia-frontend/src/components/ContextMenu.vue create mode 100644 materia-web-client/src/materia-frontend/src/components/icons/IconDirectory.vue create mode 100644 materia-web-client/src/materia-frontend/src/components/icons/IconFile.vue diff --git a/materia-web-client/src/materia-frontend/src/api/directory.ts b/materia-web-client/src/materia-frontend/src/api/directory.ts new file mode 100644 index 0000000..78ec698 --- /dev/null +++ b/materia-web-client/src/materia-frontend/src/api/directory.ts @@ -0,0 +1,13 @@ +import { api_client, type ResponseError, handle_error } from "@/client"; + +export interface DirectoryInfo { + id: number, + repository_id: number, + parent_id?: number, + created: number, + updated: number, + name: string, + path?: string, + is_public: boolean, + used?: number +} diff --git a/materia-web-client/src/materia-frontend/src/api/file.ts b/materia-web-client/src/materia-frontend/src/api/file.ts new file mode 100644 index 0000000..55214bf --- /dev/null +++ b/materia-web-client/src/materia-frontend/src/api/file.ts @@ -0,0 +1,13 @@ +import { api_client, type ResponseError, handle_error } from "@/client"; + +export interface FileInfo { + id: number, + repository_id: number, + parent_id?: number, + created: number, + updated: number, + name: string, + path?: string, + is_public: boolean, + size: number +} diff --git a/materia-web-client/src/materia-frontend/src/api/index.ts b/materia-web-client/src/materia-frontend/src/api/index.ts index 9d61d82..a71b0db 100644 --- a/materia-web-client/src/materia-frontend/src/api/index.ts +++ b/materia-web-client/src/materia-frontend/src/api/index.ts @@ -1,3 +1,5 @@ export * as auth from "@/api/auth"; export * as user from "@/api/user"; export * as repository from "@/api/repository"; +export * as directory from "@/api/directory"; +export * as file from "@/api/file"; diff --git a/materia-web-client/src/materia-frontend/src/api/repository.ts b/materia-web-client/src/materia-frontend/src/api/repository.ts index 0567836..dc3bf46 100644 --- a/materia-web-client/src/materia-frontend/src/api/repository.ts +++ b/materia-web-client/src/materia-frontend/src/api/repository.ts @@ -1,4 +1,5 @@ import { api_client, type ResponseError, handle_error } from "@/client"; +import { file, directory } from "@/api" export interface RepositoryInfo { id: number, @@ -6,6 +7,11 @@ export interface RepositoryInfo { used?: number } +export interface RepositoryContent { + files: file.FileInfo[], + directories: directory.DirectoryInfo[] +} + export async function info(): Promise { return await api_client.get("/repository") .then(async response => { return Promise.resolve(response.data); }) @@ -21,3 +27,9 @@ export async function remove(): Promise { return await api_client.delete("/repository") .catch(handle_error); } + +export async function content(): Promise { + return await api_client.get("/repository/content") + .then(async response => { return Promise.resolve(response.data); }) + .catch(handle_error); +} diff --git a/materia-web-client/src/materia-frontend/src/components/ContextMenu.vue b/materia-web-client/src/materia-frontend/src/components/ContextMenu.vue new file mode 100644 index 0000000..227143e --- /dev/null +++ b/materia-web-client/src/materia-frontend/src/components/ContextMenu.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/materia-web-client/src/materia-frontend/src/components/DropdownItem.vue b/materia-web-client/src/materia-frontend/src/components/DropdownItem.vue index e69de29..3733e57 100644 --- a/materia-web-client/src/materia-frontend/src/components/DropdownItem.vue +++ b/materia-web-client/src/materia-frontend/src/components/DropdownItem.vue @@ -0,0 +1,9 @@ + + + diff --git a/materia-web-client/src/materia-frontend/src/components/icons/IconDirectory.vue b/materia-web-client/src/materia-frontend/src/components/icons/IconDirectory.vue new file mode 100644 index 0000000..9ea2f00 --- /dev/null +++ b/materia-web-client/src/materia-frontend/src/components/icons/IconDirectory.vue @@ -0,0 +1,9 @@ + diff --git a/materia-web-client/src/materia-frontend/src/components/icons/IconFile.vue b/materia-web-client/src/materia-frontend/src/components/icons/IconFile.vue new file mode 100644 index 0000000..6fee6c9 --- /dev/null +++ b/materia-web-client/src/materia-frontend/src/components/icons/IconFile.vue @@ -0,0 +1,9 @@ + diff --git a/materia-web-client/src/materia-frontend/src/views/Repository.vue b/materia-web-client/src/materia-frontend/src/views/Repository.vue index aaab65f..ce270ed 100644 --- a/materia-web-client/src/materia-frontend/src/views/Repository.vue +++ b/materia-web-client/src/materia-frontend/src/views/Repository.vue @@ -1,6 +1,9 @@