diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte b/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte index ea8a984..0933650 100644 --- a/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte +++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/DirectoryEntries.svelte @@ -1,11 +1,18 @@ -{#if info.subDirectoryIds.length + info.fileIds.length > 0} +{#if subDirectories.length + files.length > 0}
- {#each subDirectoryInfos as subDirectory} - + {#each subDirectories as { info }} + {/each} - {#each fileInfos as file} - + {#each files as file} + {#if file.type === "file"} + + {:else} + + {/if} {/each}
{:else} diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/UploadingFile.svelte b/src/routes/(main)/directory/[[id]]/DirectoryEntries/UploadingFile.svelte new file mode 100644 index 0000000..e50d4bf --- /dev/null +++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/UploadingFile.svelte @@ -0,0 +1,37 @@ + + +{#if $info.status !== "uploaded" && $info.status !== "canceled" && $info.status !== "error"} +
+
+ +
+
+

+ {$info.name} +

+

+ {#if $info.status === "encryption-pending"} + 준비 중 + {:else if $info.status === "encrypting"} + 암호화하는 중 + {:else if $info.status === "upload-pending"} + 업로드를 기다리는 중 + {:else if $info.status === "uploading"} + 전송됨 {formatUploadProgress($info.progress)} · {formatUploadRate($info.rate)} + {/if} +

+
+
+{/if} diff --git a/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts b/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts index a879d68..10f8e32 100644 --- a/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts +++ b/src/routes/(main)/directory/[[id]]/DirectoryEntries/service.ts @@ -1,5 +1,4 @@ -import { get, type Writable } from "svelte/store"; -import type { DirectoryInfo, FileInfo } from "$lib/stores"; +import { formatFileSize } from "$lib/modules/util"; export { formatDateTime } from "$lib/modules/util"; @@ -8,17 +7,19 @@ export enum SortBy { NAME_DESC, } -type SortFunc = (a: DirectoryInfo | FileInfo | null, b: DirectoryInfo | FileInfo | null) => number; +type SortFunc = (a?: string, b?: string) => number; const sortByNameAsc: SortFunc = (a, b) => { - if (a && b) return a.name!.localeCompare(b.name!); + if (a && b) return a.localeCompare(b); + if (a) return -1; + if (b) return 1; return 0; }; const sortByNameDesc: SortFunc = (a, b) => -sortByNameAsc(a, b); -export const sortEntries = ( - entries: Writable[], +export const sortEntries = ( + entries: T[], sortBy: SortBy = SortBy.NAME_ASC, ) => { let sortFunc: SortFunc; @@ -28,5 +29,13 @@ export const sortEntries = ( sortFunc = sortByNameDesc; } - entries.sort((a, b) => sortFunc(get(a), get(b))); + entries.sort((a, b) => sortFunc(a.name, b.name)); +}; + +export const formatUploadProgress = (progress?: number) => { + return `${Math.floor((progress ?? 0) * 100)}%`; +}; + +export const formatUploadRate = (rate?: number) => { + return `${formatFileSize((rate ?? 0) / 8)}/s`; };