From 183a3590a9c1548e66c90588b08f294d68695c86 Mon Sep 17 00:00:00 2001 From: static Date: Mon, 6 Jan 2025 21:15:23 +0900 Subject: [PATCH] =?UTF-8?q?=ED=8C=8C=EC=9D=BC/=EB=94=94=EB=A0=89=ED=84=B0?= =?UTF-8?q?=EB=A6=AC=20=EB=AA=A9=EB=A1=9D=20=EC=A0=95=EB=A0=AC=20=EC=9E=AC?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(main)/directory/[[id]]/+page.svelte | 43 ++++---------- .../DirectoryEntries/DirectoryEntries.svelte | 57 +++++++++++++++++++ .../[[id]]/{ => DirectoryEntries}/File.svelte | 18 ++++-- .../SubDirectory.svelte | 18 ++++-- .../[[id]]/DirectoryEntries/index.ts | 2 + .../[[id]]/DirectoryEntries/service.ts | 30 ++++++++++ 6 files changed, 128 insertions(+), 40 deletions(-) create mode 100644 src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte rename src/routes/(main)/directory/[[id]]/{ => DirectoryEntries}/File.svelte (68%) rename src/routes/(main)/directory/[[id]]/{ => DirectoryEntries}/SubDirectory.svelte (67%) create mode 100644 src/routes/(main)/directory/[[id]]/DirectoryEntries/index.ts create mode 100644 src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts diff --git a/src/routes/(main)/directory/[[id]]/+page.svelte b/src/routes/(main)/directory/[[id]]/+page.svelte index 38cd8e0..25df773 100644 --- a/src/routes/(main)/directory/[[id]]/+page.svelte +++ b/src/routes/(main)/directory/[[id]]/+page.svelte @@ -3,15 +3,14 @@ import { goto } from "$app/navigation"; import { TopBar } from "$lib/components"; import { FloatingButton } from "$lib/components/buttons"; - import { getDirectoryInfo, getFileInfo } from "$lib/modules/file"; + import { getDirectoryInfo } from "$lib/modules/file"; import { masterKeyStore, type DirectoryInfo } from "$lib/stores"; import CreateBottomSheet from "./CreateBottomSheet.svelte"; import CreateDirectoryModal from "./CreateDirectoryModal.svelte"; import DeleteDirectoryEntryModal from "./DeleteDirectoryEntryModal.svelte"; + import DirectoryEntries from "./DirectoryEntries"; import DirectoryEntryMenuBottomSheet from "./DirectoryEntryMenuBottomSheet.svelte"; - import File from "./File.svelte"; import RenameDirectoryEntryModal from "./RenameDirectoryEntryModal.svelte"; - import SubDirectory from "./SubDirectory.svelte"; import { requestDirectoryCreation, requestFileUpload, @@ -64,35 +63,15 @@ {/if} - {#if $info && $info.subDirectoryIds.length + $info.fileIds.length > 0} -
- {#each $info.subDirectoryIds as subDirectoryId} - {@const subDirectoryInfo = getDirectoryInfo(subDirectoryId, $masterKeyStore?.get(1)?.key!)} - goto(`/directory/${subDirectoryId}`)} - onOpenMenuClick={({ id, dataKey, dataKeyVersion, name }) => { - selectedEntry = { type: "directory", id, dataKey, dataKeyVersion, name }; - isDirectoryEntryMenuBottomSheetOpen = true; - }} - /> - {/each} - {#each $info.fileIds as fileId} - {@const fileInfo = getFileInfo(fileId, $masterKeyStore?.get(1)?.key!)} - goto(`/file/${fileId}`)} - onOpenMenuClick={({ dataKey, id, dataKeyVersion, name }) => { - selectedEntry = { type: "file", id, dataKey, dataKeyVersion, name }; - isDirectoryEntryMenuBottomSheetOpen = true; - }} - /> - {/each} -
- {:else} -
-

폴더가 비어있어요.

-
+ {#if $info} + goto(`/${type}/${id}`)} + onEntryMenuClick={(entry) => { + selectedEntry = entry; + isDirectoryEntryMenuBottomSheetOpen = true; + }} + /> {/if} diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte b/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte new file mode 100644 index 0000000..f852afb --- /dev/null +++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte @@ -0,0 +1,57 @@ + + +{#if info.subDirectoryIds.length + info.fileIds.length > 0} +
+ {#each subDirectoryInfos as subDirectory} + + {/each} + {#each fileInfos as file} + + {/each} +
+{:else} +
+

폴더가 비어있어요.

+
+{/if} diff --git a/src/routes/(main)/directory/[[id]]/File.svelte b/src/routes/(main)/directory/[[id]]/DirectoryEntries/File.svelte similarity index 68% rename from src/routes/(main)/directory/[[id]]/File.svelte rename to src/routes/(main)/directory/[[id]]/DirectoryEntries/File.svelte index da9b843..55c9c27 100644 --- a/src/routes/(main)/directory/[[id]]/File.svelte +++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/File.svelte @@ -1,22 +1,32 @@ @@ -24,7 +34,7 @@ {#if $info} -
setTimeout(onclick, 100)} class="h-12 w-full rounded-xl"> +
diff --git a/src/routes/(main)/directory/[[id]]/SubDirectory.svelte b/src/routes/(main)/directory/[[id]]/DirectoryEntries/SubDirectory.svelte similarity index 67% rename from src/routes/(main)/directory/[[id]]/SubDirectory.svelte rename to src/routes/(main)/directory/[[id]]/DirectoryEntries/SubDirectory.svelte index 6bf29b0..b0d231e 100644 --- a/src/routes/(main)/directory/[[id]]/SubDirectory.svelte +++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/SubDirectory.svelte @@ -1,6 +1,7 @@ @@ -26,7 +36,7 @@ {#if $info} -
setTimeout(onclick, 100)} class="h-12 w-full rounded-xl"> +
diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/index.ts b/src/routes/(main)/directory/[[id]]/DirectoryEntries/index.ts new file mode 100644 index 0000000..72ab278 --- /dev/null +++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/index.ts @@ -0,0 +1,2 @@ +export { default } from "./DirectoryEntries.svelte"; +export * from "./service"; diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts b/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts new file mode 100644 index 0000000..2ad5941 --- /dev/null +++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts @@ -0,0 +1,30 @@ +import { get, type Writable } from "svelte/store"; +import type { DirectoryInfo, FileInfo } from "$lib/stores"; + +export enum SortBy { + NAME_ASC, + NAME_DESC, +} + +type SortFunc = (a: DirectoryInfo | FileInfo | null, b: DirectoryInfo | FileInfo | null) => number; + +const sortByNameAsc: SortFunc = (a, b) => { + if (a && b) return a.name!.localeCompare(b.name!); + return 0; +}; + +const sortByNameDesc: SortFunc = (a, b) => -sortByNameAsc(a, b); + +export const sortEntries = ( + entries: Writable[], + sortBy: SortBy = SortBy.NAME_ASC, +) => { + let sortFunc: SortFunc; + if (sortBy === SortBy.NAME_ASC) { + sortFunc = sortByNameAsc; + } else { + sortFunc = sortByNameDesc; + } + + entries.sort((a, b) => sortFunc(get(a), get(b))); +};