diff --git a/src/lib/components/molecules/labels/DirectoryEntryLabel.svelte b/src/lib/components/molecules/labels/DirectoryEntryLabel.svelte
index 319e0df..e85665d 100644
--- a/src/lib/components/molecules/labels/DirectoryEntryLabel.svelte
+++ b/src/lib/components/molecules/labels/DirectoryEntryLabel.svelte
@@ -3,6 +3,7 @@
import { IconLabel } from "$lib/components/molecules";
import IconFolder from "~icons/material-symbols/folder";
+ import IconDriveFolderUpload from "~icons/material-symbols/drive-folder-upload";
import IconDraft from "~icons/material-symbols/draft";
interface Props {
@@ -11,7 +12,7 @@
subtext?: string;
textClass?: ClassValue;
thumbnail?: string;
- type: "directory" | "file";
+ type: "directory" | "parent-directory" | "file";
}
let {
@@ -30,6 +31,8 @@
{:else if type === "directory"}
+ {:else if type === "parent-directory"}
+
{:else}
{/if}
diff --git a/src/lib/modules/filesystem.ts b/src/lib/modules/filesystem.ts
index 6009b60..9f447bf 100644
--- a/src/lib/modules/filesystem.ts
+++ b/src/lib/modules/filesystem.ts
@@ -23,6 +23,7 @@ import { trpc } from "$trpc/client";
export type DirectoryInfo =
| {
id: "root";
+ parentId?: undefined;
dataKey?: undefined;
dataKeyVersion?: undefined;
name?: undefined;
@@ -31,6 +32,7 @@ export type DirectoryInfo =
}
| {
id: number;
+ parentId: DirectoryId;
dataKey?: CryptoKey;
dataKeyVersion?: Date;
name: string;
@@ -93,7 +95,13 @@ const fetchDirectoryInfoFromIndexedDB = async (
info.set({ id, subDirectoryIds, fileIds });
} else {
if (!directory) return;
- info.set({ id, name: directory.name, subDirectoryIds, fileIds });
+ info.set({
+ id,
+ parentId: directory.parentId,
+ name: directory.name,
+ subDirectoryIds,
+ fileIds,
+ });
}
};
@@ -124,6 +132,7 @@ const fetchDirectoryInfoFromServer = async (
info.set({
id,
+ parentId: metadata!.parent,
dataKey,
dataKeyVersion: new Date(metadata!.dekVersion),
name,
diff --git a/src/routes/(fullscreen)/file/[id]/TopBarMenu.svelte b/src/routes/(fullscreen)/file/[id]/TopBarMenu.svelte
index 8c92986..a037b61 100644
--- a/src/routes/(fullscreen)/file/[id]/TopBarMenu.svelte
+++ b/src/routes/(fullscreen)/file/[id]/TopBarMenu.svelte
@@ -44,12 +44,13 @@
{#if directoryId}
{@render menuButton(IconFolderOpen, "폴더에서 보기", () =>
- goto(directoryId === "root" ? "/directory" : `/directory/${directoryId}`),
+ goto(
+ directoryId === "root" ? "/directory?from=file" : `/directory/${directoryId}?from=file`,
+ ),
)}
{/if}
{#if fileBlob}
{@render menuButton(IconCloudDownload, "다운로드", () => {
- console.log(filename);
FileSaver.saveAs(fileBlob, filename);
})}
{/if}
diff --git a/src/routes/(main)/directory/[[id]]/+page.svelte b/src/routes/(main)/directory/[[id]]/+page.svelte
index 98572b3..a4edf30 100644
--- a/src/routes/(main)/directory/[[id]]/+page.svelte
+++ b/src/routes/(main)/directory/[[id]]/+page.svelte
@@ -2,6 +2,7 @@
import { onMount } from "svelte";
import type { Writable } from "svelte/store";
import { goto } from "$app/navigation";
+ import { page } from "$app/state";
import { FloatingButton } from "$lib/components/atoms";
import { TopBar } from "$lib/components/molecules";
import { getDirectoryInfo, type DirectoryInfo } from "$lib/modules/filesystem";
@@ -42,6 +43,9 @@
let isEntryRenameModalOpen = $state(false);
let isEntryDeleteModalOpen = $state(false);
+ let isFromFilePage = $derived(page.url.searchParams.get("from") === "file");
+ let showTopBar = $derived(data.id !== "root" || isFromFilePage);
+
const uploadFile = () => {
const files = fileInput?.files;
if (!files || files.length === 0) return;
@@ -86,11 +90,11 @@
- {#if data.id !== "root"}
+ {#if showTopBar}
{/if}
{#if $info}
-
+
goto("/file/uploads")} />
goto("/file/downloads")} />
@@ -103,6 +107,13 @@
context.selectedEntry = entry;
isEntryMenuBottomSheetOpen = true;
}}
+ showParentEntry={isFromFilePage && $info.parentId !== undefined}
+ onParentClick={() =>
+ goto(
+ $info.parentId === "root"
+ ? "/directory?from=file"
+ : `/directory/${$info.parentId}?from=file`,
+ )}
/>
{/key}
diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte b/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte
index 537a7ce..a3e975e 100644
--- a/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte
+++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte
@@ -1,6 +1,8 @@
-{#if subDirectories.length + files.length > 0}
+{#if subDirectories.length + files.length > 0 || showParentEntry}
+ {#if showParentEntry}
+
+
+
+ {/if}
{#each subDirectories as { info }}
{/each}