From a1c4a72dd1fe563f161048f9d465376ec55a3660 Mon Sep 17 00:00:00 2001 From: Kristian Binau Date: Wed, 4 Oct 2023 23:57:45 +0200 Subject: [PATCH] #9 - Refactor & Added ContextMenu component --- src/components/Dashboard.astro | 7 -- src/components/Files/File.vue | 15 ---- src/components/Files/Folder.vue | 21 ------ src/components/Files/NoFiles.vue | 18 ----- src/components/files/ContextMenu.vue | 47 ++++++++++++ src/components/files/File.vue | 23 ++++++ .../{Files => files}/FileBrowser.vue | 66 +++++++---------- src/components/files/Folder.vue | 73 +++++++++++++++++++ src/components/files/NoFiles.vue | 35 +++++++++ src/lang/da.ts | 2 +- src/lang/en.ts | 2 +- src/layouts/SideBar.astro | 2 +- src/lib/items.ts | 64 +--------------- src/pages/u/folder/[id].astro | 37 ++++++++++ src/pages/u/index.astro | 6 +- 15 files changed, 251 insertions(+), 167 deletions(-) delete mode 100644 src/components/Dashboard.astro delete mode 100644 src/components/Files/File.vue delete mode 100644 src/components/Files/Folder.vue delete mode 100644 src/components/Files/NoFiles.vue create mode 100644 src/components/files/ContextMenu.vue create mode 100644 src/components/files/File.vue rename src/components/{Files => files}/FileBrowser.vue (52%) create mode 100644 src/components/files/Folder.vue create mode 100644 src/components/files/NoFiles.vue create mode 100644 src/pages/u/folder/[id].astro diff --git a/src/components/Dashboard.astro b/src/components/Dashboard.astro deleted file mode 100644 index 09e2834..0000000 --- a/src/components/Dashboard.astro +++ /dev/null @@ -1,7 +0,0 @@ ---- -import FileBrowser from './Files/FileBrowser.vue'; ---- - -
- -
diff --git a/src/components/Files/File.vue b/src/components/Files/File.vue deleted file mode 100644 index db43a0e..0000000 --- a/src/components/Files/File.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/src/components/Files/Folder.vue b/src/components/Files/Folder.vue deleted file mode 100644 index 7475fbf..0000000 --- a/src/components/Files/Folder.vue +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/src/components/Files/NoFiles.vue b/src/components/Files/NoFiles.vue deleted file mode 100644 index 3e7f207..0000000 --- a/src/components/Files/NoFiles.vue +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/src/components/files/ContextMenu.vue b/src/components/files/ContextMenu.vue new file mode 100644 index 0000000..1fb9656 --- /dev/null +++ b/src/components/files/ContextMenu.vue @@ -0,0 +1,47 @@ + + + diff --git a/src/components/files/File.vue b/src/components/files/File.vue new file mode 100644 index 0000000..825e32a --- /dev/null +++ b/src/components/files/File.vue @@ -0,0 +1,23 @@ + + + diff --git a/src/components/Files/FileBrowser.vue b/src/components/files/FileBrowser.vue similarity index 52% rename from src/components/Files/FileBrowser.vue rename to src/components/files/FileBrowser.vue index 58e00de..611aef4 100644 --- a/src/components/Files/FileBrowser.vue +++ b/src/components/files/FileBrowser.vue @@ -3,22 +3,33 @@ diff --git a/src/components/files/Folder.vue b/src/components/files/Folder.vue new file mode 100644 index 0000000..527c50e --- /dev/null +++ b/src/components/files/Folder.vue @@ -0,0 +1,73 @@ + + + diff --git a/src/components/files/NoFiles.vue b/src/components/files/NoFiles.vue new file mode 100644 index 0000000..73c2215 --- /dev/null +++ b/src/components/files/NoFiles.vue @@ -0,0 +1,35 @@ + + + diff --git a/src/lang/da.ts b/src/lang/da.ts index 8d5477a..db707ce 100644 --- a/src/lang/da.ts +++ b/src/lang/da.ts @@ -49,7 +49,7 @@ export default { openUserMenu: 'Ă…ben brugermenu', }, link: { - dashboard: 'Hjem', + myfiles: 'Mine Filer', settings: 'Indstillinger', signOut: 'Log ud', }, diff --git a/src/lang/en.ts b/src/lang/en.ts index 1558101..332ade0 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -49,7 +49,7 @@ export default { openUserMenu: 'Open user menu', }, link: { - dashboard: 'Dashboard', + myfiles: 'My Files', settings: 'Settings', signOut: 'Sign out', }, diff --git a/src/layouts/SideBar.astro b/src/layouts/SideBar.astro index a6849ef..263a7f2 100644 --- a/src/layouts/SideBar.astro +++ b/src/layouts/SideBar.astro @@ -38,7 +38,7 @@ import { t } from '@lib/i18n'; d="M12 2.252A8.014 8.014 0 0117.748 8H12V2.252z"> {t('layout.link.dashboard', Astro.locals.currentLocale)}{t('layout.link.myfiles', Astro.locals.currentLocale)} diff --git a/src/lib/items.ts b/src/lib/items.ts index 2b8dfb1..3541e8e 100644 --- a/src/lib/items.ts +++ b/src/lib/items.ts @@ -2,7 +2,7 @@ * Item */ export abstract class ItemClass { - private _id: number | undefined; + private _id: number; private _name: string; private _mimeType: string; private _ownerId: number; @@ -12,7 +12,7 @@ export abstract class ItemClass { private _deletedAt: Date | null; protected constructor(ItemObject: ItemType) { - this._id = ItemObject.id || undefined; + this._id = ItemObject.id; this._name = ItemObject.name; this._mimeType = ItemObject.mimeType; this._ownerId = ItemObject.ownerId; @@ -56,7 +56,7 @@ export abstract class ItemClass { } export type ItemType = { - id?: number; + id: number; name: string; mimeType: string; ownerId: number; @@ -79,10 +79,6 @@ export class FolderClass extends ItemClass { } static create(name: string, parent: FolderClass | null) { - if (parent && !parent.id) { - throw new Error('Parent folder must have an id'); - } - // Send request to create folder const returnedFolder = { id: 1, @@ -140,7 +136,6 @@ const FolderColors = { type FolderColor = keyof typeof FolderColors; type FolderColorValue = (typeof FolderColors)[FolderColor]; - /** * File */ @@ -154,10 +149,6 @@ export class FileClass extends ItemClass { } static create(name: string, parent: FolderClass | null) { - if (parent && !parent.id) { - throw new Error('Parent folder must have an id'); - } - // Send request to create folder const returnedFile = { id: 1, @@ -182,52 +173,3 @@ export class FileClass extends ItemClass { export type FileType = { blobUrl: string; } & ItemType; - - -/** - * Mime Types - */ -const FolderMimeType = { - directory: 'application/vnd.cloudstore.folder', -}; -type FolderMimeTypeValue = (typeof FolderMimeType)[keyof typeof FolderMimeType]; - -const VideoMimeType = { - mp4: 'video/mp4', - webm: 'video/webm', -}; - -const AudioMimeType = { - mp3: 'audio/mpeg', - wav: 'audio/wav', - ogg: 'audio/ogg', -}; - -const ImageMimeType = { - svg: 'image/svg+xml', - png: 'image/png', - jpg: 'image/jpeg', - gif: 'image/gif', -}; - -const ApplicationMimeType = { - doc: 'application/clouddoc', - pdf: 'application/pdf', - json: 'application/json', - zip: 'application/zip', -}; - -const FileMimeType = { - ...VideoMimeType, - ...AudioMimeType, - ...ImageMimeType, - ...ApplicationMimeType, -}; -type FileMimeTypeValue = (typeof FileMimeType)[keyof typeof FileMimeType]; - -const SupportedItemMimeTypes = { - ...FolderMimeType, - ...FileMimeType, -}; -type SupportedItemMimeTypesValue = - (typeof SupportedItemMimeTypes)[keyof typeof SupportedItemMimeTypes]; diff --git a/src/pages/u/folder/[id].astro b/src/pages/u/folder/[id].astro new file mode 100644 index 0000000..f6190ac --- /dev/null +++ b/src/pages/u/folder/[id].astro @@ -0,0 +1,37 @@ +--- +import LayoutSidebar from '@layouts/LayoutSidebar.astro'; +import FileBrowser from '@components/files/FileBrowser.vue'; +// @ts-ignore https://github.com/withastro/language-tools/issues/476 +import { api, url } from '@lib/helpers'; +import { FolderClass } from '@lib/items'; + +const { id } = Astro.params; + +// Send a request to the API to get the folder +const authenticationHeader = Astro.locals.authHeader as string; +const folderResponse = await ( + await fetch(api(`folder/${id}`), { + method: 'GET', + headers: { + Authorization: authenticationHeader, + }, + }) +).json(); + +// If the folder doesn't exist, redirect +if (!folderResponse || folderResponse?.statusCode <= 400) { + return Astro.redirect(url('404')); +} + +// Otherwise, create a new folder instance +const folder = new FolderClass(folderResponse.data); + +// We can safely cast this as we know that middleware would have already checked for a valid user +const user = Astro.locals.user as User; +--- + + +
+ +
+
diff --git a/src/pages/u/index.astro b/src/pages/u/index.astro index 53832f3..891cda0 100644 --- a/src/pages/u/index.astro +++ b/src/pages/u/index.astro @@ -1,11 +1,13 @@ --- import LayoutSidebar from '@layouts/LayoutSidebar.astro'; -import Dashboard from '@components/Dashboard.astro'; +import FileBrowser from '@components/files/FileBrowser.vue'; // We can safely cast this as we know that middleware would have already checked for a valid user const user = Astro.locals.user as User; --- - +
+ +